The current CI build for Linux fails with the following error:
2791.4 Scanning dependencies of target ResourceFiles
2791.4 [ 68%] Building CXX object ResourceFiles/CMakeFiles/ResourceFiles.dir/ResourceFork.cc.o
2791.4 [ 69%] Building CXX object ResourceFiles/CMakeFiles/ResourceFiles.dir/BinaryIO.cc.o
2791.4 [ 69%] Building CXX object ResourceFiles/CMakeFiles/ResourceFiles.dir/ResType.cc.o
2791.4 [ 70%] Building CXX object ResourceFiles/CMakeFiles/ResourceFiles.dir/ResourceFile.cc.o
------
Dockerfile:21
--------------------
20 |
21 | >>> RUN mkdir /Retro68-build && \
22 | >>> mkdir /Retro68-build/bin && \
23 | >>> bash -c "cd /Retro68-build && bash /Retro68/build-toolchain.bash"
Looking back through the logs there is no sign of any specific error, however
the CI history indicates that the problem was introduced via commit e187bd21c2
("honor SOURCE_DATE_EPOCH variable when timestamping MacBinary files").
A bit of searching suggests a couple of possible reasons as to why commit e187bd21c2
could introduce a build failure: 1) the version of gcc being used may have a
buggy/incomplete implementation of std::chrono or 2) a bug in the version of cmake.
On this basis updating the Ubuntu base image from 20.04 (old LTS) to 22.04 (current
LTS) should resolve these issues, and indeed with this change applied I can
successfully build the container image from current Retro68 git as well as one of
the sample applications.
Define a docker-entrypoint.sh that checks for the environment variables INTERFACES.
If INTERFACES is set to "universal" then we do the following:
- If the universal/RIncludes directory is not empty, assume that the Universal
interfaces are already installed. Call interfaces-and-libraries.sh to link
the Universal interfaces instead of the default multiversal interfaces.
- Otherwise check the INTERFACESFILE environment variable to locate a suitable
Macbinary DiskCopy image of MPW-GM.img.bin containing the
"Interfaces&Libraries" directory, which can be a path within the container
image itself or an external URL. If the file is a URL then download it first,
then decompress the file using ConvertDiskImage and then use the in-built
hfsutils to extract the relevant files under /tmp/InterfacesAndLibraries.
Finally call interfaces-and-libraries.sh to link the Universal interfaces
instead of the default multiversal interfaces.
Otherwise use the multiversal interfaces which are included by default.
Use the docker multi-stage build functionality to perform the Retro68 build in a
temporary build image, and then copy the final build directory into a fresh
release image. This reduces the final release image size from 9.2GB to 2.6GB.
Update Dockerfile to use Ubuntu 20.04 and the updated package list from
azure-pipelines.yml. Also explicitly include the g++ package into the container
without which configure will error out with a 'configure: error: C++ preprocessor
"/lib/cpp" fails sanity check' error.