diff options
| -rw-r--r-- | core/Makefile | 1 | ||||
| -rw-r--r-- | core/definitions.mk | 4 | ||||
| -rw-r--r-- | core/fuzz_test.mk | 6 | ||||
| -rw-r--r-- | core/main.mk | 2 | ||||
| -rw-r--r-- | core/tasks/vts-core-tests.mk | 9 | ||||
| -rw-r--r-- | envsetup.sh | 3 | ||||
| -rwxr-xr-x | target/board/generic_x86_64_arm64/BoardConfig.mk | 59 | ||||
| -rw-r--r-- | target/board/generic_x86_64_arm64/README.txt | 10 | ||||
| -rwxr-xr-x | target/board/generic_x86_64_arm64/device.mk | 15 | ||||
| -rw-r--r-- | target/board/generic_x86_64_arm64/system_ext.prop | 5 | ||||
| -rw-r--r-- | target/board/generic_x86_arm/BoardConfig.mk | 2 | ||||
| -rw-r--r-- | target/product/aosp_product.mk | 1 | ||||
| -rw-r--r-- | target/product/base_system.mk | 3 | ||||
| -rw-r--r-- | target/product/gsi/current.txt | 1 | ||||
| -rw-r--r-- | tools/releasetools/apex_utils.py | 22 | ||||
| -rwxr-xr-x | tools/releasetools/sign_apex.py | 4 | ||||
| -rwxr-xr-x | tools/releasetools/sign_target_files_apks.py | 3 | ||||
| -rw-r--r-- | tools/releasetools/test_apex_utils.py | 42 | ||||
| -rwxr-xr-x | tools/warn.py | 47 |
19 files changed, 201 insertions, 38 deletions
diff --git a/core/Makefile b/core/Makefile index 6c90b51fcb..a86b7b7790 100644 --- a/core/Makefile +++ b/core/Makefile @@ -3655,7 +3655,6 @@ INTERNAL_OTATOOLS_MODULES := \ mkbootfs \ mkbootimg \ mke2fs \ - mke2fs.conf \ mkf2fsuserimg.sh \ mksquashfs \ mksquashfsimage.sh \ diff --git a/core/definitions.mk b/core/definitions.mk index a442bc0e0c..7450d4fc0c 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2857,7 +2857,9 @@ endef # Can be passed a subdirectory to use for the common testcase directory. define compatibility_suite_dirs $(strip \ - $(COMPATIBILITY_TESTCASES_OUT_$(1)) \ + $(if $(COMPATIBILITY_TESTCASES_OUT_INCLUDE_MODULE_FOLDER_$(1)),\ + $(COMPATIBILITY_TESTCASES_OUT_$(1))/$(LOCAL_MODULE)$(2),\ + $(COMPATIBILITY_TESTCASES_OUT_$(1))) \ $($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE)$(2)) endef diff --git a/core/fuzz_test.mk b/core/fuzz_test.mk index 71801ba62a..4a0fcfa292 100644 --- a/core/fuzz_test.mk +++ b/core/fuzz_test.mk @@ -67,12 +67,6 @@ endif LOCAL_MODULE_PATH_64 := $(TARGET_OUT_DATA_NATIVE_TESTS)/fuzzers/$(my_fuzzer)/$(LOCAL_MODULE) LOCAL_MODULE_PATH_32 := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS)/fuzzers/$(my_fuzzer)/$(LOCAL_MODULE) -ifndef LOCAL_MULTILIB -ifndef LOCAL_32_BIT_ONLY -LOCAL_MULTILIB := 64 -endif -endif - ifndef LOCAL_STRIP_MODULE LOCAL_STRIP_MODULE := keep_symbols endif diff --git a/core/main.mk b/core/main.mk index 1b2b3e6e78..618594b201 100644 --- a/core/main.mk +++ b/core/main.mk @@ -75,6 +75,8 @@ $(shell mkdir -p $(EMPTY_DIRECTORY) && rm -rf $(EMPTY_DIRECTORY)/*) -include test/suite_harness/tools/cts-instant-tradefed/build/config.mk # MTS-specific config. -include test/mts/tools/build/config.mk +# VTS-Core-specific config. +-include test/vts/tools/vts-core-tradefed/build/config.mk # Clean rules .PHONY: clean-dex-files diff --git a/core/tasks/vts-core-tests.mk b/core/tasks/vts-core-tests.mk index fb1e1c61ff..95b729ab72 100644 --- a/core/tasks/vts-core-tests.mk +++ b/core/tasks/vts-core-tests.mk @@ -44,6 +44,13 @@ $(vts-core-zip) : $(COMPATIBILITY.vts-core.FILES) $(my_host_shared_lib_for_vts_c $(PRIVATE_vts_core_list) vts-core: $(vts-core-zip) -$(call dist-for-goals, vts-core, $(vts-core-zip) $(vts-core-list-zip) $(vts-core-configs-zip)) + +test_suite_name := vts-core +test_suite_tradefed := vts-core-tradefed +test_suite_readme := test/vts/tools/vts-core-tradefed/README +include $(BUILD_SYSTEM)/tasks/tools/compatibility.mk +vts-core: $(compatibility_zip) + +$(call dist-for-goals, vts-core, $(vts-core-zip) $(vts-core-list-zip) $(vts-core-configs-zip) $(compatibility_zip)) tests: vts-core diff --git a/envsetup.sh b/envsetup.sh index 40f7705357..92dad9a518 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -575,6 +575,7 @@ function add_lunch_combo() function print_lunch_menu() { local uname=$(uname) + local choices=$(TARGET_BUILD_APPS= get_build_var COMMON_LUNCH_CHOICES) echo echo "You're building on" $uname echo @@ -582,7 +583,7 @@ function print_lunch_menu() local i=1 local choice - for choice in $(TARGET_BUILD_APPS= get_build_var COMMON_LUNCH_CHOICES) + for choice in $choices do echo " $i. $choice" i=$(($i+1)) diff --git a/target/board/generic_x86_64_arm64/BoardConfig.mk b/target/board/generic_x86_64_arm64/BoardConfig.mk new file mode 100755 index 0000000000..f528294fc0 --- /dev/null +++ b/target/board/generic_x86_64_arm64/BoardConfig.mk @@ -0,0 +1,59 @@ +# Copyright (C) 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# x86_64 emulator specific definitions +TARGET_CPU_ABI := x86_64 +TARGET_ARCH := x86_64 +TARGET_ARCH_VARIANT := x86_64 + +TARGET_2ND_CPU_ABI := x86 +TARGET_2ND_ARCH := x86 +TARGET_2ND_ARCH_VARIANT := x86_64 + +TARGET_NATIVE_BRIDGE_ARCH := arm64 +TARGET_NATIVE_BRIDGE_ARCH_VARIANT := armv8-a +TARGET_NATIVE_BRIDGE_CPU_VARIANT := generic +TARGET_NATIVE_BRIDGE_ABI := arm64-v8a + +TARGET_NATIVE_BRIDGE_2ND_ARCH := arm +TARGET_NATIVE_BRIDGE_2ND_ARCH_VARIANT := armv7-a-neon +TARGET_NATIVE_BRIDGE_2ND_CPU_VARIANT := generic +TARGET_NATIVE_BRIDGE_2ND_ABI := armeabi-v7a armeabi + +BUILD_BROKEN_DUP_RULES := true + +TARGET_PRELINK_MODULE := false + +include build/make/target/board/BoardConfigMainlineCommon.mk +include build/make/target/board/BoardConfigEmuCommon.mk + +# the settings differ from BoardConfigMainlineCommon.mk +BOARD_USES_SYSTEM_OTHER_ODEX := + +# Resize to 4G to accommodate ASAN and CTS +BOARD_USERDATAIMAGE_PARTITION_SIZE := 4294967296 + +BOARD_SEPOLICY_DIRS += device/generic/goldfish/sepolicy/x86 + +# Wifi. +BOARD_WLAN_DEVICE := emulator +BOARD_HOSTAPD_DRIVER := NL80211 +BOARD_WPA_SUPPLICANT_DRIVER := NL80211 +BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_simulated +BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_simulated +WPA_SUPPLICANT_VERSION := VER_0_8_X +WIFI_DRIVER_FW_PATH_PARAM := "/dev/null" +WIFI_DRIVER_FW_PATH_STA := "/dev/null" +WIFI_DRIVER_FW_PATH_AP := "/dev/null" diff --git a/target/board/generic_x86_64_arm64/README.txt b/target/board/generic_x86_64_arm64/README.txt new file mode 100644 index 0000000000..48ee319429 --- /dev/null +++ b/target/board/generic_x86_64_arm64/README.txt @@ -0,0 +1,10 @@ +The "generic_x86_64" product defines a non-hardware-specific IA target +without a kernel or bootloader. + +It can be used to build the entire user-level system, and +will work with the IA version of the emulator, + +It is not a product "base class"; no other products inherit +from it or use it in any way. + +Third party arm64 to x86_64 translator has to be installed as well diff --git a/target/board/generic_x86_64_arm64/device.mk b/target/board/generic_x86_64_arm64/device.mk new file mode 100755 index 0000000000..fa1eb67f61 --- /dev/null +++ b/target/board/generic_x86_64_arm64/device.mk @@ -0,0 +1,15 @@ +# +# Copyright (C) 2009 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# diff --git a/target/board/generic_x86_64_arm64/system_ext.prop b/target/board/generic_x86_64_arm64/system_ext.prop new file mode 100644 index 0000000000..ed9d1731c7 --- /dev/null +++ b/target/board/generic_x86_64_arm64/system_ext.prop @@ -0,0 +1,5 @@ +# +# system.prop for generic sdk +# + +rild.libpath=/vendor/lib64/libreference-ril.so diff --git a/target/board/generic_x86_arm/BoardConfig.mk b/target/board/generic_x86_arm/BoardConfig.mk index 3fbf79bd61..f6589b01e1 100644 --- a/target/board/generic_x86_arm/BoardConfig.mk +++ b/target/board/generic_x86_arm/BoardConfig.mk @@ -34,8 +34,6 @@ include build/make/target/board/BoardConfigEmuCommon.mk # the settings differ from BoardConfigMainlineCommon.mk BOARD_USES_SYSTEM_OTHER_ODEX := -BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4 -BOARD_CACHEIMAGE_PARTITION_SIZE := 16777216 # Resize to 4G to accomodate ASAN and CTS BOARD_USERDATAIMAGE_PARTITION_SIZE := 4294967296 diff --git a/target/product/aosp_product.mk b/target/product/aosp_product.mk index cda977b311..8c879831b2 100644 --- a/target/product/aosp_product.mk +++ b/target/product/aosp_product.mk @@ -40,6 +40,7 @@ PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \ PRODUCT_PRODUCT_PROPERTIES += \ ro.config.ringtone=Ring_Synth_04.ogg \ ro.config.notification_sound=pixiedust.ogg \ + ro.com.android.dataroaming=true \ # More AOSP packages PRODUCT_PACKAGES += \ diff --git a/target/product/base_system.mk b/target/product/base_system.mk index dab84877db..f37aef387a 100644 --- a/target/product/base_system.mk +++ b/target/product/base_system.mk @@ -19,9 +19,6 @@ PRODUCT_PACKAGES += \ abb \ adbd \ am \ - android.hardware.neuralnetworks@1.0 \ - android.hardware.neuralnetworks@1.1 \ - android.hardware.neuralnetworks@1.2 \ android.hidl.allocator@1.0-service \ android.hidl.base-V1.0-java \ android.hidl.manager-V1.0-java \ diff --git a/target/product/gsi/current.txt b/target/product/gsi/current.txt index a11531ef85..5a507936ca 100644 --- a/target/product/gsi/current.txt +++ b/target/product/gsi/current.txt @@ -59,7 +59,6 @@ VNDK-core: android.frameworks.displayservice@1.0.so VNDK-core: android.frameworks.schedulerservice@1.0.so VNDK-core: android.frameworks.sensorservice@1.0.so VNDK-core: android.frameworks.stats@1.0.so -VNDK-core: android.frameworks.vr.composer@1.0.so VNDK-core: android.hardware.atrace@1.0.so VNDK-core: android.hardware.audio.common@2.0.so VNDK-core: android.hardware.audio.common@4.0.so diff --git a/tools/releasetools/apex_utils.py b/tools/releasetools/apex_utils.py index 18ad8cec0d..ee3c463650 100644 --- a/tools/releasetools/apex_utils.py +++ b/tools/releasetools/apex_utils.py @@ -42,7 +42,7 @@ class ApexSigningError(Exception): def SignApexPayload(avbtool, payload_file, payload_key_path, payload_key_name, - algorithm, salt, signing_args=None): + algorithm, salt, no_hashtree, signing_args=None): """Signs a given payload_file with the payload key.""" # Add the new footer. Old footer, if any, will be replaced by avbtool. cmd = [avbtool, 'add_hashtree_footer', @@ -52,6 +52,8 @@ def SignApexPayload(avbtool, payload_file, payload_key_path, payload_key_name, '--prop', 'apex.key:{}'.format(payload_key_name), '--image', payload_file, '--salt', salt] + if no_hashtree: + cmd.append('--no_hashtree') if signing_args: cmd.extend(shlex.split(signing_args)) @@ -64,13 +66,15 @@ def SignApexPayload(avbtool, payload_file, payload_key_path, payload_key_name, # Verify the signed payload image with specified public key. logger.info('Verifying %s', payload_file) - VerifyApexPayload(avbtool, payload_file, payload_key_path) + VerifyApexPayload(avbtool, payload_file, payload_key_path, no_hashtree) -def VerifyApexPayload(avbtool, payload_file, payload_key): +def VerifyApexPayload(avbtool, payload_file, payload_key, no_hashtree=False): """Verifies the APEX payload signature with the given key.""" cmd = [avbtool, 'verify_image', '--image', payload_file, '--key', payload_key] + if no_hashtree: + cmd.append('--accept_zeroed_hashtree') try: common.RunAndCheckOutput(cmd) except common.ExternalError as e: @@ -91,7 +95,7 @@ def ParseApexPayloadInfo(avbtool, payload_path): Returns: A dict that contains payload property-value pairs. The dict should at least - contain Algorithm, Salt and apex.key. + contain Algorithm, Salt, Tree Size and apex.key. """ if not os.path.exists(payload_path): raise ApexInfoError('Failed to find image: {}'.format(payload_path)) @@ -104,11 +108,11 @@ def ParseApexPayloadInfo(avbtool, payload_path): 'Failed to get APEX payload info for {}:\n{}'.format( payload_path, e)) - # Extract the Algorithm / Salt / Prop info from payload (i.e. an image signed - # with avbtool). For example, + # Extract the Algorithm / Salt / Prop info / Tree size from payload (i.e. an + # image signed with avbtool). For example, # Algorithm: SHA256_RSA4096 PAYLOAD_INFO_PATTERN = ( - r'^\s*(?P<key>Algorithm|Salt|Prop)\:\s*(?P<value>.*?)$') + r'^\s*(?P<key>Algorithm|Salt|Prop|Tree Size)\:\s*(?P<value>.*?)$') payload_info_matcher = re.compile(PAYLOAD_INFO_PATTERN) payload_info = {} @@ -151,7 +155,7 @@ def ParseApexPayloadInfo(avbtool, payload_path): def SignApex(avbtool, apex_data, payload_key, container_key, container_pw, - codename_to_api_level_map, signing_args=None): + codename_to_api_level_map, no_hashtree, signing_args=None): """Signs the current APEX with the given payload/container keys. Args: @@ -160,6 +164,7 @@ def SignApex(avbtool, apex_data, payload_key, container_key, container_pw, container_key: The path to container signing key (w/o extension). container_pw: The matching password of the container_key, or None. codename_to_api_level_map: A dict that maps from codename to API level. + no_hashtree: Don't include hashtree in the signed APEX. signing_args: Additional args to be passed to the payload signer. Returns: @@ -187,6 +192,7 @@ def SignApex(avbtool, apex_data, payload_key, container_key, container_pw, payload_info['apex.key'], payload_info['Algorithm'], payload_info['Salt'], + no_hashtree, signing_args) # 1b. Update the embedded payload public key. diff --git a/tools/releasetools/sign_apex.py b/tools/releasetools/sign_apex.py index 2516e15ca4..f2daa46e92 100755 --- a/tools/releasetools/sign_apex.py +++ b/tools/releasetools/sign_apex.py @@ -56,6 +56,7 @@ def SignApexFile(avbtool, apex_file, payload_key, container_key, container_key=container_key, container_pw=None, codename_to_api_level_map=None, + no_hashtree=False, signing_args=signing_args) @@ -103,7 +104,8 @@ def main(argv): args[0], options['payload_key'], options['container_key'], - options.get('payload_extra_args')) + no_hashtree=False, + signing_args=options.get('payload_extra_args')) shutil.copyfile(signed_apex, args[1]) logger.info("done.") diff --git a/tools/releasetools/sign_target_files_apks.py b/tools/releasetools/sign_target_files_apks.py index 1f41431b78..710147bb23 100755 --- a/tools/releasetools/sign_target_files_apks.py +++ b/tools/releasetools/sign_target_files_apks.py @@ -479,7 +479,8 @@ def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info, container_key, key_passwords[container_key], codename_to_api_level_map, - OPTIONS.avb_extra_args.get('apex')) + no_hashtree=True, + signing_args=OPTIONS.avb_extra_args.get('apex')) common.ZipWrite(output_tf_zip, signed_apex, filename) else: diff --git a/tools/releasetools/test_apex_utils.py b/tools/releasetools/test_apex_utils.py index e9c26f0d9e..5d4cc77494 100644 --- a/tools/releasetools/test_apex_utils.py +++ b/tools/releasetools/test_apex_utils.py @@ -44,19 +44,42 @@ class ApexUtilsTest(test_utils.ReleaseToolsTestCase): payload_file = self._GetTestPayload() apex_utils.SignApexPayload( 'avbtool', payload_file, self.payload_key, 'testkey', 'SHA256_RSA2048', - self.SALT) + self.SALT, no_hashtree=True) payload_info = apex_utils.ParseApexPayloadInfo('avbtool', payload_file) self.assertEqual('SHA256_RSA2048', payload_info['Algorithm']) self.assertEqual(self.SALT, payload_info['Salt']) self.assertEqual('testkey', payload_info['apex.key']) + self.assertEqual('0 bytes', payload_info['Tree Size']) @test_utils.SkipIfExternalToolsUnavailable() def test_SignApexPayload(self): payload_file = self._GetTestPayload() apex_utils.SignApexPayload( 'avbtool', payload_file, self.payload_key, 'testkey', 'SHA256_RSA2048', - self.SALT) + self.SALT, no_hashtree=True) + apex_utils.VerifyApexPayload( + 'avbtool', payload_file, self.payload_key, True) + + @test_utils.SkipIfExternalToolsUnavailable() + def test_SignApexPayload_withHashtree(self): + payload_file = self._GetTestPayload() + apex_utils.SignApexPayload( + 'avbtool', payload_file, self.payload_key, 'testkey', 'SHA256_RSA2048', + self.SALT, no_hashtree=False) apex_utils.VerifyApexPayload('avbtool', payload_file, self.payload_key) + payload_info = apex_utils.ParseApexPayloadInfo('avbtool', payload_file) + self.assertEqual('4096 bytes', payload_info['Tree Size']) + + @test_utils.SkipIfExternalToolsUnavailable() + def test_SignApexPayload_noHashtree(self): + payload_file = self._GetTestPayload() + apex_utils.SignApexPayload( + 'avbtool', payload_file, self.payload_key, 'testkey', 'SHA256_RSA2048', + self.SALT, no_hashtree=True) + apex_utils.VerifyApexPayload('avbtool', payload_file, self.payload_key, + no_hashtree=True) + payload_info = apex_utils.ParseApexPayloadInfo('avbtool', payload_file) + self.assertEqual('0 bytes', payload_info['Tree Size']) @test_utils.SkipIfExternalToolsUnavailable() def test_SignApexPayload_withSignerHelper(self): @@ -70,8 +93,10 @@ class ApexUtilsTest(test_utils.ReleaseToolsTestCase): payload_file, self.payload_key, 'testkey', 'SHA256_RSA2048', self.SALT, + True, payload_signer_args) - apex_utils.VerifyApexPayload('avbtool', payload_file, self.payload_key) + apex_utils.VerifyApexPayload( + 'avbtool', payload_file, self.payload_key, True) @test_utils.SkipIfExternalToolsUnavailable() def test_SignApexPayload_invalidKey(self): @@ -83,18 +108,21 @@ class ApexUtilsTest(test_utils.ReleaseToolsTestCase): os.path.join(self.testdata_dir, 'testkey.x509.pem'), 'testkey', 'SHA256_RSA2048', - self.SALT) + self.SALT, + no_hashtree=True) @test_utils.SkipIfExternalToolsUnavailable() def test_VerifyApexPayload_wrongKey(self): payload_file = self._GetTestPayload() apex_utils.SignApexPayload( 'avbtool', payload_file, self.payload_key, 'testkey', 'SHA256_RSA2048', - self.SALT) - apex_utils.VerifyApexPayload('avbtool', payload_file, self.payload_key) + self.SALT, True) + apex_utils.VerifyApexPayload( + 'avbtool', payload_file, self.payload_key, True) self.assertRaises( apex_utils.ApexSigningError, apex_utils.VerifyApexPayload, 'avbtool', payload_file, - os.path.join(self.testdata_dir, 'testkey_with_passwd.key')) + os.path.join(self.testdata_dir, 'testkey_with_passwd.key'), + no_hashtree=True) diff --git a/tools/warn.py b/tools/warn.py index 48feb49ac0..86fa8c0239 100755 --- a/tools/warn.py +++ b/tools/warn.py @@ -2684,6 +2684,17 @@ warn_patterns = [ 'patterns': [r".*: .+\[clang-analyzer-.+\]$", r".*: Call Path : .+$"]}, + # rustc warnings + {'category': 'rust', 'severity': Severity.HIGH, + 'description': 'Does not derive Copy', + 'patterns': [r".*: warning: .+ does not derive Copy"]}, + {'category': 'rust', 'severity': Severity.MEDIUM, + 'description': 'Deprecated range pattern', + 'patterns': [r".*: warning: .+ range patterns are deprecated"]}, + {'category': 'rust', 'severity': Severity.MEDIUM, + 'description': 'Deprecated missing explicit \'dyn\'', + 'patterns': [r".*: warning: .+ without an explicit `dyn` are deprecated"]}, + # catch-all for warnings this script doesn't know about yet {'category': 'C/C++', 'severity': Severity.UNKNOWN, 'description': 'Unclassified/unrecognized warnings', @@ -3208,16 +3219,42 @@ def parse_input_file(infile): global target_variant line_counter = 0 - # handle only warning messages with a file path - warning_pattern = re.compile('^[^ ]*/[^ ]*: warning: .*') + # rustc warning messages have two lines that should be combined: + # warning: description + # --> file_path:line_number:column_number + # Some warning messages have no file name: + # warning: macro replacement list ... [bugprone-macro-parentheses] + # Some makefile warning messages have no line number: + # some/path/file.mk: warning: description + # C/C++ compiler warning messages have line and column numbers: + # some/path/file.c:line_number:column_number: warning: description + warning_pattern = re.compile('(^[^ ]*/[^ ]*: warning: .*)|(^warning: .*)') + warning_without_file = re.compile('^warning: .*') + rustc_file_position = re.compile('^[ ]+--> [^ ]*/[^ ]*:[0-9]+:[0-9]+') # Collect all warnings into the warning_lines set. warning_lines = set() + prev_warning = '' for line in infile: + if prev_warning: + if rustc_file_position.match(line): + # must be a rustc warning, combine 2 lines into one warning + line = line.strip().replace('--> ', '') + ': ' + prev_warning + warning_lines.add(normalize_warning_line(line)) + prev_warning = '' + continue + # add prev_warning, and then process the current line + prev_warning = 'unknown_source_file: ' + prev_warning + warning_lines.add(normalize_warning_line(prev_warning)) + prev_warning = '' if warning_pattern.match(line): - line = normalize_warning_line(line) - warning_lines.add(line) - elif line_counter < 100: + if warning_without_file.match(line): + # save this line and combine it with the next line + prev_warning = line + else: + warning_lines.add(normalize_warning_line(line)) + continue + if line_counter < 100: # save a little bit of time by only doing this for the first few lines line_counter += 1 m = re.search('(?<=^PLATFORM_VERSION=).*', line) |