Merge "Add TARGET_USES_AOSP_FOR_WLAN soong variable"
diff --git a/core/Makefile b/core/Makefile
index c4d5530..85f33bc 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -1222,6 +1222,7 @@
ifeq ($(BOARD_AVB_ENABLE),true)
$(INSTALLED_BOOTIMAGE_TARGET): $(INTERNAL_PREBUILT_BOOTIMAGE) $(AVBTOOL) $(BOARD_AVB_BOOT_KEY_PATH)
cp $(INTERNAL_PREBUILT_BOOTIMAGE) $@
+ chmod +w $@
$(AVBTOOL) add_hash_footer \
--image $@ \
$(call get-partition-size-argument,$(BOARD_BOOTIMAGE_PARTITION_SIZE)) \
@@ -1290,6 +1291,7 @@
ifeq ($(BOARD_AVB_ENABLE),true)
$(INSTALLED_INIT_BOOT_IMAGE_TARGET): $(INTERNAL_PREBUILT_INIT_BOOT_IMAGE) $(AVBTOOL) $(BOARD_AVB_INIT_BOOT_KEY_PATH)
cp $(INTERNAL_PREBUILT_INIT_BOOT_IMAGE) $@
+ chmod +w $@
$(AVBTOOL) add_hash_footer \
--image $@ \
$(call get-partition-size-argument,$(BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE)) \
@@ -2979,7 +2981,7 @@
endif # BUILDING_DEBUG_BOOT_IMAGE || BUILDING_DEBUG_VENDOR_BOOT_IMAGE
-
+PARTITION_COMPAT_SYMLINKS :=
# Creates a compatibility symlink between two partitions, e.g. /system/vendor to /vendor
# $1: from location (e.g $(TARGET_OUT)/vendor)
# $2: destination location (e.g. /vendor)
@@ -2997,6 +2999,7 @@
ln -sfn $2 $1
$1: .KATI_SYMLINK_OUTPUTS := $1
)
+$(eval PARTITION_COMPAT_SYMLINKS += $1)
$1
endef
@@ -3107,17 +3110,23 @@
# Create symlink /system/vendor to /vendor if necessary.
ifdef BOARD_USES_VENDORIMAGE
- INTERNAL_SYSTEMIMAGE_FILES += $(call create-partition-compat-symlink,$(TARGET_OUT)/vendor,/vendor,vendor.img)
+ _vendor_symlink := $(call create-partition-compat-symlink,$(TARGET_OUT)/vendor,/vendor,vendor.img)
+ INTERNAL_SYSTEMIMAGE_FILES += $(_vendor_symlink)
+ ALL_DEFAULT_INSTALLED_MODULES += $(_vendor_symlink)
endif
# Create symlink /system/product to /product if necessary.
ifdef BOARD_USES_PRODUCTIMAGE
- INTERNAL_SYSTEMIMAGE_FILES += $(call create-partition-compat-symlink,$(TARGET_OUT)/product,/product,product.img)
+ _product_symlink := $(call create-partition-compat-symlink,$(TARGET_OUT)/product,/product,product.img)
+ INTERNAL_SYSTEMIMAGE_FILES += $(_product_symlink)
+ ALL_DEFAULT_INSTALLED_MODULES += $(_product_symlink)
endif
# Create symlink /system/system_ext to /system_ext if necessary.
ifdef BOARD_USES_SYSTEM_EXTIMAGE
- INTERNAL_SYSTEMIMAGE_FILES += $(call create-partition-compat-symlink,$(TARGET_OUT)/system_ext,/system_ext,system_ext.img)
+ _systemext_symlink := $(call create-partition-compat-symlink,$(TARGET_OUT)/system_ext,/system_ext,system_ext.img)
+ INTERNAL_SYSTEMIMAGE_FILES += $(_systemext_symlink)
+ ALL_DEFAULT_INSTALLED_MODULES += $(_systemext_symlink)
endif
# -----------------------------------------------------------------
@@ -3130,7 +3139,9 @@
# - /system/lib/modules is a symlink to a directory that stores system DLKMs.
# - The system_dlkm partition is mounted at /system_dlkm at runtime.
ifdef BOARD_USES_SYSTEM_DLKMIMAGE
- INTERNAL_SYSTEMIMAGE_FILES += $(call create-partition-compat-symlink,$(TARGET_OUT)/lib/modules,/system_dlkm/lib/modules,system_dlkm.img)
+ _system_dlkm_lib_modules_symlink := $(call create-partition-compat-symlink,$(TARGET_OUT)/lib/modules,/system_dlkm/lib/modules,system_dlkm.img)
+ INTERNAL_SYSTEMIMAGE_FILES += $(_system_dlkm_lib_modules_symlink)
+ ALL_DEFAULT_INSTALLED_MODULES += $(_system_dlkm_lib_modules_symlink)
endif
FULL_SYSTEMIMAGE_DEPS := $(INTERNAL_SYSTEMIMAGE_FILES) $(INTERNAL_USERIMAGES_DEPS)
@@ -3519,7 +3530,9 @@
# Create symlink /vendor/odm to /odm if necessary.
ifdef BOARD_USES_ODMIMAGE
- INTERNAL_VENDORIMAGE_FILES += $(call create-partition-compat-symlink,$(TARGET_OUT_VENDOR)/odm,/odm,odm.img)
+ _odm_symlink := $(call create-partition-compat-symlink,$(TARGET_OUT_VENDOR)/odm,/odm,odm.img)
+ INTERNAL_VENDORIMAGE_FILES += $(_odm_symlink)
+ ALL_DEFAULT_INSTALLED_MODULES += $(_odm_symlink)
endif
# Create symlinks for vendor_dlkm on devices with a vendor_dlkm partition:
@@ -3537,7 +3550,9 @@
# The vendor DLKMs and other vendor_dlkm files must not be accessed using other paths because they
# are not guaranteed to exist on all devices.
ifdef BOARD_USES_VENDOR_DLKMIMAGE
- INTERNAL_VENDORIMAGE_FILES += $(call create-partition-compat-symlink,$(TARGET_OUT_VENDOR)/lib/modules,/vendor_dlkm/lib/modules,vendor_dlkm.img)
+ _vendor_dlkm_lib_modules_symlink := $(call create-partition-compat-symlink,$(TARGET_OUT_VENDOR)/lib/modules,/vendor_dlkm/lib/modules,vendor_dlkm.img)
+ INTERNAL_VENDORIMAGE_FILES += $(_vendor_dlkm_lib_modules_symlink)
+ ALL_DEFAULT_INSTALLED_MODULES += $(_vendor_dlkm_lib_modules_symlink)
endif
# Install vendor/etc/linker.config.pb with PRODUCT_VENDOR_LINKER_CONFIG_FRAGMENTS and STUB_LIBRARIES
@@ -3758,7 +3773,9 @@
# The odm DLKMs and other odm_dlkm files must not be accessed using other paths because they
# are not guaranteed to exist on all devices.
ifdef BOARD_USES_ODM_DLKMIMAGE
- INTERNAL_ODMIMAGE_FILES += $(call create-partition-compat-symlink,$(TARGET_OUT_ODM)/lib/modules,/odm_dlkm/lib/modules,odm_dlkm.img)
+ _odm_dlkm_lib_modules_symlink := $(call create-partition-compat-symlink,$(TARGET_OUT_ODM)/lib/modules,/odm_dlkm/lib/modules,odm_dlkm.img)
+ INTERNAL_ODMIMAGE_FILES += $(_odm_dlkm_lib_modules_symlink)
+ ALL_DEFAULT_INSTALLED_MODULES += $(_odm_dlkm_lib_modules_symlink)
endif
INSTALLED_FILES_FILE_ODM := $(PRODUCT_OUT)/installed-files-odm.txt
@@ -4007,6 +4024,7 @@
ifeq ($(BOARD_AVB_ENABLE),true)
$(INSTALLED_DTBOIMAGE_TARGET): $(BOARD_PREBUILT_DTBOIMAGE) $(AVBTOOL) $(BOARD_AVB_DTBO_KEY_PATH)
cp $(BOARD_PREBUILT_DTBOIMAGE) $@
+ chmod +w $@
$(AVBTOOL) add_hash_footer \
--image $@ \
$(call get-partition-size-argument,$(BOARD_DTBOIMG_PARTITION_SIZE)) \
@@ -5246,6 +5264,10 @@
.PHONY: otatools-package
otatools-package: $(BUILT_OTATOOLS_PACKAGE)
+$(call dist-for-goals, otatools-package, \
+ $(BUILT_OTATOOLS_PACKAGE) \
+)
+
endif # build_otatools_package
# -----------------------------------------------------------------
diff --git a/core/android_soong_config_vars.mk b/core/android_soong_config_vars.mk
index 6f0706e..718adb5 100644
--- a/core/android_soong_config_vars.mk
+++ b/core/android_soong_config_vars.mk
@@ -41,6 +41,37 @@
# MODULE_BUILD_FROM_SOURCE.
BRANCH_DEFAULT_MODULE_BUILD_FROM_SOURCE := true
+ifneq ($(SANITIZE_TARGET)$(EMMA_INSTRUMENT_FRAMEWORK),)
+ # Always use sources when building the framework with Java coverage or
+ # sanitized builds as they both require purpose built prebuilts which we do
+ # not provide.
+ BRANCH_DEFAULT_MODULE_BUILD_FROM_SOURCE := true
+endif
+
+# ART does not provide linux_bionic variants needed for products that
+# set HOST_CROSS_OS=linux_bionic.
+ifeq (linux_bionic,${HOST_CROSS_OS})
+ BRANCH_DEFAULT_MODULE_BUILD_FROM_SOURCE := true
+endif
+
+# ART does not provide host side arm64 variants needed for products that
+# set HOST_CROSS_ARCH=arm64.
+ifeq (arm64,${HOST_CROSS_ARCH})
+ BRANCH_DEFAULT_MODULE_BUILD_FROM_SOURCE := true
+endif
+
+# TV based devices do not seem to work with prebuilts, so build from source
+# for now and fix in a follow up.
+ifneq (,$(filter tv,$(subst $(comma),$(space),${PRODUCT_CHARACTERISTICS})))
+ BRANCH_DEFAULT_MODULE_BUILD_FROM_SOURCE := true
+endif
+
+# ATV based devices do not seem to work with prebuilts, so build from source
+# for now and fix in a follow up.
+ifneq (,${PRODUCT_IS_ATV})
+ BRANCH_DEFAULT_MODULE_BUILD_FROM_SOURCE := true
+endif
+
ifneq (,$(MODULE_BUILD_FROM_SOURCE))
# Keep an explicit setting.
else ifeq (,$(filter docs sdk win_sdk sdk_addon,$(MAKECMDGOALS))$(findstring com.google.android.conscrypt,$(PRODUCT_PACKAGES)))
diff --git a/core/binary.mk b/core/binary.mk
index 6f1d814..579e6b5 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -168,7 +168,6 @@
endif
endif
-my_ndk_sysroot :=
my_ndk_sysroot_include :=
my_ndk_sysroot_lib :=
my_api_level := 10000
@@ -183,11 +182,7 @@
# Make sure we've built the NDK.
my_additional_dependencies += $(SOONG_OUT_DIR)/ndk_base.timestamp
- ifneq (,$(filter arm64 x86_64,$(my_arch)))
- my_min_sdk_version := 21
- else
- my_min_sdk_version := $(MIN_SUPPORTED_SDK_VERSION)
- endif
+ my_min_sdk_version := $(MIN_SUPPORTED_SDK_VERSION)
# Historically we've just set up a bunch of symlinks in prebuilts/ndk to map
# missing API levels to existing ones where necessary, but we're not doing
@@ -200,38 +195,19 @@
my_ndk_crt_version := $(my_ndk_api)
- my_ndk_hist_api := $(my_ndk_api)
- ifeq ($(my_ndk_api),current)
- # The last API level supported by the old prebuilt NDKs.
- my_ndk_hist_api := 24
- else
+ ifneq ($(my_ndk_api),current)
my_api_level := $(my_ndk_api)
endif
my_ndk_source_root := \
$(HISTORICAL_NDK_VERSIONS_ROOT)/$(LOCAL_NDK_VERSION)/sources
- my_ndk_sysroot := \
- $(HISTORICAL_NDK_VERSIONS_ROOT)/$(LOCAL_NDK_VERSION)/platforms/android-$(my_ndk_hist_api)/arch-$(my_arch)
my_built_ndk := $(SOONG_OUT_DIR)/ndk
my_ndk_triple := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_NDK_TRIPLE)
my_ndk_sysroot_include := \
$(my_built_ndk)/sysroot/usr/include \
$(my_built_ndk)/sysroot/usr/include/$(my_ndk_triple) \
- $(my_ndk_sysroot)/usr/include \
- # x86_64 is a multilib toolchain, so their libraries are
- # installed in /usr/lib64. Aarch64, on the other hand, is not a multilib
- # compiler, so its libraries are in /usr/lib.
- ifneq (,$(filter x86_64,$(my_arch)))
- my_ndk_libdir_name := lib64
- else
- my_ndk_libdir_name := lib
- endif
-
- my_ndk_platform_dir := \
- $(my_built_ndk)/platforms/android-$(my_ndk_api)/arch-$(my_arch)
- my_built_ndk_libs := $(my_ndk_platform_dir)/usr/$(my_ndk_libdir_name)
- my_ndk_sysroot_lib := $(my_ndk_sysroot)/usr/$(my_ndk_libdir_name)
+ my_ndk_sysroot_lib := $(my_built_ndk)/sysroot/usr/lib/$(my_ndk_triple)/$(my_ndk_api)
# The bionic linker now has support for packed relocations and gnu style
# hashes (which are much faster!), but shipping to older devices requires
@@ -1428,7 +1404,6 @@
my_ndk_shared_libraries_fullpath := \
$(foreach _lib,$(my_ndk_shared_libraries),\
$(if $(filter $(NDK_KNOWN_LIBS),$(_lib)),\
- $(my_built_ndk_libs)/$(_lib)$(so_suffix),\
$(my_ndk_sysroot_lib)/$(_lib)$(so_suffix)))
built_shared_libraries += \
diff --git a/core/board_config.mk b/core/board_config.mk
index 16acdde..fae7aaa 100644
--- a/core/board_config.mk
+++ b/core/board_config.mk
@@ -204,10 +204,7 @@
# Conditional to building on linux, as dex2oat currently does not work on darwin.
ifeq ($(HOST_OS),linux)
- # TODO(riscv64) add compiler support and enable dexpreopt on RISC-V.
- ifneq ($(TARGET_ARCH),riscv64)
- WITH_DEXPREOPT := true
- endif
+ WITH_DEXPREOPT := true
endif
# ###############################################################
@@ -922,12 +919,6 @@
endif
.KATI_READONLY := BOARD_USES_PVMFWIMAGE
-BUILDING_PVMFW_IMAGE :=
-ifeq ($(PRODUCT_BUILD_PVMFW_IMAGE),true)
- BUILDING_PVMFW_IMAGE := true
-endif
-.KATI_READONLY := BUILDING_PVMFW_IMAGE
-
###########################################
# Ensure consistency among TARGET_RECOVERY_UPDATER_LIBS, AB_OTA_UPDATER, and PRODUCT_OTA_FORCE_NON_AB_PACKAGE.
TARGET_RECOVERY_UPDATER_LIBS ?=
diff --git a/core/cleanbuild.mk b/core/cleanbuild.mk
index 5576785..f41f1b7 100644
--- a/core/cleanbuild.mk
+++ b/core/cleanbuild.mk
@@ -33,8 +33,6 @@
# CTS-specific config.
-include cts/build/config.mk
-# VTS-specific config.
--include test/vts/tools/vts-tradefed/build/config.mk
# device-tests-specific-config.
-include tools/tradefederation/build/suites/device-tests/config.mk
# general-tests-specific-config.
diff --git a/core/config.mk b/core/config.mk
index a6266b8..26e90ef 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -166,6 +166,7 @@
$(KATI_obsolete_var PRODUCT_SUPPORTS_BOOT_SIGNER,VB 1.0 and related variables are no longer supported)
$(KATI_obsolete_var PRODUCT_VERITY_SIGNING_KEY,VB 1.0 and related variables are no longer supported)
$(KATI_obsolete_var BOARD_PREBUILT_PVMFWIMAGE,pvmfw.bin is now built in AOSP and custom versions are no longer supported)
+$(KATI_obsolete_var BUILDING_PVMFW_IMAGE,BUILDING_PVMFW_IMAGE is no longer used)
$(KATI_obsolete_var BOARD_BUILD_SYSTEM_ROOT_IMAGE)
# Used to force goals to build. Only use for conditionally defined goals.
@@ -862,7 +863,6 @@
# A list of SEPolicy versions, besides PLATFORM_SEPOLICY_VERSION, that the framework supports.
PLATFORM_SEPOLICY_COMPAT_VERSIONS := \
- 28.0 \
29.0 \
30.0 \
31.0 \
diff --git a/core/device.mk b/core/device.mk
deleted file mode 100644
index 20ff447..0000000
--- a/core/device.mk
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# Copyright (C) 2007 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.
-#
-
-_device_var_list := \
- DEVICE_NAME \
- DEVICE_BOARD \
- DEVICE_REGION
-
-define dump-device
-$(info ==== $(1) ====)\
-$(foreach v,$(_device_var_list),\
-$(info DEVICES.$(1).$(v) := $(DEVICES.$(1).$(v))))\
-$(info --------)
-endef
-
-define dump-devices
-$(foreach p,$(DEVICES),$(call dump-device,$(p)))
-endef
-
-#
-# $(1): device to inherit
-#
-define inherit-device
- $(foreach v,$(_device_var_list), \
- $(eval $(v) := $($(v)) $(INHERIT_TAG)$(strip $(1))))
-endef
-
-#
-# $(1): device makefile list
-#
-#TODO: check to make sure that devices have all the necessary vars defined
-define import-devices
-$(call import-nodes,DEVICES,$(1),$(_device_var_list))
-endef
-
-
-#
-# $(1): short device name like "sooner"
-#
-define _resolve-short-device-name
- $(eval dn := $(strip $(1)))
- $(eval d := \
- $(foreach d,$(DEVICES), \
- $(if $(filter $(dn),$(DEVICES.$(d).DEVICE_NAME)), \
- $(d) \
- )) \
- )
- $(eval d := $(sort $(d)))
- $(if $(filter 1,$(words $(d))), \
- $(d), \
- $(if $(filter 0,$(words $(d))), \
- $(error No matches for device "$(dn)"), \
- $(error Device "$(dn)" ambiguous: matches $(d)) \
- ) \
- )
-endef
-
-#
-# $(1): short device name like "sooner"
-#
-define resolve-short-device-name
-$(strip $(call _resolve-short-device-name,$(1)))
-endef
diff --git a/core/dex_preopt_config.mk b/core/dex_preopt_config.mk
index 0bb47d1..e36e2eb 100644
--- a/core/dex_preopt_config.mk
+++ b/core/dex_preopt_config.mk
@@ -65,12 +65,9 @@
# Non eng linux builds must have preopt enabled so that system server doesn't run as interpreter
# only. b/74209329
ifeq (,$(filter eng, $(TARGET_BUILD_VARIANT)))
- # TODO(riscv64) add compiler support and enable dexpreopt on RISC-V.
- ifeq (,$(filter riscv64, $(TARGET_ARCH)))
- ifneq (true,$(WITH_DEXPREOPT))
- ifneq (true,$(WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY))
- $(call pretty-error, DEXPREOPT must be enabled for user and userdebug builds)
- endif
+ ifneq (true,$(WITH_DEXPREOPT))
+ ifneq (true,$(WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY))
+ $(call pretty-error, DEXPREOPT must be enabled for user and userdebug builds)
endif
endif
endif
diff --git a/core/main.mk b/core/main.mk
index db497d9..9ddd990 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -72,8 +72,6 @@
# CTS-specific config.
-include cts/build/config.mk
-# VTS-specific config.
--include test/vts/tools/vts-tradefed/build/config.mk
# device-tests-specific-config.
-include tools/tradefederation/build/suites/device-tests/config.mk
# general-tests-specific-config.
@@ -764,6 +762,9 @@
$(info $(word 1,$(r)) module $(word 2,$(r)) requires non-existent $(word 3,$(r)) module: $(word 4,$(r))) \
)
$(warning Set BUILD_BROKEN_MISSING_REQUIRED_MODULES := true to bypass this check if this is intentional)
+ ifneq (,$(PRODUCT_SOURCE_ROOT_DIRS))
+ $(warning PRODUCT_SOURCE_ROOT_DIRS is non-empty. Some necessary modules may have been skipped by Soong)
+ endif
$(error Build failed)
endif # _nonexistent_required != empty
endif # check_missing_required_modules == true
@@ -2031,10 +2032,107 @@
ifeq ($(TARGET_BUILD_APPS),)
dest_files_without_source := $(sort $(foreach pcf,$(product_copy_files_without_owner),$(if $(wildcard $(call word-colon,1,$(pcf))),,$(call word-colon,2,$(pcf)))))
dest_files_without_source := $(addprefix $(PRODUCT_OUT)/,$(dest_files_without_source))
-installed_files := $(sort $(filter-out $(PRODUCT_OUT)/apex/% $(PRODUCT_OUT)/fake_packages/% $(PRODUCT_OUT)/testcases/% $(dest_files_without_source),$(filter $(PRODUCT_OUT)/%,$(modules_to_install))))
+filter_out_files := \
+ $(PRODUCT_OUT)/apex/% \
+ $(PRODUCT_OUT)/fake_packages/% \
+ $(PRODUCT_OUT)/testcases/% \
+ $(dest_files_without_source)
+# Check if each partition image is built, if not filter out all its installed files
+# Also check if a partition uses prebuilt image file, save the info if prebuilt image is used.
+PREBUILT_PARTITION_COPY_FILES :=
+# product.img
+ifndef BUILDING_PRODUCT_IMAGE
+filter_out_files += $(PRODUCT_OUT)/product/%
+ifdef BOARD_PREBUILT_PRODUCTIMAGE
+PREBUILT_PARTITION_COPY_FILES += $(BOARD_PREBUILT_PRODUCTIMAGE):$(INSTALLED_PRODUCTIMAGE_TARGET)
+endif
+endif
+
+# system.img
+ifndef BUILDING_SYSTEM_IMAGE
+filter_out_files += $(PRODUCT_OUT)/system/%
+endif
+# system_dlkm.img
+ifndef BUILDING_SYSTEM_DLKM_IMAGE
+filter_out_files += $(PRODUCT_OUT)/system_dlkm/%
+ifdef BOARD_PREBUILT_SYSTEM_DLKMIMAGE
+PREBUILT_PARTITION_COPY_FILES += $(BOARD_PREBUILT_SYSTEM_DLKMIMAGE):$(INSTALLED_SYSTEM_DLKMIMAGE_TARGET)
+endif
+endif
+# system_ext.img
+ifndef BUILDING_SYSTEM_EXT_IMAGE
+filter_out_files += $(PRODUCT_OUT)/system_ext/%
+ifdef BOARD_PREBUILT_SYSTEM_EXTIMAGE
+PREBUILT_PARTITION_COPY_FILES += $(BOARD_PREBUILT_SYSTEM_EXTIMAGE):$(INSTALLED_SYSTEM_EXTIMAGE_TARGET)
+endif
+endif
+# system_other.img
+ifndef BUILDING_SYSTEM_OTHER_IMAGE
+filter_out_files += $(PRODUCT_OUT)/system_other/%
+endif
+
+# odm.img
+ifndef BUILDING_ODM_IMAGE
+filter_out_files += $(PRODUCT_OUT)/odm/%
+ifdef BOARD_PREBUILT_ODMIMAGE
+PREBUILT_PARTITION_COPY_FILES += $(BOARD_PREBUILT_ODMIMAGE):$(INSTALLED_ODMIMAGE_TARGET)
+endif
+endif
+# odm_dlkm.img
+ifndef BUILDING_ODM_DLKM_IMAGE
+filter_out_files += $(PRODUCT_OUT)/odm_dlkm/%
+ifdef BOARD_PREBUILT_ODM_DLKMIMAGE
+PREBUILT_PARTITION_COPY_FILES += $(BOARD_PREBUILT_ODM_DLKMIMAGE):$(INSTALLED_ODM_DLKMIMAGE_TARGET)
+endif
+endif
+
+# vendor.img
+ifndef BUILDING_VENDOR_IMAGE
+filter_out_files += $(PRODUCT_OUT)/vendor/%
+ifdef BOARD_PREBUILT_VENDORIMAGE
+PREBUILT_PARTITION_COPY_FILES += $(BOARD_PREBUILT_VENDORIMAGE):$(INSTALLED_VENDORIMAGE_TARGET)
+endif
+endif
+# vendor_dlkm.img
+ifndef BUILDING_VENDOR_DLKM_IMAGE
+filter_out_files += $(PRODUCT_OUT)/vendor_dlkm/%
+ifdef BOARD_PREBUILT_VENDOR_DLKMIMAGE
+PREBUILT_PARTITION_COPY_FILES += $(BOARD_PREBUILT_VENDOR_DLKMIMAGE):$(INSTALLED_VENDOR_DLKMIMAGE_TARGET)
+endif
+endif
+
+# cache.img
+ifndef BUILDING_CACHE_IMAGE
+filter_out_files += $(PRODUCT_OUT)/cache/%
+endif
+
+# boot.img
+ifndef BUILDING_BOOT_IMAGE
+ifdef BOARD_PREBUILT_BOOTIMAGE
+PREBUILT_PARTITION_COPY_FILES += $(BOARD_PREBUILT_BOOTIMAGE):$(INSTALLED_BOOTIMAGE_TARGET)
+endif
+endif
+# init_boot.img
+ifndef BUILDING_INIT_BOOT_IMAGE
+ifdef BOARD_PREBUILT_INIT_BOOT_IMAGE
+PREBUILT_PARTITION_COPY_FILES += $(BOARD_PREBUILT_INIT_BOOT_IMAGE):$(INSTALLED_INIT_BOOT_IMAGE_TARGET)
+endif
+endif
+
+# ramdisk.img
+ifndef BUILDING_RAMDISK_IMAGE
+filter_out_files += $(PRODUCT_OUT)/ramdisk/%
+endif
+
+# recovery.img
+ifndef INSTALLED_RECOVERYIMAGE_TARGET
+filter_out_files += $(PRODUCT_OUT)/recovery/%
+endif
+
+installed_files := $(sort $(filter-out $(filter_out_files),$(filter $(PRODUCT_OUT)/%,$(modules_to_install))))
else
installed_files := $(apps_only_installed_files)
-endif
+endif # TARGET_BUILD_APPS
# sbom-metadata.csv contains all raw data collected in Make for generating SBOM in generate-sbom.py.
# There are multiple columns and each identifies the source of an installed file for a specific case.
@@ -2080,7 +2178,8 @@
$(eval _is_kernel_modules_blocklist := $(if $(findstring $f,$(ALL_KERNEL_MODULES_BLOCKLIST)),Y)) \
$(eval _is_fsverity_build_manifest_apk := $(if $(findstring $f,$(ALL_FSVERITY_BUILD_MANIFEST_APK)),Y)) \
$(eval _is_linker_config := $(if $(findstring $f,$(SYSTEM_LINKER_CONFIG) $(vendor_linker_config_file)),Y)) \
- $(eval _is_platform_generated := $(_is_build_prop)$(_is_notice_file)$(_is_dexpreopt_image_profile)$(_is_product_system_other_avbkey)$(_is_event_log_tags_file)$(_is_system_other_odex_marker)$(_is_kernel_modules_blocklist)$(_is_fsverity_build_manifest_apk)$(_is_linker_config)) \
+ $(eval _is_partition_compat_symlink := $(if $(findstring $f,$(PARTITION_COMPAT_SYMLINKS)),Y)) \
+ $(eval _is_platform_generated := $(_is_build_prop)$(_is_notice_file)$(_is_dexpreopt_image_profile)$(_is_product_system_other_avbkey)$(_is_event_log_tags_file)$(_is_system_other_odex_marker)$(_is_kernel_modules_blocklist)$(_is_fsverity_build_manifest_apk)$(_is_linker_config)$(_is_partition_compat_symlink)) \
@echo /$(_path_on_device)$(comma)$(_module_path)$(comma)$(_soong_module_type)$(comma)$(_is_prebuilt_make_module)$(comma)$(_product_copy_files)$(comma)$(_kernel_module_copy_files)$(comma)$(_is_platform_generated) >> $@ $(newline) \
$(if $(_post_installed_dexpreopt_zip), \
for i in $$(zipinfo -1 $(_post_installed_dexpreopt_zip)); do echo /$$i$(comma)$(_module_path)$(comma)$(_soong_module_type)$(comma)$(_is_prebuilt_make_module)$(comma)$(_product_copy_files)$(comma)$(_kernel_module_copy_files)$(comma)$(_is_platform_generated) >> $@ ; done $(newline) \
@@ -2093,13 +2192,13 @@
$(PRODUCT_OUT)/sbom.spdx.json: $(PRODUCT_OUT)/sbom.spdx
$(PRODUCT_OUT)/sbom.spdx: $(PRODUCT_OUT)/sbom-metadata.csv $(GEN_SBOM)
rm -rf $@
- $(GEN_SBOM) --output_file $@ --metadata $(PRODUCT_OUT)/sbom-metadata.csv --product_out_dir=$(PRODUCT_OUT) --build_version $(BUILD_FINGERPRINT_FROM_FILE) --product_mfr=$(PRODUCT_MANUFACTURER) --json
+ $(GEN_SBOM) --output_file $@ --metadata $(PRODUCT_OUT)/sbom-metadata.csv --product_out_dir=$(PRODUCT_OUT) --build_version $(BUILD_FINGERPRINT_FROM_FILE) --product_mfr="$(PRODUCT_MANUFACTURER)" --json
else
apps_only_sbom_files := $(sort $(patsubst %,%.spdx,$(apps_only_installed_files)))
$(apps_only_sbom_files): $(PRODUCT_OUT)/sbom-metadata.csv $(GEN_SBOM)
rm -rf $@
- $(GEN_SBOM) --output_file $@ --metadata $(PRODUCT_OUT)/sbom-metadata.csv --product_out_dir=$(PRODUCT_OUT) --build_version $(BUILD_FINGERPRINT_FROM_FILE) --product_mfr=$(PRODUCT_MANUFACTURER) --unbundled
+ $(GEN_SBOM) --output_file $@ --metadata $(PRODUCT_OUT)/sbom-metadata.csv --product_out_dir=$(PRODUCT_OUT) --build_version $(BUILD_FINGERPRINT_FROM_FILE) --product_mfr="$(PRODUCT_MANUFACTURER)" --unbundled
sbom: $(apps_only_sbom_files)
endif
diff --git a/core/product.mk b/core/product.mk
index f4d5a4f..5f1e145 100644
--- a/core/product.mk
+++ b/core/product.mk
@@ -40,6 +40,7 @@
_product_list_vars += PRODUCT_PACKAGES_DEBUG_JAVA_COVERAGE
_product_list_vars += PRODUCT_PACKAGES_ENG
_product_list_vars += PRODUCT_PACKAGES_TESTS
+_product_list_vars += PRODUCT_AFDO_PROFILES
# The device that this product maps to.
_product_single_value_vars += PRODUCT_DEVICE
@@ -269,6 +270,9 @@
# List of tags that will be used to gate blueprint modules from the build graph
_product_list_vars += PRODUCT_INCLUDE_TAGS
+# List of directories that will be used to gate blueprint modules from the build graph
+_product_list_vars += PRODUCT_SOURCE_ROOT_DIRS
+
# When this is true, various build time as well as runtime debugfs restrictions are enabled.
_product_single_value_vars += PRODUCT_SET_DEBUGFS_RESTRICTIONS
diff --git a/core/product_config.mk b/core/product_config.mk
index 7055a1e..db8ca01 100644
--- a/core/product_config.mk
+++ b/core/product_config.mk
@@ -144,7 +144,6 @@
#
include $(BUILD_SYSTEM)/node_fns.mk
include $(BUILD_SYSTEM)/product.mk
-include $(BUILD_SYSTEM)/device.mk
# Read all product definitions.
#
diff --git a/core/proguard_basic_keeps.flags b/core/proguard_basic_keeps.flags
index 7e7b270..b59527a 100644
--- a/core/proguard_basic_keeps.flags
+++ b/core/proguard_basic_keeps.flags
@@ -41,6 +41,11 @@
java.lang.Object readResolve();
}
+# Keep all Javascript API methods
+-keepclassmembers class * {
+ @android.webkit.JavascriptInterface <methods>;
+}
+
# Keep Throwable's constructor that takes a String argument.
-keepclassmembers class * extends java.lang.Throwable {
<init>(java.lang.String);
diff --git a/core/soong_config.mk b/core/soong_config.mk
index 0101796..6348cf0 100644
--- a/core/soong_config.mk
+++ b/core/soong_config.mk
@@ -31,6 +31,7 @@
$(call add_json_val, Platform_sdk_extension_version, $(PLATFORM_SDK_EXTENSION_VERSION))
$(call add_json_val, Platform_base_sdk_extension_version, $(PLATFORM_BASE_SDK_EXTENSION_VERSION))
$(call add_json_csv, Platform_version_active_codenames, $(PLATFORM_VERSION_ALL_CODENAMES))
+$(call add_json_csv, Platform_version_all_preview_codenames, $(PLATFORM_VERSION_ALL_PREVIEW_CODENAMES))
$(call add_json_str, Platform_security_patch, $(PLATFORM_SECURITY_PATCH))
$(call add_json_str, Platform_preview_sdk_version, $(PLATFORM_PREVIEW_SDK_VERSION))
$(call add_json_str, Platform_base_os, $(PLATFORM_BASE_OS))
@@ -306,6 +307,9 @@
$(call add_json_bool, IgnorePrefer32OnDevice, $(filter true,$(IGNORE_PREFER32_ON_DEVICE)))
$(call add_json_list, IncludeTags, $(PRODUCT_INCLUDE_TAGS))
+$(call add_json_list, SourceRootDirs, $(PRODUCT_SOURCE_ROOT_DIRS))
+
+$(call add_json_list, AfdoProfiles, $(PRODUCT_AFDO_PROFILES))
$(call json_end)
diff --git a/core/tasks/tools/package-modules.mk b/core/tasks/tools/package-modules.mk
index c41aec5..b15df28 100644
--- a/core/tasks/tools/package-modules.mk
+++ b/core/tasks/tools/package-modules.mk
@@ -50,12 +50,12 @@
$(error done)
endif
-my_missing_files = $(shell $(call echo-warning,$(my_makefile),$(my_package_name): Unknown installed file for module '$(1)'))
+my_missing_files = $(shell $(call echo-warning,$(my_makefile),$(my_package_name): Unknown installed file for module '$(1)'))$(shell$(call echo-warning,$(my_makefile),$(my_package_name): Some necessary modules may have been skipped by Soong. Check if PRODUCT_SOURCE_ROOT_DIRS is pruning necessary Android.bp files.))
ifeq ($(ALLOW_MISSING_DEPENDENCIES),true)
# Ignore unknown installed files on partial builds
my_missing_files =
else ifneq ($(my_modules_strict),false)
- my_missing_files = $(shell $(call echo-error,$(my_makefile),$(my_package_name): Unknown installed file for module '$(1)'))$(eval my_missing_error := true)
+ my_missing_files = $(shell $(call echo-error,$(my_makefile),$(my_package_name): Unknown installed file for module '$(1)'))$(shell$(call echo-warning,$(my_makefile),$(my_package_name): Some necessary modules may have been skipped by Soong. Check if PRODUCT_SOURCE_ROOT_DIRS is pruning necessary Android.bp files.))$(eval my_missing_error := true)
endif
# Iterate over modules' built files and installed files;
diff --git a/core/version_defaults.mk b/core/version_defaults.mk
index 3533851..95b3d37 100644
--- a/core/version_defaults.mk
+++ b/core/version_defaults.mk
@@ -43,7 +43,7 @@
DEFAULT_PLATFORM_VERSION := UP1A
.KATI_READONLY := DEFAULT_PLATFORM_VERSION
MIN_PLATFORM_VERSION := UP1A
-MAX_PLATFORM_VERSION := UP1A
+MAX_PLATFORM_VERSION := VP1A
# The last stable version name of the platform that was released. During
# development, this stays at that previous version, while the codename indicates
@@ -54,6 +54,7 @@
# These are the current development codenames, if the build is not a final
# release build. If this is a final release build, it is simply "REL".
PLATFORM_VERSION_CODENAME.UP1A := UpsideDownCake
+PLATFORM_VERSION_CODENAME.VP1A := VanillaIceCream
# This is the user-visible version. In a final release build it should
# be empty to use PLATFORM_VERSION as the user-visible version. For
diff --git a/core/version_util.mk b/core/version_util.mk
index cbfef96..47883d8 100644
--- a/core/version_util.mk
+++ b/core/version_util.mk
@@ -80,13 +80,28 @@
$(if $(filter $(_codename),$(PLATFORM_VERSION_ALL_CODENAMES)),,\
$(eval PLATFORM_VERSION_ALL_CODENAMES += $(_codename))))
+# And the list of actually all the codenames that are in preview. The
+# ALL_CODENAMES variable is sort of a lie for historical reasons and only
+# includes codenames up to and including the currently active codename, whereas
+# this variable also includes future codenames. For example, while AOSP is still
+# merging into U, but V development has started, ALL_CODENAMES will only be U,
+# but ALL_PREVIEW_CODENAMES will be U and V.
+PLATFORM_VERSION_ALL_PREVIEW_CODENAMES :=
+$(foreach version,$(ALL_VERSIONS),\
+ $(eval _codename := $(PLATFORM_VERSION_CODENAME.$(version)))\
+ $(if $(filter $(_codename),$(PLATFORM_VERSION_ALL_PREVIEW_CODENAMES)),,\
+ $(eval PLATFORM_VERSION_ALL_PREVIEW_CODENAMES += $(_codename))))
+
# And convert from space separated to comma separated.
PLATFORM_VERSION_ALL_CODENAMES := \
$(subst $(space),$(comma),$(strip $(PLATFORM_VERSION_ALL_CODENAMES)))
+PLATFORM_VERSION_ALL_PREVIEW_CODENAMES := \
+ $(subst $(space),$(comma),$(strip $(PLATFORM_VERSION_ALL_PREVIEW_CODENAMES)))
.KATI_READONLY := \
PLATFORM_VERSION_CODENAME \
- PLATFORM_VERSION_ALL_CODENAMES
+ PLATFORM_VERSION_ALL_CODENAMES \
+ PLATFORM_VERSION_ALL_PREVIEW_CODENAMES \
ifneq (REL,$(PLATFORM_VERSION_CODENAME))
codenames := \
diff --git a/target/board/BoardConfigEmuCommon.mk b/target/board/BoardConfigEmuCommon.mk
index 3524b7c..6ed08f0 100644
--- a/target/board/BoardConfigEmuCommon.mk
+++ b/target/board/BoardConfigEmuCommon.mk
@@ -38,6 +38,7 @@
BOARD_EMULATOR_DYNAMIC_PARTITIONS_PARTITION_LIST := \
system \
+ system_dlkm \
system_ext \
product \
vendor
@@ -47,6 +48,10 @@
TARGET_COPY_OUT_SYSTEM_EXT := system_ext
BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := ext4
+BOARD_USES_SYSTEM_DLKMIMAGE := true
+BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := erofs
+TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
+
# 8G
BOARD_EMULATOR_DYNAMIC_PARTITIONS_SIZE ?= 8589934592
diff --git a/target/board/generic_riscv64/BoardConfig.mk b/target/board/generic_riscv64/BoardConfig.mk
index 53379bb..906f7f0 100644
--- a/target/board/generic_riscv64/BoardConfig.mk
+++ b/target/board/generic_riscv64/BoardConfig.mk
@@ -26,6 +26,3 @@
# Temporary hack while prebuilt modules are missing riscv64.
ALLOW_MISSING_DEPENDENCIES := true
-
-# Temporary until dex2oat works when targeting riscv64
-WITH_DEXPREOPT := false
diff --git a/target/product/module_arm.mk b/target/product/module_arm.mk
index d99dce8..434f7ad 100644
--- a/target/product/module_arm.mk
+++ b/target/product/module_arm.mk
@@ -17,5 +17,4 @@
$(call inherit-product, $(SRC_TARGET_DIR)/product/module_common.mk)
PRODUCT_NAME := module_arm
-PRODUCT_BRAND := Android
PRODUCT_DEVICE := module_arm
diff --git a/target/product/module_arm64.mk b/target/product/module_arm64.mk
index fc9529c..2e8c8a7 100644
--- a/target/product/module_arm64.mk
+++ b/target/product/module_arm64.mk
@@ -18,5 +18,4 @@
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
PRODUCT_NAME := module_arm64
-PRODUCT_BRAND := Android
PRODUCT_DEVICE := module_arm64
diff --git a/target/product/module_arm64only.mk b/target/product/module_arm64only.mk
index 4e8d53e..c0769bf 100644
--- a/target/product/module_arm64only.mk
+++ b/target/product/module_arm64only.mk
@@ -18,5 +18,4 @@
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk)
PRODUCT_NAME := module_arm64only
-PRODUCT_BRAND := Android
PRODUCT_DEVICE := module_arm64only
diff --git a/target/product/module_common.mk b/target/product/module_common.mk
index ec670ee..84bd799 100644
--- a/target/product/module_common.mk
+++ b/target/product/module_common.mk
@@ -30,3 +30,5 @@
ifneq (,$(strip $(wildcard frameworks/base/Android.bp)))
UNBUNDLED_BUILD_SDKS_FROM_SOURCE := true
endif
+
+PRODUCT_BRAND := Android
diff --git a/target/product/module_x86.mk b/target/product/module_x86.mk
index b852e7a..f38e2b9 100644
--- a/target/product/module_x86.mk
+++ b/target/product/module_x86.mk
@@ -17,5 +17,4 @@
$(call inherit-product, $(SRC_TARGET_DIR)/product/module_common.mk)
PRODUCT_NAME := module_x86
-PRODUCT_BRAND := Android
PRODUCT_DEVICE := module_x86
diff --git a/target/product/module_x86_64.mk b/target/product/module_x86_64.mk
index f6bc1fc..20f443a 100644
--- a/target/product/module_x86_64.mk
+++ b/target/product/module_x86_64.mk
@@ -18,5 +18,4 @@
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
PRODUCT_NAME := module_x86_64
-PRODUCT_BRAND := Android
PRODUCT_DEVICE := module_x86_64
diff --git a/target/product/module_x86_64only.mk b/target/product/module_x86_64only.mk
index bca4541..b0d72bf 100644
--- a/target/product/module_x86_64only.mk
+++ b/target/product/module_x86_64only.mk
@@ -18,5 +18,4 @@
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk)
PRODUCT_NAME := module_x86_64only
-PRODUCT_BRAND := Android
PRODUCT_DEVICE := module_x86_64only
diff --git a/target/product/sdk_phone_arm64.mk b/target/product/sdk_phone_arm64.mk
index 4203d45..3f81615 100644
--- a/target/product/sdk_phone_arm64.mk
+++ b/target/product/sdk_phone_arm64.mk
@@ -13,7 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-QEMU_USE_SYSTEM_EXT_PARTITIONS := true
PRODUCT_USE_DYNAMIC_PARTITIONS := true
# This is a build configuration for a full-featured build of the
diff --git a/target/product/sdk_phone_armv7.mk b/target/product/sdk_phone_armv7.mk
index 888505b..48a0e3b 100644
--- a/target/product/sdk_phone_armv7.mk
+++ b/target/product/sdk_phone_armv7.mk
@@ -13,7 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-QEMU_USE_SYSTEM_EXT_PARTITIONS := true
PRODUCT_USE_DYNAMIC_PARTITIONS := true
# This is a build configuration for a full-featured build of the
diff --git a/target/product/sdk_phone_x86.mk b/target/product/sdk_phone_x86.mk
index a324e5f..0f8b508 100644
--- a/target/product/sdk_phone_x86.mk
+++ b/target/product/sdk_phone_x86.mk
@@ -13,7 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-QEMU_USE_SYSTEM_EXT_PARTITIONS := true
PRODUCT_USE_DYNAMIC_PARTITIONS := true
# This is a build configuration for a full-featured build of the
diff --git a/target/product/sdk_phone_x86_64.mk b/target/product/sdk_phone_x86_64.mk
index ff9018d..f5d9028 100644
--- a/target/product/sdk_phone_x86_64.mk
+++ b/target/product/sdk_phone_x86_64.mk
@@ -13,7 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-QEMU_USE_SYSTEM_EXT_PARTITIONS := true
PRODUCT_USE_DYNAMIC_PARTITIONS := true
# This is a build configuration for a full-featured build of the
diff --git a/target/product/security/BUILD.bazel b/target/product/security/BUILD.bazel
new file mode 100644
index 0000000..c12be79
--- /dev/null
+++ b/target/product/security/BUILD.bazel
@@ -0,0 +1,8 @@
+filegroup(
+ name = "android_certificate_directory",
+ srcs = glob([
+ "*.pk8",
+ "*.pem",
+ ]),
+ visibility = ["//visibility:public"],
+)
diff --git a/tools/Android.bp b/tools/Android.bp
index c5c02c6..e325f6b 100644
--- a/tools/Android.bp
+++ b/tools/Android.bp
@@ -85,3 +85,16 @@
"libprotobuf-python",
],
}
+
+python_binary_host {
+ name: "list_files",
+ main: "list_files.py",
+ srcs: [
+ "list_files.py",
+ ],
+ version: {
+ py3: {
+ embedded_launcher: true,
+ }
+ }
+}
diff --git a/tools/compliance/Android.bp b/tools/compliance/Android.bp
index 8e13f2f..f85a46f 100644
--- a/tools/compliance/Android.bp
+++ b/tools/compliance/Android.bp
@@ -138,6 +138,10 @@
"compliance-module",
"blueprint-deptools",
"soong-response",
+ "spdx-tools-spdxv2_2",
+ "spdx-tools-builder2v2",
+ "spdx-tools-spdxcommon",
+ "spdx-tools-spdx-json",
],
testSrcs: ["cmd/sbom/sbom_test.go"],
}
diff --git a/tools/compliance/cmd/sbom/sbom.go b/tools/compliance/cmd/sbom/sbom.go
index 0f8a876..3cdfa0a 100644
--- a/tools/compliance/cmd/sbom/sbom.go
+++ b/tools/compliance/cmd/sbom/sbom.go
@@ -16,6 +16,8 @@
import (
"bytes"
+ "crypto/sha1"
+ "encoding/hex"
"flag"
"fmt"
"io"
@@ -31,6 +33,11 @@
"android/soong/tools/compliance/projectmetadata"
"github.com/google/blueprint/deptools"
+
+ "github.com/spdx/tools-golang/builder/builder2v2"
+ "github.com/spdx/tools-golang/json"
+ "github.com/spdx/tools-golang/spdx/common"
+ spdx "github.com/spdx/tools-golang/spdx/v2_2"
)
var (
@@ -38,6 +45,8 @@
failNoLicenses = fmt.Errorf("No licenses found")
)
+const NOASSERTION = "NOASSERTION"
+
type context struct {
stdout io.Writer
stderr io.Writer
@@ -154,7 +163,8 @@
ctx := &context{ofile, os.Stderr, compliance.FS, *product, *stripPrefix, actualTime}
- deps, err := sbomGenerator(ctx, flags.Args()...)
+ spdxDoc, deps, err := sbomGenerator(ctx, flags.Args()...)
+
if err != nil {
if err == failNoneRequested {
flags.Usage()
@@ -163,6 +173,11 @@
os.Exit(1)
}
+ if err := spdx_json.Save2_2(spdxDoc, ofile); err != nil {
+ fmt.Fprintf(os.Stderr, "failed to write document to %v: %v", *outputFile, err)
+ os.Exit(1)
+ }
+
if *outputFile != "-" {
err := os.WriteFile(*outputFile, obuf.Bytes(), 0666)
if err != nil {
@@ -181,11 +196,12 @@
os.Exit(0)
}
-type creationTimeGetter func() time.Time
+type creationTimeGetter func() string
// actualTime returns current time in UTC
-func actualTime() time.Time {
- return time.Now().UTC()
+func actualTime() string {
+ t := time.Now().UTC()
+ return t.UTC().Format("2006-01-02T15:04:05Z")
}
// replaceSlashes replaces "/" by "-" for the library path to be used for packages & files SPDXID
@@ -193,6 +209,23 @@
return strings.ReplaceAll(x, "/", "-")
}
+// stripDocName removes the outdir prefix and meta_lic suffix from a target Name
+func stripDocName(name string) string {
+ // remove outdir prefix
+ if strings.HasPrefix(name, "out/") {
+ name = name[4:]
+ }
+
+ // remove suffix
+ if strings.HasSuffix(name, ".meta_lic") {
+ name = name[:len(name)-9]
+ } else if strings.HasSuffix(name, "/meta_lic") {
+ name = name[:len(name)-9] + "/"
+ }
+
+ return name
+}
+
// getPackageName returns a package name of a target Node
func getPackageName(_ *context, tn *compliance.TargetNode) string {
return replaceSlashes(tn.Name())
@@ -210,25 +243,24 @@
return replaceSlashes(tn.ModuleName())
}
- // TO DO: Replace tn.Name() with pm.Name() + parts of the target name
- return replaceSlashes(tn.Name())
+ return stripDocName(replaceSlashes(tn.Name()))
}
// getDownloadUrl returns the download URL if available (GIT, SVN, etc..),
// or NOASSERTION if not available, none determined or ambiguous
func getDownloadUrl(_ *context, pm *projectmetadata.ProjectMetadata) string {
if pm == nil {
- return "NOASSERTION"
+ return NOASSERTION
}
urlsByTypeName := pm.UrlsByTypeName()
if urlsByTypeName == nil {
- return "NOASSERTION"
+ return NOASSERTION
}
url := urlsByTypeName.DownloadUrl()
if url == "" {
- return "NOASSERTION"
+ return NOASSERTION
}
return url
}
@@ -274,7 +306,7 @@
// inputFiles returns the complete list of files read
func inputFiles(lg *compliance.LicenseGraph, pmix *projectmetadata.Index, licenseTexts []string) []string {
projectMeta := pmix.AllMetadataFiles()
- targets := lg.TargetNames()
+ targets := lg.TargetNames()
files := make([]string, 0, len(licenseTexts)+len(targets)+len(projectMeta))
files = append(files, licenseTexts...)
files = append(files, targets...)
@@ -282,6 +314,19 @@
return files
}
+// generateSPDXNamespace generates a unique SPDX Document Namespace using a SHA1 checksum
+// and the CreationInfo.Created field as the date.
+func generateSPDXNamespace(created string) string {
+ // Compute a SHA1 checksum of the CreationInfo.Created field.
+ hash := sha1.Sum([]byte(created))
+ checksum := hex.EncodeToString(hash[:])
+
+ // Combine the checksum and timestamp to generate the SPDX Namespace.
+ namespace := fmt.Sprintf("SPDXRef-DOCUMENT-%s-%s", created, checksum)
+
+ return namespace
+}
+
// sbomGenerator implements the spdx bom utility
// SBOM is part of the new government regulation issued to improve national cyber security
@@ -289,10 +334,10 @@
// sbomGenerator uses the SPDX standard, see the SPDX specification (https://spdx.github.io/spdx-spec/)
// sbomGenerator is also following the internal google SBOM styleguide (http://goto.google.com/spdx-style-guide)
-func sbomGenerator(ctx *context, files ...string) ([]string, error) {
+func sbomGenerator(ctx *context, files ...string) (*spdx.Document, []string, error) {
// Must be at least one root file.
if len(files) < 1 {
- return nil, failNoneRequested
+ return nil, nil, failNoneRequested
}
pmix := projectmetadata.NewIndex(ctx.rootFS)
@@ -300,9 +345,24 @@
lg, err := compliance.ReadLicenseGraph(ctx.rootFS, ctx.stderr, files)
if err != nil {
- return nil, fmt.Errorf("Unable to read license text file(s) for %q: %v\n", files, err)
+ return nil, nil, fmt.Errorf("Unable to read license text file(s) for %q: %v\n", files, err)
}
+ // creating the packages section
+ pkgs := []*spdx.Package{}
+
+ // creating the relationship section
+ relationships := []*spdx.Relationship{}
+
+ // creating the license section
+ otherLicenses := []*spdx.OtherLicense{}
+
+ // spdx document name
+ var docName string
+
+ // main package name
+ var mainPkgName string
+
// implementing the licenses references for the packages
licenses := make(map[string]string)
concludedLicenses := func(licenseTexts []string) string {
@@ -325,7 +385,6 @@
}
isMainPackage := true
- var mainPackage string
visitedNodes := make(map[*compliance.TargetNode]struct{})
// performing a Breadth-first top down walk of licensegraph and building package information
@@ -341,45 +400,51 @@
}
if isMainPackage {
- mainPackage = getDocumentName(ctx, tn, pm)
- fmt.Fprintf(ctx.stdout, "SPDXVersion: SPDX-2.2\n")
- fmt.Fprintf(ctx.stdout, "DataLicense: CC0-1.0\n")
- fmt.Fprintf(ctx.stdout, "DocumentName: %s\n", mainPackage)
- fmt.Fprintf(ctx.stdout, "SPDXID: SPDXRef-DOCUMENT\n")
- fmt.Fprintf(ctx.stdout, "DocumentNamespace: Android\n")
- fmt.Fprintf(ctx.stdout, "Creator: Organization: Google LLC\n")
- fmt.Fprintf(ctx.stdout, "Created: %s\n", ctx.creationTime().Format("2006-01-02T15:04:05Z"))
+ docName = getDocumentName(ctx, tn, pm)
+ mainPkgName = replaceSlashes(getPackageName(ctx, tn))
isMainPackage = false
}
- relationships := make([]string, 0, 1)
- defer func() {
- if r := recover(); r != nil {
- panic(r)
- }
- for _, relationship := range relationships {
- fmt.Fprintln(ctx.stdout, relationship)
- }
- }()
if len(path) == 0 {
- relationships = append(relationships,
- fmt.Sprintf("Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-Package-%s",
- getPackageName(ctx, tn)))
+ // Add the describe relationship for the main package
+ rln := &spdx.Relationship{
+ RefA: common.MakeDocElementID("" /* this document */, "DOCUMENT"),
+ RefB: common.MakeDocElementID("", mainPkgName),
+ Relationship: "DESCRIBES",
+ }
+ relationships = append(relationships, rln)
+
} else {
// Check parent and identify annotation
parent := path[len(path)-1]
targetEdge := parent.Edge()
if targetEdge.IsRuntimeDependency() {
// Adding the dynamic link annotation RUNTIME_DEPENDENCY_OF relationship
- relationships = append(relationships, fmt.Sprintf("Relationship: SPDXRef-Package-%s RUNTIME_DEPENDENCY_OF SPDXRef-Package-%s", getPackageName(ctx, tn), getPackageName(ctx, targetEdge.Target())))
+ rln := &spdx.Relationship{
+ RefA: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, tn))),
+ RefB: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, targetEdge.Target()))),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ }
+ relationships = append(relationships, rln)
} else if targetEdge.IsDerivation() {
// Adding the derivation annotation as a CONTAINS relationship
- relationships = append(relationships, fmt.Sprintf("Relationship: SPDXRef-Package-%s CONTAINS SPDXRef-Package-%s", getPackageName(ctx, targetEdge.Target()), getPackageName(ctx, tn)))
+ rln := &spdx.Relationship{
+ RefA: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, targetEdge.Target()))),
+ RefB: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, tn))),
+ Relationship: "CONTAINS",
+ }
+ relationships = append(relationships, rln)
} else if targetEdge.IsBuildTool() {
// Adding the toolchain annotation as a BUILD_TOOL_OF relationship
- relationships = append(relationships, fmt.Sprintf("Relationship: SPDXRef-Package-%s BUILD_TOOL_OF SPDXRef-Package-%s", getPackageName(ctx, tn), getPackageName(ctx, targetEdge.Target())))
+ rln := &spdx.Relationship{
+ RefA: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, tn))),
+ RefB: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, targetEdge.Target()))),
+ Relationship: "BUILD_TOOL_OF",
+ }
+ relationships = append(relationships, rln)
+
} else {
panic(fmt.Errorf("Unknown dependency type: %v", targetEdge.Annotations()))
}
@@ -390,18 +455,27 @@
}
visitedNodes[tn] = struct{}{}
pkgName := getPackageName(ctx, tn)
- fmt.Fprintf(ctx.stdout, "##### Package: %s\n", strings.Replace(pkgName, "-", "/", -2))
- fmt.Fprintf(ctx.stdout, "PackageName: %s\n", pkgName)
- if pm != nil && pm.Version() != "" {
- fmt.Fprintf(ctx.stdout, "PackageVersion: %s\n", pm.Version())
+
+ // Making an spdx package and adding it to pkgs
+ pkg := &spdx.Package{
+ PackageName: replaceSlashes(pkgName),
+ PackageDownloadLocation: getDownloadUrl(ctx, pm),
+ PackageSPDXIdentifier: common.ElementID(replaceSlashes(pkgName)),
+ PackageLicenseConcluded: concludedLicenses(tn.LicenseTexts()),
}
- fmt.Fprintf(ctx.stdout, "SPDXID: SPDXRef-Package-%s\n", pkgName)
- fmt.Fprintf(ctx.stdout, "PackageDownloadLocation: %s\n", getDownloadUrl(ctx, pm))
- fmt.Fprintf(ctx.stdout, "PackageLicenseConcluded: %s\n", concludedLicenses(tn.LicenseTexts()))
+
+ if pm != nil && pm.Version() != "" {
+ pkg.PackageVersion = pm.Version()
+ } else {
+ pkg.PackageVersion = NOASSERTION
+ }
+
+ pkgs = append(pkgs, pkg)
+
return true
})
- fmt.Fprintf(ctx.stdout, "##### Non-standard license:\n")
+ // Adding Non-standard licenses
licenseTexts := make([]string, 0, len(licenses))
@@ -412,23 +486,45 @@
sort.Strings(licenseTexts)
for _, licenseText := range licenseTexts {
- fmt.Fprintf(ctx.stdout, "LicenseID: %s\n", licenses[licenseText])
// open the file
f, err := ctx.rootFS.Open(filepath.Clean(licenseText))
if err != nil {
- return nil, fmt.Errorf("error opening license text file %q: %w", licenseText, err)
+ return nil, nil, fmt.Errorf("error opening license text file %q: %w", licenseText, err)
}
// read the file
text, err := io.ReadAll(f)
if err != nil {
- return nil, fmt.Errorf("error reading license text file %q: %w", licenseText, err)
+ return nil, nil, fmt.Errorf("error reading license text file %q: %w", licenseText, err)
}
- // adding the extracted license text
- fmt.Fprintf(ctx.stdout, "ExtractedText: <text>%v</text>\n", string(text))
+ // Making an spdx License and adding it to otherLicenses
+ otherLicenses = append(otherLicenses, &spdx.OtherLicense{
+ LicenseName: strings.Replace(licenses[licenseText], "LicenseRef-", "", -1),
+ LicenseIdentifier: string(licenses[licenseText]),
+ ExtractedText: string(text),
+ })
}
deps := inputFiles(lg, pmix, licenseTexts)
sort.Strings(deps)
- return deps, nil
+
+ // Making the SPDX doc
+ ci, err := builder2v2.BuildCreationInfoSection2_2("Organization", "Google LLC", nil)
+ if err != nil {
+ return nil, nil, fmt.Errorf("Unable to build creation info section for SPDX doc: %v\n", err)
+ }
+
+ ci.Created = ctx.creationTime()
+
+ return &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: docName,
+ DocumentNamespace: generateSPDXNamespace(ci.Created),
+ CreationInfo: ci,
+ Packages: pkgs,
+ Relationships: relationships,
+ OtherLicenses: otherLicenses,
+ }, deps, nil
}
diff --git a/tools/compliance/cmd/sbom/sbom_test.go b/tools/compliance/cmd/sbom/sbom_test.go
index 6df74e2..65a2df1 100644
--- a/tools/compliance/cmd/sbom/sbom_test.go
+++ b/tools/compliance/cmd/sbom/sbom_test.go
@@ -15,37 +15,19 @@
package main
import (
- "bufio"
"bytes"
+ "encoding/json"
"fmt"
"os"
"reflect"
- "regexp"
"strings"
"testing"
"time"
"android/soong/tools/compliance"
-)
-
-var (
- spdxVersionTag = regexp.MustCompile(`^\s*SPDXVersion: SPDX-2.2\s*$`)
- spdxDataLicenseTag = regexp.MustCompile(`^\s*DataLicense: CC0-1.0\s*$`)
- spdxDocumentNameTag = regexp.MustCompile(`^\s*DocumentName:\s*Android*\s*$`)
- spdxIDTag = regexp.MustCompile(`^\s*SPDXID:\s*SPDXRef-DOCUMENT\s*$`)
- spdxDocumentNameSpaceTag = regexp.MustCompile(`^\s*DocumentNamespace:\s*Android\s*$`)
- spdxCreatorOrganizationTag = regexp.MustCompile(`^\s*Creator:\s*Organization:\s*Google LLC\s*$`)
- spdxCreatedTimeTag = regexp.MustCompile(`^\s*Created: 1970-01-01T00:00:00Z\s*$`)
- spdxPackageTag = regexp.MustCompile(`^\s*#####\s*Package:\s*(.*)\s*$`)
- spdxPackageNameTag = regexp.MustCompile(`^\s*PackageName:\s*(.*)\s*$`)
- spdxPkgIDTag = regexp.MustCompile(`^\s*SPDXID:\s*SPDXRef-Package-(.*)\s*$`)
- spdxPkgDownloadLocationTag = regexp.MustCompile(`^\s*PackageDownloadLocation:\s*NOASSERTION\s*$`)
- spdxPkgLicenseDeclaredTag = regexp.MustCompile(`^\s*PackageLicenseConcluded:\s*LicenseRef-(.*)\s*$`)
- spdxRelationshipTag = regexp.MustCompile(`^\s*Relationship:\s*SPDXRef-(.*)\s*(DESCRIBES|CONTAINS|BUILD_TOOL_OF|RUNTIME_DEPENDENCY_OF)\s*SPDXRef-Package-(.*)\s*$`)
- spdxLicenseTag = regexp.MustCompile(`^\s*##### Non-standard license:\s*$`)
- spdxLicenseIDTag = regexp.MustCompile(`^\s*LicenseID: LicenseRef-(.*)\s*$`)
- spdxExtractedTextTag = regexp.MustCompile(`^\s*ExtractedText:\s*<text>(.*)\s*$`)
- spdxExtractedClosingTextTag = regexp.MustCompile(`^\s*</text>\s*$`)
+ "github.com/spdx/tools-golang/builder/builder2v2"
+ "github.com/spdx/tools-golang/spdx/common"
+ spdx "github.com/spdx/tools-golang/spdx/v2_2"
)
func TestMain(m *testing.M) {
@@ -65,69 +47,125 @@
outDir string
roots []string
stripPrefix string
- expectedOut []matcher
+ expectedOut *spdx.Document
expectedDeps []string
}{
{
condition: "firstparty",
name: "apex",
roots: []string{"highest.apex.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/firstparty/highest.apex.meta_lic"},
- packageName{"testdata/firstparty/highest.apex.meta_lic"},
- spdxPkgID{"testdata/firstparty/highest.apex.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata-firstparty-highest.apex.meta_lic", "DESCRIBES"},
- packageTag{"testdata/firstparty/bin/bin1.meta_lic"},
- packageName{"testdata/firstparty/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/firstparty/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata/firstparty/bin/bin1.meta_lic", "CONTAINS"},
- packageTag{"testdata/firstparty/bin/bin2.meta_lic"},
- packageName{"testdata/firstparty/bin/bin2.meta_lic"},
- spdxPkgID{"testdata/firstparty/bin/bin2.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata-firstparty-bin-bin2.meta_lic", "CONTAINS"},
- packageTag{"testdata/firstparty/lib/liba.so.meta_lic"},
- packageName{"testdata/firstparty/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/firstparty/lib/libb.so.meta_lic"},
- packageName{"testdata/firstparty/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata/firstparty/lib/libb.so.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/firstparty/lib/libc.a.meta_lic"},
- packageName{"testdata/firstparty/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata-firstparty-bin-bin1.meta_lic ", "testdata/firstparty/lib/libc.a.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/firstparty/lib/libb.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- packageTag{"testdata/firstparty/lib/libd.so.meta_lic"},
- packageName{"testdata/firstparty/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/lib/libd.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-firstparty-highest.apex",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-firstparty-highest.apex.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-highest.apex.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-bin-bin2.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin2.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-highest.apex.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libb.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-lib-libd.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -144,42 +182,72 @@
condition: "firstparty",
name: "application",
roots: []string{"application.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/firstparty/application.meta_lic"},
- packageName{"testdata/firstparty/application.meta_lic"},
- spdxPkgID{"testdata/firstparty/application.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/firstparty/application.meta_lic", "DESCRIBES"},
- packageTag{"testdata/firstparty/bin/bin3.meta_lic"},
- packageName{"testdata/firstparty/bin/bin3.meta_lic"},
- spdxPkgID{"testdata/firstparty/bin/bin3.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/bin/bin3.meta_lic ", "testdata-firstparty-application.meta_lic", "BUILD_TOOL_OF"},
- packageTag{"testdata/firstparty/lib/liba.so.meta_lic"},
- packageName{"testdata/firstparty/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/application.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/firstparty/lib/libb.so.meta_lic"},
- packageName{"testdata/firstparty/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/lib/libb.so.meta_lic ", "testdata-firstparty-application.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-firstparty-application",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-firstparty-application.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-application.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-bin-bin3.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin3.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-application.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin3.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-application.meta_lic"),
+ Relationship: "BUILD_TOOL_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-application.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-application.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -193,62 +261,118 @@
condition: "firstparty",
name: "container",
roots: []string{"container.zip.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/firstparty/container.zip.meta_lic"},
- packageName{"testdata/firstparty/container.zip.meta_lic"},
- spdxPkgID{"testdata/firstparty/container.zip.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/firstparty/container.zip.meta_lic", "DESCRIBES"},
- packageTag{"testdata/firstparty/bin/bin1.meta_lic"},
- packageName{"testdata/firstparty/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/firstparty/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/bin/bin1.meta_lic", "CONTAINS"},
- packageTag{"testdata/firstparty/bin/bin2.meta_lic"},
- packageName{"testdata/firstparty/bin/bin2.meta_lic"},
- spdxPkgID{"testdata/firstparty/bin/bin2.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "CONTAINS"},
- packageTag{"testdata/firstparty/lib/liba.so.meta_lic"},
- packageName{"testdata/firstparty/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/firstparty/lib/libb.so.meta_lic"},
- packageName{"testdata/firstparty/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/lib/libb.so.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/firstparty/lib/libc.a.meta_lic"},
- packageName{"testdata/firstparty/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/libc.a.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/firstparty/lib/libb.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- packageTag{"testdata/firstparty/lib/libd.so.meta_lic"},
- packageName{"testdata/firstparty/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/lib/libd.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-firstparty-container.zip",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-firstparty-container.zip.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-container.zip.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-bin-bin2.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin2.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-container.zip.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libb.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-lib-libd.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -265,36 +389,60 @@
condition: "firstparty",
name: "binary",
roots: []string{"bin/bin1.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/firstparty/bin/bin1.meta_lic"},
- packageName{"testdata/firstparty/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/firstparty/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/firstparty/bin/bin1.meta_lic", "DESCRIBES"},
- packageTag{"testdata/firstparty/lib/liba.so.meta_lic"},
- packageName{"testdata/firstparty/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/firstparty/lib/libc.a.meta_lic"},
- packageName{"testdata/firstparty/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/libc.a.meta_lic", "CONTAINS"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-firstparty-bin-bin1",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-firstparty-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-firstparty-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -307,24 +455,36 @@
condition: "firstparty",
name: "library",
roots: []string{"lib/libd.so.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/firstparty/lib/libd.so.meta_lic"},
- packageName{"testdata/firstparty/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/firstparty/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/firstparty/lib/libd.so.meta_lic", "DESCRIBES"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-firstparty-lib-libd.so",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-firstparty-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libd.so.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -335,65 +495,123 @@
condition: "notice",
name: "apex",
roots: []string{"highest.apex.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/notice/highest.apex.meta_lic"},
- packageName{"testdata/notice/highest.apex.meta_lic"},
- spdxPkgID{"testdata/notice/highest.apex.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/notice/highest.apex.meta_lic", "DESCRIBES"},
- packageTag{"testdata/notice/bin/bin1.meta_lic"},
- packageName{"testdata/notice/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/notice/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/bin/bin1.meta_lic", "CONTAINS"},
- packageTag{"testdata/notice/bin/bin2.meta_lic"},
- packageName{"testdata/notice/bin/bin2.meta_lic"},
- spdxPkgID{"testdata/notice/bin/bin2.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "CONTAINS"},
- packageTag{"testdata/notice/lib/liba.so.meta_lic"},
- packageName{"testdata/notice/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/notice/lib/libb.so.meta_lic"},
- packageName{"testdata/notice/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/notice/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/lib/libb.so.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/notice/lib/libc.a.meta_lic"},
- packageName{"testdata/notice/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/notice/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/libc.a.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/notice/lib/libb.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- packageTag{"testdata/notice/lib/libd.so.meta_lic"},
- packageName{"testdata/notice/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/notice/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/notice/lib/libd.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-notice-highest.apex",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-notice-highest.apex.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-highest.apex.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-bin-bin2.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin2.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-notice-highest.apex.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-libb.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-lib-libd.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -411,65 +629,123 @@
condition: "notice",
name: "container",
roots: []string{"container.zip.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/notice/container.zip.meta_lic"},
- packageName{"testdata/notice/container.zip.meta_lic"},
- spdxPkgID{"testdata/notice/container.zip.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/notice/container.zip.meta_lic", "DESCRIBES"},
- packageTag{"testdata/notice/bin/bin1.meta_lic"},
- packageName{"testdata/notice/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/notice/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/bin/bin1.meta_lic", "CONTAINS"},
- packageTag{"testdata/notice/bin/bin2.meta_lic"},
- packageName{"testdata/notice/bin/bin2.meta_lic"},
- spdxPkgID{"testdata/notice/bin/bin2.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "CONTAINS"},
- packageTag{"testdata/notice/lib/liba.so.meta_lic"},
- packageName{"testdata/notice/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/notice/lib/libb.so.meta_lic"},
- packageName{"testdata/notice/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/notice/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/lib/libb.so.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/notice/lib/libc.a.meta_lic"},
- packageName{"testdata/notice/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/notice/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/libc.a.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/notice/lib/libb.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- packageTag{"testdata/notice/lib/libd.so.meta_lic"},
- packageName{"testdata/notice/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/notice/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/notice/lib/libd.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-notice-container.zip",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-notice-container.zip.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-container.zip.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-bin-bin2.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin2.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-notice-container.zip.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-libb.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-lib-libd.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -487,45 +763,77 @@
condition: "notice",
name: "application",
roots: []string{"application.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/notice/application.meta_lic"},
- packageName{"testdata/notice/application.meta_lic"},
- spdxPkgID{"testdata/notice/application.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata-notice-application.meta_lic", "DESCRIBES"},
- packageTag{"testdata/notice/bin/bin3.meta_lic"},
- packageName{"testdata/notice/bin/bin3.meta_lic"},
- spdxPkgID{"testdata/notice/bin/bin3.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata-notice-bin-bin3.meta_lic ", "testdata/notice/application.meta_lic", "BUILD_TOOL_OF"},
- packageTag{"testdata/notice/lib/liba.so.meta_lic"},
- packageName{"testdata/notice/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/notice/application.meta_lic ", "testdata-notice-lib-liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/notice/lib/libb.so.meta_lic"},
- packageName{"testdata/notice/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/notice/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata-notice-lib-libb.so.meta_lic ", "testdata/notice/application.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-notice-application",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-notice-application.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-application.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-bin-bin3.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin3.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-notice-application.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-bin-bin3.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-application.meta_lic"),
+ Relationship: "BUILD_TOOL_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-application.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-application.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -540,39 +848,65 @@
condition: "notice",
name: "binary",
roots: []string{"bin/bin1.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/notice/bin/bin1.meta_lic"},
- packageName{"testdata/notice/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/notice/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/notice/bin/bin1.meta_lic", "DESCRIBES"},
- packageTag{"testdata/notice/lib/liba.so.meta_lic"},
- packageName{"testdata/notice/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/notice/lib/libc.a.meta_lic"},
- packageName{"testdata/notice/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/notice/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/libc.a.meta_lic", "CONTAINS"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-notice-bin-bin1",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-notice-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ PackageName: "testdata-notice-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -586,24 +920,36 @@
condition: "notice",
name: "library",
roots: []string{"lib/libd.so.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/notice/lib/libd.so.meta_lic"},
- packageName{"testdata/notice/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/notice/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/notice/lib/libd.so.meta_lic", "DESCRIBES"},
- spdxLicense{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-notice-lib-libd.so",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-notice-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-notice-lib-libd.so.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/notice/NOTICE_LICENSE",
@@ -614,68 +960,128 @@
condition: "reciprocal",
name: "apex",
roots: []string{"highest.apex.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/reciprocal/highest.apex.meta_lic"},
- packageName{"testdata/reciprocal/highest.apex.meta_lic"},
- spdxPkgID{"testdata/reciprocal/highest.apex.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/reciprocal/highest.apex.meta_lic", "DESCRIBES"},
- packageTag{"testdata/reciprocal/bin/bin1.meta_lic"},
- packageName{"testdata/reciprocal/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/reciprocal/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata-reciprocal-bin-bin1.meta_lic", "CONTAINS"},
- packageTag{"testdata/reciprocal/bin/bin2.meta_lic"},
- packageName{"testdata/reciprocal/bin/bin2.meta_lic"},
- spdxPkgID{"testdata/reciprocal/bin/bin2.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata-reciprocal-bin-bin2.meta_lic", "CONTAINS"},
- packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"},
- packageName{"testdata/reciprocal/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/reciprocal/lib/libb.so.meta_lic"},
- packageName{"testdata/reciprocal/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata/reciprocal/lib/libb.so.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/reciprocal/lib/libc.a.meta_lic"},
- packageName{"testdata/reciprocal/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/libc.a.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/reciprocal/lib/libb.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- packageTag{"testdata/reciprocal/lib/libd.so.meta_lic"},
- packageName{"testdata/reciprocal/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/lib/libd.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxExtractedText{"$$$Reciprocal License$$$"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-reciprocal-highest.apex",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-reciprocal-highest.apex.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-highest.apex.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-bin-bin2.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-bin-bin2.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-highest.apex.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-bin-bin2.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-libb.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-lib-libd.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ ExtractedText: "$$$Reciprocal License$$$\n",
+ LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -692,130 +1098,84 @@
},
{
condition: "reciprocal",
- name: "container",
- roots: []string{"container.zip.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/reciprocal/container.zip.meta_lic"},
- packageName{"testdata/reciprocal/container.zip.meta_lic"},
- spdxPkgID{"testdata/reciprocal/container.zip.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/reciprocal/container.zip.meta_lic", "DESCRIBES"},
- packageTag{"testdata/reciprocal/bin/bin1.meta_lic"},
- packageName{"testdata/reciprocal/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/reciprocal/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata-reciprocal-bin-bin1.meta_lic", "CONTAINS"},
- packageTag{"testdata/reciprocal/bin/bin2.meta_lic"},
- packageName{"testdata/reciprocal/bin/bin2.meta_lic"},
- spdxPkgID{"testdata/reciprocal/bin/bin2.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata-reciprocal-bin-bin2.meta_lic", "CONTAINS"},
- packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"},
- packageName{"testdata/reciprocal/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/reciprocal/lib/libb.so.meta_lic"},
- packageName{"testdata/reciprocal/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata/reciprocal/lib/libb.so.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/reciprocal/lib/libc.a.meta_lic"},
- packageName{"testdata/reciprocal/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/libc.a.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/reciprocal/lib/libb.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- packageTag{"testdata/reciprocal/lib/libd.so.meta_lic"},
- packageName{"testdata/reciprocal/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/lib/libd.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxExtractedText{"$$$Reciprocal License$$$"},
- spdxExtractedClosingText{},
- },
- expectedDeps: []string{
- "testdata/firstparty/FIRST_PARTY_LICENSE",
- "testdata/notice/NOTICE_LICENSE",
- "testdata/reciprocal/RECIPROCAL_LICENSE",
- "testdata/reciprocal/bin/bin1.meta_lic",
- "testdata/reciprocal/bin/bin2.meta_lic",
- "testdata/reciprocal/container.zip.meta_lic",
- "testdata/reciprocal/lib/liba.so.meta_lic",
- "testdata/reciprocal/lib/libb.so.meta_lic",
- "testdata/reciprocal/lib/libc.a.meta_lic",
- "testdata/reciprocal/lib/libd.so.meta_lic",
- },
- },
- {
- condition: "reciprocal",
name: "application",
roots: []string{"application.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/reciprocal/application.meta_lic"},
- packageName{"testdata/reciprocal/application.meta_lic"},
- spdxPkgID{"testdata/reciprocal/application.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/reciprocal/application.meta_lic", "DESCRIBES"},
- packageTag{"testdata/reciprocal/bin/bin3.meta_lic"},
- packageName{"testdata/reciprocal/bin/bin3.meta_lic"},
- spdxPkgID{"testdata/reciprocal/bin/bin3.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata-reciprocal-bin-bin3.meta_lic ", "testdata/reciprocal/application.meta_lic", "BUILD_TOOL_OF"},
- packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"},
- packageName{"testdata/reciprocal/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/application.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/reciprocal/lib/libb.so.meta_lic"},
- packageName{"testdata/reciprocal/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/lib/libb.so.meta_lic ", "testdata/reciprocal/application.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxExtractedText{"$$$Reciprocal License$$$"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-reciprocal-application",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-reciprocal-application.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-application.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-bin-bin3.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-bin-bin3.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-application.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-bin-bin3.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-application.meta_lic"),
+ Relationship: "BUILD_TOOL_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-application.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-application.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ ExtractedText: "$$$Reciprocal License$$$\n",
+ LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -831,39 +1191,65 @@
condition: "reciprocal",
name: "binary",
roots: []string{"bin/bin1.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/reciprocal/bin/bin1.meta_lic"},
- packageName{"testdata/reciprocal/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/reciprocal/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/reciprocal/bin/bin1.meta_lic", "DESCRIBES"},
- packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"},
- packageName{"testdata/reciprocal/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/reciprocal/lib/libc.a.meta_lic"},
- packageName{"testdata/reciprocal/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/libc.a.meta_lic", "CONTAINS"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxExtractedText{"$$$Reciprocal License$$$"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-reciprocal-bin-bin1",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-reciprocal-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ {
+ PackageName: "testdata-reciprocal-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ ExtractedText: "$$$Reciprocal License$$$\n",
+ LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -877,24 +1263,36 @@
condition: "reciprocal",
name: "library",
roots: []string{"lib/libd.so.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/reciprocal/lib/libd.so.meta_lic"},
- packageName{"testdata/reciprocal/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/reciprocal/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/reciprocal/lib/libd.so.meta_lic", "DESCRIBES"},
- spdxLicense{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-reciprocal-lib-libd.so",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-reciprocal-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-libd.so.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/notice/NOTICE_LICENSE",
@@ -902,75 +1300,136 @@
},
},
{
- condition: "restricted",
- name: "apex",
- roots: []string{"highest.apex.meta_lic"},
- stripPrefix: "out/target/product/fictional/system/apex/",
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/restricted/highest.apex.meta_lic"},
- packageName{"testdata/restricted/highest.apex.meta_lic"},
- spdxPkgID{"testdata/restricted/highest.apex.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/restricted/highest.apex.meta_lic", "DESCRIBES"},
- packageTag{"testdata/restricted/bin/bin1.meta_lic"},
- packageName{"testdata/restricted/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/restricted/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/bin/bin1.meta_lic", "CONTAINS"},
- packageTag{"testdata/restricted/bin/bin2.meta_lic"},
- packageName{"testdata/restricted/bin/bin2.meta_lic"},
- spdxPkgID{"testdata/restricted/bin/bin2.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "CONTAINS"},
- packageTag{"testdata/restricted/lib/liba.so.meta_lic"},
- packageName{"testdata/restricted/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/restricted/lib/libb.so.meta_lic"},
- packageName{"testdata/restricted/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/lib/libb.so.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/restricted/lib/libc.a.meta_lic"},
- packageName{"testdata/restricted/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/libc.a.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/restricted/lib/libb.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- packageTag{"testdata/restricted/lib/libd.so.meta_lic"},
- packageName{"testdata/restricted/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/lib/libd.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxExtractedText{"$$$Reciprocal License$$$"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxExtractedText{"###Restricted License###"},
- spdxExtractedClosingText{},
+ condition: "restricted",
+ name: "apex",
+ roots: []string{"highest.apex.meta_lic"},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-restricted-highest.apex",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-restricted-highest.apex.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-highest.apex.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-bin-bin2.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-bin-bin2.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-highest.apex.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-libb.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-lib-libd.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ ExtractedText: "$$$Reciprocal License$$$\n",
+ LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ ExtractedText: "###Restricted License###\n",
+ LicenseName: "testdata-restricted-RESTRICTED_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -987,75 +1446,136 @@
},
},
{
- condition: "restricted",
- name: "container",
- roots: []string{"container.zip.meta_lic"},
- stripPrefix: "out/target/product/fictional/system/apex/",
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/restricted/container.zip.meta_lic"},
- packageName{"testdata/restricted/container.zip.meta_lic"},
- spdxPkgID{"testdata/restricted/container.zip.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/restricted/container.zip.meta_lic", "DESCRIBES"},
- packageTag{"testdata/restricted/bin/bin1.meta_lic"},
- packageName{"testdata/restricted/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/restricted/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/bin/bin1.meta_lic", "CONTAINS"},
- packageTag{"testdata/restricted/bin/bin2.meta_lic"},
- packageName{"testdata/restricted/bin/bin2.meta_lic"},
- spdxPkgID{"testdata/restricted/bin/bin2.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "CONTAINS"},
- packageTag{"testdata/restricted/lib/liba.so.meta_lic"},
- packageName{"testdata/restricted/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/restricted/lib/libb.so.meta_lic"},
- packageName{"testdata/restricted/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/lib/libb.so.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/restricted/lib/libc.a.meta_lic"},
- packageName{"testdata/restricted/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/libc.a.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/restricted/lib/libb.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- packageTag{"testdata/restricted/lib/libd.so.meta_lic"},
- packageName{"testdata/restricted/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/lib/libd.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxExtractedText{"$$$Reciprocal License$$$"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxExtractedText{"###Restricted License###"},
- spdxExtractedClosingText{},
+ condition: "restricted",
+ name: "container",
+ roots: []string{"container.zip.meta_lic"},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-restricted-container.zip",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-restricted-container.zip.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-container.zip.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-bin-bin2.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-bin-bin2.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-container.zip.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-libb.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-lib-libd.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ ExtractedText: "$$$Reciprocal License$$$\n",
+ LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ ExtractedText: "###Restricted License###\n",
+ LicenseName: "testdata-restricted-RESTRICTED_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -1075,42 +1595,70 @@
condition: "restricted",
name: "binary",
roots: []string{"bin/bin1.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/restricted/bin/bin1.meta_lic"},
- packageName{"testdata/restricted/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/restricted/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/restricted/bin/bin1.meta_lic", "DESCRIBES"},
- packageTag{"testdata/restricted/lib/liba.so.meta_lic"},
- packageName{"testdata/restricted/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/restricted/lib/libc.a.meta_lic"},
- packageName{"testdata/restricted/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/libc.a.meta_lic", "CONTAINS"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
- spdxExtractedText{"$$$Reciprocal License$$$"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxExtractedText{"###Restricted License###"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-restricted-bin-bin1",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-restricted-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ },
+ {
+ PackageName: "testdata-restricted-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE",
+ ExtractedText: "$$$Reciprocal License$$$\n",
+ LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ ExtractedText: "###Restricted License###\n",
+ LicenseName: "testdata-restricted-RESTRICTED_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -1125,24 +1673,36 @@
condition: "restricted",
name: "library",
roots: []string{"lib/libd.so.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/restricted/lib/libd.so.meta_lic"},
- packageName{"testdata/restricted/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/restricted/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/restricted/lib/libd.so.meta_lic", "DESCRIBES"},
- spdxLicense{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-restricted-lib-libd.so",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-restricted-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-restricted-lib-libd.so.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/notice/NOTICE_LICENSE",
@@ -1153,71 +1713,133 @@
condition: "proprietary",
name: "apex",
roots: []string{"highest.apex.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/proprietary/highest.apex.meta_lic"},
- packageName{"testdata/proprietary/highest.apex.meta_lic"},
- spdxPkgID{"testdata/proprietary/highest.apex.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/proprietary/highest.apex.meta_lic", "DESCRIBES"},
- packageTag{"testdata/proprietary/bin/bin1.meta_lic"},
- packageName{"testdata/proprietary/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/proprietary/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/bin/bin1.meta_lic", "CONTAINS"},
- packageTag{"testdata/proprietary/bin/bin2.meta_lic"},
- packageName{"testdata/proprietary/bin/bin2.meta_lic"},
- spdxPkgID{"testdata/proprietary/bin/bin2.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "CONTAINS"},
- packageTag{"testdata/proprietary/lib/liba.so.meta_lic"},
- packageName{"testdata/proprietary/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/proprietary/lib/libb.so.meta_lic"},
- packageName{"testdata/proprietary/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/lib/libb.so.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/proprietary/lib/libc.a.meta_lic"},
- packageName{"testdata/proprietary/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/libc.a.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata-proprietary-lib-libb.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- packageTag{"testdata/proprietary/lib/libd.so.meta_lic"},
- packageName{"testdata/proprietary/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata-proprietary-lib-libd.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxExtractedText{"@@@Proprietary License@@@"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxExtractedText{"###Restricted License###"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-proprietary-highest.apex",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-proprietary-highest.apex.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-highest.apex.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-bin-bin2.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin2.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-highest.apex.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-highest.apex.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libb.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-lib-libd.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ ExtractedText: "@@@Proprietary License@@@\n",
+ LicenseName: "testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ ExtractedText: "###Restricted License###\n",
+ LicenseName: "testdata-restricted-RESTRICTED_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -1237,71 +1859,133 @@
condition: "proprietary",
name: "container",
roots: []string{"container.zip.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/proprietary/container.zip.meta_lic"},
- packageName{"testdata/proprietary/container.zip.meta_lic"},
- spdxPkgID{"testdata/proprietary/container.zip.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/proprietary/container.zip.meta_lic", "DESCRIBES"},
- packageTag{"testdata/proprietary/bin/bin1.meta_lic"},
- packageName{"testdata/proprietary/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/proprietary/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/bin/bin1.meta_lic", "CONTAINS"},
- packageTag{"testdata/proprietary/bin/bin2.meta_lic"},
- packageName{"testdata/proprietary/bin/bin2.meta_lic"},
- spdxPkgID{"testdata/proprietary/bin/bin2.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "CONTAINS"},
- packageTag{"testdata/proprietary/lib/liba.so.meta_lic"},
- packageName{"testdata/proprietary/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/proprietary/lib/libb.so.meta_lic"},
- packageName{"testdata/proprietary/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/lib/libb.so.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/proprietary/lib/libc.a.meta_lic"},
- packageName{"testdata/proprietary/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/libc.a.meta_lic", "CONTAINS"},
- spdxRelationship{"Package-testdata-proprietary-lib-libb.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- packageTag{"testdata/proprietary/lib/libd.so.meta_lic"},
- packageName{"testdata/proprietary/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"Package-testdata-proprietary-lib-libd.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxExtractedText{"@@@Proprietary License@@@"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxExtractedText{"###Restricted License###"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-proprietary-container.zip",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-proprietary-container.zip.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-container.zip.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-bin-bin2.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin2.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-container.zip.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-container.zip.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libb.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-lib-libd.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ ExtractedText: "@@@Proprietary License@@@\n",
+ LicenseName: "testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ ExtractedText: "###Restricted License###\n",
+ LicenseName: "testdata-restricted-RESTRICTED_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -1321,48 +2005,82 @@
condition: "proprietary",
name: "application",
roots: []string{"application.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/proprietary/application.meta_lic"},
- packageName{"testdata/proprietary/application.meta_lic"},
- spdxPkgID{"testdata/proprietary/application.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/proprietary/application.meta_lic", "DESCRIBES"},
- packageTag{"testdata/proprietary/bin/bin3.meta_lic"},
- packageName{"testdata/proprietary/bin/bin3.meta_lic"},
- spdxPkgID{"testdata/proprietary/bin/bin3.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/bin/bin3.meta_lic ", "testdata/proprietary/application.meta_lic", "BUILD_TOOL_OF"},
- packageTag{"testdata/proprietary/lib/liba.so.meta_lic"},
- packageName{"testdata/proprietary/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/application.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/proprietary/lib/libb.so.meta_lic"},
- packageName{"testdata/proprietary/lib/libb.so.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/libb.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/lib/libb.so.meta_lic ", "testdata/proprietary/application.meta_lic", "RUNTIME_DEPENDENCY_OF"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxExtractedText{"@@@Proprietary License@@@"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
- spdxExtractedText{"###Restricted License###"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-proprietary-application",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-proprietary-application.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-application.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-bin-bin3.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin3.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-libb.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libb.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-application.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin3.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-application.meta_lic"),
+ Relationship: "BUILD_TOOL_OF",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-application.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-lib-libb.so.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-application.meta_lic"),
+ Relationship: "RUNTIME_DEPENDENCY_OF",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ ExtractedText: "@@@Proprietary License@@@\n",
+ LicenseName: "testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE",
+ ExtractedText: "###Restricted License###\n",
+ LicenseName: "testdata-restricted-RESTRICTED_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -1378,39 +2096,65 @@
condition: "proprietary",
name: "binary",
roots: []string{"bin/bin1.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/proprietary/bin/bin1.meta_lic"},
- packageName{"testdata/proprietary/bin/bin1.meta_lic"},
- spdxPkgID{"testdata/proprietary/bin/bin1.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/proprietary/bin/bin1.meta_lic", "DESCRIBES"},
- packageTag{"testdata/proprietary/lib/liba.so.meta_lic"},
- packageName{"testdata/proprietary/lib/liba.so.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
- packageTag{"testdata/proprietary/lib/libc.a.meta_lic"},
- packageName{"testdata/proprietary/lib/libc.a.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/libc.a.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/libc.a.meta_lic", "CONTAINS"},
- spdxLicense{},
- spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
- spdxExtractedText{"&&&First Party License&&&"},
- spdxExtractedClosingText{},
- spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"},
- spdxExtractedText{"@@@Proprietary License@@@"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-proprietary-bin-bin1",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-proprietary-bin-bin1.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin1.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-liba.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-liba.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ {
+ PackageName: "testdata-proprietary-lib-libc.a.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libc.a.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ {
+ RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libc.a.meta_lic"),
+ Relationship: "CONTAINS",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE",
+ ExtractedText: "&&&First Party License&&&\n",
+ LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE",
+ },
+ {
+ LicenseIdentifier: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE",
+ ExtractedText: "@@@Proprietary License@@@\n",
+ LicenseName: "testdata-proprietary-PROPRIETARY_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/firstparty/FIRST_PARTY_LICENSE",
@@ -1424,24 +2168,36 @@
condition: "proprietary",
name: "library",
roots: []string{"lib/libd.so.meta_lic"},
- expectedOut: []matcher{
- spdxVersion{},
- spdxDataLicense{},
- spdxDocumentName{"Android"},
- spdxID{},
- spdxDocumentNameSpace{},
- spdxCreatorOrganization{},
- spdxCreatedTime{},
- packageTag{"testdata/proprietary/lib/libd.so.meta_lic"},
- packageName{"testdata/proprietary/lib/libd.so.meta_lic"},
- spdxPkgID{"testdata/proprietary/lib/libd.so.meta_lic"},
- spdxPkgDownloadLocation{"NOASSERTION"},
- spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
- spdxRelationship{"DOCUMENT ", "testdata/proprietary/lib/libd.so.meta_lic", "DESCRIBES"},
- spdxLicense{},
- spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
- spdxExtractedText{"%%%Notice License%%%"},
- spdxExtractedClosingText{},
+ expectedOut: &spdx.Document{
+ SPDXVersion: "SPDX-2.2",
+ DataLicense: "CC0-1.0",
+ SPDXIdentifier: "DOCUMENT",
+ DocumentName: "testdata-proprietary-lib-libd.so",
+ DocumentNamespace: generateSPDXNamespace("1970-01-01T00:00:00Z"),
+ CreationInfo: getCreationInfo(t),
+ Packages: []*spdx.Package{
+ {
+ PackageName: "testdata-proprietary-lib-libd.so.meta_lic",
+ PackageVersion: "NOASSERTION",
+ PackageDownloadLocation: "NOASSERTION",
+ PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libd.so.meta_lic"),
+ PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ },
+ },
+ Relationships: []*spdx.Relationship{
+ {
+ RefA: common.MakeDocElementID("", "DOCUMENT"),
+ RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libd.so.meta_lic"),
+ Relationship: "DESCRIBES",
+ },
+ },
+ OtherLicenses: []*spdx.OtherLicense{
+ {
+ LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE",
+ ExtractedText: "%%%Notice License%%%\n",
+ LicenseName: "testdata-notice-NOTICE_LICENSE",
+ },
+ },
},
expectedDeps: []string{
"testdata/notice/NOTICE_LICENSE",
@@ -1459,9 +2215,9 @@
rootFiles = append(rootFiles, "testdata/"+tt.condition+"/"+r)
}
- ctx := context{stdout, stderr, compliance.GetFS(tt.outDir), "Android", []string{tt.stripPrefix}, fakeTime}
+ ctx := context{stdout, stderr, compliance.GetFS(tt.outDir), "", []string{tt.stripPrefix}, fakeTime}
- deps, err := sbomGenerator(&ctx, rootFiles...)
+ spdxDoc, deps, err := sbomGenerator(&ctx, rootFiles...)
if err != nil {
t.Fatalf("sbom: error = %v, stderr = %v", err, stderr)
return
@@ -1470,28 +2226,26 @@
t.Errorf("sbom: gotStderr = %v, want none", stderr)
}
- t.Logf("got stdout: %s", stdout.String())
-
- t.Logf("want stdout: %s", matcherList(tt.expectedOut).String())
-
- out := bufio.NewScanner(stdout)
- lineno := 0
- for out.Scan() {
- line := out.Text()
- if strings.TrimLeft(line, " ") == "" {
- continue
- }
- if len(tt.expectedOut) <= lineno {
- t.Errorf("sbom: unexpected output at line %d: got %q, want nothing (wanted %d lines)", lineno+1, line, len(tt.expectedOut))
- } else if !tt.expectedOut[lineno].isMatch(line) {
- t.Errorf("sbom: unexpected output at line %d: got %q, want %q", lineno+1, line, tt.expectedOut[lineno])
- }
- lineno++
- }
- for ; lineno < len(tt.expectedOut); lineno++ {
- t.Errorf("bom: missing output line %d: ended early, want %q", lineno+1, tt.expectedOut[lineno])
+ gotData, err := json.Marshal(spdxDoc)
+ if err != nil {
+ t.Fatalf("sbom: failed to marshal spdx doc: %v", err)
+ return
}
+ t.Logf("Got SPDX Doc: %s", string(gotData))
+
+ expectedData, err := json.Marshal(tt.expectedOut)
+ if err != nil {
+ t.Fatalf("sbom: failed to marshal spdx doc: %v", err)
+ return
+ }
+
+ t.Logf("Want SPDX Doc: %s", string(expectedData))
+
+ // compare the spdx Docs
+ compareSpdxDocs(t, spdxDoc, tt.expectedOut)
+
+ // compare deps
t.Logf("got deps: %q", deps)
t.Logf("want deps: %q", tt.expectedDeps)
@@ -1504,242 +2258,176 @@
}
}
-type matcher interface {
- isMatch(line string) bool
- String() string
+func getCreationInfo(t *testing.T) *spdx.CreationInfo {
+ ci, err := builder2v2.BuildCreationInfoSection2_2("Organization", "Google LLC", nil)
+ if err != nil {
+ t.Errorf("Unable to get creation info: %v", err)
+ return nil
+ }
+ return ci
}
-type packageTag struct {
- name string
+// compareSpdxDocs deep-compares two spdx docs by going through the info section, packages, relationships and licenses
+func compareSpdxDocs(t *testing.T, actual, expected *spdx.Document) {
+
+ if actual == nil || expected == nil {
+ t.Errorf("SBOM: SPDX Doc is nil! Got %v: Expected %v", actual, expected)
+ }
+
+ if actual.DocumentName != expected.DocumentName {
+ t.Errorf("sbom: unexpected SPDX Document Name got %q, want %q", actual.DocumentName, expected.DocumentName)
+ }
+
+ if actual.SPDXVersion != expected.SPDXVersion {
+ t.Errorf("sbom: unexpected SPDX Version got %s, want %s", actual.SPDXVersion, expected.SPDXVersion)
+ }
+
+ if actual.DataLicense != expected.DataLicense {
+ t.Errorf("sbom: unexpected SPDX DataLicense got %s, want %s", actual.DataLicense, expected.DataLicense)
+ }
+
+ if actual.SPDXIdentifier != expected.SPDXIdentifier {
+ t.Errorf("sbom: unexpected SPDX Identified got %s, want %s", actual.SPDXIdentifier, expected.SPDXIdentifier)
+ }
+
+ if actual.DocumentNamespace != expected.DocumentNamespace {
+ t.Errorf("sbom: unexpected SPDX Document Namespace got %s, want %s", actual.DocumentNamespace, expected.DocumentNamespace)
+ }
+
+ // compare creation info
+ compareSpdxCreationInfo(t, actual.CreationInfo, expected.CreationInfo)
+
+ // compare packages
+ if len(actual.Packages) != len(expected.Packages) {
+ t.Errorf("SBOM: Number of Packages is different! Got %d: Expected %d", len(actual.Packages), len(expected.Packages))
+ }
+
+ for i, pkg := range actual.Packages {
+ if !compareSpdxPackages(t, i, pkg, expected.Packages[i]) {
+ break
+ }
+ }
+
+ // compare licenses
+ if len(actual.OtherLicenses) != len(expected.OtherLicenses) {
+ t.Errorf("SBOM: Number of Licenses in actual is different! Got %d: Expected %d", len(actual.OtherLicenses), len(expected.OtherLicenses))
+ }
+ for i, license := range actual.OtherLicenses {
+ if !compareLicenses(t, i, license, expected.OtherLicenses[i]) {
+ break
+ }
+ }
+
+ //compare Relationships
+ if len(actual.Relationships) != len(expected.Relationships) {
+ t.Errorf("SBOM: Number of Licenses in actual is different! Got %d: Expected %d", len(actual.Relationships), len(expected.Relationships))
+ }
+ for i, rl := range actual.Relationships {
+ if !compareRelationShips(t, i, rl, expected.Relationships[i]) {
+ break
+ }
+ }
}
-func (m packageTag) isMatch(line string) bool {
- groups := spdxPackageTag.FindStringSubmatch(line)
- if len(groups) != 2 {
+func compareSpdxCreationInfo(t *testing.T, actual, expected *spdx.CreationInfo) {
+ if actual == nil || expected == nil {
+ t.Errorf("SBOM: Creation info is nil! Got %q: Expected %q", actual, expected)
+ }
+
+ if actual.LicenseListVersion != expected.LicenseListVersion {
+ t.Errorf("SBOM: Creation info license version Error! Got %s: Expected %s", actual.LicenseListVersion, expected.LicenseListVersion)
+ }
+
+ if len(actual.Creators) != len(expected.Creators) {
+ t.Errorf("SBOM: Creation info creators Error! Got %d: Expected %d", len(actual.Creators), len(expected.Creators))
+ }
+
+ for i, info := range actual.Creators {
+ if info != expected.Creators[i] {
+ t.Errorf("SBOM: Creation info creators Error! Got %q: Expected %q", info, expected.Creators[i])
+ }
+ }
+}
+
+func compareSpdxPackages(t *testing.T, i int, actual, expected *spdx.Package) bool {
+ if actual == nil || expected == nil {
+ t.Errorf("SBOM: Packages are nil at index %d! Got %v: Expected %v", i, actual, expected)
return false
}
- return groups[1] == m.name
-}
-
-func (m packageTag) String() string {
- return "##### Package: " + m.name
-}
-
-type packageName struct {
- name string
-}
-
-func (m packageName) isMatch(line string) bool {
- groups := spdxPackageNameTag.FindStringSubmatch(line)
- if len(groups) != 2 {
+ if actual.PackageName != expected.PackageName {
+ t.Errorf("SBOM: Package name Error at index %d! Got %s: Expected %s", i, actual.PackageName, expected.PackageName)
return false
}
- return groups[1] == replaceSlashes(m.name)
-}
-func (m packageName) String() string {
- return "PackageName: " + replaceSlashes(m.name)
-}
-
-type spdxID struct {}
-
-func (m spdxID) isMatch(line string) bool {
- return spdxIDTag.MatchString(line)
-}
-
-func (m spdxID) String() string {
- return "SPDXID: SPDXRef-DOCUMENT"
-}
-
-type spdxPkgID struct {
- name string
-}
-
-func (m spdxPkgID) isMatch(line string) bool {
- groups := spdxPkgIDTag.FindStringSubmatch(line)
- if len(groups) != 2 {
+ if actual.PackageVersion != expected.PackageVersion {
+ t.Errorf("SBOM: Package version Error at index %d! Got %s: Expected %s", i, actual.PackageVersion, expected.PackageVersion)
return false
}
- return groups[1] == replaceSlashes(m.name)
-}
-func (m spdxPkgID) String() string {
- return "SPDXID: SPDXRef-Package-" + replaceSlashes(m.name)
-}
-
-type spdxVersion struct{}
-
-func (m spdxVersion) isMatch(line string) bool {
- return spdxVersionTag.MatchString(line)
-}
-
-func (m spdxVersion) String() string {
- return "SPDXVersion: SPDX-2.2"
-}
-
-type spdxDataLicense struct{}
-
-func (m spdxDataLicense) isMatch(line string) bool {
- return spdxDataLicenseTag.MatchString(line)
-}
-
-func (m spdxDataLicense) String() string {
- return "DataLicense: CC0-1.0"
-}
-
-type spdxDocumentName struct {
- name string
-}
-
-func (m spdxDocumentName) isMatch(line string) bool {
- return spdxDocumentNameTag.MatchString(line)
-}
-
-func (m spdxDocumentName) String() string {
- return "DocumentName: " + m.name
-}
-
-type spdxDocumentNameSpace struct {
- name string
-}
-
-func (m spdxDocumentNameSpace) isMatch(line string) bool {
- return spdxDocumentNameSpaceTag.MatchString(line)
-}
-
-func (m spdxDocumentNameSpace) String() string {
- return "DocumentNameSpace: Android"
-}
-
-type spdxCreatorOrganization struct{}
-
-func (m spdxCreatorOrganization) isMatch(line string) bool {
- return spdxCreatorOrganizationTag.MatchString(line)
-}
-
-func (m spdxCreatorOrganization) String() string {
- return "Creator: Organization: Google LLC"
-}
-
-func fakeTime() time.Time {
- return time.UnixMicro(0).UTC()
-}
-
-type spdxCreatedTime struct{}
-
-func (m spdxCreatedTime) isMatch(line string) bool {
- return spdxCreatedTimeTag.MatchString(line)
-}
-
-func (m spdxCreatedTime) String() string {
- return "Created: 1970-01-01T00:00:00Z"
-}
-
-type spdxPkgDownloadLocation struct {
- name string
-}
-
-func (m spdxPkgDownloadLocation) isMatch(line string) bool {
- return spdxPkgDownloadLocationTag.MatchString(line)
-}
-
-func (m spdxPkgDownloadLocation) String() string {
- return "PackageDownloadLocation: " + m.name
-}
-
-type spdxPkgLicenseDeclared struct {
- name string
-}
-
-func (m spdxPkgLicenseDeclared) isMatch(line string) bool {
- groups := spdxPkgLicenseDeclaredTag.FindStringSubmatch(line)
- if len(groups) != 2 {
+ if actual.PackageSPDXIdentifier != expected.PackageSPDXIdentifier {
+ t.Errorf("SBOM: Package identifier Error at index %d! Got %s: Expected %s", i, actual.PackageSPDXIdentifier, expected.PackageSPDXIdentifier)
return false
}
- return groups[1] == replaceSlashes(m.name)
-}
-func (m spdxPkgLicenseDeclared) String() string {
- return "PackageLicenseConcluded: LicenseRef-" + m.name
-}
-
-type spdxRelationship struct {
- pkg1 string
- pkg2 string
- relation string
-}
-
-func (m spdxRelationship) isMatch(line string) bool {
- groups := spdxRelationshipTag.FindStringSubmatch(line)
- if len(groups) != 4 {
+ if actual.PackageDownloadLocation != expected.PackageDownloadLocation {
+ t.Errorf("SBOM: Package download location Error at index %d! Got %s: Expected %s", i, actual.PackageDownloadLocation, expected.PackageDownloadLocation)
return false
}
- return groups[1] == replaceSlashes(m.pkg1) && groups[2] == m.relation && groups[3] == replaceSlashes(m.pkg2)
-}
-func (m spdxRelationship) String() string {
- return "Relationship: SPDXRef-" + replaceSlashes(m.pkg1) + " " + m.relation + " SPDXRef-Package-" + replaceSlashes(m.pkg2)
-}
-
-type spdxLicense struct{}
-
-func (m spdxLicense) isMatch(line string) bool {
- return spdxLicenseTag.MatchString(line)
-}
-
-func (m spdxLicense) String() string {
- return "##### Non-standard license:"
-}
-
-type spdxLicenseID struct {
- name string
-}
-
-func (m spdxLicenseID) isMatch(line string) bool {
- groups := spdxLicenseIDTag.FindStringSubmatch(line)
- if len(groups) != 2 {
+ if actual.PackageLicenseConcluded != expected.PackageLicenseConcluded {
+ t.Errorf("SBOM: Package license concluded Error at index %d! Got %s: Expected %s", i, actual.PackageLicenseConcluded, expected.PackageLicenseConcluded)
return false
}
- return groups[1] == replaceSlashes(m.name)
+ return true
}
-func (m spdxLicenseID) String() string {
- return "LicenseID: LicenseRef-" + m.name
-}
-
-type spdxExtractedText struct {
- name string
-}
-
-func (m spdxExtractedText) isMatch(line string) bool {
- groups := spdxExtractedTextTag.FindStringSubmatch(line)
- if len(groups) != 2 {
+func compareRelationShips(t *testing.T, i int, actual, expected *spdx.Relationship) bool {
+ if actual == nil || expected == nil {
+ t.Errorf("SBOM: Relationships is nil at index %d! Got %v: Expected %v", i, actual, expected)
return false
}
- return groups[1] == replaceSlashes(m.name)
-}
-func (m spdxExtractedText) String() string {
- return "ExtractedText: <text>" + m.name
-}
-
-type spdxExtractedClosingText struct{}
-
-func (m spdxExtractedClosingText) isMatch(line string) bool {
- return spdxExtractedClosingTextTag.MatchString(line)
-}
-
-func (m spdxExtractedClosingText) String() string {
- return "</text>"
-}
-
-type matcherList []matcher
-
-func (l matcherList) String() string {
- var sb strings.Builder
- for _, m := range l {
- s := m.String()
- fmt.Fprintf(&sb, "%s\n", s)
+ if actual.RefA != expected.RefA {
+ t.Errorf("SBOM: Relationship RefA Error at index %d! Got %s: Expected %s", i, actual.RefA, expected.RefA)
+ return false
}
- return sb.String()
+
+ if actual.RefB != expected.RefB {
+ t.Errorf("SBOM: Relationship RefB Error at index %d! Got %s: Expected %s", i, actual.RefB, expected.RefB)
+ return false
+ }
+
+ if actual.Relationship != expected.Relationship {
+ t.Errorf("SBOM: Relationship type Error at index %d! Got %s: Expected %s", i, actual.Relationship, expected.Relationship)
+ return false
+ }
+ return true
+}
+
+func compareLicenses(t *testing.T, i int, actual, expected *spdx.OtherLicense) bool {
+ if actual == nil || expected == nil {
+ t.Errorf("SBOM: Licenses is nil at index %d! Got %v: Expected %v", i, actual, expected)
+ return false
+ }
+
+ if actual.LicenseName != expected.LicenseName {
+ t.Errorf("SBOM: License Name Error at index %d! Got %s: Expected %s", i, actual.LicenseName, expected.LicenseName)
+ return false
+ }
+
+ if actual.LicenseIdentifier != expected.LicenseIdentifier {
+ t.Errorf("SBOM: License Identifier Error at index %d! Got %s: Expected %s", i, actual.LicenseIdentifier, expected.LicenseIdentifier)
+ return false
+ }
+
+ if actual.ExtractedText != expected.ExtractedText {
+ t.Errorf("SBOM: License Extracted Text Error at index %d! Got: %q want: %q", i, actual.ExtractedText, expected.ExtractedText)
+ return false
+ }
+ return true
+}
+
+func fakeTime() string {
+ t := time.UnixMicro(0)
+ return t.UTC().Format("2006-01-02T15:04:05Z")
}
diff --git a/tools/finalization/README.md b/tools/finalization/README.md
new file mode 100644
index 0000000..501f260
--- /dev/null
+++ b/tools/finalization/README.md
@@ -0,0 +1,22 @@
+# Finalization tools
+This folder contains automation and CI scripts for [finalizing](https://go/android-finalization) Android before release.
+
+## Automation:
+1. [Environment setup](./environment.sh). Set values for varios finalization constants.
+2. [Finalize SDK](./finalize-aidl-vndk-sdk-resources.sh). Prepare the branch for SDK release. SDK contains Android Java APIs and other stable APIs. Commonly referred as a 1st step.
+3. [Finalize Android](./finalize-sdk-rel.sh). Mark branch as "REL", i.e. prepares for Android release. Any signed build containing these changes will be considered an official Android Release. Referred as a 2nd finalization step.
+4. [Finalize SDK and submit](./step-1.sh). Do [Finalize SDK](./finalize-aidl-vndk-sdk-resources.sh) step, create CLs, organize them into topic and send to Gerrit.
+ a. [Update SDK and submit](./update-step-1.sh). Same as above, but updates the existings CLs.
+5. [Finalize Android and submit](./step-2.sh). Do [Finalize Android](./finalize-sdk-rel.sh) step, create CLs, organize them into topic and send to Gerrit.
+ a. [Update Android and submit](./update-step-2.sh). Same as above, but updates the existings CLs.
+
+## CI:
+Performed in build targets in Finalization branches.
+1. [Finalization Step 1 for Main, git_main-fina-1-release](https://android-build.googleplex.com/builds/branches/git_main-fina-1-release/grid). Test [1st step/Finalize SDK](./finalize-aidl-vndk-sdk-resources.sh).
+2. [Finalization Step 1 for UDC, git_udc-fina-1-release](https://android-build.googleplex.com/builds/branches/git_udc-fina-1-release/grid). Same but for udc-dev.
+3. [Finalization Step 2 for Main, git_main-fina-2-release](https://android-build.googleplex.com/builds/branches/git_main-fina-2-release/grid). Test [1st step/Finalize SDK](./finalize-aidl-vndk-sdk-resources.sh) and [2nd step/Finalize Android](./finalize-sdk-rel.sh). Use [local finalization](./localonly-steps.sh) to build and copy presubmits.
+4. [Finalization Step 2 for UDC, git_udc-fina-2-release](https://android-build.googleplex.com/builds/branches/git_udc-fina-2-release/grid). Same but for udc-dev.
+5. [Local finalization steps](./localonly-steps.sh) are done only during local testing or in the CI lab. Normally these steps use artifacts from other builds.
+
+## Utility:
+[Full cleanup](./cleanup.sh). Remove all local changes and switch each project into head-less state. This is the best state to sync/rebase/finalize the branch.
diff --git a/tools/finalization/build-step-1-and-2.sh b/tools/finalization/build-step-1-and-2.sh
index 1b749b1..a5aba08 100755
--- a/tools/finalization/build-step-1-and-2.sh
+++ b/tools/finalization/build-step-1-and-2.sh
@@ -9,8 +9,8 @@
# SDK codename -> int
source $top/build/make/tools/finalization/finalize-aidl-vndk-sdk-resources.sh
- # Platform/Mainline SDKs build and move to prebuilts
- source $top/build/make/tools/finalization/localonly-finalize-mainline-sdk.sh
+ # ADB, Platform/Mainline SDKs build and move to prebuilts
+ source $top/build/make/tools/finalization/localonly-steps.sh
# REL
source $top/build/make/tools/finalization/finalize-sdk-rel.sh
diff --git a/tools/finalization/finalize-sdk-rel.sh b/tools/finalization/finalize-sdk-rel.sh
index 5cc90cf..cbee005 100755
--- a/tools/finalization/finalize-sdk-rel.sh
+++ b/tools/finalization/finalize-sdk-rel.sh
@@ -18,19 +18,12 @@
local top="$(dirname "$0")"/../../../..
source $top/build/make/tools/finalization/environment.sh
- # default target to modify tree and build SDK
- local m="$top/build/soong/soong_ui.bash --make-mode TARGET_PRODUCT=aosp_arm64 TARGET_BUILD_VARIANT=userdebug DIST_DIR=out/dist"
-
# revert droidstubs hack now we are switching to REL
revert_droidstubs_hack
# let the apps built with pre-release SDK parse
apply_prerelease_sdk_hack
- # adb keys
- $m adb
- LOGNAME=android-eng HOSTNAME=google.com "$top/out/host/linux-x86/bin/adb" keygen "$top/vendor/google/security/adb/${FINAL_PLATFORM_VERSION}.adb_key"
-
# build/make/core/version_defaults.mk
sed -i -e "s/PLATFORM_VERSION_CODENAME.${FINAL_BUILD_PREFIX} := .*/PLATFORM_VERSION_CODENAME.${FINAL_BUILD_PREFIX} := REL/g" "$top/build/make/core/version_defaults.mk"
@@ -47,13 +40,15 @@
cp -r "$top/system/sepolicy/private/" "$top/system/sepolicy/prebuilts/api/${FINAL_PLATFORM_SDK_VERSION}.0/"
# prebuilts/abi-dumps/ndk
- mv "$top/prebuilts/abi-dumps/ndk/current" "$top/prebuilts/abi-dumps/ndk/$FINAL_PLATFORM_SDK_VERSION"
+ mkdir -p "$top/prebuilts/abi-dumps/ndk/$FINAL_PLATFORM_SDK_VERSION"
+ cp -r "$top/prebuilts/abi-dumps/ndk/current/64/" "$top/prebuilts/abi-dumps/ndk/$FINAL_PLATFORM_SDK_VERSION/"
# prebuilts/abi-dumps/vndk
mv "$top/prebuilts/abi-dumps/vndk/$CURRENT_PLATFORM_CODENAME" "$top/prebuilts/abi-dumps/vndk/$FINAL_PLATFORM_SDK_VERSION"
# prebuilts/abi-dumps/platform
- mv "$top/prebuilts/abi-dumps/platform/current" "$top/prebuilts/abi-dumps/platform/$FINAL_PLATFORM_SDK_VERSION"
+ mkdir -p "$top/prebuilts/abi-dumps/platform/$FINAL_PLATFORM_SDK_VERSION"
+ cp -r "$top/prebuilts/abi-dumps/platform/current/64/" "$top/prebuilts/abi-dumps/platform/$FINAL_PLATFORM_SDK_VERSION/"
}
finalize_sdk_rel
diff --git a/tools/finalization/localonly-finalize-mainline-sdk.sh b/tools/finalization/localonly-steps.sh
similarity index 63%
rename from tools/finalization/localonly-finalize-mainline-sdk.sh
rename to tools/finalization/localonly-steps.sh
index f614fc1..6107b3e 100755
--- a/tools/finalization/localonly-finalize-mainline-sdk.sh
+++ b/tools/finalization/localonly-steps.sh
@@ -2,10 +2,17 @@
set -ex
-function finalize_locally_mainline_sdk() {
+function finalize_locally() {
local top="$(dirname "$0")"/../../../..
source $top/build/make/tools/finalization/environment.sh
+ # default target to modify tree and build SDK
+ local m="$top/build/soong/soong_ui.bash --make-mode TARGET_PRODUCT=aosp_arm64 TARGET_BUILD_VARIANT=userdebug DIST_DIR=out/dist"
+
+ # adb keys
+ $m adb
+ LOGNAME=android-eng HOSTNAME=google.com "$top/out/host/linux-x86/bin/adb" keygen "$top/vendor/google/security/adb/${FINAL_PLATFORM_VERSION}.adb_key"
+
# Build Platform SDKs.
$top/build/soong/soong_ui.bash --make-mode TARGET_PRODUCT=sdk TARGET_BUILD_VARIANT=userdebug sdk dist sdk_repo DIST_DIR=out/dist
@@ -16,5 +23,4 @@
"$top/prebuilts/build-tools/path/linux-x86/python3" -W ignore::DeprecationWarning "$top/prebuilts/sdk/update_prebuilts.py" --local_mode -f ${FINAL_PLATFORM_SDK_VERSION} -e ${FINAL_MAINLINE_EXTENSION} --bug 1 1
}
-finalize_locally_mainline_sdk
-
+finalize_locally
diff --git a/tools/finalization/update-step-1.sh b/tools/finalization/update-step-1.sh
new file mode 100644
index 0000000..fd07b7b
--- /dev/null
+++ b/tools/finalization/update-step-1.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+# Script to perform a 1st step of Android Finalization: API/SDK finalization, update CLs and upload to Gerrit.
+
+set -ex
+
+function update_step_1_changes() {
+ set +e
+ repo forall -c '\
+ if [[ $(git status --short) ]]; then
+ git stash -u ;
+ repo start "$FINAL_PLATFORM_CODENAME-SDK-Finalization" ;
+ git stash pop ;
+ git add -A . ;
+ git commit --amend --no-edit ;
+ repo upload --cbr --no-verify -o nokeycheck -t -y . ;
+ fi'
+}
+
+function update_step_1_main() {
+ local top="$(dirname "$0")"/../../../..
+ source $top/build/make/tools/finalization/environment.sh
+
+
+ local m="$top/build/soong/soong_ui.bash --make-mode TARGET_PRODUCT=aosp_arm64 TARGET_BUILD_VARIANT=userdebug"
+
+ # vndk etc finalization
+ source $top/build/make/tools/finalization/finalize-aidl-vndk-sdk-resources.sh
+
+ # update existing CLs and upload to gerrit
+ update_step_1_changes
+
+ # build to confirm everything is OK
+ AIDL_FROZEN_REL=true $m
+}
+
+update_step_1_main
diff --git a/tools/finalization/update-step-2.sh b/tools/finalization/update-step-2.sh
new file mode 100755
index 0000000..e65d35a
--- /dev/null
+++ b/tools/finalization/update-step-2.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+# Script to perform a 2nd step of Android Finalization: REL finalization, create CLs and upload to Gerrit.
+
+function update_step_2_changes() {
+ set +e
+ repo forall -c '\
+ if [[ $(git status --short) ]]; then
+ git stash -u ;
+ repo start "$FINAL_PLATFORM_CODENAME-SDK-Finalization-Rel" ;
+ git stash pop ;
+ git add -A . ;
+ git commit --amend --no-edit ;
+ repo upload --cbr --no-verify -o nokeycheck -t -y . ;
+ fi'
+}
+
+function update_step_2_main() {
+ local top="$(dirname "$0")"/../../../..
+ source $top/build/make/tools/finalization/environment.sh
+
+ local m="$top/build/soong/soong_ui.bash --make-mode TARGET_PRODUCT=aosp_arm64 TARGET_BUILD_VARIANT=userdebug"
+
+ # prebuilts etc
+ source $top/build/make/tools/finalization/finalize-sdk-rel.sh
+
+ # move all changes to finalization branch/topic and upload to gerrit
+ update_step_2_changes
+
+ # build to confirm everything is OK
+ AIDL_FROZEN_REL=true $m
+}
+
+update_step_2_main
diff --git a/tools/list_files.py b/tools/list_files.py
new file mode 100644
index 0000000..3afa81f
--- /dev/null
+++ b/tools/list_files.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2023 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.
+
+from typing import List
+from glob import glob
+from pathlib import Path
+from os.path import join, relpath
+import argparse
+
+class FileLister:
+ def __init__(self, args) -> None:
+ self.out_file = args.out_file
+
+ self.folder_dir = args.dir
+ self.extensions = [e if e.startswith(".") else "." + e for e in args.extensions]
+ self.root = args.root
+ self.files_list = list()
+
+ def get_files(self) -> None:
+ """Get all files directory in the input directory including the files in the subdirectories
+
+ Recursively finds all files in the input directory.
+ Set file_list as a list of file directory strings,
+ which do not include directories but only files.
+ List is sorted in alphabetical order of the file directories.
+
+ Args:
+ dir: Directory to get the files. String.
+
+ Raises:
+ FileNotFoundError: An error occurred accessing the non-existing directory
+ """
+
+ if not dir_exists(self.folder_dir):
+ raise FileNotFoundError(f"Directory {self.folder_dir} does not exist")
+
+ if self.folder_dir[:-2] != "**":
+ self.folder_dir = join(self.folder_dir, "**")
+
+ self.files_list = list()
+ for file in sorted(glob(self.folder_dir, recursive=True)):
+ if Path(file).is_file():
+ if self.root:
+ file = join(self.root, relpath(file, self.folder_dir[:-2]))
+ self.files_list.append(file)
+
+
+ def list(self) -> None:
+ self.get_files()
+ self.files_list = [f for f in self.files_list if not self.extensions or Path(f).suffix in self.extensions]
+ self.write()
+
+ def write(self) -> None:
+ if self.out_file == "":
+ pprint(self.files_list)
+ else:
+ write_lines(self.out_file, self.files_list)
+
+###
+# Helper functions
+###
+def pprint(l: List[str]) -> None:
+ for line in l:
+ print(line)
+
+def dir_exists(dir: str) -> bool:
+ return Path(dir).exists()
+
+def write_lines(out_file: str, lines: List[str]) -> None:
+ with open(out_file, "w+") as f:
+ f.writelines(line + '\n' for line in lines)
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument('dir', action='store', type=str,
+ help="directory to list all subdirectory files")
+ parser.add_argument('--out', dest='out_file',
+ action='store', default="", type=str,
+ help="optional directory to write subdirectory files. If not set, will print to console")
+ parser.add_argument('--root', dest='root',
+ action='store', default="", type=str,
+ help="optional directory to replace the root directories of output.")
+ parser.add_argument('--extensions', nargs='*', default=list(), dest='extensions',
+ help="Extensions to include in the output. If not set, all files are included")
+
+ args = parser.parse_args()
+
+ file_lister = FileLister(args)
+ file_lister.list()
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 7805599..9bbdc51 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -3605,11 +3605,13 @@
else:
system_root_image = info_dict.get("system_root_image") == "true"
+ include_recovery_dtbo = info_dict.get("include_recovery_dtbo") == "true"
+ include_recovery_acpio = info_dict.get("include_recovery_acpio") == "true"
path = os.path.join(input_dir, recovery_resource_dat_path)
# With system-root-image, boot and recovery images will have mismatching
# entries (only recovery has the ramdisk entry) (Bug: 72731506). Use bsdiff
# to handle such a case.
- if system_root_image:
+ if system_root_image or include_recovery_dtbo or include_recovery_acpio:
diff_program = ["bsdiff"]
bonus_args = ""
assert not os.path.exists(path)
diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py
index 043f6ee..39e380e 100755
--- a/tools/releasetools/ota_from_target_files.py
+++ b/tools/releasetools/ota_from_target_files.py
@@ -423,6 +423,13 @@
slot will be used. This is to ensure that we always have valid boot, vbmeta,
bootloader images in the inactive slot.
+ After writing system_other to inactive slot's system partiiton,
+ PackageManagerService will read `ro.cp_system_other_odex`, and set
+ `sys.cppreopt` to "requested". Then, according to
+ system/extras/cppreopts/cppreopts.rc , init will mount system_other at
+ /postinstall, and execute `cppreopts` to copy optimized APKs from
+ /postinstall to /data .
+
Args:
input_file: The input target-files.zip file.
skip_postinstall: Whether to skip copying the postinstall config file.