Merge "Pull common methods into shell_utils.sh, which can be included by scripts."
diff --git a/tools/compliance/cmd/checkshare/checkshare_test.go b/tools/compliance/cmd/checkshare/checkshare_test.go
index fdcab29..079691c 100644
--- a/tools/compliance/cmd/checkshare/checkshare_test.go
+++ b/tools/compliance/cmd/checkshare/checkshare_test.go
@@ -241,6 +241,59 @@
roots: []string{"lib/libd.so.meta_lic"},
expectedStdout: "PASS",
},
+ {
+ condition: "regressconcur",
+ name: "container",
+ roots: []string{"container.zip.meta_lic"},
+ expectedStdout: "FAIL",
+ expectedOutcomes: outcomeList{
+ &outcome{
+ target: "testdata/regressconcur/bin/bin1.meta_lic",
+ privacyCondition: "proprietary",
+ shareCondition: "restricted",
+ },
+ &outcome{
+ target: "testdata/regressconcur/bin/bin2.meta_lic",
+ privacyCondition: "proprietary",
+ shareCondition: "restricted",
+ },
+ &outcome{
+ target: "testdata/regressconcur/bin/bin3.meta_lic",
+ privacyCondition: "proprietary",
+ shareCondition: "restricted",
+ },
+ &outcome{
+ target: "testdata/regressconcur/bin/bin4.meta_lic",
+ privacyCondition: "proprietary",
+ shareCondition: "restricted",
+ },
+ &outcome{
+ target: "testdata/regressconcur/bin/bin5.meta_lic",
+ privacyCondition: "proprietary",
+ shareCondition: "restricted",
+ },
+ &outcome{
+ target: "testdata/regressconcur/bin/bin6.meta_lic",
+ privacyCondition: "proprietary",
+ shareCondition: "restricted",
+ },
+ &outcome{
+ target: "testdata/regressconcur/bin/bin7.meta_lic",
+ privacyCondition: "proprietary",
+ shareCondition: "restricted",
+ },
+ &outcome{
+ target: "testdata/regressconcur/bin/bin8.meta_lic",
+ privacyCondition: "proprietary",
+ shareCondition: "restricted",
+ },
+ &outcome{
+ target: "testdata/regressconcur/bin/bin9.meta_lic",
+ privacyCondition: "proprietary",
+ shareCondition: "restricted",
+ },
+ },
+ },
}
for _, tt := range tests {
t.Run(tt.condition+" "+tt.name, func(t *testing.T) {
diff --git a/tools/compliance/cmd/testdata/regressconcur/README.md b/tools/compliance/cmd/testdata/regressconcur/README.md
new file mode 100644
index 0000000..98ab0ef
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/README.md
@@ -0,0 +1,62 @@
+## Start long walks followed by short walks
+
+Detect concurrency error where "already started" treated as
+"already finished".
+
+### Testdata build graph structure:
+
+A restricted licensed library sandwiched between a notice library and a notice
+binary. The source-code for the libraries only needs to be shared if shipped
+alongside the container with the binaries.
+
+```dot
+strict digraph {
+ rankdir=LR;
+ bin1 [label="bin/bin1.meta_lic\nproprietary"];
+ bin2 [label="bin/bin2.meta_lic\nproprietary"];
+ bin3 [label="bin/bin3.meta_lic\nproprietary"];
+ bin4 [label="bin/bin4.meta_lic\nproprietary"];
+ bin5 [label="bin/bin5.meta_lic\nproprietary"];
+ bin6 [label="bin/bin6.meta_lic\nproprietary"];
+ bin7 [label="bin/bin7.meta_lic\nproprietary"];
+ bin8 [label="bin/bin8.meta_lic\nproprietary"];
+ bin9 [label="bin/bin9.meta_lic\nproprietary"];
+ container [label="container.zip.meta_lic\nnotice"];
+ lib1 [label="lib/lib1.so.meta_lic\nnotice"];
+ lib2 [label="lib/lib2.so.meta_lic\nnotice"];
+ lib3 [label="lib/lib3.so.meta_lic\nnotice"];
+ lib4 [label="lib/lib4.so.meta_lic\nnotice"];
+ lib5 [label="lib/lib5.so.meta_lic\nnotice"];
+ lib6 [label="lib/lib6.so.meta_lic\nnotice"];
+ lib7 [label="lib/lib7.so.meta_lic\nnotice"];
+ lib8 [label="lib/lib8.so.meta_lic\nnotice"];
+ lib9 [label="lib/lib9.so.meta_lic\nrestricted"];
+ container -> bin1 [label="static"];
+ container -> bin2 [label="static"];
+ container -> bin3 [label="static"];
+ container -> bin4 [label="static"];
+ container -> bin5 [label="static"];
+ container -> bin6 [label="static"];
+ container -> bin7 [label="static"];
+ container -> bin8 [label="static"];
+ container -> bin9 [label="static"];
+ bin1 -> lib1 [label="static"];
+ bin2 -> lib2 [label="static"];
+ bin3 -> lib3 [label="static"];
+ bin4 -> lib4 [label="static"];
+ bin5 -> lib5 [label="static"];
+ bin6 -> lib6 [label="static"];
+ bin7 -> lib7 [label="static"];
+ bin8 -> lib8 [label="static"];
+ bin9 -> lib9 [label="static"];
+ lib1 -> lib2 [label="static"];
+ lib2 -> lib3 [label="static"];
+ lib3 -> lib4 [label="static"];
+ lib4 -> lib5 [label="static"];
+ lib5 -> lib6 [label="static"];
+ lib6 -> lib7 [label="static"];
+ lib7 -> lib8 [label="static"];
+ lib8 -> lib9 [label="static"];
+ {rank=same; container}
+}
+```
diff --git a/tools/compliance/cmd/testdata/regressconcur/bin/bin1.meta_lic b/tools/compliance/cmd/testdata/regressconcur/bin/bin1.meta_lic
new file mode 100644
index 0000000..e3763f6
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/bin/bin1.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+module_classes: "EXECUTABLES"
+projects: "bin/onelibrary"
+license_kinds: "legacy_proprietary"
+license_conditions: "proprietary"
+is_container: false
+built: "out/target/product/fictional/obj/EXECUTABLES/bin_intermediates/bin1"
+installed: "out/target/product/fictional/system/bin/bin1"
+sources: "out/target/product/fictional/system/lib/lib1.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib1.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/bin/bin2.meta_lic b/tools/compliance/cmd/testdata/regressconcur/bin/bin2.meta_lic
new file mode 100644
index 0000000..e1822bb
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/bin/bin2.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+module_classes: "EXECUTABLES"
+projects: "bin/onelibrary"
+license_kinds: "legacy_proprietary"
+license_conditions: "proprietary"
+is_container: false
+built: "out/target/product/fictional/obj/EXECUTABLES/bin_intermediates/bin2"
+installed: "out/target/product/fictional/system/bin/bin2"
+sources: "out/target/product/fictional/system/lib/lib2.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib2.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/bin/bin3.meta_lic b/tools/compliance/cmd/testdata/regressconcur/bin/bin3.meta_lic
new file mode 100644
index 0000000..35f5d74
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/bin/bin3.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+module_classes: "EXECUTABLES"
+projects: "bin/onelibrary"
+license_kinds: "legacy_proprietary"
+license_conditions: "proprietary"
+is_container: false
+built: "out/target/product/fictional/obj/EXECUTABLES/bin_intermediates/bin3"
+installed: "out/target/product/fictional/system/bin/bin3"
+sources: "out/target/product/fictional/system/lib/lib3.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib3.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/bin/bin4.meta_lic b/tools/compliance/cmd/testdata/regressconcur/bin/bin4.meta_lic
new file mode 100644
index 0000000..3287382
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/bin/bin4.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+module_classes: "EXECUTABLES"
+projects: "bin/onelibrary"
+license_kinds: "legacy_proprietary"
+license_conditions: "proprietary"
+is_container: false
+built: "out/target/product/fictional/obj/EXECUTABLES/bin_intermediates/bin4"
+installed: "out/target/product/fictional/system/bin/bin4"
+sources: "out/target/product/fictional/system/lib/lib4.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib4.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/bin/bin5.meta_lic b/tools/compliance/cmd/testdata/regressconcur/bin/bin5.meta_lic
new file mode 100644
index 0000000..f51bcdb
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/bin/bin5.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+module_classes: "EXECUTABLES"
+projects: "bin/onelibrary"
+license_kinds: "legacy_proprietary"
+license_conditions: "proprietary"
+is_container: false
+built: "out/target/product/fictional/obj/EXECUTABLES/bin_intermediates/bin5"
+installed: "out/target/product/fictional/system/bin/bin5"
+sources: "out/target/product/fictional/system/lib/lib5.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib5.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/bin/bin6.meta_lic b/tools/compliance/cmd/testdata/regressconcur/bin/bin6.meta_lic
new file mode 100644
index 0000000..4c99b01
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/bin/bin6.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+module_classes: "EXECUTABLES"
+projects: "bin/onelibrary"
+license_kinds: "legacy_proprietary"
+license_conditions: "proprietary"
+is_container: false
+built: "out/target/product/fictional/obj/EXECUTABLES/bin_intermediates/bin6"
+installed: "out/target/product/fictional/system/bin/bin6"
+sources: "out/target/product/fictional/system/lib/lib6.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib6.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/bin/bin7.meta_lic b/tools/compliance/cmd/testdata/regressconcur/bin/bin7.meta_lic
new file mode 100644
index 0000000..565a338
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/bin/bin7.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+module_classes: "EXECUTABLES"
+projects: "bin/onelibrary"
+license_kinds: "legacy_proprietary"
+license_conditions: "proprietary"
+is_container: false
+built: "out/target/product/fictional/obj/EXECUTABLES/bin_intermediates/bin7"
+installed: "out/target/product/fictional/system/bin/bin7"
+sources: "out/target/product/fictional/system/lib/lib7.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib7.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/bin/bin8.meta_lic b/tools/compliance/cmd/testdata/regressconcur/bin/bin8.meta_lic
new file mode 100644
index 0000000..f66c2c9
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/bin/bin8.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+module_classes: "EXECUTABLES"
+projects: "bin/onelibrary"
+license_kinds: "legacy_proprietary"
+license_conditions: "proprietary"
+is_container: false
+built: "out/target/product/fictional/obj/EXECUTABLES/bin_intermediates/bin8"
+installed: "out/target/product/fictional/system/bin/bin8"
+sources: "out/target/product/fictional/system/lib/lib8.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib8.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/bin/bin9.meta_lic b/tools/compliance/cmd/testdata/regressconcur/bin/bin9.meta_lic
new file mode 100644
index 0000000..0aac4c6
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/bin/bin9.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+module_classes: "EXECUTABLES"
+projects: "bin/onelibrary"
+license_kinds: "legacy_proprietary"
+license_conditions: "proprietary"
+is_container: false
+built: "out/target/product/fictional/obj/EXECUTABLES/bin_intermediates/bin9"
+installed: "out/target/product/fictional/system/bin/bin9"
+sources: "out/target/product/fictional/system/lib/lib9.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib9.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/container.zip.meta_lic b/tools/compliance/cmd/testdata/regressconcur/container.zip.meta_lic
new file mode 100644
index 0000000..88683d4
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/container.zip.meta_lic
@@ -0,0 +1,60 @@
+package_name: "Android"
+projects: "container/zip"
+license_kinds: "SPDX-license-identifier-MIT"
+license_conditions: "notice"
+is_container: true
+built: "out/target/product/fictional/obj/ETC/container_intermediates/container.zip"
+installed: "out/target/product/fictional/data/container.zip"
+install_map {
+ from_path: "out/target/product/fictional/system/lib/"
+ container_path: "/"
+}
+install_map {
+ from_path: "out/target/product/fictional/system/bin/"
+ container_path: "/"
+}
+sources: "out/target/product/fictional/system/bin/bin1"
+sources: "out/target/product/fictional/system/bin/bin2"
+sources: "out/target/product/fictional/system/bin/bin3"
+sources: "out/target/product/fictional/system/bin/bin4"
+sources: "out/target/product/fictional/system/bin/bin5"
+sources: "out/target/product/fictional/system/bin/bin6"
+sources: "out/target/product/fictional/system/bin/bin7"
+sources: "out/target/product/fictional/system/bin/bin8"
+sources: "out/target/product/fictional/system/bin/bin9"
+deps: {
+ file: "testdata/regressconcur/bin/bin1.meta_lic"
+ annotations: "static"
+}
+deps: {
+ file: "testdata/regressconcur/bin/bin2.meta_lic"
+ annotations: "static"
+}
+deps: {
+ file: "testdata/regressconcur/bin/bin3.meta_lic"
+ annotations: "static"
+}
+deps: {
+ file: "testdata/regressconcur/bin/bin4.meta_lic"
+ annotations: "static"
+}
+deps: {
+ file: "testdata/regressconcur/bin/bin5.meta_lic"
+ annotations: "static"
+}
+deps: {
+ file: "testdata/regressconcur/bin/bin6.meta_lic"
+ annotations: "static"
+}
+deps: {
+ file: "testdata/regressconcur/bin/bin7.meta_lic"
+ annotations: "static"
+}
+deps: {
+ file: "testdata/regressconcur/bin/bin8.meta_lic"
+ annotations: "static"
+}
+deps: {
+ file: "testdata/regressconcur/bin/bin9.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/lib/lib1.a.meta_lic b/tools/compliance/cmd/testdata/regressconcur/lib/lib1.a.meta_lic
new file mode 100644
index 0000000..89ebd7c
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/lib/lib1.a.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+projects: "lib/restricted"
+license_kinds: "SPDX-license-identifier-MIT"
+license_conditions: "notice"
+is_container: false
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib1.so"
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib1.a"
+installed: "out/target/product/fictional/system/lib/lib1.so"
+sources: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib2.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib2.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/lib/lib2.a.meta_lic b/tools/compliance/cmd/testdata/regressconcur/lib/lib2.a.meta_lic
new file mode 100644
index 0000000..ec84287
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/lib/lib2.a.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+projects: "lib/restricted"
+license_kinds: "SPDX-license-identifier-MIT"
+license_conditions: "notice"
+is_container: false
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib2.so"
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib2.a"
+installed: "out/target/product/fictional/system/lib/lib2.so"
+sources: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib3.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib3.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/lib/lib3.a.meta_lic b/tools/compliance/cmd/testdata/regressconcur/lib/lib3.a.meta_lic
new file mode 100644
index 0000000..1949c06
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/lib/lib3.a.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+projects: "lib/restricted"
+license_kinds: "SPDX-license-identifier-MIT"
+license_conditions: "notice"
+is_container: false
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib3.so"
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib3.a"
+installed: "out/target/product/fictional/system/lib/lib3.so"
+sources: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib4.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib4.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/lib/lib4.a.meta_lic b/tools/compliance/cmd/testdata/regressconcur/lib/lib4.a.meta_lic
new file mode 100644
index 0000000..4dc777b
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/lib/lib4.a.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+projects: "lib/restricted"
+license_kinds: "SPDX-license-identifier-MIT"
+license_conditions: "notice"
+is_container: false
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib4.so"
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib4.a"
+installed: "out/target/product/fictional/system/lib/lib4.so"
+sources: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib5.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib5.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/lib/lib5.a.meta_lic b/tools/compliance/cmd/testdata/regressconcur/lib/lib5.a.meta_lic
new file mode 100644
index 0000000..5d005dc
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/lib/lib5.a.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+projects: "lib/restricted"
+license_kinds: "SPDX-license-identifier-MIT"
+license_conditions: "notice"
+is_container: false
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib5.so"
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib5.a"
+installed: "out/target/product/fictional/system/lib/lib5.so"
+sources: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib6.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib6.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/lib/lib6.a.meta_lic b/tools/compliance/cmd/testdata/regressconcur/lib/lib6.a.meta_lic
new file mode 100644
index 0000000..f2920c3
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/lib/lib6.a.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+projects: "lib/restricted"
+license_kinds: "SPDX-license-identifier-MIT"
+license_conditions: "notice"
+is_container: false
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib6.so"
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib6.a"
+installed: "out/target/product/fictional/system/lib/lib6.so"
+sources: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib7.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib7.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/lib/lib7.a.meta_lic b/tools/compliance/cmd/testdata/regressconcur/lib/lib7.a.meta_lic
new file mode 100644
index 0000000..28c0c5f
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/lib/lib7.a.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+projects: "lib/restricted"
+license_kinds: "SPDX-license-identifier-MIT"
+license_conditions: "notice"
+is_container: false
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib7.so"
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib7.a"
+installed: "out/target/product/fictional/system/lib/lib7.so"
+sources: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib8.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib8.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/lib/lib8.a.meta_lic b/tools/compliance/cmd/testdata/regressconcur/lib/lib8.a.meta_lic
new file mode 100644
index 0000000..b887edc
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/lib/lib8.a.meta_lic
@@ -0,0 +1,13 @@
+package_name: "Android"
+projects: "lib/restricted"
+license_kinds: "SPDX-license-identifier-MIT"
+license_conditions: "notice"
+is_container: false
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib8.so"
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib8.a"
+installed: "out/target/product/fictional/system/lib/lib8.so"
+sources: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib9.a"
+deps: {
+ file: "testdata/regressconcur/lib/lib9.a.meta_lic"
+ annotations: "static"
+}
diff --git a/tools/compliance/cmd/testdata/regressconcur/lib/lib9.a.meta_lic b/tools/compliance/cmd/testdata/regressconcur/lib/lib9.a.meta_lic
new file mode 100644
index 0000000..9bf155f
--- /dev/null
+++ b/tools/compliance/cmd/testdata/regressconcur/lib/lib9.a.meta_lic
@@ -0,0 +1,8 @@
+package_name: "Android"
+projects: "lib/restricted"
+license_kinds: "SPDX-license-identifier-GPL-2.0"
+license_conditions: "restricted"
+is_container: false
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib9.so"
+built: "out/target/product/fictional/obj/SHARED_LIBRARIES/lib_intermediates/lib9.a"
+installed: "out/target/product/fictional/system/lib/lib9.so"
diff --git a/tools/compliance/graph.go b/tools/compliance/graph.go
index 80a2f47..fac1d05 100644
--- a/tools/compliance/graph.go
+++ b/tools/compliance/graph.go
@@ -459,36 +459,25 @@
}
// TargetNodeSet describes a set of distinct nodes in a license graph.
-type TargetNodeSet struct {
- nodes map[*TargetNode]struct{}
-}
+type TargetNodeSet map[*TargetNode]struct{}
// Contains returns true when `target` is an element of the set.
-func (ts *TargetNodeSet) Contains(target *TargetNode) bool {
- _, isPresent := ts.nodes[target]
+func (ts TargetNodeSet) Contains(target *TargetNode) bool {
+ _, isPresent := ts[target]
return isPresent
}
-// AsList returns the list of target nodes in the set. (unordered)
-func (ts *TargetNodeSet) AsList() TargetNodeList {
- result := make(TargetNodeList, 0, len(ts.nodes))
- for tn := range ts.nodes {
- result = append(result, tn)
- }
- return result
-}
-
// Names returns the array of target node namess in the set. (unordered)
-func (ts *TargetNodeSet) Names() []string {
- result := make([]string, 0, len(ts.nodes))
- for tn := range ts.nodes {
+func (ts TargetNodeSet) Names() []string {
+ result := make([]string, 0, len(ts))
+ for tn := range ts {
result = append(result, tn.name)
}
return result
}
// String returns a human-readable string representation of the set.
-func (ts *TargetNodeSet) String() string {
+func (ts TargetNodeSet) String() string {
return fmt.Sprintf("{%s}", strings.Join(ts.Names(), ", "))
}
diff --git a/tools/compliance/noticeindex.go b/tools/compliance/noticeindex.go
index dbfede6..c91a8df 100644
--- a/tools/compliance/noticeindex.go
+++ b/tools/compliance/noticeindex.go
@@ -42,7 +42,7 @@
// rs identifies the set of resolutions upon which the index is based.
rs ResolutionSet
// shipped identifies the set of target nodes shipped directly or as derivative works.
- shipped *TargetNodeSet
+ shipped TargetNodeSet
// rootFS locates the root of the file system from which to read the files.
rootFS fs.FS
// hash maps license text filenames to content hashes
diff --git a/tools/compliance/policy_policy.go b/tools/compliance/policy_policy.go
index 23e25c6..368a162 100644
--- a/tools/compliance/policy_policy.go
+++ b/tools/compliance/policy_policy.go
@@ -114,7 +114,7 @@
// LicenseConditionSetFromNames returns a set containing the recognized `names` and
// silently ignoring or discarding the unrecognized `names`.
-func LicenseConditionSetFromNames(tn *TargetNode, names ...string) LicenseConditionSet {
+func LicenseConditionSetFromNames(names ...string) LicenseConditionSet {
cs := NewLicenseConditionSet()
for _, name := range names {
if lc, ok := RecognizedConditionNames[name]; ok {
diff --git a/tools/compliance/policy_resolve.go b/tools/compliance/policy_resolve.go
index fc8ed4c..0951ba1 100644
--- a/tools/compliance/policy_resolve.go
+++ b/tools/compliance/policy_resolve.go
@@ -14,10 +14,6 @@
package compliance
-import (
- "sync"
-)
-
var (
// AllResolutions is a TraceConditions function that resolves all
// unfiltered license conditions.
@@ -53,16 +49,10 @@
// amap identifes targets previously walked. (guarded by mu)
amap := make(map[*TargetNode]struct{})
- // mu guards concurrent access to amap
- var mu sync.Mutex
-
var walk func(target *TargetNode, treatAsAggregate bool) LicenseConditionSet
walk = func(target *TargetNode, treatAsAggregate bool) LicenseConditionSet {
priorWalkResults := func() (LicenseConditionSet, bool) {
- mu.Lock()
- defer mu.Unlock()
-
if _, alreadyWalked := amap[target]; alreadyWalked {
if treatAsAggregate {
return target.resolution, true
@@ -84,25 +74,17 @@
return cs
}
- c := make(chan LicenseConditionSet, len(target.edges))
// add all the conditions from all the dependencies
for _, edge := range target.edges {
- go func(edge *TargetEdge) {
- // walk dependency to get its conditions
- cs := walk(edge.dependency, treatAsAggregate && edge.dependency.IsContainer())
+ // walk dependency to get its conditions
+ dcs := walk(edge.dependency, treatAsAggregate && edge.dependency.IsContainer())
- // turn those into the conditions that apply to the target
- cs = depConditionsPropagatingToTarget(lg, edge, cs, treatAsAggregate)
-
- c <- cs
- }(edge)
+ // turn those into the conditions that apply to the target
+ dcs = depConditionsPropagatingToTarget(lg, edge, dcs, treatAsAggregate)
+ cs |= dcs
}
- for i := 0; i < len(target.edges); i++ {
- cs |= <-c
- }
- mu.Lock()
target.resolution |= cs
- mu.Unlock()
+ cs = target.resolution
// return conditions up the tree
return cs
@@ -133,33 +115,21 @@
// short-cut if already walked and cached
lg.onceTopDown.Do(func() {
- wg := &sync.WaitGroup{}
- wg.Add(1)
-
// start with the conditions propagated up the graph
TraceBottomUpConditions(lg, conditionsFn)
// amap contains the set of targets already walked. (guarded by mu)
amap := make(map[*TargetNode]struct{})
- // mu guards concurrent access to amap
- var mu sync.Mutex
-
var walk func(fnode *TargetNode, cs LicenseConditionSet, treatAsAggregate bool)
walk = func(fnode *TargetNode, cs LicenseConditionSet, treatAsAggregate bool) {
- defer wg.Done()
continueWalk := func() bool {
- mu.Lock()
- defer mu.Unlock()
-
- depcs := fnode.resolution
- _, alreadyWalked := amap[fnode]
- if alreadyWalked {
+ if _, alreadyWalked := amap[fnode]; alreadyWalked {
if cs.IsEmpty() {
return false
}
- if cs.Difference(depcs).IsEmpty() {
+ if cs.Difference(fnode.resolution).IsEmpty() {
// no new conditions
// pure aggregates never need walking a 2nd time with same conditions
@@ -172,8 +142,9 @@
}
// previously walked as pure aggregate; need to re-walk as non-aggregate
}
+ } else {
+ fnode.resolution |= conditionsFn(fnode)
}
- fnode.resolution |= conditionsFn(fnode)
fnode.resolution |= cs
fnode.pure = treatAsAggregate
amap[fnode] = struct{}{}
@@ -189,19 +160,15 @@
dcs := targetConditionsPropagatingToDep(lg, edge, cs, treatAsAggregate, conditionsFn)
dnode := edge.dependency
// add the conditions to the dependency
- wg.Add(1)
- go walk(dnode, dcs, treatAsAggregate && dnode.IsContainer())
+ walk(dnode, dcs, treatAsAggregate && dnode.IsContainer())
}
}
// walk each of the roots
for _, rname := range lg.rootFiles {
rnode := lg.targets[rname]
- wg.Add(1)
// add the conditions to the root and its transitive closure
- go walk(rnode, NewLicenseConditionSet(), rnode.IsContainer())
+ walk(rnode, NewLicenseConditionSet(), rnode.IsContainer())
}
- wg.Done()
- wg.Wait()
})
}
diff --git a/tools/compliance/policy_resolvenotices_test.go b/tools/compliance/policy_resolvenotices_test.go
index b62d62f..b23e587 100644
--- a/tools/compliance/policy_resolvenotices_test.go
+++ b/tools/compliance/policy_resolvenotices_test.go
@@ -33,8 +33,8 @@
{"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheLib.meta_lic", "notice"},
},
},
{
@@ -44,7 +44,7 @@
{"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
},
},
{
@@ -54,8 +54,8 @@
{"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
},
},
{
@@ -66,11 +66,9 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice|restricted"},
+ {"apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice|restricted"},
},
},
{
@@ -81,8 +79,8 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -96,22 +94,17 @@
{"mitBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "mplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "mplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
- {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
- {"mitBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice|restricted"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice|restricted"},
+ {"apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheContainer.meta_lic", "mitBin.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "mitLib.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "mplLib.meta_lic", "reciprocal|restricted"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice|restricted"},
+ {"apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "mplLib.meta_lic", "reciprocal|restricted"},
+ {"mitBin.meta_lic", "mitBin.meta_lic", "notice"},
+ {"mitBin.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -122,12 +115,11 @@
{"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice|restricted"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
},
},
{
@@ -138,8 +130,8 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "restricted"},
},
},
{
@@ -150,11 +142,9 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"mitLib.meta_lic", "mitLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice|restricted"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "restricted"},
+ {"mitLib.meta_lic", "mitLib.meta_lic", "notice|restricted"},
},
},
{
@@ -168,14 +158,11 @@
{"mitBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice|restricted"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice|restricted"},
+ {"apacheContainer.meta_lic", "mitBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice|restricted"},
+ {"mitBin.meta_lic", "mitBin.meta_lic", "notice"},
},
},
{
@@ -186,10 +173,9 @@
{"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice|restricted"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
},
},
{
@@ -200,12 +186,11 @@
{"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice|restricted"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
},
},
{
@@ -216,11 +201,9 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
- {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice|restricted_if_statically_linked"},
+ {"apacheBin.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice|restricted_if_statically_linked"},
},
},
{
@@ -231,8 +214,8 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -243,9 +226,9 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice"},
+ {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -257,18 +240,13 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
- {"apacheContainer.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
- {"apacheContainer.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
- {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice|restricted_if_statically_linked"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice|restricted_if_statically_linked"},
+ {"apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
+ {"apacheContainer.meta_lic", "mitLib.meta_lic", "notice|restricted_if_statically_linked"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice|restricted_if_statically_linked"},
+ {"apacheBin.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice|restricted_if_statically_linked"},
},
},
{
@@ -279,12 +257,11 @@
{"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice|restricted_if_statically_linked"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -295,8 +272,8 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -307,9 +284,9 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
- {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice"},
+ {"lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -320,9 +297,9 @@
{"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
},
},
{
@@ -333,10 +310,10 @@
{"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -347,9 +324,9 @@
{"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
},
},
{
@@ -360,10 +337,10 @@
{"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"lgplLib.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -374,9 +351,9 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -387,9 +364,9 @@
{"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
- {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
- {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
+ {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"dependentModule.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -400,8 +377,8 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -412,9 +389,9 @@
{"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
- {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "mitLib.meta_lic", "notice"},
+ {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
},
},
{
@@ -425,8 +402,8 @@
{"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
- {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
+ {"dependentModule.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -437,9 +414,9 @@
{"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
- {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
- {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
+ {"dependentModule.meta_lic", "mitLib.meta_lic", "notice"},
+ {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
},
},
}
diff --git a/tools/compliance/policy_resolveprivacy_test.go b/tools/compliance/policy_resolveprivacy_test.go
index e8c953a..d4d1967 100644
--- a/tools/compliance/policy_resolveprivacy_test.go
+++ b/tools/compliance/policy_resolveprivacy_test.go
@@ -57,7 +57,7 @@
{"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
+ {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
},
},
{
@@ -67,7 +67,7 @@
{"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
+ {"gplBin.meta_lic", "proprietary.meta_lic", "proprietary"},
},
},
}
diff --git a/tools/compliance/policy_resolveshare_test.go b/tools/compliance/policy_resolveshare_test.go
index faade88..4abd960 100644
--- a/tools/compliance/policy_resolveshare_test.go
+++ b/tools/compliance/policy_resolveshare_test.go
@@ -73,8 +73,8 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
- {"lgplBin.meta_lic", "apacheLib.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
+ {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
+ {"lgplBin.meta_lic", "apacheLib.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -84,7 +84,7 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
+ {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -94,7 +94,7 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
+ {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -104,8 +104,8 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"gplBin.meta_lic", "apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "apacheLib.meta_lic", "restricted"},
},
},
{
@@ -115,9 +115,9 @@
{"gplContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplContainer.meta_lic", "gplContainer.meta_lic", "gplContainer.meta_lic", "restricted"},
- {"gplContainer.meta_lic", "apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
+ {"gplContainer.meta_lic", "gplContainer.meta_lic", "restricted"},
+ {"gplContainer.meta_lic", "apacheLib.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "apacheLib.meta_lic", "restricted"},
},
},
{
@@ -128,9 +128,9 @@
{"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "restricted"},
+ {"apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
},
},
{
@@ -141,9 +141,9 @@
{"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "apacheLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "apacheLib.meta_lic", "restricted"},
},
},
{
@@ -153,7 +153,7 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
},
},
{
@@ -163,9 +163,9 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"gplBin.meta_lic", "apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "apacheLib.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "apacheLib.meta_lic", "restricted"},
},
},
{
@@ -207,8 +207,8 @@
{"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"proprietary.meta_lic", "proprietary.meta_lic", "gplLib.meta_lic", "restricted"},
- {"proprietary.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"proprietary.meta_lic", "proprietary.meta_lic", "restricted"},
+ {"proprietary.meta_lic", "gplLib.meta_lic", "restricted"},
},
},
{
@@ -218,8 +218,8 @@
{"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"gplBin.meta_lic", "proprietary.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "proprietary.meta_lic", "restricted"},
},
},
{
@@ -245,7 +245,7 @@
{"mitBin.meta_lic", "mplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"mitBin.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
+ {"mitBin.meta_lic", "mplLib.meta_lic", "reciprocal"},
},
},
{
@@ -255,7 +255,7 @@
{"mplBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"mplBin.meta_lic", "mplBin.meta_lic", "mplBin.meta_lic", "reciprocal"},
+ {"mplBin.meta_lic", "mplBin.meta_lic", "reciprocal"},
},
},
}
diff --git a/tools/compliance/policy_shipped.go b/tools/compliance/policy_shipped.go
index 75c8399..b21a95a 100644
--- a/tools/compliance/policy_shipped.go
+++ b/tools/compliance/policy_shipped.go
@@ -16,15 +16,15 @@
// ShippedNodes returns the set of nodes in a license graph where the target or
// a derivative work gets distributed. (caches result)
-func ShippedNodes(lg *LicenseGraph) *TargetNodeSet {
+func ShippedNodes(lg *LicenseGraph) TargetNodeSet {
lg.mu.Lock()
shipped := lg.shippedNodes
lg.mu.Unlock()
if shipped != nil {
- return shipped
+ return *shipped
}
- tset := make(map[*TargetNode]struct{})
+ tset := make(TargetNodeSet)
WalkTopDown(NoEdgeContext{}, lg, func(lg *LicenseGraph, tn *TargetNode, path TargetEdgePath) bool {
if _, alreadyWalked := tset[tn]; alreadyWalked {
@@ -39,7 +39,7 @@
return true
})
- shipped = &TargetNodeSet{tset}
+ shipped = &tset
lg.mu.Lock()
if lg.shippedNodes == nil {
@@ -50,5 +50,5 @@
}
lg.mu.Unlock()
- return shipped
+ return *shipped
}
diff --git a/tools/compliance/policy_walk.go b/tools/compliance/policy_walk.go
index beb6d53..e6b94ab 100644
--- a/tools/compliance/policy_walk.go
+++ b/tools/compliance/policy_walk.go
@@ -247,40 +247,16 @@
// WalkActionsForCondition performs a top-down walk of the LicenseGraph
// resolving all distributed works for `conditions`.
func WalkActionsForCondition(lg *LicenseGraph, conditions LicenseConditionSet) ActionSet {
- shipped := ShippedNodes(lg)
-
- // cmap identifies previously walked target/condition pairs.
- cmap := make(map[resolutionKey]struct{})
-
// amap maps 'actsOn' targets to the applicable conditions
//
// amap is the resulting ActionSet
amap := make(ActionSet)
- WalkTopDown(ApplicableConditionsContext{conditions}, lg, func(lg *LicenseGraph, tn *TargetNode, path TargetEdgePath) bool {
- universe := conditions
- if len(path) > 0 {
- universe = path[len(path)-1].ctx.(LicenseConditionSet)
+
+ for tn := range ShippedNodes(lg) {
+ if cs := conditions.Intersection(tn.resolution); !cs.IsEmpty() {
+ amap[tn] = cs
}
- if universe.IsEmpty() {
- return false
- }
- key := resolutionKey{tn, universe}
- if _, ok := cmap[key]; ok {
- return false
- }
- if !shipped.Contains(tn) {
- return false
- }
- cs := universe.Intersection(tn.resolution)
- if !cs.IsEmpty() {
- if _, ok := amap[tn]; ok {
- amap[tn] = cs
- } else {
- amap[tn] = amap[tn].Union(cs)
- }
- }
- return true
- })
+ }
return amap
}
diff --git a/tools/compliance/policy_walk_test.go b/tools/compliance/policy_walk_test.go
index 0bc37f8..53af3be 100644
--- a/tools/compliance/policy_walk_test.go
+++ b/tools/compliance/policy_walk_test.go
@@ -48,8 +48,8 @@
{"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheLib.meta_lic", "notice"},
},
},
{
@@ -60,8 +60,8 @@
{"mitBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
- {"mitBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"mitBin.meta_lic", "mitBin.meta_lic", "notice"},
+ {"mitBin.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -72,9 +72,8 @@
{"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice|restricted_if_statically_linked"},
+ {"apacheBin.meta_lic", "lgplLib.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -85,7 +84,7 @@
{"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
},
},
{
@@ -96,7 +95,7 @@
{"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
},
},
{
@@ -116,8 +115,8 @@
{"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
},
},
{
@@ -137,7 +136,7 @@
{"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
+ {"dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
},
},
{
@@ -157,9 +156,8 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
- {"lgplBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"lgplBin.meta_lic", "apacheLib.meta_lic", "lgplBin.meta_lic", "restricted"},
+ {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
+ {"lgplBin.meta_lic", "apacheLib.meta_lic", "notice|restricted_if_statically_linked"},
},
},
{
@@ -170,8 +168,8 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
- {"lgplBin.meta_lic", "apacheLib.meta_lic", "lgplBin.meta_lic", "restricted"},
+ {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
+ {"lgplBin.meta_lic", "apacheLib.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -182,7 +180,7 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
+ {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -193,7 +191,7 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
+ {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -204,9 +202,8 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"gplBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"gplBin.meta_lic", "apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "apacheLib.meta_lic", "notice|restricted"},
},
},
{
@@ -217,8 +214,8 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"gplBin.meta_lic", "apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "apacheLib.meta_lic", "restricted"},
},
},
{
@@ -229,11 +226,9 @@
{"gplContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplContainer.meta_lic", "gplContainer.meta_lic", "gplContainer.meta_lic", "restricted"},
- {"gplContainer.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"gplContainer.meta_lic", "apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
+ {"gplContainer.meta_lic", "gplContainer.meta_lic", "restricted"},
+ {"gplContainer.meta_lic", "apacheLib.meta_lic", "notice|restricted"},
+ {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice|restricted"},
},
},
{
@@ -244,9 +239,9 @@
{"gplContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplContainer.meta_lic", "gplContainer.meta_lic", "gplContainer.meta_lic", "restricted"},
- {"gplContainer.meta_lic", "apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
+ {"gplContainer.meta_lic", "gplContainer.meta_lic", "restricted"},
+ {"gplContainer.meta_lic", "apacheLib.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "apacheLib.meta_lic", "restricted"},
},
},
{
@@ -258,12 +253,11 @@
{"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice|restricted"},
+ {"apacheContainer.meta_lic", "apacheLib.meta_lic", "notice"},
+ {"apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
+ {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
},
},
{
@@ -275,9 +269,9 @@
{"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "restricted"},
+ {"apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
},
},
{
@@ -289,11 +283,9 @@
{"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"apacheBin.meta_lic", "apacheLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice|restricted"},
+ {"apacheBin.meta_lic", "apacheLib.meta_lic", "notice|restricted"},
+ {"apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
},
},
{
@@ -305,9 +297,9 @@
{"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "apacheLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "apacheBin.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "apacheLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
},
},
{
@@ -318,7 +310,7 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
},
},
{
@@ -329,7 +321,7 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
},
},
{
@@ -340,9 +332,9 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"gplBin.meta_lic", "apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "apacheLib.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "apacheLib.meta_lic", "restricted"},
},
},
{
@@ -353,7 +345,7 @@
{"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
},
},
{
@@ -382,8 +374,8 @@
{"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
- {"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", "notice"},
},
},
{
@@ -403,7 +395,7 @@
{"gplWithClasspathException.meta_lic", "dependentModule.meta_lic", []string{"dynamic"}},
},
expectedResolutions: []res{
- {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
},
},
{
@@ -432,9 +424,8 @@
{"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
- {"proprietary.meta_lic", "proprietary.meta_lic", "gplLib.meta_lic", "restricted"},
- {"proprietary.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"proprietary.meta_lic", "proprietary.meta_lic", "restricted|proprietary"},
+ {"proprietary.meta_lic", "gplLib.meta_lic", "restricted"},
},
},
{
@@ -445,8 +436,8 @@
{"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"proprietary.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"proprietary.meta_lic", "proprietary.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"proprietary.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"proprietary.meta_lic", "proprietary.meta_lic", "restricted"},
},
},
{
@@ -457,7 +448,7 @@
{"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
+ {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
},
},
{
@@ -468,9 +459,8 @@
{"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"gplBin.meta_lic", "proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
- {"gplBin.meta_lic", "proprietary.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "proprietary.meta_lic", "restricted|proprietary"},
},
},
{
@@ -481,8 +471,8 @@
{"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"gplBin.meta_lic", "proprietary.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "proprietary.meta_lic", "restricted"},
},
},
{
@@ -493,7 +483,7 @@
{"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"gplBin.meta_lic", "proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
+ {"gplBin.meta_lic", "proprietary.meta_lic", "proprietary"},
},
},
{
@@ -504,8 +494,8 @@
{"mitBin.meta_lic", "by_exception.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
- {"mitBin.meta_lic", "by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
+ {"mitBin.meta_lic", "mitBin.meta_lic", "notice"},
+ {"mitBin.meta_lic", "by_exception.meta_lic", "by_exception_only"},
},
},
{
@@ -525,7 +515,7 @@
{"mitBin.meta_lic", "by_exception.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"mitBin.meta_lic", "by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
+ {"mitBin.meta_lic", "by_exception.meta_lic", "by_exception_only"},
},
},
{
@@ -536,8 +526,8 @@
{"by_exception.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"by_exception.meta_lic", "by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
- {"by_exception.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
+ {"by_exception.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -557,7 +547,7 @@
{"by_exception.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"by_exception.meta_lic", "by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
+ {"by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
},
},
{
@@ -568,8 +558,8 @@
{"mitBin.meta_lic", "mplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
- {"mitBin.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
+ {"mitBin.meta_lic", "mitBin.meta_lic", "notice"},
+ {"mitBin.meta_lic", "mplLib.meta_lic", "reciprocal"},
},
},
{
@@ -580,7 +570,7 @@
{"mitBin.meta_lic", "mplLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"mitBin.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
+ {"mitBin.meta_lic", "mplLib.meta_lic", "reciprocal"},
},
},
{
@@ -591,8 +581,8 @@
{"mplBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"mplBin.meta_lic", "mplBin.meta_lic", "mplBin.meta_lic", "reciprocal"},
- {"mplBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"mplBin.meta_lic", "mplBin.meta_lic", "reciprocal"},
+ {"mplBin.meta_lic", "mitLib.meta_lic", "notice"},
},
},
{
@@ -603,7 +593,7 @@
{"mplBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedResolutions: []res{
- {"mplBin.meta_lic", "mplBin.meta_lic", "mplBin.meta_lic", "reciprocal"},
+ {"mplBin.meta_lic", "mplBin.meta_lic", "reciprocal"},
},
},
}
@@ -639,8 +629,8 @@
{"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "notice"},
+ {"apacheLib.meta_lic", "notice"},
},
},
{
@@ -651,8 +641,8 @@
{"mitBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"mitBin.meta_lic", "mitBin.meta_lic", "notice"},
- {"mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"mitBin.meta_lic", "notice"},
+ {"mitLib.meta_lic", "notice"},
},
},
{
@@ -663,9 +653,8 @@
{"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
- {"lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "notice"},
+ {"lgplLib.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -676,7 +665,7 @@
{"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
},
expectedActions: []act{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "notice"},
},
},
{
@@ -687,7 +676,7 @@
{"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
},
expectedActions: []act{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"apacheBin.meta_lic", "notice"},
},
},
{
@@ -707,8 +696,8 @@
{"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"apacheBin.meta_lic", "notice"},
+ {"gplWithClasspathException.meta_lic", "permissive"},
},
},
{
@@ -728,7 +717,7 @@
{"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
},
expectedActions: []act{
- {"dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
+ {"dependentModule.meta_lic", "notice"},
},
},
{
@@ -748,9 +737,8 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"apacheLib.meta_lic", "lgplBin.meta_lic", "restricted"},
+ {"lgplBin.meta_lic", "restricted_if_statically_linked"},
+ {"apacheLib.meta_lic", "notice|restricted_if_statically_linked"},
},
},
{
@@ -761,8 +749,8 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "lgplBin.meta_lic", "restricted"},
+ {"lgplBin.meta_lic", "restricted_if_statically_linked"},
+ {"apacheLib.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -773,7 +761,7 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedActions: []act{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
+ {"lgplBin.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -784,7 +772,7 @@
{"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedActions: []act{
- {"lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
+ {"lgplBin.meta_lic", "restricted_if_statically_linked"},
},
},
{
@@ -795,9 +783,8 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "notice|restricted"},
},
},
{
@@ -808,8 +795,8 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "restricted"},
},
},
{
@@ -820,11 +807,8 @@
{"gplContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"gplContainer.meta_lic", "gplContainer.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
+ {"gplContainer.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "notice|restricted"},
},
},
{
@@ -835,9 +819,8 @@
{"gplContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"gplContainer.meta_lic", "gplContainer.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
+ {"gplContainer.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "restricted"},
},
},
{
@@ -849,11 +832,9 @@
{"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
- {"apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheContainer.meta_lic", "notice|restricted"},
+ {"apacheLib.meta_lic", "notice"},
+ {"gplLib.meta_lic", "restricted"},
},
},
{
@@ -865,8 +846,8 @@
{"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
- {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheContainer.meta_lic", "restricted"},
+ {"gplLib.meta_lic", "restricted"},
},
},
{
@@ -878,11 +859,9 @@
{"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
- {"apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
- {"apacheLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "notice|restricted"},
+ {"apacheLib.meta_lic", "notice|restricted"},
+ {"gplLib.meta_lic", "restricted"},
},
},
{
@@ -894,9 +873,9 @@
{"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"apacheBin.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "restricted"},
+ {"gplLib.meta_lic", "restricted"},
},
},
{
@@ -907,7 +886,7 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedActions: []act{
- {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "restricted"},
},
},
{
@@ -918,7 +897,7 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedActions: []act{
- {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "restricted"},
},
},
{
@@ -929,8 +908,8 @@
{"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
},
expectedActions: []act{
- {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "restricted"},
+ {"apacheLib.meta_lic", "restricted"},
},
},
{
@@ -941,7 +920,7 @@
{"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", []string{"dynamic"}},
},
expectedActions: []act{
- {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"gplWithClasspathException.meta_lic", "permissive"},
},
},
{
@@ -970,8 +949,8 @@
{"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
- {"apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
+ {"gplWithClasspathException.meta_lic", "permissive"},
+ {"apacheBin.meta_lic", "notice"},
},
},
{
@@ -991,7 +970,7 @@
{"gplWithClasspathException.meta_lic", "dependentModule.meta_lic", []string{"dynamic"}},
},
expectedActions: []act{
- {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "permissive"},
+ {"gplWithClasspathException.meta_lic", "permissive"},
},
},
{
@@ -1020,9 +999,8 @@
{"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
- {"proprietary.meta_lic", "gplLib.meta_lic", "restricted"},
- {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"proprietary.meta_lic", "restricted|proprietary"},
+ {"gplLib.meta_lic", "restricted"},
},
},
{
@@ -1033,8 +1011,8 @@
{"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
- {"proprietary.meta_lic", "gplLib.meta_lic", "restricted"},
+ {"gplLib.meta_lic", "restricted"},
+ {"proprietary.meta_lic", "restricted"},
},
},
{
@@ -1045,7 +1023,7 @@
{"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
+ {"proprietary.meta_lic", "proprietary"},
},
},
{
@@ -1056,9 +1034,8 @@
{"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
- {"proprietary.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "restricted"},
+ {"proprietary.meta_lic", "restricted|proprietary"},
},
},
{
@@ -1069,8 +1046,8 @@
{"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
- {"proprietary.meta_lic", "gplBin.meta_lic", "restricted"},
+ {"gplBin.meta_lic", "restricted"},
+ {"proprietary.meta_lic", "restricted"},
},
},
{
@@ -1081,7 +1058,7 @@
{"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
+ {"proprietary.meta_lic", "proprietary"},
},
},
{
@@ -1092,8 +1069,8 @@
{"mitBin.meta_lic", "by_exception.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"mitBin.meta_lic", "mitBin.meta_lic", "notice"},
- {"by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
+ {"mitBin.meta_lic", "notice"},
+ {"by_exception.meta_lic", "by_exception_only"},
},
},
{
@@ -1113,7 +1090,7 @@
{"mitBin.meta_lic", "by_exception.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
+ {"by_exception.meta_lic", "by_exception_only"},
},
},
{
@@ -1124,8 +1101,8 @@
{"by_exception.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
- {"mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"by_exception.meta_lic", "by_exception_only"},
+ {"mitLib.meta_lic", "notice"},
},
},
{
@@ -1145,7 +1122,7 @@
{"by_exception.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
+ {"by_exception.meta_lic", "by_exception_only"},
},
},
{
@@ -1156,8 +1133,8 @@
{"mitBin.meta_lic", "mplLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"mitBin.meta_lic", "mitBin.meta_lic", "notice"},
- {"mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
+ {"mitBin.meta_lic", "notice"},
+ {"mplLib.meta_lic", "reciprocal"},
},
},
{
@@ -1168,7 +1145,7 @@
{"mitBin.meta_lic", "mplLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
+ {"mplLib.meta_lic", "reciprocal"},
},
},
{
@@ -1179,8 +1156,8 @@
{"mplBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"mplBin.meta_lic", "mplBin.meta_lic", "reciprocal"},
- {"mitLib.meta_lic", "mitLib.meta_lic", "notice"},
+ {"mplBin.meta_lic", "reciprocal"},
+ {"mitLib.meta_lic", "notice"},
},
},
{
@@ -1191,7 +1168,25 @@
{"mplBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
},
expectedActions: []act{
- {"mplBin.meta_lic", "mplBin.meta_lic", "reciprocal"},
+ {"mplBin.meta_lic", "reciprocal"},
+ },
+ },
+ {
+ name: "regress-walk-twice",
+ condition: ImpliesShared,
+ roots: []string{"mitBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic"},
+ edges: []annotated{
+ {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}},
+ {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
+ {"mitBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
+ {"mitBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
+ },
+ expectedActions: []act{
+ {"apacheBin.meta_lic", "restricted"},
+ {"mitLib.meta_lic", "restricted|restricted_if_statically_linked"},
+ {"gplLib.meta_lic", "restricted"},
+ {"mitBin.meta_lic", "restricted_if_statically_linked"},
+ {"lgplLib.meta_lic", "restricted_if_statically_linked"},
},
},
}
diff --git a/tools/compliance/readgraph.go b/tools/compliance/readgraph.go
index bf364e6..a413ebe 100644
--- a/tools/compliance/readgraph.go
+++ b/tools/compliance/readgraph.go
@@ -175,7 +175,7 @@
}
lg.edges = make(TargetEdgeList, 0, esize)
for _, tn := range lg.targets {
- tn.licenseConditions = LicenseConditionSetFromNames(tn, tn.proto.LicenseConditions...)
+ tn.licenseConditions = LicenseConditionSetFromNames(tn.proto.LicenseConditions...)
err = addDependencies(lg, tn)
if err != nil {
return nil, fmt.Errorf("error indexing dependencies for %q: %w", tn.name, err)
diff --git a/tools/compliance/resolutionset_test.go b/tools/compliance/resolutionset_test.go
index 89cdfeb..efdff82 100644
--- a/tools/compliance/resolutionset_test.go
+++ b/tools/compliance/resolutionset_test.go
@@ -27,48 +27,44 @@
// binc represents a compiler or other toolchain binary used for
// building the other binaries.
bottomUp = []res{
- {"image", "image", "image", "notice"},
- {"image", "image", "bin2", "restricted"},
- {"image", "bin1", "bin1", "reciprocal"},
- {"image", "bin2", "bin2", "restricted"},
- {"image", "lib1", "lib1", "notice"},
- {"image", "lib2", "lib2", "notice"},
- {"binc", "binc", "binc", "proprietary"},
- {"bin1", "bin1", "bin1", "reciprocal"},
- {"bin1", "lib1", "lib1", "notice"},
- {"bin2", "bin2", "bin2", "restricted"},
- {"bin2", "lib2", "lib2", "notice"},
- {"lib1", "lib1", "lib1", "notice"},
- {"lib2", "lib2", "lib2", "notice"},
+ {"image", "image", "notice|restricted"},
+ {"image", "bin1", "reciprocal"},
+ {"image", "bin2", "restricted"},
+ {"image", "lib1", "notice"},
+ {"image", "lib2", "notice"},
+ {"binc", "binc", "proprietary"},
+ {"bin1", "bin1", "reciprocal"},
+ {"bin1", "lib1", "notice"},
+ {"bin2", "bin2", "restricted"},
+ {"bin2", "lib2", "notice"},
+ {"lib1", "lib1", "notice"},
+ {"lib2", "lib2", "notice"},
}
// notice describes bottomUp after a top-down notice resolve.
notice = []res{
- {"image", "image", "image", "notice"},
- {"image", "image", "bin2", "restricted"},
- {"image", "bin1", "bin1", "reciprocal"},
- {"image", "bin2", "bin2", "restricted"},
- {"image", "lib1", "lib1", "notice"},
- {"image", "lib2", "bin2", "restricted"},
- {"image", "lib2", "lib2", "notice"},
- {"bin1", "bin1", "bin1", "reciprocal"},
- {"bin1", "lib1", "lib1", "notice"},
- {"bin2", "bin2", "bin2", "restricted"},
- {"bin2", "lib2", "bin2", "restricted"},
- {"bin2", "lib2", "lib2", "notice"},
- {"lib1", "lib1", "lib1", "notice"},
- {"lib2", "lib2", "lib2", "notice"},
+ {"image", "image", "notice|restricted"},
+ {"image", "bin1", "reciprocal"},
+ {"image", "bin2", "restricted"},
+ {"image", "lib1", "notice"},
+ {"image", "lib2", "notice|restricted"},
+ {"bin1", "bin1", "reciprocal"},
+ {"bin1", "lib1", "notice"},
+ {"bin2", "bin2", "restricted"},
+ {"bin2", "lib2", "notice|restricted"},
+ {"lib1", "lib1", "notice"},
+ {"lib2", "lib2", "notice"},
}
// share describes bottomUp after a top-down share resolve.
share = []res{
- {"image", "image", "bin2", "restricted"},
- {"image", "bin1", "bin1", "reciprocal"},
- {"image", "bin2", "bin2", "restricted"},
- {"image", "lib2", "bin2", "restricted"},
- {"bin1", "bin1", "bin1", "reciprocal"},
- {"bin2", "bin2", "bin2", "restricted"},
- {"bin2", "lib2", "bin2", "restricted"},
+ {"image", "image", "restricted"},
+ {"image", "bin1", "reciprocal"},
+ {"image", "bin2", "restricted"},
+ {"image", "lib2", "restricted"},
+ {"bin1", "bin1", "reciprocal"},
+ {"bin2", "bin2", "restricted"},
+ {"bin2", "lib2", "restricted"},
}
// proprietary describes bottomUp after a top-down proprietary resolve.
diff --git a/tools/compliance/test_util.go b/tools/compliance/test_util.go
index f0242e2..053b398 100644
--- a/tools/compliance/test_util.go
+++ b/tools/compliance/test_util.go
@@ -121,28 +121,24 @@
return tn
}
-// newTestCondition constructs a test license condition in the license graph.
-func newTestCondition(lg *LicenseGraph, targetName string, conditionName string) LicenseCondition {
- tn := newTestNode(lg, targetName)
- cl := LicenseConditionSetFromNames(tn, conditionName).AsList()
+// newTestCondition constructs a test license condition.
+func newTestCondition(conditionName string) LicenseCondition {
+ cl := LicenseConditionSetFromNames(conditionName).AsList()
if len(cl) == 0 {
panic(fmt.Errorf("attempt to create unrecognized condition: %q", conditionName))
} else if len(cl) != 1 {
panic(fmt.Errorf("unexpected multiple conditions from condition name: %q: got %d, want 1", conditionName, len(cl)))
}
lc := cl[0]
- tn.licenseConditions = tn.licenseConditions.Plus(lc)
return lc
}
-// newTestConditionSet constructs a test license condition set in the license graph.
-func newTestConditionSet(lg *LicenseGraph, targetName string, conditionName []string) LicenseConditionSet {
- tn := newTestNode(lg, targetName)
- cs := LicenseConditionSetFromNames(tn, conditionName...)
+// newTestConditionSet constructs a test license condition set.
+func newTestConditionSet(conditionName []string) LicenseConditionSet {
+ cs := LicenseConditionSetFromNames(conditionName...)
if cs.IsEmpty() {
panic(fmt.Errorf("attempt to create unrecognized condition: %q", conditionName))
}
- tn.licenseConditions = tn.licenseConditions.Union(cs)
return cs
}
@@ -283,12 +279,12 @@
// act describes test data resolution actions to define test action sets.
type act struct {
- actsOn, origin, condition string
+ actsOn, condition string
}
// String returns a human-readable string representing the test action.
func (a act) String() string {
- return fmt.Sprintf("%s{%s:%s}", a.actsOn, a.origin, a.condition)
+ return fmt.Sprintf("%s{%s}", a.actsOn, a.condition)
}
// toActionSet converts a list of act test data into a test action set.
@@ -296,7 +292,7 @@
as := make(ActionSet)
for _, a := range data {
actsOn := newTestNode(lg, a.actsOn)
- cs := newTestConditionSet(lg, a.origin, strings.Split(a.condition, "|"))
+ cs := newTestConditionSet(strings.Split(a.condition, "|"))
as[actsOn] = cs
}
return as
@@ -304,7 +300,7 @@
// res describes test data resolutions to define test resolution sets.
type res struct {
- attachesTo, actsOn, origin, condition string
+ attachesTo, actsOn, condition string
}
// toResolutionSet converts a list of res test data into a test resolution set.
@@ -316,7 +312,7 @@
if _, ok := rmap[attachesTo]; !ok {
rmap[attachesTo] = make(ActionSet)
}
- cs := newTestConditionSet(lg, r.origin, strings.Split(r.condition, ":"))
+ cs := newTestConditionSet(strings.Split(r.condition, "|"))
rmap[attachesTo][actsOn] |= cs
}
return rmap
@@ -416,15 +412,13 @@
result := make([]SourceSharePrivacyConflict, 0, len(data))
for _, c := range data {
fields := strings.Split(c.share, ":")
- oshare := fields[0]
cshare := fields[1]
fields = strings.Split(c.privacy, ":")
- oprivacy := fields[0]
cprivacy := fields[1]
result = append(result, SourceSharePrivacyConflict{
newTestNode(lg, c.sourceNode),
- newTestCondition(lg, oshare, cshare),
- newTestCondition(lg, oprivacy, cprivacy),
+ newTestCondition(cshare),
+ newTestCondition(cprivacy),
})
}
return result