changeset 992:462e12e434fb

cmake: add CMake configuration
author David Demelier <markand@malikania.fr>
date Wed, 10 Feb 2021 21:31:32 +0100
parents 2e8ba5a5630d
children 3cd5039d0c67
files CMakeLists.txt cmake/IrccdDefinePlugin.cmake extern/libcompat/CMakeLists.txt extern/libcompat/src/compat.h.in irccd/CMakeLists.txt irccd/dl-plugin.c irccdctl/CMakeLists.txt lib/CMakeLists.txt lib/IrccdConfig.cmake plugins/links/links.c
diffstat 10 files changed, 132 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Wed Feb 10 18:17:08 2021 +0100
+++ b/CMakeLists.txt	Wed Feb 10 21:31:32 2021 +0100
@@ -24,6 +24,7 @@
 set(IRCCD_VERSION_MAJOR 4)
 set(IRCCD_VERSION_MINOR 0)
 set(IRCCD_VERSION_PATCH 0)
+set(IRCCD_VERSION ${IRCCD_VERSION_MAJOR}.${IRCCD_VERSION_MINOR}.${IRCCD_VERSION_PATCH})
 
 option(IRCCD_WITH_JS "Enable Javascript" On)
 option(IRCCD_WITH_SSL "Enable SSL support" On)
--- a/cmake/IrccdDefinePlugin.cmake	Wed Feb 10 18:17:08 2021 +0100
+++ b/cmake/IrccdDefinePlugin.cmake	Wed Feb 10 21:31:32 2021 +0100
@@ -16,6 +16,8 @@
 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #
 
+include(GNUInstallDirs)
+
 function(_idp_install_man file)
 	get_filename_component(basename ${file} NAME)
 	configure_file(${file} ${CMAKE_CURRENT_BINARY_DIR}/${basename})
@@ -75,17 +77,7 @@
 	endif ()
 
 	add_library(irccd-plugin-${PLG_NAME} MODULE ${PLG_SOURCES} ${PLG_MAN})
-	get_target_property(LIBIRCCD_INCLUDES libirccd INCLUDE_DIRECTORIES)
-	get_target_property(LIBCOMPAT_INCLUDES libirccd-compat INCLUDE_DIRECTORIES)
-	target_include_directories(
-		irccd-plugin-${PLG_NAME}
-		PRIVATE
-			${PLG_INCLUDES}
-			${LIBIRCCD_INCLUDES}
-			${LIBCOMPAT_INCLUDES}
-			${OPENSSL_INCLUDE_DIR}
-	)
-	target_link_libraries(irccd-plugin-${PLG_NAME} ${PLG_LIBRARIES})
+	target_link_libraries(irccd-plugin-${PLG_NAME} irccd::libirccd ${PLG_LIBRARIES})
 	set_target_properties(irccd-plugin-${PLG_NAME}
 		PROPERTIES
 			PREFIX ""
--- a/extern/libcompat/CMakeLists.txt	Wed Feb 10 18:17:08 2021 +0100
+++ b/extern/libcompat/CMakeLists.txt	Wed Feb 10 21:31:32 2021 +0100
@@ -92,7 +92,7 @@
 target_include_directories(
 	libirccd-compat
 	PUBLIC
-		$<BUILD_INTERFACE:${libirccd-compat_BINARY_DIR}>
+		$<BUILD_INTERFACE:${libirccd-compat_BINARY_DIR}/irccd>
 )
 set_target_properties(libirccd-compat PROPERTIES PREFIX "")
 
@@ -109,6 +109,11 @@
 
 	if (NOT COMPAT_HAVE_${var})
 		file(WRITE ${libirccd-compat_BINARY_DIR}/${i} "/* Empty stub for ${i}. */\n")
+
+		install(
+			FILES ${libirccd-compat_BINARY_DIR}/${i}
+			DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/irccd/extern
+		)
 	endif ()
 endforeach ()
 
@@ -134,6 +139,11 @@
 		PUBLIC
 			$<BUILD_INTERFACE:${libirccd-compat_SOURCE_DIR}/extern/queue>
 	)
+
+	install(
+		FILES ${libirccd-compat_SOURCE_DIR}/extern/queue/sys/queue.h
+		DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/irccd/extern/sys
+	)
 endif ()
 
 # Math library
@@ -181,5 +191,10 @@
 
 configure_file(
 	${libirccd-compat_SOURCE_DIR}/src/compat.h.in
-	${libirccd-compat_BINARY_DIR}/compat.h
+	${libirccd-compat_BINARY_DIR}/irccd/compat.h
 )
+
+install(
+	FILES ${libirccd-compat_BINARY_DIR}/irccd/compat.h
+	DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/irccd
+)
--- a/extern/libcompat/src/compat.h.in	Wed Feb 10 18:17:08 2021 +0100
+++ b/extern/libcompat/src/compat.h.in	Wed Feb 10 21:31:32 2021 +0100
@@ -1,3 +1,21 @@
+/*
+ * compat.h -- compatibility definitions
+ *
+ * Copyright (c) 2013-2021 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.
+ */
+
 #ifndef LIBCOMPAT_COMPAT_H
 #define LIBCOMPAT_COMPAT_H
 
@@ -121,7 +139,6 @@
 extern int opterr;
 extern int optind;
 extern int optopt;
-extern int optreset;
 extern char *optarg;
 
 int
--- a/irccd/CMakeLists.txt	Wed Feb 10 18:17:08 2021 +0100
+++ b/irccd/CMakeLists.txt	Wed Feb 10 21:31:32 2021 +0100
@@ -66,7 +66,7 @@
 
 # This is required for unit tests.
 add_library(irccd-fe OBJECT ${SOURCES})
-target_link_libraries(irccd-fe libirccd)
+target_link_libraries(irccd-fe libirccd-static)
 target_include_directories(
 	irccd-fe
 	PUBLIC
@@ -91,5 +91,6 @@
 	${FLEX_irccd-lex_OUTPUTS}
 )
 target_link_libraries(irccd irccd-fe)
+install(TARGETS irccd DESTINATION ${CMAKE_INSTALL_BINDIR})
 
 source_group(TREE ${irccd_SOURCE_DIR} FILES ${SOURCES})
--- a/irccd/dl-plugin.c	Wed Feb 10 18:17:08 2021 +0100
+++ b/irccd/dl-plugin.c	Wed Feb 10 21:31:32 2021 +0100
@@ -25,8 +25,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include <config.h>
-
+#include <irccd/config.h>
 #include <irccd/log.h>
 #include <irccd/plugin.h>
 #include <irccd/util.h>
--- a/irccdctl/CMakeLists.txt	Wed Feb 10 18:17:08 2021 +0100
+++ b/irccdctl/CMakeLists.txt	Wed Feb 10 21:31:32 2021 +0100
@@ -18,4 +18,5 @@
 
 project(irccdctl)
 add_executable(irccdctl main.c)
-target_link_libraries(irccdctl libirccd libirccd-ketopt)
+target_link_libraries(irccdctl libirccd-static libirccd-ketopt)
+install(TARGETS irccdctl DESTINATION ${CMAKE_INSTALL_BINDIR})
--- a/lib/CMakeLists.txt	Wed Feb 10 18:17:08 2021 +0100
+++ b/lib/CMakeLists.txt	Wed Feb 10 21:31:32 2021 +0100
@@ -18,33 +18,39 @@
 
 project(libirccd)
 
+include(CMakePackageConfigHelpers)
+
+set(
+	HEADERS
+	irccd/channel.h
+	irccd/conn.h
+	irccd/event.h
+	irccd/hook.h
+	irccd/irccd.h
+	irccd/limits.h
+	irccd/log.h
+	irccd/plugin.h
+	irccd/rule.h
+	irccd/server.h
+	irccd/subst.h
+	irccd/util.h
+)
+
 set(
 	SOURCES
 	CMakeLists.txt
 	irccd/channel.c
-	irccd/channel.h
 	irccd/config.h.in
 	irccd/conn.c
-	irccd/conn.h
 	irccd/event.c
-	irccd/event.h
 	irccd/hook.c
-	irccd/hook.h
 	irccd/irccd.c
-	irccd/irccd.h
-	irccd/limits.h
 	irccd/log.c
-	irccd/log.h
 	irccd/plugin.c
-	irccd/plugin.h
 	irccd/rule.c
-	irccd/rule.h
 	irccd/server.c
-	irccd/server.h
 	irccd/subst.c
-	irccd/subst.h
 	irccd/util.c
-	irccd/util.h
 )
 
 configure_file(
@@ -52,19 +58,62 @@
 	${libirccd_BINARY_DIR}/irccd/config.h
 )
 
-add_library(libirccd ${SOURCES})
-set_target_properties(libirccd PROPERTIES PREFIX "")
+add_library(libirccd-static ${SOURCES})
+set_target_properties(libirccd-static PROPERTIES PREFIX "")
+
+# This is what we export to the world.
+add_library(libirccd INTERFACE)
+add_library(irccd::libirccd ALIAS libirccd)
+
+target_include_directories(libirccd INTERFACE
+	$<BUILD_INTERFACE:${libirccd-compat_BINARY_DIR}>
+	$<BUILD_INTERFACE:${libirccd_SOURCE_DIR}>
+	$<BUILD_INTERFACE:${libirccd_BINARY_DIR}>
+	$<BUILD_INTERFACE:${libirccd_BINARY_DIR}/irccd>
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/irccd/extern>
+	${OPENSSL_INCLUDE_DIR}
+)
+
+write_basic_package_version_file(${libirccd_BINARY_DIR}/IrccdConfigVersion.cmake
+	VERSION ${IRCCD_VERSION}
+	COMPATIBILITY SameMajorVersion
+)
+
+install(TARGETS libirccd EXPORT IrccdTargets)
+install(
+	EXPORT IrccdTargets
+	FILE IrccdTargets.cmake
+	NAMESPACE
+		irccd::
+	DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/irccd
+)
+install(
+	FILES
+		${CMAKE_SOURCE_DIR}/cmake/IrccdDefinePlugin.cmake
+		${libirccd_SOURCE_DIR}/IrccdConfig.cmake
+		${libirccd_BINARY_DIR}/IrccdConfigVersion.cmake
+	DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/irccd
+)
+
+install(
+	FILES
+		${HEADERS}
+		${libirccd_BINARY_DIR}/irccd/config.h
+	DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/irccd
+)
 
 target_include_directories(
-	libirccd
+	libirccd-static
 	PUBLIC
+		$<BUILD_INTERFACE:${libirccd_BINARY_DIR}/irccd>
 		$<BUILD_INTERFACE:${libirccd_SOURCE_DIR}>
-		$<BUILD_INTERFACE:${libirccd_BINARY_DIR}>/irccd
+		$<BUILD_INTERFACE:${libirccd_BINARY_DIR}>
 )
-target_link_libraries(libirccd libirccd-compat)
+target_link_libraries(libirccd-static libirccd-compat)
 
 if (IRCCD_WITH_SSL)
-	target_link_libraries(libirccd OpenSSL::SSL OpenSSL::Crypto)
+	target_link_libraries(libirccd-static OpenSSL::SSL OpenSSL::Crypto)
 endif ()
 
 source_group(TREE ${libirccd_SOURCE_DIR} FILES ${SOURCES})
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/IrccdConfig.cmake	Wed Feb 10 21:31:32 2021 +0100
@@ -0,0 +1,20 @@
+#
+# CMakeLists.txt -- CMake build for irccd
+#
+# Copyright (c) 2013-2021 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.
+#
+
+include("${CMAKE_CURRENT_LIST_DIR}/IrccdTargets.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/IrccdDefinePlugin.cmake")
--- a/plugins/links/links.c	Wed Feb 10 18:17:08 2021 +0100
+++ b/plugins/links/links.c	Wed Feb 10 21:31:32 2021 +0100
@@ -16,8 +16,6 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#include <compat.h>
-
 #include <assert.h>
 #include <ctype.h>
 #include <err.h>
@@ -29,6 +27,7 @@
 
 #include <curl/curl.h>
 
+#include <irccd/compat.h>
 #include <irccd/irccd.h>
 #include <irccd/limits.h>
 #include <irccd/server.h>