From 0ca6906cb5ffc26539265fdc568aaa31b4eef4c4 Mon Sep 17 00:00:00 2001 From: tastytea Date: Tue, 30 Jul 2019 11:32:57 +0200 Subject: [PATCH] Updated and modularized cmake recipes. --- CMakeLists.txt | 48 ++++++++++++++++++---------------------- packages.CMakeLists.txt | 49 ++++++++++++++++++++++------------------- src/CMakeLists.txt | 18 +++++++++++++++ 3 files changed, 65 insertions(+), 50 deletions(-) create mode 100644 src/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index de8f3cb..9008de7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,45 +1,39 @@ cmake_minimum_required (VERSION 3.2) project(identiconpp - VERSION 0.6.0 - LANGUAGES CXX -) + VERSION 0.6.0 + LANGUAGES CXX) -include(GNUInstallDirs) -find_package(PkgConfig REQUIRED) -pkg_check_modules(MAGICPP REQUIRED Magick++) +option(WITH_TESTS "Enable Tests" NO) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -string(REPLACE ";" " " MAGICPP_CFLAGS_STRING "${MAGICPP_CFLAGS}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MAGICPP_CFLAGS_STRING}") set(CMAKE_CXX_FLAGS_DEBUG - "${CMAKE_CXX_FLAGS_DEBUG} -Wall -pedantic -Wextra -g -Og -fno-omit-frame-pointer") + "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -Wpedantic -ftrapv \ +-fsanitize=undefined -g -Og -fno-omit-frame-pointer") + if(CMAKE_BUILD_TYPE STREQUAL "Debug") - add_definitions(-DDEBUG=1) + add_definitions(-DDEBUG=1) endif() +include(GNUInstallDirs) + include_directories(${PROJECT_SOURCE_DIR}/src) include_directories(${PROJECT_BINARY_DIR}) -include_directories(${MAGICPP_INCLUDE_DIRS}) -link_directories(${MAGICPP_LIBRARY_DIRS}) - -file(GLOB sources src/*.cpp) -add_library(${CMAKE_PROJECT_NAME} SHARED "${sources}") -set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES - VERSION ${PROJECT_VERSION} - SOVERSION ${${CMAKE_PROJECT_NAME}_VERSION_MAJOR}) -target_link_libraries(${CMAKE_PROJECT_NAME} "${MAGICPP_LDFLAGS}") - -add_executable(example "example.cpp") -target_link_libraries(example ${CMAKE_PROJECT_NAME}) - -install(TARGETS ${CMAKE_PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(FILES src/${CMAKE_PROJECT_NAME}.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -install(FILES src/${CMAKE_PROJECT_NAME}_c.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(FILES README.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) +add_subdirectory(src) + +# configure_file("${PROJECT_SOURCE_DIR}/${PROJECT_NAME}.pc.in" +# "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" @ONLY) + +# install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" +# DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + +if(WITH_TESTS) + add_subdirectory(tests) +endif() + include(packages.CMakeLists.txt) -include(tests.CMakeLists.txt) diff --git a/packages.CMakeLists.txt b/packages.CMakeLists.txt index d4af5e7..34c56d3 100644 --- a/packages.CMakeLists.txt +++ b/packages.CMakeLists.txt @@ -4,42 +4,45 @@ set(CPACK_PACKAGE_VERSION_MAJOR ${${CMAKE_PROJECT_NAME}_VERSION_MAJOR}) set(CPACK_PACKAGE_VERSION_MINOR ${${CMAKE_PROJECT_NAME}_VERSION_MINOR}) set(CPACK_PACKAGE_VERSION_PATCH ${${CMAKE_PROJECT_NAME}_VERSION_PATCH}) set(CPACK_PACKAGE_VERSION ${${CMAKE_PROJECT_NAME}_VERSION}) -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Library to generate identicons. Written in C++.") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY + "Library to generate identicons for C++ and C.") set(CPACK_PACKAGE_CONTACT "tastytea ") set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") set(CPACK_RESOURCE_FILE_README "${PROJECT_SOURCE_DIR}/README.md") list(APPEND CPACK_SOURCE_IGNORE_FILES "/\\\\.git" - "/.gitignore" - "/build/" - "/doc/" - "\\\\.sublime-" - "/.drone.yml") + "/.gitignore" + "/build/" + "/doc/" + "/.drone.yml" + "/.dir-locals.el") execute_process(COMMAND uname -m - OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE - OUTPUT_STRIP_TRAILING_WHITESPACE) + OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE + OUTPUT_STRIP_TRAILING_WHITESPACE) set(CPACK_PACKAGE_FILE_NAME - "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}_${CPACK_PACKAGE_ARCHITECTURE}") + "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}_${CPACK_PACKAGE_ARCHITECTURE}") set(CPACK_GENERATOR "TGZ") set(CPACK_SOURCE_GENERATOR "TGZ") if (WITH_DEB) - set(CPACK_GENERATOR "DEB") - set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://schlomp.space/tastytea/${CMAKE_PROJECT_NAME}") - set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) - execute_process(COMMAND dpkg --print-architecture - OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(CPACK_PACKAGE_FILE_NAME - "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}-0_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") + set(CPACK_GENERATOR "DEB") + set(CPACK_DEBIAN_PACKAGE_HOMEPAGE + "https://schlomp.space/tastytea/${CMAKE_PROJECT_NAME}") + set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) + execute_process(COMMAND dpkg --print-architecture + OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(CPACK_PACKAGE_FILE_NAME + "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}-0_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") endif() if (WITH_RPM) - set(CPACK_GENERATOR "RPM") - set(CPACK_RPM_PACKAGE_LICENSE "GPL-3") - set(CPACK_RPM_PACKAGE_URL "https://schlomp.space/tastytea/${CMAKE_PROJECT_NAME}") - set(CPACK_RPM_PACKAGE_REQUIRES "libMagick++, libxdg-basedir >= 1.2.0") - set(CPACK_PACKAGE_FILE_NAME - "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-0.${CPACK_PACKAGE_ARCHITECTURE}") + set(CPACK_GENERATOR "RPM") + set(CPACK_RPM_PACKAGE_LICENSE "GPL-3") + set(CPACK_RPM_PACKAGE_URL + "https://schlomp.space/tastytea/${CMAKE_PROJECT_NAME}") + set(CPACK_RPM_PACKAGE_REQUIRES "libMagick++, libxdg-basedir >= 1.2.0") + set(CPACK_PACKAGE_FILE_NAME + "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-0.${CPACK_PACKAGE_ARCHITECTURE}") endif() include(CPack) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..2ad5890 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,18 @@ +find_package(PkgConfig REQUIRED) +pkg_check_modules(MAGICPP REQUIRED Magick++) + +include_directories(${MAGICPP_INCLUDE_DIRS}) + +link_directories(${MAGICPP_LIBRARY_DIRS}) + +file(GLOB sources *.cpp) +add_library(${PROJECT_NAME} SHARED ${sources}) +target_link_libraries(${PROJECT_NAME} ${MAGICPP_LIBRARIES}) +target_compile_options(${PROJECT_NAME} PUBLIC ${MAGICPP_CFLAGS}) +set_target_properties(${PROJECT_NAME} PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION ${${PROJECT_NAME}_VERSION_MAJOR}) + +install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(FILES src/${CMAKE_PROJECT_NAME}.hpp src/${CMAKE_PROJECT_NAME}_c.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})