提交 4946d449 编写于 作者: J Jason Simmons 提交者: GitHub

Skip license processing for top-level source directories that are unchanged (#3437)

See https://github.com/flutter/flutter/issues/8106
上级 74de13c0
......@@ -4,11 +4,16 @@
// See README in this directory for information on how this code is organised.
import 'dart:async';
import 'dart:collection';
import 'dart:convert';
import 'dart:io' as system;
import 'dart:math' as math;
import 'package:args/args.dart';
import 'package:crypto/crypto.dart' as crypto;
import 'package:path/path.dart' as path;
import 'filesystem.dart' as fs;
import 'licenses.dart';
import 'patterns.dart';
......@@ -919,6 +924,8 @@ class RepositoryDirectory extends RepositoryEntry implements LicenseSource {
final List<RepositoryLicensedFile> _files = <RepositoryLicensedFile>[];
final List<RepositoryLicenseFile> _licenses = <RepositoryLicenseFile>[];
List<RepositoryDirectory> get subdirectories => _subdirectories;
final Map<String, RepositoryEntry> _childrenByName = <String, RepositoryEntry>{};
// the bit at the beginning excludes files like "license.py".
......@@ -1235,6 +1242,33 @@ class RepositoryDirectory extends RepositoryEntry implements LicenseSource {
result += directory.fileCount;
return result;
}
Iterable<RepositoryLicensedFile> get _allFiles sync* {
for (RepositoryLicensedFile file in _files) {
if (file.isIncludedInBuildProducts)
yield file;
}
for (RepositoryDirectory directory in _subdirectories) {
yield* directory._allFiles;
}
}
Stream<List<int>> _signatureStream(List files) async* {
for (RepositoryLicensedFile file in files) {
yield file.io.fullName.codeUnits;
yield file.io.readBytes();
}
}
/// Compute a signature representing a hash of all the licensed files within
/// this directory tree.
Future<String> get signature async {
List allFiles = _allFiles.toList();
allFiles.sort((RepositoryLicensedFile a, RepositoryLicensedFile b) =>
a.io.fullName.compareTo(b.io.fullName));
crypto.Digest digest = await crypto.md5.bind(_signatureStream(allFiles)).single;
return digest.bytes.map((int e) => e.toRadixString(16).padLeft(2, '0')).join();
}
}
class RepositoryGenericThirdPartyDirectory extends RepositoryDirectory {
......@@ -2237,53 +2271,115 @@ class Progress {
// MAIN
void main(List<String> arguments) {
if (arguments.length != 1) {
print('Usage: dart lib/main.dart path/to/engine/root/src');
Future<Null> main(List<String> arguments) async {
final ArgParser parser = new ArgParser()
..addOption('src', help: 'The root of the engine source')
..addOption('out', help: 'The directory where output is written')
..addOption('golden', help: 'The directory containing golden results')
..addFlag('release', help: 'Print output in the format used for product releases');
ArgResults argResults = parser.parse(arguments);
bool releaseMode = argResults['release'];
if (argResults['src'] == null) {
print('Flutter license script: Must provide --src directory');
print(parser.usage);
system.exit(1);
}
if (!releaseMode) {
if (argResults['out'] == null || argResults['golden'] == null) {
print('Flutter license script: Must provide --out and --golden directories in non-release mode');
print(parser.usage);
system.exit(1);
}
if (!system.FileSystemEntity.isDirectorySync(argResults['golden'])) {
print('Flutter license script: Golden directory does not exist');
print(parser.usage);
system.exit(1);
}
system.Directory out = new system.Directory(argResults['out']);
if (!out.existsSync())
out.createSync(recursive: true);
}
try {
system.stderr.writeln('Finding files...');
final RepositoryDirectory root = new RepositoryRoot(new fs.FileSystemDirectory.fromPath(arguments.single));
system.stderr.writeln('Collecting licenses...');
Progress progress = new Progress(root.fileCount);
List<License> licenses = new Set<License>.from(root.getLicenses(progress).toList()).toList();
progress.label = 'Dumping results...';
bool done = false;
List<License> usedLicenses = licenses.where((License license) => license.isUsed).toList();
assert(() {
print('UNUSED LICENSES:\n');
List<String> unusedLicenses = licenses
.where((License license) => !license.isUsed)
.map((License license) => license.toString())
.toList();
unusedLicenses.sort();
print(unusedLicenses.join('\n\n'));
print('~' * 80);
print('USED LICENSES:\n');
List<String> output = usedLicenses.map((License license) => license.toString()).toList();
output.sort();
print(output.join('\n\n'));
done = true;
return true;
});
if (!done) {
final RepositoryDirectory root = new RepositoryRoot(new fs.FileSystemDirectory.fromPath(argResults['src']));
if (releaseMode) {
system.stderr.writeln('Collecting licenses...');
Progress progress = new Progress(root.fileCount);
List<License> licenses = new Set<License>.from(root.getLicenses(progress).toList()).toList();
if (progress.hadErrors)
throw 'Had failures while collecting licenses.';
List<String> output = usedLicenses
progress.label = 'Dumping results...';
List<String> output = licenses
.where((License license) => license.isUsed)
.map((License license) => license.toStringFormal())
.where((String text) => text != null)
.toList();
output.sort();
print(output.join('\n${"-" * 80}\n'));
} else {
RegExp signaturePattern = new RegExp(r'Signature: (\w+)');
for (RepositoryDirectory component in root.subdirectories) {
system.stderr.writeln('Collecting licenses for ${component.io.name}');
String signature;
if (component.io.name == 'flutter') {
// Always run the full license check on the flutter tree. This tree is
// relatively small but changes frequently in ways that do not affect
// the license output, and we don't want to require updates to the golden
// signature for those changes.
signature = null;
} else {
signature = await component.signature;
}
// Check whether the golden file matches the signature of the current contents
// of this directory.
system.File goldenFile = new system.File(
path.join(argResults['golden'], 'licenses_${component.io.name}'));
String goldenSignature = await goldenFile.openRead()
.transform(UTF8.decoder).transform(new LineSplitter()).first;
Match goldenMatch = signaturePattern.matchAsPrefix(goldenSignature);
if (goldenMatch != null && goldenMatch.group(1) == signature) {
system.stderr.writeln(' Skipping this component - no change in signature');
continue;
}
Progress progress = new Progress(component.fileCount);
system.File outFile = new system.File(
path.join(argResults['out'], 'licenses_${component.io.name}'));
system.IOSink sink = outFile.openWrite();
if (signature != null)
sink.writeln('Signature: $signature\n');
List<License> licenses = new Set<License>.from(
component.getLicenses(progress).toList()).toList();
sink.writeln('UNUSED LICENSES:\n');
List<String> unusedLicenses = licenses
.where((License license) => !license.isUsed)
.map((License license) => license.toString())
.toList();
unusedLicenses.sort();
sink.writeln(unusedLicenses.join('\n\n'));
sink.writeln('~' * 80);
sink.writeln('USED LICENSES:\n');
List<License> usedLicenses = licenses.where((License license) => license.isUsed).toList();
List<String> output = usedLicenses.map((License license) => license.toString()).toList();
output.sort();
sink.writeln(output.join('\n\n'));
sink.writeln('Total license count: ${licenses.length}');
await sink.close();
progress.label = 'Done.';
system.stderr.writeln('');
}
}
assert(() {
print('Total license count: ${licenses.length}');
progress.label = 'Done.';
print('$progress');
return true;
});
} catch (e, stack) {
system.stderr.writeln('failure: $e\n$stack');
system.stderr.writeln('aborted.');
......
......@@ -3,4 +3,4 @@ dependencies:
path: ^1.3.0
archive: ^1.0.24
args: 0.13.7
crypto: ^2.0.1
shopt -s nullglob
echo "Verifying license script is still happy..."
(cd flutter/tools/licenses; pub get; dart --checked lib/main.dart ../../.. > ../../../out/license-script-output)
(cd flutter/tools/licenses; pub get; dart --checked lib/main.dart --src ../../.. --out ../../../out/license_script_output --golden ../../travis/licenses_golden)
for f in out/license_script_output/licenses_*; do
if ! cmp -s flutter/travis/licenses_golden/$(basename $f) $f
then
echo "License script got different results than expected for $f."
echo "Please rerun the licenses script locally to verify that it is"
echo "correctly catching any new licenses for anything you may have"
echo "changed, and then update this file:"
echo " flutter/sky/packages/sky_engine/LICENSE"
echo "For more information, see the script in:"
echo " https://github.com/flutter/engine/tree/master/tools/licenses"
echo ""
diff -U 6 flutter/travis/licenses_golden/$(basename $f) $f
exit 1
fi
done
if cmp -s flutter/travis/licenses.golden out/license-script-output
then
echo "Licenses are as expected."
exit 0
else
echo "License script got different results than expected."
echo "Please rerun the licenses script locally to verify that it is"
echo "correctly catching any new licenses for anything you may have"
echo "changed, and then update this file:"
echo " flutter/sky/packages/sky_engine/LICENSE"
echo "For more information, see the script in:"
echo " https://github.com/flutter/engine/tree/master/tools/licenses"
echo ""
diff -U 6 flutter/travis/licenses.golden out/license-script-output
exit 1
fi
echo "Licenses are as expected."
exit 0
此差异已折叠。
此差异已折叠。
此差异已折叠。
Signature: 5565bfd8b8db2375e0c0cc7e9611b386
UNUSED LICENSES:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
USED LICENSES:
====================================================================================================
LIBRARY: icu
ORIGIN: ../../../base/third_party/icu/LICENSE
TYPE: LicenseType.unknown
FILE: ../../../lib/ftl/third_party/icu/icu_utf.cc
FILE: ../../../lib/ftl/third_party/icu/icu_utf.h
----------------------------------------------------------------------------------------------------
ICU License - ICU 1.8.1 and later
COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1995-2009 International Business Machines Corporation and others
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, and/or sell copies of the Software, and to permit persons
to whom the Software is furnished to do so, provided that the above
copyright notice(s) and this permission notice appear in all copies of
the Software and that both the above copyright notice(s) and this
permission notice appear in supporting documentation.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Except as contained in this notice, the name of a copyright holder
shall not be used in advertising or otherwise to promote the sale, use
or other dealings in this Software without prior written authorization
of the copyright holder.
====================================================================================================
====================================================================================================
LIBRARY: lib
ORIGIN: ../../../lib/ftl/LICENSE
TYPE: LicenseType.bsd
FILE: ../../../lib/ftl/arraysize.h
FILE: ../../../lib/ftl/arraysize_unittest.cc
FILE: ../../../lib/ftl/build_config.h
FILE: ../../../lib/ftl/command_line.cc
FILE: ../../../lib/ftl/command_line.h
FILE: ../../../lib/ftl/command_line_unittest.cc
FILE: ../../../lib/ftl/compiler_specific.h
FILE: ../../../lib/ftl/debug/debugger.cc
FILE: ../../../lib/ftl/debug/debugger.h
FILE: ../../../lib/ftl/files/directory.cc
FILE: ../../../lib/ftl/files/directory.h
FILE: ../../../lib/ftl/files/eintr_wrapper.h
FILE: ../../../lib/ftl/files/file.cc
FILE: ../../../lib/ftl/files/file.h
FILE: ../../../lib/ftl/files/file_descriptor.cc
FILE: ../../../lib/ftl/files/file_descriptor.h
FILE: ../../../lib/ftl/files/file_unittest.cc
FILE: ../../../lib/ftl/files/path.cc
FILE: ../../../lib/ftl/files/path.h
FILE: ../../../lib/ftl/files/path_unittest.cc
FILE: ../../../lib/ftl/files/scoped_temp_dir.cc
FILE: ../../../lib/ftl/files/scoped_temp_dir.h
FILE: ../../../lib/ftl/files/scoped_temp_dir_unittest.cc
FILE: ../../../lib/ftl/files/symlink.cc
FILE: ../../../lib/ftl/files/symlink.h
FILE: ../../../lib/ftl/files/unique_fd.cc
FILE: ../../../lib/ftl/files/unique_fd.h
FILE: ../../../lib/ftl/functional/closure.h
FILE: ../../../lib/ftl/functional/make_copyable.h
FILE: ../../../lib/ftl/functional/make_copyable_unittest.cc
FILE: ../../../lib/ftl/functional/make_runnable.h
FILE: ../../../lib/ftl/log_level.h
FILE: ../../../lib/ftl/log_settings.cc
FILE: ../../../lib/ftl/log_settings.h
FILE: ../../../lib/ftl/log_settings_state.cc
FILE: ../../../lib/ftl/log_settings_unittest.cc
FILE: ../../../lib/ftl/logging.cc
FILE: ../../../lib/ftl/logging.h
FILE: ../../../lib/ftl/macros.h
FILE: ../../../lib/ftl/memory/ref_counted.h
FILE: ../../../lib/ftl/memory/ref_counted_internal.h
FILE: ../../../lib/ftl/memory/ref_counted_unittest.cc
FILE: ../../../lib/ftl/memory/ref_ptr.h
FILE: ../../../lib/ftl/memory/ref_ptr_internal.h
FILE: ../../../lib/ftl/memory/unique_object.h
FILE: ../../../lib/ftl/memory/weak_ptr.h
FILE: ../../../lib/ftl/memory/weak_ptr_internal.cc
FILE: ../../../lib/ftl/memory/weak_ptr_internal.h
FILE: ../../../lib/ftl/memory/weak_ptr_unittest.cc
FILE: ../../../lib/ftl/strings/ascii.cc
FILE: ../../../lib/ftl/strings/ascii.h
FILE: ../../../lib/ftl/strings/ascii_unittest.cc
FILE: ../../../lib/ftl/strings/concatenate.cc
FILE: ../../../lib/ftl/strings/concatenate.h
FILE: ../../../lib/ftl/strings/concatenate_unittest.cc
FILE: ../../../lib/ftl/strings/split_string.cc
FILE: ../../../lib/ftl/strings/split_string.h
FILE: ../../../lib/ftl/strings/split_string_unittest.cc
FILE: ../../../lib/ftl/strings/string_number_conversions.cc
FILE: ../../../lib/ftl/strings/string_number_conversions.h
FILE: ../../../lib/ftl/strings/string_number_conversions_unittest.cc
FILE: ../../../lib/ftl/strings/string_printf.cc
FILE: ../../../lib/ftl/strings/string_printf.h
FILE: ../../../lib/ftl/strings/string_printf_unittest.cc
FILE: ../../../lib/ftl/strings/string_view.cc
FILE: ../../../lib/ftl/strings/string_view.h
FILE: ../../../lib/ftl/strings/string_view_unittest.cc
FILE: ../../../lib/ftl/strings/trim.cc
FILE: ../../../lib/ftl/strings/trim.h
FILE: ../../../lib/ftl/strings/trim_unittest.cc
FILE: ../../../lib/ftl/strings/utf_codecs.cc
FILE: ../../../lib/ftl/strings/utf_codecs.h
FILE: ../../../lib/ftl/synchronization/cond_var.cc
FILE: ../../../lib/ftl/synchronization/cond_var.h
FILE: ../../../lib/ftl/synchronization/cond_var_unittest.cc
FILE: ../../../lib/ftl/synchronization/mutex_unittest.cc
FILE: ../../../lib/ftl/synchronization/sleep.cc
FILE: ../../../lib/ftl/synchronization/sleep.h
FILE: ../../../lib/ftl/synchronization/thread_annotations.h
FILE: ../../../lib/ftl/synchronization/thread_annotations_unittest.cc
FILE: ../../../lib/ftl/synchronization/thread_checker.h
FILE: ../../../lib/ftl/synchronization/thread_checker_unittest.cc
FILE: ../../../lib/ftl/synchronization/waitable_event.cc
FILE: ../../../lib/ftl/synchronization/waitable_event.h
FILE: ../../../lib/ftl/synchronization/waitable_event_unittest.cc
FILE: ../../../lib/ftl/tasks/one_shot_timer.cc
FILE: ../../../lib/ftl/tasks/one_shot_timer.h
FILE: ../../../lib/ftl/tasks/one_shot_timer_unittest.cc
FILE: ../../../lib/ftl/tasks/task_runner.cc
FILE: ../../../lib/ftl/tasks/task_runner.h
FILE: ../../../lib/ftl/time/stopwatch.cc
FILE: ../../../lib/ftl/time/stopwatch.h
FILE: ../../../lib/ftl/time/time_delta.h
FILE: ../../../lib/ftl/time/time_point.cc
FILE: ../../../lib/ftl/time/time_point.h
FILE: ../../../lib/ftl/time/time_unittest.cc
FILE: ../../../lib/tonic/converter/dart_converter.cc
FILE: ../../../lib/tonic/converter/dart_converter.h
FILE: ../../../lib/tonic/dart_message_handler.cc
FILE: ../../../lib/tonic/dart_message_handler.h
FILE: ../../../lib/tonic/dart_microtask_queue.cc
FILE: ../../../lib/tonic/dart_microtask_queue.h
FILE: ../../../lib/tonic/dart_sticky_error.cc
FILE: ../../../lib/tonic/dart_sticky_error.h
FILE: ../../../lib/tonic/debugger/dart_debugger.cc
FILE: ../../../lib/tonic/debugger/dart_debugger.h
FILE: ../../../lib/tonic/file_loader/file_loader.cc
FILE: ../../../lib/tonic/file_loader/file_loader.h
FILE: ../../../lib/tonic/logging/dart_error.cc
FILE: ../../../lib/tonic/logging/dart_error.h
FILE: ../../../lib/tonic/logging/dart_invoke.cc
FILE: ../../../lib/tonic/logging/dart_invoke.h
FILE: ../../../lib/tonic/parsers/packages_map.cc
FILE: ../../../lib/tonic/parsers/packages_map.h
FILE: ../../../lib/tonic/scopes/dart_api_scope.h
FILE: ../../../lib/tonic/scopes/dart_isolate_scope.cc
FILE: ../../../lib/tonic/scopes/dart_isolate_scope.h
FILE: ../../../lib/tonic/typed_data/dart_byte_data.h
FILE: ../../../lib/tonic/typed_data/int32_list.h
FILE: ../../../lib/tonic/typed_data/uint8_list.h
FILE: ../../../lib/zip/create_unzipper.cc
FILE: ../../../lib/zip/create_unzipper.h
FILE: ../../../lib/zip/memory_io.cc
FILE: ../../../lib/zip/memory_io.h
FILE: ../../../lib/zip/unique_unzipper.cc
FILE: ../../../lib/zip/unique_unzipper.h
FILE: ../../../lib/zip/unique_zipper.cc
FILE: ../../../lib/zip/unique_zipper.h
FILE: ../../../lib/zip/unzipper.cc
FILE: ../../../lib/zip/unzipper.h
FILE: ../../../lib/zip/zipper.cc
FILE: ../../../lib/zip/zipper.h
----------------------------------------------------------------------------------------------------
Copyright 2016 The Fuchsia Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
====================================================================================================
====================================================================================================
LIBRARY: lib
ORIGIN: ../../../lib/ftl/synchronization/monitor.cc + ../../../lib/ftl/LICENSE
TYPE: LicenseType.bsd
FILE: ../../../lib/ftl/synchronization/monitor.cc
FILE: ../../../lib/ftl/synchronization/monitor.h
FILE: ../../../lib/ftl/synchronization/mutex.cc
FILE: ../../../lib/ftl/synchronization/mutex.h
----------------------------------------------------------------------------------------------------
Copyright 2016 The Fuchisa Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
====================================================================================================
====================================================================================================
LIBRARY: lib
ORIGIN: ../../../lib/tonic/mx/mx_converter.h + ../../../lib/ftl/LICENSE
TYPE: LicenseType.bsd
FILE: ../../../lib/tonic/dart_args.h
FILE: ../../../lib/tonic/dart_binding_macros.h
FILE: ../../../lib/tonic/dart_class_library.cc
FILE: ../../../lib/tonic/dart_class_library.h
FILE: ../../../lib/tonic/dart_class_provider.cc
FILE: ../../../lib/tonic/dart_class_provider.h
FILE: ../../../lib/tonic/dart_library_natives.cc
FILE: ../../../lib/tonic/dart_library_natives.h
FILE: ../../../lib/tonic/dart_persistent_value.cc
FILE: ../../../lib/tonic/dart_persistent_value.h
FILE: ../../../lib/tonic/dart_state.cc
FILE: ../../../lib/tonic/dart_state.h
FILE: ../../../lib/tonic/dart_wrappable.cc
FILE: ../../../lib/tonic/dart_wrappable.h
FILE: ../../../lib/tonic/dart_wrapper_info.h
FILE: ../../../lib/tonic/mx/mx_converter.h
FILE: ../../../lib/tonic/typed_data/dart_byte_data.cc
FILE: ../../../lib/tonic/typed_data/float32_list.cc
FILE: ../../../lib/tonic/typed_data/float32_list.h
FILE: ../../../lib/tonic/typed_data/float64_list.cc
FILE: ../../../lib/tonic/typed_data/float64_list.h
FILE: ../../../lib/tonic/typed_data/int32_list.cc
FILE: ../../../lib/tonic/typed_data/uint8_list.cc
----------------------------------------------------------------------------------------------------
Copyright 2015 The Fuchsia Authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
====================================================================================================
Total license count: 4
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册