Each non-regression directory under testdata/ defines a similar build graph. All have the same structure, but different versions of the graph have different license metadata.
The regression* directories can have whatever structure is required for the specific test case.
The structure is meant to simulate some common scenarios:
lib/
directory with some librariesbin/
directory with some executablesbin3
, is a toolchain executable like a compilerapplication
built with the bin3
compiler and linking a couple librariescontiner.zip
that merely bundles files together, andThe testdata starts with a firstparty/
version containng only first-party licenses, and each subsequent directory introduces more restrictive conditions:
notice/
starts with firstparty/
adds third-party notice conditionsreciprocal/
starts with notice/
and adds some reciprocal conditionsrestricted/
starts with reciprocal/
and adds some restricted conditionsproprietary/
starts with restricted/
and add some privacy conditionslib/
directory with some librariesstrict digraph { liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; libc [label="lib/libc.a.meta_lic"]; libd [label="lib/libd.so.meta_lic"]; }
bin/
directory with some executablesstrict digraph { rankdir=LR; bin1 [label="bin/bin1.meta_lic"]; bin2 [label="bin/bin2.meta_lic"]; bin3 [label="bin/bin3.meta_lic\ntoolchain"]; liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; libc [label="lib/libc.a.meta_lic"]; libd [label="lib/libd.so.meta_lic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; {rank=same; bin1 bin2 bin3} }
application
built with the bin3
compiler and linking a couple librariesstrict digraph { rankdir=LR; app [label="application.meta_lic"]; bin3 [label="bin/bin3.meta_lic"]; liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; {rank=same; app} }
container.zip
that merely bundles files togetherstrict digraph { rankdir=LR; bin1 [label="bin/bin1.meta_lic"]; bin2 [label="bin/bin2.meta_lic"]; container [label="container.zip.meta_lic"]; liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; libc [label="lib/libc.a.meta_lic"]; libd [label="lib/libd.so.meta_lic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; {rank=same; container} }
strict digraph { rankdir=LR; apex [label="highest.apex.meta_lic"]; bin1 [label="bin/bin1.meta_lic"]; bin2 [label="bin/bin2.meta_lic"]; bin3 [label="bin/bin3.meta_lic"]; liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; libc [label="lib/libc.a.meta_lic"]; libd [label="lib/libd.so.meta_lic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; apex} }
strict digraph { rankdir=LR; apex [label="highest.apex.meta_lic"]; app [label="application.meta_lic"]; bin1 [label="bin/bin1.meta_lic"]; bin2 [label="bin/bin2.meta_lic"]; bin3 [label="bin/bin3.meta_lic"]; container [label="container.zip.meta_lic"]; liba [label="lib/liba.so.meta_lic"]; libb [label="lib/libb.so.meta_lic"]; libc [label="lib/libc.a.meta_lic"]; libd [label="lib/libd.so.meta_lic"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} }
strict digraph { rankdir=LR; app [label="firstparty/application.meta_lic"]; bin1 [label="firstparty/bin/bin1.meta_lic"]; bin2 [label="firstparty/bin/bin2.meta_lic"]; bin3 [label="firstparty/bin/bin3.meta_lic"]; container [label="firstparty/container.zip.meta_lic"]; apex [label="firstparty/highest.apex.meta_lic"]; liba [label="firstparty/lib/liba.so.meta_lic"]; libb [label="firstparty/lib/libb.so.meta_lic"]; libc [label="firstparty/lib/libc.a.meta_lic"]; lib [label="firstparty/lib/libd.so.meta_lic"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} }
strict digraph { rankdir=LR; app [label="notice/application.meta_lic"]; bin1 [label="notice/bin/bin1.meta_lic"]; bin2 [label="notice/bin/bin2.meta_lic"]; bin3 [label="notice/bin/bin3.meta_lic\nnotice"]; container [label="notice/container.zip.meta_lic"]; apex [label="notice/highest.apex.meta_lic"]; liba [label="notice/lib/liba.so.meta_lic\nnotice"]; libb [label="notice/lib/libb.so.meta_lic"]; libc [label="notice/lib/libc.a.meta_lic\nnotice"]; libd [label="notice/lib/libd.so.meta_lic\nnotice"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} }
strict digraph { rankdir=LR; app [label="reciprocal/application.meta_lic"]; bin1 [label="reciprocal/bin/bin1.meta_lic"]; bin2 [label="reciprocal/bin/bin2.meta_lic"]; bin3 [label="reciprocal/bin/bin3.meta_lic\nnotice"]; container [label="reciprocal/container.zip.meta_lic"]; apex [label="reciprocal/highest.apex.meta_lic"]; liba [label="reciprocal/lib/liba.so.meta_lic\nreciprocal"]; libb [label="reciprocal/lib/libb.so.meta_lic"]; libc [label="reciprocal/lib/libc.a.meta_lic\nreciprocal"]; libd [label="reciprocal/lib/libd.so.meta_lic\nnotice"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} }
strict digraph { rankdir=LR; app [label="restricted/application.meta_lic"]; bin1 [label="restricted/bin/bin1.meta_lic"]; bin2 [label="restricted/bin/bin2.meta_lic"]; bin3 [label="restricted/bin/bin3.meta_lic\nrestricted"]; container [label="restricted/container.zip.meta_lic"]; apex [label="restricted/highest.apex.meta_lic"]; liba [label="restricted/lib/liba.so.meta_lic\nrestricted"]; libb [label="restricted/lib/libb.so.meta_lic\nrestricted"]; libc [label="restricted/lib/libc.a.meta_lic\nreciprocal"]; libd [label="restricted/lib/libd.so.meta_lic\nnotice"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} }
strict digraph { rankdir=LR; app [label="proprietary/application.meta_lic"]; bin1 [label="proprietary/bin/bin1.meta_lic"]; bin2 [label="proprietary/bin/bin2.meta_lic\nby_exception_only\nproprietary"]; bin3 [label="proprietary/bin/bin3.meta_lic\nrestricted"]; container [label="proprietary/container.zip.meta_lic"]; apex [label="proprietary/highest.apex.meta_lic"]; liba [label="proprietary/lib/liba.so.meta_lic\nby_exception_only\nproprietary"]; libb [label="proprietary/lib/libb.so.meta_lic\nrestricted"]; libc [label="proprietary/lib/libc.a.meta_lic\nby_exception_only\nproprietary"]; libd [label="proprietary/lib/libd.so.meta_lic\nnotice"]; app -> bin3 [label="toolchain"]; app -> liba [label="static"]; app -> libb [label="dynamic"]; bin1 -> liba [label="static"]; bin1 -> libc [label="static"]; bin2 -> libb [label="dynamic"]; bin2 -> libd [label="dynamic"]; container -> bin1 [label="static"]; container -> bin2 [label="static"]; container -> liba [label="static"]; container -> libb [label="static"]; apex -> bin1 [label="static"]; apex -> bin2 [label="static"]; apex -> liba [label="static"]; apex -> libb [label="static"]; {rank=same; app container apex} }