Roll chromium_revision 5350dd2460..d5c79b109a (1281218:1283550)

Change log: 5350dd2460..d5c79b109a
Full diff: 5350dd2460..d5c79b109a

Changed dependencies
* fuchsia_version: version:19.20240320.0.1..version:20.20240404.3.1
* src/base: 218e807167..dbb0eee8e8
* src/build: 04c884cbad..6d974542a0
* src/buildtools/linux64: git_revision:93ee9b91423c1f1f53fb5f6cba7b8eef6247a564..git_revision:415b3b19e094cd4b6982147693485df65037f942
* src/buildtools/mac: git_revision:93ee9b91423c1f1f53fb5f6cba7b8eef6247a564..git_revision:415b3b19e094cd4b6982147693485df65037f942
* src/buildtools/win: git_revision:93ee9b91423c1f1f53fb5f6cba7b8eef6247a564..git_revision:415b3b19e094cd4b6982147693485df65037f942
* src/ios: 77324ec269..0bf6089d48
* src/testing: 977e41b6f7..02d496a8fc
* src/third_party: d0b81aaaa6..2831ffa216
* src/third_party/android_build_tools/manifest_merger: HxnrwdWmIAhi90brIHiGZ4zmnmgKxP4PD0ZsJX6j-mUC..wtRWPCJVk_NA2GQp0fI-1i-JaPzYJwp6w3udjEhgni4C
* src/third_party/android_deps/libs/com_squareup_okio_okio_jvm: version:2@3.3.0.cr1..version:2@3.7.0.cr1
* src/third_party/android_deps/libs/com_squareup_wire_wire_runtime_jvm: version:2@4.7.0.cr1..version:2@4.9.7.cr1
* src/third_party/androidx: piz2tht912VQfctH5Z23YCOpLUBoypzE5ymRqB3vgLkC..1qBFaGY_bIR5f12dL7zKpePRlN4UxIDze8xDv_a0sQEC
* src/third_party/boringssl/src: https://boringssl.googlesource.com/boringssl.git/+log/368d0d87d0..f94f3ed396
* src/third_party/catapult: https://chromium.googlesource.com/catapult.git/+log/bb95c35019..0b9e7b8830
* src/third_party/depot_tools: e545830db2..246580c7b8
* src/third_party/ffmpeg: 52d8ef3799..bdcb0b447f
* src/third_party/googletest/src: 77afe8e014..f10e11fb27
* src/third_party/kotlinc/current: -kUQ1HWm0wwi5pXKSqIplyfSInHmtRS9cVUzg-2l-Y0C..Rr02Gf2EkaeSs3EhSUHhPqDHSd1AzimrM6cRYUJCPjQC
* src/third_party/libc++abi/src: 1317096ef8..932d253fed
* src/third_party/libvpx/source/libvpx: d790001fd5..6445da1b40
* src/third_party/perfetto: 6fd518058c..7609c6712c
* src/third_party/r8: eHemH-tzLR3jqxqGYiQu6AYGLAPyFYG7klrqbvu1mcQC..kPZJoj3X2XUBofNCeOoUj0P8XChVFgtiNQqMnTwhcOwC
* src/tools: 09b9b5615b..7dad49cbe0
* src/tools/luci-go: git_revision:a84377ac0800e2330d02c3dcbf7b4b74a06d6a5b..git_revision:06dc7a1f2eeb1d095f7876799458328a44438df1
* src/tools/luci-go: git_revision:a84377ac0800e2330d02c3dcbf7b4b74a06d6a5b..git_revision:06dc7a1f2eeb1d095f7876799458328a44438df1
Added dependencies
* src/third_party/android_deps/libs/com_squareup_moshi_moshi_adapters
* src/third_party/android_deps/libs/com_squareup_moshi_moshi
DEPS diff: 5350dd2460..d5c79b109a/DEPS

Clang version changed llvmorg-19-init-6501-g5b544b51:llvmorg-19-init-7229-g315c88c5
Details: 5350dd2460..d5c79b109a/tools/clang/scripts/update.py

BUG=None

Change-Id: I95eaf05240916eeeaa04f806e7e1523a31abab56
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/345960
Commit-Queue: Christoffer Dewerin <jansson@webrtc.org>
Reviewed-by: Jeremy Leconte <jleconte@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42010}
This commit is contained in:
Christoffer Dewerin 2024-04-08 09:26:41 +02:00 committed by WebRTC LUCI CQ
parent 4d598037a8
commit 81a9117fb7
6 changed files with 666 additions and 617 deletions

78
DEPS
View file

@ -10,7 +10,7 @@ vars = {
# chromium waterfalls. More info at: crbug.com/570091.
'checkout_configuration': 'default',
'checkout_instrumented_libraries': 'checkout_linux and checkout_configuration == "default"',
'chromium_revision': '5350dd2460b8cf103e701f7fd5d0adeb6eb45acd',
'chromium_revision': 'd5c79b109a2356e0e4b8883057224b0b2719eabf',
# Fetch the prebuilt binaries for llvm-cov and llvm-profdata. Needed to
# process the raw profiles produced by instrumented targets (built with
@ -27,7 +27,7 @@ vars = {
# By default, download the fuchsia sdk from the public sdk directory.
'fuchsia_sdk_cipd_prefix': 'fuchsia/sdk/core/',
'fuchsia_version': 'version:19.20240320.0.1',
'fuchsia_version': 'version:20.20240404.3.1',
# By default, download the fuchsia images from the fuchsia GCS bucket.
'fuchsia_images_bucket': 'fuchsia',
'checkout_fuchsia': False,
@ -52,9 +52,9 @@ vars = {
deps = {
# TODO(kjellander): Move this to be Android-only.
'src/base':
'https://chromium.googlesource.com/chromium/src/base@218e807167d2719d6caaf82d2df4c861d3372304',
'https://chromium.googlesource.com/chromium/src/base@dbb0eee8e8238195972062b68b7f46abc5a6f110',
'src/build':
'https://chromium.googlesource.com/chromium/src/build@04c884cbadf1489a7216cb4a43b77daa33442ce2',
'https://chromium.googlesource.com/chromium/src/build@6d974542a020b0ed31b0d9909b3fdc615066fbf0',
'src/buildtools':
'https://chromium.googlesource.com/chromium/src/buildtools@8919328651a559f8a974641d40fe712062cc6718',
# Gradle 6.6.1. Used for testing Android Studio project generation for WebRTC.
@ -63,19 +63,19 @@ deps = {
'condition': 'checkout_android',
},
'src/ios': {
'url': 'https://chromium.googlesource.com/chromium/src/ios@77324ec269e07ea82cd8c8a15ffb0dfcb3742d72',
'url': 'https://chromium.googlesource.com/chromium/src/ios@0bf6089d480e995951dc097c1aeaab5b562787a4',
'condition': 'checkout_ios',
},
'src/testing':
'https://chromium.googlesource.com/chromium/src/testing@977e41b6f78f22f5f9507d8f86f23ddb5c57ae28',
'https://chromium.googlesource.com/chromium/src/testing@02d496a8fcd939b4a906808cbb0a5b4ae8496ea1',
'src/third_party':
'https://chromium.googlesource.com/chromium/src/third_party@d0b81aaaa6d9c29983762fa7d85c4b8d07870688',
'https://chromium.googlesource.com/chromium/src/third_party@2831ffa216574f0708fe777e50785a421f68b5ca',
'src/buildtools/linux64': {
'packages': [
{
'package': 'gn/gn/linux-${{arch}}',
'version': 'git_revision:93ee9b91423c1f1f53fb5f6cba7b8eef6247a564',
'version': 'git_revision:415b3b19e094cd4b6982147693485df65037f942',
}
],
'dep_type': 'cipd',
@ -85,7 +85,7 @@ deps = {
'packages': [
{
'package': 'gn/gn/mac-${{arch}}',
'version': 'git_revision:93ee9b91423c1f1f53fb5f6cba7b8eef6247a564',
'version': 'git_revision:415b3b19e094cd4b6982147693485df65037f942',
}
],
'dep_type': 'cipd',
@ -95,7 +95,7 @@ deps = {
'packages': [
{
'package': 'gn/gn/windows-amd64',
'version': 'git_revision:93ee9b91423c1f1f53fb5f6cba7b8eef6247a564',
'version': 'git_revision:415b3b19e094cd4b6982147693485df65037f942',
}
],
'dep_type': 'cipd',
@ -119,7 +119,7 @@ deps = {
'src/third_party/libc++/src':
'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git@6ddb5cb9499f29383155d7ce6b31f7d1102e6ed9',
'src/third_party/libc++abi/src':
'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git@1317096ef8cf278e8d654b78fba7833237673ee1',
'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git@932d253fedb390a08b17ec3a92469a4553934a6a',
'src/third_party/libunwind/src':
'https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git@419b03c0b8f20d6da9ddcb0d661a94a97cdd7dad',
@ -187,11 +187,11 @@ deps = {
},
'src/third_party/boringssl/src':
'https://boringssl.googlesource.com/boringssl.git@368d0d87d0bd00f8227f74ce18e8e4384eaf6afa',
'https://boringssl.googlesource.com/boringssl.git@f94f3ed3965ea033001fb9ae006084eee408b861',
'src/third_party/breakpad/breakpad':
'https://chromium.googlesource.com/breakpad/breakpad.git@76788faa4ef163081f82273bfca7fae8a734b971',
'src/third_party/catapult':
'https://chromium.googlesource.com/catapult.git@bb95c350195ce0748de8029855bc71ca1336d5e6',
'https://chromium.googlesource.com/catapult.git@0b9e7b88303cc20347ca923ea45feeb11860c615',
'src/third_party/ced/src': {
'url': 'https://chromium.googlesource.com/external/github.com/google/compact_enc_det.git@ba412eaaacd3186085babcd901679a48863c7dd5',
},
@ -204,9 +204,9 @@ deps = {
'src/third_party/crc32c/src':
'https://chromium.googlesource.com/external/github.com/google/crc32c.git@fa5ade41ee480003d9c5af6f43567ba22e4e17e6',
'src/third_party/depot_tools':
'https://chromium.googlesource.com/chromium/tools/depot_tools.git@e545830db2fb823da1217b142cb5be10bf45d575',
'https://chromium.googlesource.com/chromium/tools/depot_tools.git@246580c7b80617f291c257c0aa10c155574a7a05',
'src/third_party/ffmpeg':
'https://chromium.googlesource.com/chromium/third_party/ffmpeg.git@52d8ef3799b2f16b66351dd0972bb0bcee1648ac',
'https://chromium.googlesource.com/chromium/third_party/ffmpeg.git@bdcb0b447f433de3b69f0252732791b9f7e26f37',
'src/third_party/flatbuffers/src':
'https://chromium.googlesource.com/external/github.com/google/flatbuffers.git@bcb9ef187628fe07514e57756d05e6a6296f7dc5',
'src/third_party/grpc/src': {
@ -232,7 +232,7 @@ deps = {
'condition': 'checkout_android',
},
'src/third_party/googletest/src':
'https://chromium.googlesource.com/external/github.com/google/googletest.git@77afe8e0149c207edd9561c28de6d2226673b51f',
'https://chromium.googlesource.com/external/github.com/google/googletest.git@f10e11fb27301fba21caa71030bb5024e67aa135',
'src/third_party/icu': {
'url': 'https://chromium.googlesource.com/chromium/deps/icu.git@364118a1d9da24bb5b770ac3d762ac144d6da5a4',
},
@ -280,7 +280,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/kotlinc',
'version': '-kUQ1HWm0wwi5pXKSqIplyfSInHmtRS9cVUzg-2l-Y0C',
'version': 'Rr02Gf2EkaeSs3EhSUHhPqDHSd1AzimrM6cRYUJCPjQC',
},
],
'condition': 'checkout_android',
@ -304,9 +304,11 @@ deps = {
'condition': 'checkout_android',
},
'src/third_party/perfetto':
'https://android.googlesource.com/platform/external/perfetto.git@6fd518058c5ce2c2ae99ddb591f7223a290f39ce',
'https://android.googlesource.com/platform/external/perfetto.git@7609c6712c3a3afc5f2f6b3e4dfe308ee6517f74',
'src/third_party/protobuf-javascript/src':
Var('chromium_git') + '/external/github.com/protocolbuffers/protobuf-javascript' + '@' + 'e34549db516f8712f678fcd4bc411613b5cc5295',
'src/third_party/libvpx/source/libvpx':
'https://chromium.googlesource.com/webm/libvpx.git@d790001fd56edbc39482d596868ed83ee7355368',
'https://chromium.googlesource.com/webm/libvpx.git@6445da1b40da7967ccaee23d1ac46d5c3981b89c',
'src/third_party/libyuv':
'https://chromium.googlesource.com/libyuv/libyuv.git@a6a2ec654b1be1166b376476a7555c89eca0c275',
'src/third_party/lss': {
@ -333,7 +335,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/r8',
'version': 'eHemH-tzLR3jqxqGYiQu6AYGLAPyFYG7klrqbvu1mcQC',
'version': 'kPZJoj3X2XUBofNCeOoUj0P8XChVFgtiNQqMnTwhcOwC',
},
],
'condition': 'checkout_android',
@ -357,7 +359,7 @@ deps = {
'condition': 'checkout_android',
},
'src/tools':
'https://chromium.googlesource.com/chromium/src/tools@09b9b5615bc591b4c8f08ed0c3e0826df769f045',
'https://chromium.googlesource.com/chromium/src/tools@7dad49cbe0ac07edc648e3671e044e16782652d6',
'src/third_party/espresso': {
'packages': [
@ -396,7 +398,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/androidx',
'version': 'piz2tht912VQfctH5Z23YCOpLUBoypzE5ymRqB3vgLkC',
'version': '1qBFaGY_bIR5f12dL7zKpePRlN4UxIDze8xDv_a0sQEC',
},
],
'condition': 'checkout_android',
@ -407,7 +409,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/android_build_tools/manifest_merger',
'version': 'HxnrwdWmIAhi90brIHiGZ4zmnmgKxP4PD0ZsJX6j-mUC',
'version': 'wtRWPCJVk_NA2GQp0fI-1i-JaPzYJwp6w3udjEhgni4C',
},
],
'condition': 'checkout_android',
@ -500,11 +502,11 @@ deps = {
'packages': [
{
'package': 'infra/tools/luci/isolate/${{platform}}',
'version': 'git_revision:a84377ac0800e2330d02c3dcbf7b4b74a06d6a5b',
'version': 'git_revision:06dc7a1f2eeb1d095f7876799458328a44438df1',
},
{
'package': 'infra/tools/luci/swarming/${{platform}}',
'version': 'git_revision:a84377ac0800e2330d02c3dcbf7b4b74a06d6a5b',
'version': 'git_revision:06dc7a1f2eeb1d095f7876799458328a44438df1',
},
],
'dep_type': 'cipd',
@ -1595,11 +1597,33 @@ deps = {
'dep_type': 'cipd',
},
'src/third_party/android_deps/libs/com_squareup_moshi_moshi': {
'packages': [
{
'package': 'chromium/third_party/android_deps/libs/com_squareup_moshi_moshi',
'version': 'version:2@1.15.0.cr1',
},
],
'condition': 'checkout_android',
'dep_type': 'cipd',
},
'src/third_party/android_deps/libs/com_squareup_moshi_moshi_adapters': {
'packages': [
{
'package': 'chromium/third_party/android_deps/libs/com_squareup_moshi_moshi_adapters',
'version': 'version:2@1.15.0.cr1',
},
],
'condition': 'checkout_android',
'dep_type': 'cipd',
},
'src/third_party/android_deps/libs/com_squareup_okio_okio_jvm': {
'packages': [
{
'package': 'chromium/third_party/android_deps/libs/com_squareup_okio_okio_jvm',
'version': 'version:2@3.3.0.cr1',
'version': 'version:2@3.7.0.cr1',
},
],
'condition': 'checkout_android',
@ -1610,7 +1634,7 @@ deps = {
'packages': [
{
'package': 'chromium/third_party/android_deps/libs/com_squareup_wire_wire_runtime_jvm',
'version': 'version:2@4.7.0.cr1',
'version': 'version:2@4.9.7.cr1',
},
],
'condition': 'checkout_android',

View file

@ -50,6 +50,8 @@ CPPLINT_EXCEPTIONS = [
PYLINT_OLD_STYLE = [
"PRESUBMIT.py",
"tools_webrtc/autoroller/roll_deps.py",
"tools_webrtc/android/build_aar.py",
"tools_webrtc/ios/build_ios_libs.py",
]
# These filters will always be removed, even if the caller specifies a filter

View file

@ -60,7 +60,8 @@ def _ParseArgs():
default='libwebrtc.aar',
type=os.path.abspath,
help='Output file of the script.')
parser.add_argument('--arch',
parser.add_argument(
'--arch',
default=DEFAULT_ARCHS,
nargs='*',
help='Architectures to build. Defaults to %(default)s.')
@ -185,7 +186,8 @@ def Build(build_dir, arch, use_goma, use_remoteexec, extra_gn_args,
if arm_version:
gn_args['arm_version'] = arm_version
gn_args_str = '--args=' + ' '.join(
[k + '=' + _EncodeForGN(v) for k, v in gn_args.items()] + extra_gn_args)
[k + '=' + _EncodeForGN(v)
for k, v in gn_args.items()] + extra_gn_args)
gn_args_list = ['gen', output_directory, gn_args_str]
gn_args_list.extend(extra_gn_switches)
@ -222,7 +224,7 @@ def Collect(aar_file, build_dir, arch, unstripped):
def GenerateLicenses(output_dir, build_dir, archs):
builder = LicenseBuilder(
[_GetOutputDirectory(build_dir, arch) for arch in archs], TARGETS)
builder.GenerateLicenseText(output_dir)
builder.generate_license_text(output_dir)
def BuildAar(archs,

View file

@ -57,7 +57,8 @@ def _ParseArgs():
choices=['debug', 'release'],
help='The build config. Can be "debug" or "release". '
'Defaults to "release".')
parser.add_argument('--arch',
parser.add_argument(
'--arch',
nargs='+',
default=DEFAULT_ARCHS,
choices=ENABLED_ARCHS,
@ -68,7 +69,8 @@ def _ParseArgs():
action='store_true',
default=False,
help='Removes the previously generated build output, if any.')
parser.add_argument('-p',
parser.add_argument(
'-p',
'--purify',
action='store_true',
default=False,
@ -99,7 +101,8 @@ def _ParseArgs():
action='store_true',
default=False,
help='Use RBE to build.')
parser.add_argument('--deployment-target',
parser.add_argument(
'--deployment-target',
default=IOS_MINIMUM_DEPLOYMENT_TARGET['device'],
help='Raise the minimum deployment target to build for. '
'Cannot be lowered below 12.0 for iOS/iPadOS '
@ -157,9 +160,9 @@ def _ParseArchitecture(architectures):
def _VersionMax(*versions):
return max(
*versions,
key=lambda version: [int(component) for component in version.split('.')])
return max(*versions,
key=lambda version:
[int(component) for component in version.split('.')])
def BuildWebRTC(output_dir, target_environment, target_arch, flavor,
@ -254,8 +257,9 @@ def main():
lib_path = os.path.join(framework_path, arch + '_libs')
lib_paths.append(lib_path)
BuildWebRTC(lib_path, environment, arch, args.build_config,
gn_target_name, ios_deployment_target, LIBVPX_BUILD_VP9,
args.use_goma, args.use_remoteexec, gn_args)
gn_target_name, ios_deployment_target,
LIBVPX_BUILD_VP9, args.use_goma, args.use_remoteexec,
gn_args)
all_lib_paths.extend(lib_paths)
# Combine the slices.
@ -287,15 +291,18 @@ def main():
shutil.copytree(lib_dsym_dir_path,
os.path.join(framework_path, SDK_DSYM_NAME))
logging.info('Merging dSYM slices.')
dsym_path = os.path.join(SDK_DSYM_NAME, 'Contents', 'Resources', 'DWARF',
'WebRTC')
lib_dsym_paths = [os.path.join(path, dsym_path) for path in lib_paths]
dsym_path = os.path.join(SDK_DSYM_NAME, 'Contents', 'Resources',
'DWARF', 'WebRTC')
lib_dsym_paths = [
os.path.join(path, dsym_path) for path in lib_paths
]
out_dsym_path = os.path.join(framework_path, dsym_path)
try:
os.remove(out_dsym_path)
except OSError:
pass
cmd = ['lipo'] + lib_dsym_paths + ['-create', '-output', out_dsym_path]
cmd = ['lipo'
] + lib_dsym_paths + ['-create', '-output', out_dsym_path]
_RunCommand(cmd)
# Check for Mac-style WebRTC.framework/Resources/ (for Catalyst)...
@ -347,7 +354,7 @@ def main():
logging.info('Generate license file.')
gn_target_full_name = '//sdk:' + gn_target_name
builder = LicenseBuilder(all_lib_paths, [gn_target_full_name])
builder.GenerateLicenseText(
builder.generate_license_text(
os.path.join(args.output_dir, SDK_XCFRAMEWORK_NAME))
logging.info('Done.')

View file

@ -78,8 +78,9 @@ LIB_TO_LICENSES_DICT = {
'spl_sqrt_floor': ['common_audio/third_party/spl_sqrt_floor/LICENSE'],
'kotlin_stdlib': ['third_party/kotlin_stdlib/LICENSE'],
'jni_zero': ['third_party/jni_zero/LICENSE'],
'protobuf-javascript': ['third_party/protobuf-javascript/LICENSE'],
# TODO(bugs.webrtc.org/1110): Remove this hack. This is not a lib.
# For some reason it is listed as so in _GetThirdPartyLibraries.
# For some reason it is listed as so in _get_third_party_libraries.
'android_deps': [],
# This is not a library but a collection of libraries.
'androidx': [],
@ -97,7 +98,7 @@ LIB_REGEX_TO_LICENSES_DICT = {
'com_android_support_support_annotations/LICENSE'
],
# Internal dependencies, licenses are already included by other dependencies
# Internal dependencies, licenses are already included by other deps.
'android_deps:com_android_support_support_annotations.*': [],
}
@ -120,6 +121,7 @@ THIRD_PARTY_LIB_REGEX_TEMPLATE = r'^.*/third_party/%s$'
class LicenseBuilder:
def __init__(self,
buildfile_dirs,
targets,
@ -140,7 +142,7 @@ class LicenseBuilder:
self.common_licenses_dict.update(self.lib_regex_to_licenses_dict)
@staticmethod
def _ParseLibraryName(dep):
def _parse_library_name(dep):
"""Returns library name after third_party
Input one of:
@ -153,8 +155,8 @@ class LicenseBuilder:
groups = re.match(THIRD_PARTY_LIB_SIMPLE_NAME_REGEX, dep)
return groups.group(1) if groups else None
def _ParseLibrary(self, dep):
"""Returns library simple or regex name that matches `dep` after third_party
def _parse_library(self, dep):
"""Return library simple or regex name matching `dep` after third_party
This method matches `dep` dependency against simple names in
LIB_TO_LICENSES_DICT and regular expression names in
@ -162,7 +164,7 @@ class LicenseBuilder:
Outputs matched dict key or None if this is not a third_party dependency.
"""
libname = LicenseBuilder._ParseLibraryName(dep)
libname = LicenseBuilder._parse_library_name(dep)
for lib_regex in self.lib_regex_to_licenses_dict:
if re.match(THIRD_PARTY_LIB_REGEX_TEMPLATE % lib_regex, dep):
@ -171,7 +173,7 @@ class LicenseBuilder:
return libname
@staticmethod
def _RunGN(buildfile_dir, target):
def _run_gn(buildfile_dir, target):
cmd = [
sys.executable,
os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, 'gn.py'),
@ -182,31 +184,34 @@ class LicenseBuilder:
target,
]
logging.debug('Running: %r', cmd)
output_json = subprocess.check_output(cmd, cwd=WEBRTC_ROOT).decode('UTF-8')
output_json = subprocess.check_output(cmd,
cwd=WEBRTC_ROOT).decode('UTF-8')
logging.debug('Output: %s', output_json)
return output_json
def _GetThirdPartyLibraries(self, buildfile_dir, target):
output = json.loads(LicenseBuilder._RunGN(buildfile_dir, target))
def _get_third_party_libraries(self, buildfile_dir, target):
output = json.loads(LicenseBuilder._run_gn(buildfile_dir, target))
libraries = set()
for described_target in list(output.values()):
third_party_libs = (self._ParseLibrary(dep)
third_party_libs = (self._parse_library(dep)
for dep in described_target['deps'])
libraries |= set(lib for lib in third_party_libs if lib)
return libraries
def GenerateLicenseText(self, output_dir):
# Get a list of third_party libs from gn. For fat libraries we must consider
# all architectures, hence the multiple buildfile directories.
def generate_license_text(self, output_dir):
# Get a list of third_party libs from gn. For fat libraries we must
# consider all architectures, hence the multiple buildfile directories.
third_party_libs = set()
for buildfile in self.buildfile_dirs:
for target in self.targets:
third_party_libs |= self._GetThirdPartyLibraries(buildfile, target)
third_party_libs |= self._get_third_party_libraries(
buildfile, target)
assert len(third_party_libs) > 0
missing_licenses = third_party_libs - set(self.common_licenses_dict.keys())
missing_licenses = third_party_libs - set(
self.common_licenses_dict.keys())
if missing_licenses:
error_msg = 'Missing licenses for following third_party targets: %s' % \
error_msg = 'Missing licenses for third_party targets: %s' % \
', '.join(sorted(missing_licenses))
logging.error(error_msg)
raise Exception(error_msg)
@ -218,10 +223,12 @@ class LicenseBuilder:
logging.info('List of licenses: %s', ', '.join(license_libs))
# Generate markdown.
output_license_file = open(os.path.join(output_dir, 'LICENSE.md'), 'w+')
output_license_file = open(os.path.join(output_dir, 'LICENSE.md'),
'w+')
for license_lib in license_libs:
if len(self.common_licenses_dict[license_lib]) == 0:
logging.info('Skipping compile time or internal dependency: %s',
logging.info(
'Skipping compile time or internal dependency: %s',
license_lib)
continue # Compile time dependency
@ -249,7 +256,8 @@ def main():
action='append',
default=[],
help='Name of the GN target to generate a license for')
parser.add_argument('output_dir', help='Directory to output LICENSE.md to.')
parser.add_argument('output_dir',
help='Directory to output LICENSE.md to.')
parser.add_argument('buildfile_dirs',
nargs='+',
help='Directories containing gn generated ninja files')
@ -258,7 +266,7 @@ def main():
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
builder = LicenseBuilder(args.buildfile_dirs, args.target)
builder.GenerateLicenseText(args.output_dir)
builder.generate_license_text(args.output_dir)
if __name__ == '__main__':

View file

@ -17,8 +17,9 @@ from generate_licenses import LicenseBuilder
class TestLicenseBuilder(unittest.TestCase):
@staticmethod
def _FakeRunGN(buildfile_dir, target):
def _fake_run_gn(buildfile_dir, target):
return """
{
"target1": {
@ -32,87 +33,92 @@ class TestLicenseBuilder(unittest.TestCase):
}
"""
def testParseLibraryName(self):
def test_parse_library_name(self):
self.assertEqual(
LicenseBuilder._ParseLibraryName('//a/b/third_party/libname1:c'),
LicenseBuilder._parse_library_name('//a/b/third_party/libname1:c'),
'libname1')
self.assertEqual(
LicenseBuilder._ParseLibraryName('//a/b/third_party/libname2:c(d)'),
'libname2')
LicenseBuilder._parse_library_name(
'//a/b/third_party/libname2:c(d)'), 'libname2')
self.assertEqual(
LicenseBuilder._ParseLibraryName('//a/b/third_party/libname3/c:d(e)'),
'libname3')
LicenseBuilder._parse_library_name(
'//a/b/third_party/libname3/c:d(e)'), 'libname3')
self.assertEqual(
LicenseBuilder._ParseLibraryName('//a/b/not_third_party/c'), None)
LicenseBuilder._parse_library_name('//a/b/not_third_party/c'),
None)
def testParseLibrarySimpleMatch(self):
def test_parse_library_simple_match(self):
builder = LicenseBuilder([], [], {}, {})
self.assertEqual(builder._ParseLibrary('//a/b/third_party/libname:c'),
self.assertEqual(builder._parse_library('//a/b/third_party/libname:c'),
'libname')
def testParseLibraryRegExNoMatchFallbacksToDefaultLibname(self):
def test_parse_library_regex_no_match_fallbacks_to_default_libname(self):
lib_dict = {
'libname:foo.*': ['path/to/LICENSE'],
}
builder = LicenseBuilder([], [], lib_dict, {})
self.assertEqual(
builder._ParseLibrary('//a/b/third_party/libname:bar_java'), 'libname')
builder._parse_library('//a/b/third_party/libname:bar_java'),
'libname')
def testParseLibraryRegExMatch(self):
def test_parse_library_regex_match(self):
lib_regex_dict = {
'libname:foo.*': ['path/to/LICENSE'],
}
builder = LicenseBuilder([], [], {}, lib_regex_dict)
self.assertEqual(
builder._ParseLibrary('//a/b/third_party/libname:foo_bar_java'),
builder._parse_library('//a/b/third_party/libname:foo_bar_java'),
'libname:foo.*')
def testParseLibraryRegExMatchWithSubDirectory(self):
def test_parse_library_regex_match_with_sub_directory(self):
lib_regex_dict = {
'libname/foo:bar.*': ['path/to/LICENSE'],
}
builder = LicenseBuilder([], [], {}, lib_regex_dict)
self.assertEqual(
builder._ParseLibrary('//a/b/third_party/libname/foo:bar_java'),
builder._parse_library('//a/b/third_party/libname/foo:bar_java'),
'libname/foo:bar.*')
def testParseLibraryRegExMatchWithStarInside(self):
def test_parse_library_regex_match_with_star_inside(self):
lib_regex_dict = {
'libname/foo.*bar.*': ['path/to/LICENSE'],
}
builder = LicenseBuilder([], [], {}, lib_regex_dict)
self.assertEqual(
builder._ParseLibrary('//a/b/third_party/libname/fooHAHA:bar_java'),
builder._parse_library(
'//a/b/third_party/libname/fooHAHA:bar_java'),
'libname/foo.*bar.*')
@patch('generate_licenses.LicenseBuilder._RunGN', _FakeRunGN)
def testGetThirdPartyLibrariesWithoutRegex(self):
@patch('generate_licenses.LicenseBuilder._run_gn', _fake_run_gn)
def test_get_third_party_libraries_without_regex(self):
builder = LicenseBuilder([], [], {}, {})
self.assertEqual(builder._GetThirdPartyLibraries('out/arm', 'target1'),
self.assertEqual(
builder._get_third_party_libraries('out/arm', 'target1'),
set(['libname1', 'libname2', 'libname3']))
@patch('generate_licenses.LicenseBuilder._RunGN', _FakeRunGN)
def testGetThirdPartyLibrariesWithRegex(self):
@patch('generate_licenses.LicenseBuilder._run_gn', _fake_run_gn)
def test_get_third_party_libraries_with_regex(self):
lib_regex_dict = {
'libname2:c.*': ['path/to/LICENSE'],
}
builder = LicenseBuilder([], [], {}, lib_regex_dict)
self.assertEqual(builder._GetThirdPartyLibraries('out/arm', 'target1'),
self.assertEqual(
builder._get_third_party_libraries('out/arm', 'target1'),
set(['libname1', 'libname2:c.*', 'libname3']))
@patch('generate_licenses.LicenseBuilder._RunGN', _FakeRunGN)
def testGenerateLicenseTextFailIfUnknownLibrary(self):
@patch('generate_licenses.LicenseBuilder._run_gn', _fake_run_gn)
def test_generate_license_text_fail_if_unknown_library(self):
lib_dict = {
'simple_library': ['path/to/LICENSE'],
}
builder = LicenseBuilder(['dummy_dir'], ['dummy_target'], lib_dict, {})
with self.assertRaises(Exception) as context:
builder.GenerateLicenseText('dummy/dir')
builder.generate_license_text('dummy/dir')
self.assertEqual(
context.exception.args[0],
'Missing licenses for following third_party targets: '
'Missing licenses for third_party targets: '
'libname1, libname2, libname3')