diff --git a/CMakeLists.txt b/CMakeLists.txt index 94d6c2c..5acdf8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION "3.28") -project("cpackexample" VERSION 0.1.0) +project("cpackexample" VERSION 0.1.0 LANGUAGES CXX) FIND_PACKAGE(deal.II 9.5 REQUIRED HINTS ${DEAL_II_DIR} ../ ../../ $ENV{DEAL_II_DIR} @@ -8,15 +8,61 @@ FIND_PACKAGE(deal.II 9.5 REQUIRED DEAL_II_INITIALIZE_CACHED_VARIABLES() # Uses the FindBoost module of CMake -find_package(Boost 1.83 COMPONENTS filesystem REQUIRED) +find_package(Boost 1.83 REQUIRED COMPONENTS filesystem) find_package(yaml-cpp 0.6 REQUIRED) -add_library(cpackexamplelib filesystem/filesystem.cpp fem/fem.cpp flatset/flatset.cpp yamlParser/yamlParser.cpp) +# Prefer standard install locations via GNUInstallDirs +include(GNUInstallDirs) + +# Require modern C++ for all targets +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +add_library(cpackexamplelib + filesystem/filesystem.cpp + fem/fem.cpp + flatset/flatset.cpp + yamlParser/yamlParser.cpp +) add_executable("${PROJECT_NAME}" main.cpp) target_link_libraries("${PROJECT_NAME}" cpackexamplelib) target_link_libraries(cpackexamplelib Boost::filesystem ${YAML_CPP_LIBRARIES}) +# Public headers for the library (used by consumers) +target_include_directories(cpackexamplelib + PUBLIC + $ + $ +) + DEAL_II_SETUP_TARGET("${PROJECT_NAME}") DEAL_II_SETUP_TARGET(cpackexamplelib) + +install(TARGETS "${PROJECT_NAME}" + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +install(TARGETS cpackexamplelib + EXPORT cpackexampleTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +) + +install(FILES + fem/fem.hpp + filesystem/filesystem.hpp + flatset/flatset.hpp + yamlParser/yamlParser.hpp + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/cpackexamplelib +) + +install(FILES man/cpackexample.1.gz + DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) + + +# Separate CPack configuration +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +include(CPackConfig) \ No newline at end of file diff --git a/cmake/CPackConfig.cmake b/cmake/CPackConfig.cmake new file mode 100644 index 0000000..456170f --- /dev/null +++ b/cmake/CPackConfig.cmake @@ -0,0 +1,29 @@ +set(CPACK_PACKAGE_NAME "${PROJECT_NAME}") +set(CPACK_PACKAGE_MAINTAINERS "Isik Özsoy ") +set(CPACK_PACKAGE_VENDOR "Isik Özsoy") +set(CPACK_PACKAGE_CONTACT "ozsoyisik@gmail.com") + +set(CPACK_PACKAGE_DESCRIPTION "CPack packaging example") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CPack example") + +set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/ozsoyisik/cpack-exercise-wt2526") +set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}") + +set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") + +# I have added this using chatgpt while trying to solve a problem +if(UNIX AND NOT APPLE) + set(CPACK_GENERATOR "TGZ;DEB") + set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Isik Özsoy ") + set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) +else() + set(CPACK_GENERATOR "TGZ") +endif() + +set(CPACK_STRIP_FILES ON) + +include(CPack) \ No newline at end of file diff --git a/man/cpackexample.1.gz b/man/cpackexample.1.gz new file mode 100644 index 0000000..8a071cf Binary files /dev/null and b/man/cpackexample.1.gz differ