diff --git a/CMakeLists.txt b/CMakeLists.txt index aa006b6..962cfe1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,50 +1,47 @@ -cmake_minimum_required (VERSION 3.2) -project(compilescript - VERSION 0.4.0 - LANGUAGES CXX -) +# Support version 3.6 and above, but use policy settings up to 3.14. +# 3.6 is needed because of IMPORTED_TARGET in pkg_check_modules(). +cmake_minimum_required(VERSION 3.6...3.14) +# Ranges are supported from 3.12, set policy to current for < 3.12. +if(${CMAKE_VERSION} VERSION_LESS 3.12) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +endif() -include(GNUInstallDirs) -find_package(PkgConfig REQUIRED) -pkg_check_modules(LIBXDG_BASEDIR REQUIRED libxdg-basedir) -pkg_check_modules(LIBCONFIG REQUIRED libconfig++) +project(compilescript + VERSION 0.4.0 + LANGUAGES CXX) +# DESCRIPTION was introduced in version 3.9. +if(NOT (${CMAKE_VERSION} VERSION_LESS 3.9)) + set(PROJECT_DESCRIPTION + "Execute source files from compiled languages as scripts.") +endif() + +option(WITH_MAN "Compile and install manpage." YES) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -set(CMAKE_CXX_FLAGS_DEBUG - "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -Wpedantic -ftrapv -fsanitize=undefined -g -Og -fno-omit-frame-pointer") - -include_directories(${PROJECT_BINARY_DIR}) -include_directories(${LIBXDG_BASEDIR_INCLUDE_DIRS}) -include_directories(${LIBCONFIG_INCLUDE_DIRS}) - -link_directories(${LIBXDG_BASEDIR_LIBRARY_DIRS}) -link_directories(${LIBCONFIG_LIBRARY_DIRS}) - -# Write version in header -configure_file( - "${PROJECT_SOURCE_DIR}/src/version.hpp.in" - "${PROJECT_BINARY_DIR}/version.hpp" -) - -file(GLOB sources src/*.cpp) -add_executable(${CMAKE_PROJECT_NAME} "${sources}") -target_link_libraries(${CMAKE_PROJECT_NAME} - "${LIBXDG_BASEDIR_LDFLAGS} ${LIBCONFIG_LDFLAGS}" - "-lstdc++fs") -install(TARGETS ${CMAKE_PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) - -set(WITH_MAN "YES" CACHE STRING "WITH_MAN defaults to \"YES\"") -if (WITH_MAN) - add_custom_command(OUTPUT "${PROJECT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.1" - WORKING_DIRECTORY "${PROJECT_BINARY_DIR}" - DEPENDS "${CMAKE_SOURCE_DIR}/${CMAKE_PROJECT_NAME}.1.adoc" - COMMAND ${CMAKE_SOURCE_DIR}/build_manpage.sh - ARGS ${PROJECT_VERSION}) - add_custom_target(run ALL - DEPENDS "${PROJECT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.1") - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.1 - DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) +set(DEBUG_CXXFLAGS + "-Wall" + "-Wextra" + "-Wpedantic" + "-ftrapv" + "-fsanitize=undefined" + "-g" + "-Og" + "-fno-omit-frame-pointer") +set(DEBUG_LDFLAGS + "-fsanitize=undefined") +add_compile_options("$<$:${DEBUG_CXXFLAGS}>") +# add_link_options was introduced in version 3.13. +if(${CMAKE_VERSION} VERSION_LESS 3.13) + set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${DEBUG_LDFLAGS}") +else() + add_link_options("$<$:${DEBUG_LDFLAGS}>") +endif() + +add_subdirectory(src) + +if (WITH_MAN) + add_subdirectory(man) endif() diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt new file mode 100644 index 0000000..9fb0b7b --- /dev/null +++ b/man/CMakeLists.txt @@ -0,0 +1,14 @@ +include(GNUInstallDirs) + +add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.1" + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + DEPENDS "${PROJECT_NAME}.1.adoc" + COMMAND "${PROJECT_SOURCE_DIR}/man/build_manpage.sh" + ARGS "${PROJECT_VERSION}") + +add_custom_target(man ALL + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.1") + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.1 + DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) diff --git a/build_manpage.sh b/man/build_manpage.sh similarity index 62% rename from build_manpage.sh rename to man/build_manpage.sh index fcf5497..7a308ec 100755 --- a/build_manpage.sh +++ b/man/build_manpage.sh @@ -3,9 +3,10 @@ name="compilescript" if [ -n "${1}" ]; then - dir="$(dirname ${0})" + dir=$(dirname "${0}") + version=${1} cp -vf "${dir}/${name}.1.adoc" . - sed -Ei "s/(Revision: +)[0-9]+\.[0-9]\.[0-9]/\1${1}/" "${name}.1.adoc" + sed -Ei "s/(Revision: +)[0-9]+\.[0-9]\.[0-9]/\1${version}/" "${name}.1.adoc" a2x --doctype manpage --format manpage --no-xmllint "${name}.1.adoc" else echo "usage: ${0} VERSION" >&2 diff --git a/compilescript.1.adoc b/man/compilescript.1.adoc similarity index 100% rename from compilescript.1.adoc rename to man/compilescript.1.adoc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..5ffbda4 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,22 @@ +include(GNUInstallDirs) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(libxdg-basedir REQUIRED IMPORTED_TARGET libxdg-basedir) +pkg_check_modules(libconfig++ REQUIRED IMPORTED_TARGET libconfig++) + +# Write version in header +configure_file("version.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/version.hpp") + +set(sources "main.cpp" "../xdgcfg/src/xdgcfg.cpp") + +add_executable(${CMAKE_PROJECT_NAME} "${sources}") + +target_include_directories(${PROJECT_NAME} + PRIVATE + "${PROJECT_SOURCE_DIR}/xdgcfg/include" + "${CMAKE_CURRENT_BINARY_DIR}") + +target_link_libraries(${CMAKE_PROJECT_NAME} + PRIVATE PkgConfig::libxdg-basedir PkgConfig::libconfig++ stdc++fs) + +install(TARGETS ${CMAKE_PROJECT_NAME} DESTINATION "${CMAKE_INSTALL_BINDIR}") diff --git a/src/xdgcfg.cpp b/src/xdgcfg.cpp deleted file mode 120000 index 0f27a45..0000000 --- a/src/xdgcfg.cpp +++ /dev/null @@ -1 +0,0 @@ -../xdgcfg/src/xdgcfg.cpp \ No newline at end of file diff --git a/src/xdgcfg.hpp b/src/xdgcfg.hpp deleted file mode 120000 index f1851a8..0000000 --- a/src/xdgcfg.hpp +++ /dev/null @@ -1 +0,0 @@ -../xdgcfg/src/xdgcfg.hpp \ No newline at end of file diff --git a/xdgcfg b/xdgcfg index e22f82f..9337964 160000 --- a/xdgcfg +++ b/xdgcfg @@ -1 +1 @@ -Subproject commit e22f82fc6f1c40cda3d3ce5e671299f26f622528 +Subproject commit 9337964266ae55415beaa7f517cc4240a259289a