changeset 858:6af323b76970

cmake: install macros and reduce IrccdOptions.cmake, closes #951 @1h
author David Demelier <markand@malikania.fr>
date Thu, 25 Jul 2019 20:15:00 +0000
parents 8b4becff9fbb
children 2e256acab25d
files CMakeLists.txt cmake/CMakeLists.txt cmake/IrccdOptions.cmake cmake/IrccdPackage.cmake cmake/export/irccd-config.cmake cmake/function/IrccdDefineExecutable.cmake cmake/function/IrccdDefineLibrary.cmake cmake/function/IrccdDefineMan.cmake cmake/function/IrccdDefinePlugin.cmake cmake/function/IrccdDefineTest.cmake cmake/function/IrccdSetGlobal.cmake doc/CMakeLists.txt doc/examples/CMakeLists.txt libirccd-daemon/CMakeLists.txt plugins/links/CMakeLists.txt systemd/CMakeLists.txt
diffstat 16 files changed, 107 insertions(+), 68 deletions(-) [+]
line wrap: on
line diff
--- 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("")
 
--- /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 <markand@malikania.fr>
+#
+# 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
+)
--- 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_<NAME>  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 ()
--- 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 ()
--- 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")
--- 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()
--- 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})
--- 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")
--- 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()
--- 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)
--- /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 <markand@malikania.fr>
+#
+# 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 ()
+
--- 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 ()
--- 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")
--- 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 $<BUILD_INTERFACE:${libirccd-daemon_SOURCE_DIR}>
 )
+
+# Add an alias for the irccd_define_plugin macro.
+add_library(irccd::libirccd-daemon ALIAS libirccd-daemon)
--- 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
--- 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()