build-unit-test-docker: generate package directives
Generate the docker build directives for all packages by
performing a depth-first dependency search.
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: Ia3b6778e0f15bd9d5c4cff5e5e7bf2a620c0e156
diff --git a/scripts/build-unit-test-docker b/scripts/build-unit-test-docker
index 8784d84..17e5aa9 100755
--- a/scripts/build-unit-test-docker
+++ b/scripts/build-unit-test-docker
@@ -372,6 +372,36 @@
return result
+def pkg_generate(pkg):
+ if "__pkg_built" in packages[pkg]:
+ return None
+
+ result = ""
+
+ for deppkg in sorted(packages[pkg].get("depends", [])):
+ dep_build = pkg_generate(deppkg)
+ if not dep_build:
+ continue
+ result += dep_build + "\n"
+
+ result += f"FROM openbmc-base as {pkg_stagename(pkg)}\n"
+ result += pkg_copycmds(pkg)
+ result += pkg_build(pkg)
+
+ packages[pkg]["__pkg_built"] = True
+ return result
+
+
+def pkg_generate_packages():
+ result = ""
+ for pkg in sorted(packages.keys()):
+ build = pkg_generate(pkg)
+ if not build:
+ continue
+ result += build + "\n"
+ return result
+
+
# Look up the HEAD for missing a static rev.
pkg_lookups = {}
for pkg in packages.keys():
@@ -553,105 +583,7 @@
RUN pip3 install meson==0.54.3
RUN pip3 install protobuf
-FROM openbmc-base as {pkg_stagename('linux-test-project/lcov')}
-{pkg_copycmds('linux-test-project/lcov')}
-{pkg_build('linux-test-project/lcov')}
-
-FROM openbmc-base as {pkg_stagename('Naios/function2')}
-{pkg_copycmds('Naios/function2')}
-{pkg_build('Naios/function2')}
-
-FROM openbmc-base as {pkg_stagename('google/googletest')}
-{pkg_copycmds('google/googletest')}
-{pkg_build('google/googletest')}
-
-FROM openbmc-base as {pkg_stagename('catchorg/Catch2')}
-{pkg_copycmds('catchorg/Catch2')}
-{pkg_build('catchorg/Catch2')}
-
-FROM openbmc-base as {pkg_stagename('USCiLab/cereal')}
-{pkg_copycmds('USCiLab/cereal')}
-{pkg_build('USCiLab/cereal')}
-
-FROM openbmc-base as {pkg_stagename('CLIUtils/CLI11')}
-{pkg_copycmds('CLIUtils/CLI11')}
-{pkg_build('CLIUtils/CLI11')}
-
-FROM openbmc-base as {pkg_stagename('fmtlib/fmt')}
-{pkg_copycmds('fmtlib/fmt')}
-{pkg_build('fmtlib/fmt')}
-
-FROM openbmc-base as {pkg_stagename('nlohmann/json')}
-{pkg_copycmds('nlohmann/json')}
-{pkg_build('nlohmann/json')}
-
-FROM openbmc-base as {pkg_stagename('nlohmann/fifo_map')}
-{pkg_copycmds('nlohmann/fifo_map')}
-{pkg_build('nlohmann/fifo_map')}
-
-FROM openbmc-base as {pkg_stagename('martinmoene/span-lite')}
-{pkg_copycmds('martinmoene/span-lite')}
-{pkg_build('martinmoene/span-lite')}
-
-FROM openbmc-base as {pkg_stagename('openbmc/linux')}
-{pkg_copycmds('openbmc/linux')}
-{pkg_build('openbmc/linux')}
-
-FROM openbmc-base as {pkg_stagename('boost')}
-{pkg_copycmds('boost')}
-{pkg_build('boost')}
-
-FROM openbmc-base as {pkg_stagename('leethomason/tinyxml2')}
-{pkg_copycmds('leethomason/tinyxml2')}
-{pkg_build('leethomason/tinyxml2')}
-
-FROM openbmc-base as {pkg_stagename('CPPAlliance/url')}
-{pkg_copycmds('CPPAlliance/url')}
-{pkg_build('CPPAlliance/url')}
-
-FROM openbmc-base as {pkg_stagename('tristanpenman/valijson')}
-{pkg_copycmds('tristanpenman/valijson')}
-{pkg_build('tristanpenman/valijson')}
-
-FROM openbmc-base as {pkg_stagename('LibVNC/libvncserver')}
-{pkg_copycmds('LibVNC/libvncserver')}
-{pkg_build('LibVNC/libvncserver')}
-
-FROM openbmc-base as {pkg_stagename('openbmc/stdplus')}
-{pkg_copycmds('openbmc/stdplus')}
-{pkg_build('openbmc/stdplus')}
-
-FROM openbmc-base as {pkg_stagename('openbmc/sdbusplus')}
-{pkg_copycmds('openbmc/sdbusplus')}
-{pkg_build('openbmc/sdbusplus')}
-
-FROM openbmc-base as {pkg_stagename('openbmc/sdeventplus')}
-{pkg_copycmds('openbmc/sdeventplus')}
-{pkg_build('openbmc/sdeventplus')}
-
-FROM openbmc-base as {pkg_stagename('openbmc/gpioplus')}
-{pkg_copycmds('openbmc/gpioplus')}
-{pkg_build('openbmc/gpioplus')}
-
-FROM openbmc-base as {pkg_stagename('openbmc/phosphor-dbus-interfaces')}
-{pkg_copycmds('openbmc/phosphor-dbus-interfaces')}
-{pkg_build('openbmc/phosphor-dbus-interfaces')}
-
-FROM openbmc-base as {pkg_stagename('openbmc/phosphor-logging')}
-{pkg_copycmds('openbmc/phosphor-logging')}
-{pkg_build('openbmc/phosphor-logging')}
-
-FROM openbmc-base as {pkg_stagename('openbmc/phosphor-objmgr')}
-{pkg_copycmds('openbmc/phosphor-objmgr')}
-{pkg_build('openbmc/phosphor-objmgr')}
-
-FROM openbmc-base as {pkg_stagename('open-power/pdbg')}
-{pkg_copycmds('open-power/pdbg')}
-{pkg_build('open-power/pdbg')}
-
-FROM openbmc-base as {pkg_stagename('openbmc/pldm')}
-{pkg_copycmds('openbmc/pldm')}
-{pkg_build('openbmc/pldm')}
+{pkg_generate_packages()}
# Build the final output image
FROM openbmc-base