Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/build/
/dist/
66 changes: 65 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,77 @@ DEAL_II_INITIALIZE_CACHED_VARIABLES()
# Uses the FindBoost module of CMake
find_package(Boost 1.83 COMPONENTS filesystem REQUIRED)

find_package(yaml-cpp 0.6 REQUIRED)
find_package(yaml-cpp 0.8 REQUIRED)

add_library(cpackexamplelib filesystem/filesystem.cpp fem/fem.cpp flatset/flatset.cpp yamlParser/yamlParser.cpp)


set_target_properties(cpackexamplelib PROPERTIES
PUBLIC_HEADER "fem/fem.hpp;filesystem/filesystem.hpp;flatset/flatset.hpp;yamlParser/yamlParser.hpp"
)

add_executable("${PROJECT_NAME}" main.cpp)

target_link_libraries("${PROJECT_NAME}" cpackexamplelib)
target_link_libraries(cpackexamplelib Boost::filesystem ${YAML_CPP_LIBRARIES})

DEAL_II_SETUP_TARGET("${PROJECT_NAME}")
DEAL_II_SETUP_TARGET(cpackexamplelib)


include(GNUInstallDirs)

set(LICENSE_FILE "${CMAKE_SOURCE_DIR}/LICENSE")
install(
FILES "${LICENSE_FILE}"
DESTINATION "${CMAKE_INSTALL_DOCDIR}"
RENAME "copyright"
COMPONENT doc
)


set(DEB_CHANGELOG_SRC "${CMAKE_SOURCE_DIR}/changelog")
set(DEB_CHANGELOG_GZ "${CMAKE_BINARY_DIR}/changelog.gz")

add_custom_command(
OUTPUT "${DEB_CHANGELOG_GZ}"
COMMAND ${CMAKE_COMMAND} -E env SOURCE_DATE_EPOCH=0 GZIP=-9 sh -c
"gzip -n -c '${DEB_CHANGELOG_SRC}' > '${DEB_CHANGELOG_GZ}'"
DEPENDS "${DEB_CHANGELOG_SRC}"
VERBATIM
)
add_custom_target(gen_deb_changelog ALL DEPENDS "${DEB_CHANGELOG_GZ}")

install(
FILES "${DEB_CHANGELOG_GZ}"
DESTINATION "${CMAKE_INSTALL_DOCDIR}"
RENAME "changelog.gz"
)

set(DEB_MANPAGE_SRC "${CMAKE_SOURCE_DIR}/man/cpackexample.1")
set(DEB_MANPAGE_GZ "${CMAKE_BINARY_DIR}/cpackexample.1.gz")

add_custom_command(
OUTPUT "${DEB_MANPAGE_GZ}"
COMMAND ${CMAKE_COMMAND} -E env SOURCE_DATE_EPOCH=0 GZIP=-9 sh -c
"gzip -n -c '${DEB_MANPAGE_SRC}' > '${DEB_MANPAGE_GZ}'"
DEPENDS "${DEB_MANPAGE_SRC}"
VERBATIM
)
add_custom_target(gen_deb_manpage ALL DEPENDS "${DEB_MANPAGE_GZ}")

install(
FILES "${DEB_MANPAGE_GZ}"
DESTINATION "${CMAKE_INSTALL_MANDIR}/man1"
)


install(TARGETS cpackexample cpackexamplelib
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cpackexamplelib
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cpackexamplelib
)

include(cmake/CPackConfig.cmake)
15 changes: 8 additions & 7 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,18 @@ RUN apt-get -qq update && \
vim \
tree \
lintian \
unzip
unzip \
libyaml-cpp-dev

# Get, unpack, build, and install yaml-cpp
RUN mkdir software && cd software && \
wget https://github.com/jbeder/yaml-cpp/archive/refs/tags/yaml-cpp-0.6.3.zip && unzip yaml-cpp-0.6.3.zip && \
cd yaml-cpp-yaml-cpp-0.6.3 && mkdir build && cd build && \
cmake -DYAML_BUILD_SHARED_LIBS=ON .. && make -j4 && make install

# This is some strange Docker feature. Normally, you don't need to add /usr/local to these
ENV LIBRARY_PATH $LIBRARY_PATH:/usr/local/lib/
ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/lib/
ENV PATH $PATH:/usr/local/bin/

CMD ["/bin/bash"]
RUN mkdir -p /src /out
COPY --chmod=755 docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

# CMD ["/bin/bash"]

5 changes: 5 additions & 0 deletions changelog
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
cpackexample (0.1.0) unstable; urgency=medium

* Initial release.

-- Felix Kimmerle <FelixKimmerle@hotmail.com> Thu, 04 Dec 2025 12:00:00 +0100
25 changes: 25 additions & 0 deletions cmake/CPackConfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})


set(CPACK_DEBIAN_PACKAGE_DESCRIPTION
"SSE artificial cpack example
This package demonstrates packaging with CMake/CPack to TGZ and DEB.
It installs a small binary and a library and ships docs under
/usr/share/doc/${CPACK_PACKAGE_NAME}/."
)
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ""
CACHE STRING "Very extensive description of the cpack example module")

set(CPACK_PACKAGE_VENDOR "Felix Kimmerle")
set(CPACK_PACKAGE_CONTACT "FelixKimmerle@hotmail.com")
set(CPACK_PACKAGE_MAINTAINER "FelixKimmerle <${CPACK_PACKAGE_CONTACT}>")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/FelixKimmerle/cpack-exercise-wt2526")

set(CPACK_STRIP_FILES "TRUE")
set(CPACK_GENERATOR "TGZ;DEB")
set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)
# set(CPACK_DEBIAN_PACKAGE_VERSION 1)
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Felix Kimmerle <${CPACK_PACKAGE_CONTACT}>")

include(CPack)
29 changes: 29 additions & 0 deletions docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail
shopt -s nullglob

SRC_DIR="/src"
OUT_DIR="/out"
BUILD_DIR="/tmp/build"

mkdir -p "$BUILD_DIR"
mkdir -p "$OUT_DIR"


cmake -S "$SRC_DIR" -B "$BUILD_DIR" \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DCPACK_PACKAGE_DIRECTORY="$BUILD_DIR"

make -C "$BUILD_DIR" -j"$(nproc)" package

artifacts=(
"$BUILD_DIR"/*.tar.gz
"$BUILD_DIR"/*.deb
)

for f in "${artifacts[@]}"; do
cp -f "$f" "$OUT_DIR/"
done

ls -l "$OUT_DIR"
7 changes: 7 additions & 0 deletions man/cpackexample.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.TH cpackexample 1 "Dec 2025" "cpackexample 0.1.0" "User Commands"
.SH NAME
cpackexample \- demo binary
.SH SYNOPSIS
.B cpackexample
.SH DESCRIPTION
Demo program for CMake/CPack packaging.