content: ARG DOCKER_IMAGE_BASE
  FROM ${DOCKER_IMAGE_BASE}
  
  
  # Build arguments. This can be changed when invoking
  # `docker build`.
  ARG ASAN_BUILD
  ARG ASAN_DSO
  ARG BUILD_DOCS
  ARG CC
  ARG CXX
  ARG DOTNET_BINDINGS
  ARG JAVA_BINDINGS
  ARG NO_SUPPRESS_OUTPUT
  ARG PYTHON_BINDINGS
  ARG PYTHON_EXECUTABLE=/usr/bin/python2.7
  ARG RUN_API_EXAMPLES
  ARG RUN_SYSTEM_TESTS
  ARG RUN_UNIT_TESTS
  ARG SANITIZER_PRINT_SUPPRESSIONS
  ARG TARGET_ARCH
  ARG TEST_INSTALL
  ARG UBSAN_BUILD
  ARG Z3_USE_LIBGMP
  ARG USE_LTO
  ARG Z3_SRC_DIR=/home/user/z3_src
  ARG Z3_BUILD_TYPE
  ARG Z3_CMAKE_GENERATOR
  ARG Z3_INSTALL_PREFIX
  ARG Z3_STATIC_BUILD
  ARG Z3_SYSTEM_TEST_GIT_REVISION
  ARG Z3_WARNINGS_AS_ERRORS
  ARG Z3_VERBOSE_BUILD_OUTPUT
  
  ENV \
    ASAN_BUILD=${ASAN_BUILD} \
    ASAN_DSO=${ASAN_DSO} \
    BUILD_DOCS=${BUILD_DOCS} \
    CC=${CC} \
    CXX=${CXX} \
    DOTNET_BINDINGS=${DOTNET_BINDINGS} \
    JAVA_BINDINGS=${JAVA_BINDINGS} \
    NO_SUPPRESS_OUTPUT=${NO_SUPPRESS_OUTPUT} \
    PYTHON_BINDINGS=${PYTHON_BINDINGS} \
    PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} \
    SANITIZER_PRINT_SUPPRESSIONS=${SANITIZER_PRINT_SUPPRESSIONS} \
    RUN_API_EXAMPLES=${RUN_API_EXAMPLES} \
    RUN_SYSTEM_TESTS=${RUN_SYSTEM_TESTS} \
    RUN_UNIT_TESTS=${RUN_UNIT_TESTS} \
    TARGET_ARCH=${TARGET_ARCH} \
    TEST_INSTALL=${TEST_INSTALL} \
    UBSAN_BUILD=${UBSAN_BUILD} \
    Z3_USE_LIBGMP=${Z3_USE_LIBGMP} \
    USE_LTO=${USE_LTO} \
    Z3_SRC_DIR=${Z3_SRC_DIR} \
    Z3_BUILD_DIR=/home/user/z3_build \
    Z3_BUILD_TYPE=${Z3_BUILD_TYPE} \
    Z3_CMAKE_GENERATOR=${Z3_CMAKE_GENERATOR} \
    Z3_VERBOSE_BUILD_OUTPUT=${Z3_VERBOSE_BUILD_OUTPUT} \
    Z3_STATIC_BUILD=${Z3_STATIC_BUILD} \
    Z3_SYSTEM_TEST_DIR=/home/user/z3_system_test \
    Z3_SYSTEM_TEST_GIT_REVISION=${Z3_SYSTEM_TEST_GIT_REVISION} \
    Z3_WARNINGS_AS_ERRORS=${Z3_WARNINGS_AS_ERRORS} \
    Z3_INSTALL_PREFIX=${Z3_INSTALL_PREFIX}
  
  # We add context across incrementally to maximal cache reuse
  
  # Build Z3
  RUN mkdir -p "${Z3_SRC_DIR}" && \
    mkdir -p "${Z3_SRC_DIR}/contrib/ci/scripts" && \
    mkdir -p "${Z3_SRC_DIR}/contrib/suppressions/sanitizers"
  # Deliberately leave out `contrib`
  ADD /cmake ${Z3_SRC_DIR}/cmake/
  ADD /doc ${Z3_SRC_DIR}/doc/
  ADD /examples ${Z3_SRC_DIR}/examples/
  ADD /scripts ${Z3_SRC_DIR}/scripts/
  ADD /src ${Z3_SRC_DIR}/src/
  ADD *.txt *.md *.cmake.in RELEASE_NOTES ${Z3_SRC_DIR}/
  
  ADD \
    /contrib/ci/scripts/build_z3_cmake.sh \
    /contrib/ci/scripts/ci_defaults.sh \
    /contrib/ci/scripts/set_compiler_flags.sh \
    /contrib/ci/scripts/set_generator_args.sh \
    ${Z3_SRC_DIR}/contrib/ci/scripts/
  RUN ${Z3_SRC_DIR}/contrib/ci/scripts/build_z3_cmake.sh
  
  # Test building docs
  ADD \
    /contrib/ci/scripts/test_z3_docs.sh \
    /contrib/ci/scripts/run_quiet.sh \
    ${Z3_SRC_DIR}/contrib/ci/scripts/
  RUN ${Z3_SRC_DIR}/contrib/ci/scripts/test_z3_docs.sh
  
  # Test examples
  ADD \
    /contrib/ci/scripts/test_z3_examples_cmake.sh \
    /contrib/ci/scripts/sanitizer_env.sh \
    ${Z3_SRC_DIR}/contrib/ci/scripts/
  ADD \
    /contrib/suppressions/sanitizers/asan.txt \
    /contrib/suppressions/sanitizers/lsan.txt \
    /contrib/suppressions/sanitizers/ubsan.txt \
    ${Z3_SRC_DIR}/contrib/suppressions/sanitizers/
  RUN ${Z3_SRC_DIR}/contrib/ci/scripts/test_z3_examples_cmake.sh
  
  # Run unit tests
  ADD \
    /contrib/ci/scripts/test_z3_unit_tests_cmake.sh \
    ${Z3_SRC_DIR}/contrib/ci/scripts/
  RUN ${Z3_SRC_DIR}/contrib/ci/scripts/test_z3_unit_tests_cmake.sh
  
  # Run system tests
  ADD \
    /contrib/ci/scripts/test_z3_system_tests.sh \
    ${Z3_SRC_DIR}/contrib/ci/scripts/
  RUN ${Z3_SRC_DIR}/contrib/ci/scripts/test_z3_system_tests.sh
  
  # Test install
  ADD \
    /contrib/ci/scripts/test_z3_install_cmake.sh \
    ${Z3_SRC_DIR}/contrib/ci/scripts/
  RUN ${Z3_SRC_DIR}/contrib/ci/scripts/test_z3_install_cmake.sh
  