# HG changeset patch # User David Demelier # Date 1564085700 0 # Node ID 6af323b769707a91aa39e8f314882065ec21c230 # Parent 8b4becff9fbb32500ab8e50d5893ebdacb9492ca cmake: install macros and reduce IrccdOptions.cmake, closes #951 @1h diff -r 8b4becff9fbb -r 6af323b76970 CMakeLists.txt --- a/CMakeLists.txt Thu Jul 25 20:47:00 2019 +0000 +++ b/CMakeLists.txt Thu Jul 25 20:15:00 2019 +0000 @@ -56,11 +56,6 @@ include(GNUInstallDirs) include(InstallRequiredSystemLibraries) -# Helper to set global internal variables. -function(setg var value) - set("${var}" "${value}" CACHE INTERNAL "") -endfunction () - set_property(GLOBAL PROPERTY USE_FOLDERS On) set(CMAKE_CXX_STANDARD 17) @@ -75,6 +70,9 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CFG} ${CMAKE_BINARY_DIR}/bin/${cfg}) endforeach () +include(cmake/check/PutTime.cmake) + +include(cmake/function/IrccdSetGlobal.cmake) include(cmake/function/IrccdDefineExecutable.cmake) include(cmake/function/IrccdDefineLibrary.cmake) include(cmake/function/IrccdDefineMan.cmake) @@ -82,14 +80,13 @@ include(cmake/function/IrccdDefineTest.cmake) include(cmake/function/IrccdIndentMessage.cmake) -include(cmake/check/PutTime.cmake) - include(cmake/IrccdVersion.cmake) include(cmake/IrccdOptions.cmake) include(cmake/IrccdSystem.cmake) find_package(Threads REQUIRED) +add_subdirectory(cmake) add_subdirectory(extern/json) add_subdirectory(doc) add_subdirectory(libirccd) @@ -128,7 +125,6 @@ message(" Tests: ${IRCCD_WITH_TESTS_MSG}") message(" Man pages: ${IRCCD_WITH_MAN_MSG}") message(" Doxygen: ${IRCCD_WITH_DOXYGEN_MSG}") -message(" Package: ${IRCCD_PACKAGE_MSG}") message(" Systemd: ${IRCCD_WITH_SYSTEMD_MSG}") message("") diff -r 8b4becff9fbb -r 6af323b76970 cmake/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/CMakeLists.txt Thu Jul 25 20:15:00 2019 +0000 @@ -0,0 +1,33 @@ +# +# CMakeLists.txt -- CMake build system for irccd +# +# Copyright (c) 2013-2019 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(cmake) + +install( + FILES + ${cmake_SOURCE_DIR}/function/IrccdSetGlobal.cmake + ${cmake_SOURCE_DIR}/function/IrccdDefineExecutable.cmake + ${cmake_SOURCE_DIR}/function/IrccdDefineLibrary.cmake + ${cmake_SOURCE_DIR}/function/IrccdDefineMan.cmake + ${cmake_SOURCE_DIR}/function/IrccdDefinePlugin.cmake + ${cmake_SOURCE_DIR}/function/IrccdIndentMessage.cmake + ${cmake_SOURCE_DIR}/function/IrccdInstallDependencies.cmake + ${cmake_SOURCE_DIR}/function/dependencies.cmake.in + DESTINATION + ${CMAKE_INSTALL_LIBDIR}/cmake/irccd +) diff -r 8b4becff9fbb -r 6af323b76970 cmake/IrccdOptions.cmake --- a/cmake/IrccdOptions.cmake Thu Jul 25 20:47:00 2019 +0000 +++ b/cmake/IrccdOptions.cmake Thu Jul 25 20:15:00 2019 +0000 @@ -22,7 +22,7 @@ # IRCCD_WITH_DOXYGEN Enable internal irccd documentation (default: on) # IRCCD_WITH_JS Enable JavaScript (default: on) # IRCCD_WITH_LIBEDIT Enable libedit support (default: on) -# IRCCD_WITH_MAN Install manpages (default: on, off for Windows) +# IRCCD_WITH_MAN Install manpages (default: on) # IRCCD_WITH_PKGCONFIG Install pkg-config files (default: on, off for Windows (except MinGW)) # IRCCD_WITH_PLUGIN_ Enable or disable the specified plugin (default: on) # IRCCD_WITH_SSL Enable OpenSSL (default: on) @@ -32,13 +32,6 @@ # defined automatically from the IRCCD_PLUGINS list. # -# Manual pages on Windows are pretty useless. -if (WIN32) - set(DEFAULT_MAN "No") -else () - set(DEFAULT_MAN "Yes") -endif () - # pkg-config is only relevant on UNIX or MinGW if (MINGW OR UNIX) set(DEFAULT_PKGCONFIG "Yes") @@ -46,10 +39,9 @@ set(DEFAULT_PKGCONFIG "No") endif () -option(IRCCD_WITH_DOXYGEN "Enable doxygen" Off) +option(IRCCD_WITH_DOXYGEN "Enable doxygen" On) option(IRCCD_WITH_JS "Enable embedded Duktape" On) option(IRCCD_WITH_LIBEDIT "Enable libedit support" On) -option(IRCCD_WITH_MAN "Install man pages" ${DEFAULT_MAN}) option(IRCCD_WITH_PKGCONFIG "Enable pkg-config file" ${DEFAULT_PKGCONFIG}) option(IRCCD_WITH_SSL "Enable SSL" On) option(IRCCD_WITH_TESTS "Enable unit testing" Off) @@ -121,29 +113,3 @@ else () set(IRCCD_WITH_MAN_MSG "No (disabled by user)") endif () - -# -# Determine if allowed to package. -# ------------------------------------------------------------------- -# -# Do not move this section because irccd's CMake functions requires the IRCCD_PACKAGE value. -# - -set(IRCCD_PACKAGE FALSE) - -if (NOT WITH_HTML) - set(IRCCD_PACKAGE_MSG "No (HTML documentation disabled)") -else () - # Now check that a plugin has not been disabled. - set(IRCCD_PACKAGE TRUE) - set(IRCCD_PACKAGE_MSG "Yes") - - foreach (plugin ${IRCCD_PLUGINS}) - string(TOUPPER ${plugin} optname) - - if (NOT IRCCD_WITH_PLUGIN_${optname}) - set(IRCCD_PACKAGE FALSE) - set(IRCCD_PACKAGE_MSG "No (Plugin ${plugin} disabled)") - endif () - endforeach () -endif () diff -r 8b4becff9fbb -r 6af323b76970 cmake/IrccdPackage.cmake --- a/cmake/IrccdPackage.cmake Thu Jul 25 20:47:00 2019 +0000 +++ b/cmake/IrccdPackage.cmake Thu Jul 25 20:15:00 2019 +0000 @@ -46,8 +46,8 @@ set(CPACK_GENERATOR "NSIS") if (IRCCD_64BITS) - set(CPACK_PACKAGE_FILE_NAME "irccd-${IRCCD_VERSION}-Windows-amd64") + set(CPACK_PACKAGE_FILE_NAME "irccd-${IRCCD_VERSION}-amd64") else () - set(CPACK_PACKAGE_FILE_NAME "irccd-${IRCCD_VERSION}-Windows-x86") + set(CPACK_PACKAGE_FILE_NAME "irccd-${IRCCD_VERSION}-x86") endif () endif () diff -r 8b4becff9fbb -r 6af323b76970 cmake/export/irccd-config.cmake --- a/cmake/export/irccd-config.cmake Thu Jul 25 20:47:00 2019 +0000 +++ b/cmake/export/irccd-config.cmake Thu Jul 25 20:15:00 2019 +0000 @@ -18,8 +18,14 @@ include(CMakeFindDependencyMacro) -find_dependency(Boost COMPONENTS filesystem program_options system timer) +find_dependency(Boost COMPONENTS date_time filesystem system timer) find_dependency(Threads) find_dependency(OpenSSL) include("${CMAKE_CURRENT_LIST_DIR}/irccd-targets.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/IrccdSetGlobal.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/IrccdDefinePlugin.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/IrccdDefineMan.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/IrccdDefineExecutable.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/IrccdDefineLibrary.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/IrccdDefineMan.cmake") diff -r 8b4becff9fbb -r 6af323b76970 cmake/function/IrccdDefineExecutable.cmake --- a/cmake/function/IrccdDefineExecutable.cmake Thu Jul 25 20:47:00 2019 +0000 +++ b/cmake/function/IrccdDefineExecutable.cmake Thu Jul 25 20:15:00 2019 +0000 @@ -61,6 +61,8 @@ set_target_properties( ${EXE_TARGET} PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED On RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) foreach (c ${CMAKE_CONFIGURATION_TYPES}) @@ -83,9 +85,8 @@ # Put the application into a cpack group. string(TOUPPER ${EXE_TARGET} CMP) - setg(CPACK_COMPONENT_${CMP}_DISPLAY_NAME "${EXE_TARGET} executable") - setg(CPACK_COMPONENT_${CMP}_DESCRIPTION ${EXE_DESCRIPTION}) - setg(CPACK_COMPONENT_${CMP}_GROUP "Applications") - + irccd_set_global(CPACK_COMPONENT_${CMP}_DISPLAY_NAME "${EXE_TARGET} executable") + irccd_set_global(CPACK_COMPONENT_${CMP}_DESCRIPTION ${EXE_DESCRIPTION}) + irccd_set_global(CPACK_COMPONENT_${CMP}_GROUP "Applications") irccd_install_dependencies(${EXE_TARGET}) endfunction() diff -r 8b4becff9fbb -r 6af323b76970 cmake/function/IrccdDefineLibrary.cmake --- a/cmake/function/IrccdDefineLibrary.cmake Thu Jul 25 20:47:00 2019 +0000 +++ b/cmake/function/IrccdDefineLibrary.cmake Thu Jul 25 20:15:00 2019 +0000 @@ -68,6 +68,8 @@ PROPERTIES PREFIX "" IMPORT_PREFIX "" + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED On ) if (${LIB_EXPORT}) diff -r 8b4becff9fbb -r 6af323b76970 cmake/function/IrccdDefineMan.cmake --- a/cmake/function/IrccdDefineMan.cmake Thu Jul 25 20:47:00 2019 +0000 +++ b/cmake/function/IrccdDefineMan.cmake Thu Jul 25 20:15:00 2019 +0000 @@ -29,6 +29,8 @@ # This function configure the manual and install it if IRCCD_WITH_MAN is set. # +option(IRCCD_WITH_MAN "Install man pages" On) + function(irccd_define_man) set(options "") set(oneValueArgs "INPUT;OUTPUT;SECTION") diff -r 8b4becff9fbb -r 6af323b76970 cmake/function/IrccdDefinePlugin.cmake --- a/cmake/function/IrccdDefinePlugin.cmake Thu Jul 25 20:47:00 2019 +0000 +++ b/cmake/function/IrccdDefinePlugin.cmake Thu Jul 25 20:15:00 2019 +0000 @@ -91,7 +91,7 @@ endif () add_library(plugin-${PLG_NAME} MODULE ${PLG_SOURCES} ${PLG_OUTPUT_DOC} ${PLG_MAN}) - target_link_libraries(plugin-${PLG_NAME} libirccd-daemon ${PLG_LIBRARIES}) + target_link_libraries(plugin-${PLG_NAME} irccd::libirccd-daemon ${PLG_LIBRARIES}) target_include_directories(plugin-${PLG_NAME} PRIVATE ${PLG_INCLUDES}) # Change output name. @@ -100,6 +100,8 @@ PROPERTIES PREFIX "" OUTPUT_NAME ${PLG_NAME} + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED On ) foreach (cfg ${CMAKE_CONFIGURATION_TYPES}) string(TOUPPER ${cfg} CFG) @@ -135,11 +137,11 @@ option(IRCCD_WITH_PLUGIN_${PLG_UPPER_NAME} "Enable ${PLG_NAME} plugin" On) if (NOT IRCCD_WITH_PLUGIN_${PLG_UPPER_NAME}) - setg(IRCCD_WITH_PLUGIN_${PLG_UPPER_NAME}_MSG "No (disabled by user)") + irccd_set_global(IRCCD_WITH_PLUGIN_${PLG_UPPER_NAME}_MSG "No (disabled by user)") elseif (NOT IRCCD_WITH_JS AND PLG_TYPE MATCHES "JS") - setg(IRCCD_WITH_PLUGIN_${PLG_UPPER_NAME}_MSG "No (Javascript disabled)") + irccd_set_global(IRCCD_WITH_PLUGIN_${PLG_UPPER_NAME}_MSG "No (Javascript disabled)") else () - setg(IRCCD_WITH_PLUGIN_${PLG_UPPER_NAME}_MSG "Yes") + irccd_set_global(IRCCD_WITH_PLUGIN_${PLG_UPPER_NAME}_MSG "Yes") # Optional documentation. if (PLG_MAN) @@ -169,7 +171,7 @@ ) # Component grouping in installer. - setg(CPACK_COMPONENT_${PLG_UPPER_NAME}_GROUP "Plugins") - setg(CPACK_COMPONENT_${PLG_UPPER_NAME}_DESCRIPTION "Install ${PLG_NAME} plugin.") + irccd_set_global(CPACK_COMPONENT_${PLG_UPPER_NAME}_GROUP "Plugins") + irccd_set_global(CPACK_COMPONENT_${PLG_UPPER_NAME}_DESCRIPTION "Install ${PLG_NAME} plugin.") endif () endfunction() diff -r 8b4becff9fbb -r 6af323b76970 cmake/function/IrccdDefineTest.cmake --- a/cmake/function/IrccdDefineTest.cmake Thu Jul 25 20:47:00 2019 +0000 +++ b/cmake/function/IrccdDefineTest.cmake Thu Jul 25 20:15:00 2019 +0000 @@ -89,6 +89,8 @@ PROJECT_LABEL ${TEST_NAME} FOLDER test RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED On ) foreach (c ${CMAKE_CONFIGURATION_TYPES}) string(TOUPPER ${c} cu) diff -r 8b4becff9fbb -r 6af323b76970 cmake/function/IrccdSetGlobal.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/function/IrccdSetGlobal.cmake Thu Jul 25 20:15:00 2019 +0000 @@ -0,0 +1,31 @@ +# +# IrccdSetGlobal.cmake -- CMake build system for irccd +# +# Copyright (c) 2013-2019 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +# +# irccd_set_global +# ---------------- +# +# irccd_set_global(var value) +# +# Set a global cache internal variable. +# + +function(irccd_set_global var value) + set("${var}" "${value}" CACHE INTERNAL "") +endfunction () + diff -r 8b4becff9fbb -r 6af323b76970 doc/CMakeLists.txt --- a/doc/CMakeLists.txt Thu Jul 25 20:47:00 2019 +0000 +++ b/doc/CMakeLists.txt Thu Jul 25 20:15:00 2019 +0000 @@ -23,8 +23,3 @@ endif () add_subdirectory(examples) -#add_subdirectory(man) - -if (IRCCD_HAVE_HTML) - add_subdirectory(html) -endif () diff -r 8b4becff9fbb -r 6af323b76970 doc/examples/CMakeLists.txt --- a/doc/examples/CMakeLists.txt Thu Jul 25 20:47:00 2019 +0000 +++ b/doc/examples/CMakeLists.txt Thu Jul 25 20:15:00 2019 +0000 @@ -36,6 +36,6 @@ DESTINATION ${CMAKE_INSTALL_SYSCONFDIR} ) -setg(CPACK_COMPONENT_EXAMPLES_HIDDEN On) -setg(CPACK_COMPONENT_EXAMPLES_DESCRIPTION "Install examples of configuration files") -setg(CPACK_COMPONENT_EXAMPLES_GROUP "Documentation") +irccd_set_global(CPACK_COMPONENT_EXAMPLES_HIDDEN On) +irccd_set_global(CPACK_COMPONENT_EXAMPLES_DESCRIPTION "Install examples of configuration files") +irccd_set_global(CPACK_COMPONENT_EXAMPLES_GROUP "Documentation") diff -r 8b4becff9fbb -r 6af323b76970 libirccd-daemon/CMakeLists.txt --- a/libirccd-daemon/CMakeLists.txt Thu Jul 25 20:47:00 2019 +0000 +++ b/libirccd-daemon/CMakeLists.txt Thu Jul 25 20:15:00 2019 +0000 @@ -65,3 +65,6 @@ LIBRARIES libirccd PUBLIC_INCLUDES $ ) + +# Add an alias for the irccd_define_plugin macro. +add_library(irccd::libirccd-daemon ALIAS libirccd-daemon) diff -r 8b4becff9fbb -r 6af323b76970 plugins/links/CMakeLists.txt --- a/plugins/links/CMakeLists.txt Thu Jul 25 20:47:00 2019 +0000 +++ b/plugins/links/CMakeLists.txt Thu Jul 25 20:15:00 2019 +0000 @@ -21,7 +21,7 @@ find_package(Uriparser) if (NOT Uriparser_FOUND) - setg(IRCCD_WITH_PLUGIN_LINKS_MSG "No (uriparser not found)") + irccd_set_global(IRCCD_WITH_PLUGIN_LINKS_MSG "No (uriparser not found)") else () irccd_define_plugin( NAME links diff -r 8b4becff9fbb -r 6af323b76970 systemd/CMakeLists.txt --- a/systemd/CMakeLists.txt Thu Jul 25 20:47:00 2019 +0000 +++ b/systemd/CMakeLists.txt Thu Jul 25 20:15:00 2019 +0000 @@ -27,7 +27,7 @@ option(IRCCD_WITH_SYSTEMD "Install systemd service" ${DEFAULT_SYSTEMD}) if (IRCCD_WITH_SYSTEMD) - setg(IRCCD_WITH_SYSTEMD_MSG "Yes") + irccd_set_global(IRCCD_WITH_SYSTEMD_MSG "Yes") set(PATH "${CMAKE_INSTALL_FULL_BINDIR}/irccd") @@ -41,5 +41,5 @@ DESTINATION "/usr/lib/systemd/system" ) else () - setg(IRCCD_WITH_SYSTEMD_MSG "No (disabled by user)") + irccd_set_global(IRCCD_WITH_SYSTEMD_MSG "No (disabled by user)") endif()