--- /dev/null
+FROM $distro
+ENV DEBIAN_FRONTEND=noninteractive
+RUN apt-get update \
+ && apt-get install --assume-yes --no-install-recommends \
+ build-essential \
+ cmake \
+ file \
+ git \
+ cppcheck \
+ lcov \
+ && apt-get clean \
+ && rm --recursive --force /var/lib/apt/lists/*
+RUN apt-get update \
+ && apt-get install --assume-yes --no-install-recommends \
+ libcmocka-dev \
+ && apt-get clean \
+ && rm --recursive --force /var/lib/apt/lists/*
+COPY run /app/run
+ENTRYPOINT /app/run
--- /dev/null
+#!/bin/bash
+
+create_containerfile()
+{
+ local distro="$1"
+ local distro_postfix="$2"
+
+ cat builder/Containerfile.template \
+ | sed "s/\$distro/$distro/" \
+ > build/Containerfile-$distro_postfix \
+ || return $?
+}
+
+build_container_image()
+{
+ local distro_postfix="$1"
+
+ podman build \
+ --tag mv-none-space-builder:$distro_postfix \
+ --file build/Containerfile-$distro_postfix \
+ || return $?
+}
+
+run_builder_container()
+{
+ local distro_postfix="$1"
+
+ podman run \
+ --tty \
+ --rm \
+ --volume .:/src \
+ mv-none-space-builder:$distro_postfix \
+ || return $?
+}
+
+main()
+{
+ local distros=${DISTROS:="debian:oldstable-slim debian:stable-slim debian:testing-slim ubuntu:latest ubuntu:rolling"}
+ mkdir --parents build
+ cp builder/run build/run
+ chmod 755 build/run
+
+ for distro in $distros; do
+ local distro_postfix=${distro/:/-}
+ create_containerfile "$distro" "$distro_postfix" || return $?
+ build_container_image "$distro_postfix" || return $?
+ run_builder_container "$distro_postfix" || return $?
+ done
+}
+
+main
--- /dev/null
+#!/bin/bash
+
+get_source_date()
+{
+ umask 0022
+ cd /src && export SOURCE_DATE_EPOCH=$(git log --max-count=1 --pretty="%ct")
+}
+
+create_package_checksum()
+{
+ local package=$(find . -maxdepth 1 -name '*.deb' )
+ sha256sum *.deb > $package.sha256 || return $?
+ cat $package.sha256 || return $?
+}
+
+reproducible_package_checksum_check()
+{
+ local package=$(find . -maxdepth 1 -name '*.deb')
+ cp /src/build/$package.sha256 . || return $?
+ cat $package.sha256 || return $?
+ sha256sum -c $package.sha256
+}
+
+run_tests()
+{
+ mkdir --parents /app/tests && cd /app/tests
+ cmake -DCMAKE_BUILD_TYPE=Debug /src || return $?
+ make --jobs=$(nproc) || return $?
+}
+
+build_package()
+{
+ mkdir --parents /app/build && cd /app/build
+ cmake -DCMAKE_BUILD_TYPE=Release \
+ -DEXTRA_VERSION="-$ID-$VERSION_CODENAME" /src || return $?
+ make --jobs=$(nproc) package || return $?
+}
+
+copy_package()
+{
+ mkdir --parents /src/build
+ cp /app/build/*.deb /src/build/ || return $?
+ cp /app/build/*.sha256 /src/build/ || return $?
+}
+
+build_reproducible_package()
+{
+ mkdir --parents /app/reproducible-build && cd /app/reproducible-build
+ cmake -DCMAKE_BUILD_TYPE=Release /src \
+ -DEXTRA_VERSION="-$ID-$VERSION_CODENAME" || return $?
+ make --jobs=$(nproc) package || return $?
+}
+
+main()
+{
+ source /etc/os-release
+ get_source_date || return $?
+
+ run_tests || return $?
+ build_package || return $?
+ create_package_checksum || return $?
+ copy_package || return $?
+ build_reproducible_package || return $?
+ reproducible_package_checksum_check || return $?
+}
+
+main
\ No newline at end of file
set(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_NAME "mv-none-space")
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
-set(CPACK_DEBIAN_PACKAGE_VERSION ${PROJECT_VERSION})
+set(CPACK_DEBIAN_PACKAGE_VERSION ${PROJECT_VERSION}-${EXTRA_VERSION})
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON)
return EXIT_SUCCESS;
}
-int main(int argc, char* argv[])
+int main(int argc, const char* argv[])
{
printf("Version %s\n", VERSION);
find_library(CMOCKA cmocka REQUIRED)
find_program(CPPCHECK cppcheck REQUIRED)
+execute_process(COMMAND bash -c "${CPPCHECK} --version | sed -z 's/Cppcheck \\(.*\\)\\n$/\\1/'"
+ OUTPUT_VARIABLE CPPCHECK_VERSION)
+
add_executable(tests
tests.c
command_validate_tests.c
ALL ./tests
DEPENDS tests)
-add_custom_command(TARGET run_tests
- POST_BUILD
- COMMAND ${CPPCHECK}
- --check-level=exhaustive
- --enable=warning,style
- ${CMAKE_SOURCE_DIR}/src
- ${CMAKE_SOURCE_DIR}/tests)
\ No newline at end of file
+if(CPPCHECK_VERSION VERSION_GREATER 2.10)
+ add_custom_command(TARGET run_tests
+ POST_BUILD
+ COMMAND ${CPPCHECK}
+ --check-level=exhaustive
+ --enable=warning,style
+ ${CMAKE_SOURCE_DIR}/src
+ ${CMAKE_SOURCE_DIR}/tests)
+else()
+ add_custom_command(TARGET run_tests
+ POST_BUILD
+ COMMAND ${CPPCHECK}
+ --enable=warning,style
+ ${CMAKE_SOURCE_DIR}/src
+ ${CMAKE_SOURCE_DIR}/tests)
+endif()
\ No newline at end of file