diff --git a/CMakeLists.txt b/CMakeLists.txt index 007b56b..e0dde92 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,8 +15,7 @@ include(Versioning) # After installation this project can be found by 'find_package' command: # # find_package(libcreate REQUIRED) -# include_directores(${libcreate_INCLUDE_DIRS}) -# target_link_libraries(... ${libcreate_LIBRARIES}) +# target_link_libraries(... libcreate) # project( @@ -24,8 +23,6 @@ project( VERSION ${TAG_VERSION_MAJOR}.${TAG_VERSION_MINOR}.${TAG_VERSION_PATCH} ) -add_compile_options(-Wall -Wextra -Wpedantic) - set(PACKAGE_VERSION ${TAG_VERSION_MAJOR}.${TAG_VERSION_MINOR}.${TAG_VERSION_PATCH}) option(LIBCREATE_BUILD_TESTS "Enable the build of tests." ON) @@ -60,6 +57,8 @@ add_library(${LIBRARY_NAME} SHARED src/types.cpp ) +target_compile_options(${LIBRARY_NAME} PRIVATE -Wall -Wextra -Wpedantic -Werror) + # Manually link to thread library for build on ARM if(THREADS_HAVE_PTHREAD_ARG) set_property(TARGET ${LIBRARY_NAME} PROPERTY COMPILE_OPTIONS "-pthread") @@ -100,82 +99,36 @@ endforeach() # Configuration # ################# +include(GNUInstallDirs) + # set(CMAKE_INSTALL_PREFIX "/usr/") // complib needs this, riplib doesn't -# Install directories layout: -# * /lib/ -# * /bin/ -# * /include/ -# * /lib/cmake/ -# * /share/ -set(LIB_INSTALL_DIR "lib") -set(BIN_INSTALL_DIR "bin") -set(INCLUDE_INSTALL_DIR "include") -set(CONFIG_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}") -set(SHARE_INSTALL_DIR "share/${PROJECT_NAME}") - -set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") -set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}-config-version.cmake") -set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}-config.cmake") -set(TARGETS_EXPORT_NAME "${PROJECT_NAME}-targets") - -include(CMakePackageConfigHelpers) - -# Configure '-config-version.cmake' -write_basic_package_version_file( - "${VERSION_CONFIG}" - VERSION "${PACKAGE_VERSION}" - COMPATIBILITY SameMajorVersion -) - -# Configure '-config.cmake' -configure_package_config_file( - "config.cmake.in" - "${PROJECT_CONFIG}" - INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}" - PATH_VARS - INCLUDE_INSTALL_DIR - LIBRARY_NAME -) - ########### # Install # ########### # Install targets install( - TARGETS ${LIBRARY_NAME} - EXPORT "${TARGETS_EXPORT_NAME}" - LIBRARY DESTINATION "${LIB_INSTALL_DIR}" - ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" - RUNTIME DESTINATION "${BIN_INSTALL_DIR}" - INCLUDES DESTINATION "${INCLUDE_INSTALL_DIR}" -) - -# Install headers -install( - DIRECTORY include/ - DESTINATION ${INCLUDE_INSTALL_DIR} - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE -) + TARGETS ${LIBRARY_NAME} + EXPORT ${LIBRARY_NAME}-config + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) # Install config install( - FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}" - DESTINATION "${CONFIG_INSTALL_DIR}" -) + EXPORT ${LIBRARY_NAME}-config + NAMESPACE create:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LIBRARY_NAME}) -# Install targets -install( - EXPORT "${TARGETS_EXPORT_NAME}" - DESTINATION "${CONFIG_INSTALL_DIR}" -) +# Install headers +install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/include/${LIBRARY_NAME}/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${LIBRARY_NAME}) # Install package.xml (for catkin) install( FILES package.xml - DESTINATION ${SHARE_INSTALL_DIR} + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR} ) ########### diff --git a/ci/Dockerfile b/ci/Dockerfile index 3274bbe..bf82ed3 100644 --- a/ci/Dockerfile +++ b/ci/Dockerfile @@ -2,7 +2,7 @@ FROM debian:bookworm RUN apt update && \ apt install -y \ - build-essential cmake git file \ + build-essential cmake git file tree \ libboost-system-dev libboost-thread-dev \ libgtest-dev googletest && \ rm -rf /var/lib/apt/lists/* diff --git a/ci/entrypoint.sh b/ci/entrypoint.sh index c371918..680207f 100755 --- a/ci/entrypoint.sh +++ b/ci/entrypoint.sh @@ -7,4 +7,9 @@ set -o pipefail cmake -B /libcreate/build -S /libcreate -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS='-Werror' cmake --build /libcreate/build --config Release ctest -C Release --output-on-failure -cpack --build /libcreate/build -G DEB \ No newline at end of file +cpack --build /libcreate/build -G DEB + +debs=(/libcreate/_packages/*.deb) +cp "${debs[0]}" /tmp/libcreate.deb +dpkg-deb -R /tmp/libcreate.deb /tmp/libcreate +tree /tmp/libcreate \ No newline at end of file diff --git a/cmake/Packing.cmake b/cmake/Packing.cmake index 93b1feb..53291fd 100644 --- a/cmake/Packing.cmake +++ b/cmake/Packing.cmake @@ -14,7 +14,7 @@ set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME}) SET(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_SOURCE_DIR}/_packages") # https://unix.stackexchange.com/a/11552/254512 -set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/some")#/${CMAKE_PROJECT_VERSION}") +set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/${CPACK_PACKAGE_NAME}") set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) @@ -40,11 +40,7 @@ set( # package name for deb. If set, then instead of some-application-0.9.2-Linux.deb # you'll get some-application_0.9.2_amd64.deb (note the underscores too) set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) -# that is if you want every group to have its own package, -# although the same will happen if this is not set (so it defaults to ONE_PER_GROUP) -# and CPACK_DEB_COMPONENT_INSTALL is set to YES -set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)#ONE_PER_GROUP) -# without this you won't be able to pack only specified component -set(CPACK_DEB_COMPONENT_INSTALL YES) + +message(STATUS "Components to pack: ${CPACK_COMPONENTS_ALL}") include(CPack) \ No newline at end of file