changeset 1125:75e228008e07

cmake: add export
author David Demelier <markand@malikania.fr>
date Sat, 04 Dec 2021 20:14:49 +0100
parents 3d9975880161
children 722fcb2930ea
files CMakeLists.txt cmake/IrccdDefinePlugin.cmake cmake/irccd-config.cmake.in irccd/CMakeLists.txt
diffstat 4 files changed, 57 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Sat Dec 04 13:20:42 2021 +0100
+++ b/CMakeLists.txt	Sat Dec 04 20:14:49 2021 +0100
@@ -52,6 +52,7 @@
 	set(CMAKE_C_FLAGS "-Wall -Wextra -pedantic ${CMAKE_C_FLAGS}")
 endif ()
 
+include(CMakePackageConfigHelpers)
 include(GNUInstallDirs)
 
 option(IRCCD_WITH_EXAMPLES "Enable example files" On)
@@ -79,7 +80,6 @@
 	add_subdirectory(extern/libduktape)
 endif ()
 
-
 add_subdirectory(extern/libutlist)
 add_subdirectory(extern/libketopt)
 
@@ -101,3 +101,24 @@
 	add_subdirectory(extern/libgreatest)
 	add_subdirectory(tests)
 endif ()
+
+# CMake packages.
+write_basic_package_version_file(
+	${PROJECT_BINARY_DIR}/irccd-config-version.cmake
+	VERSION ${PROJECT_VERSION}
+	COMPATIBILITY SameMajorVersion
+)
+
+configure_file(
+	${PROJECT_SOURCE_DIR}/cmake/irccd-config.cmake.in
+	${PROJECT_BINARY_DIR}/irccd-config.cmake
+	@ONLY
+)
+
+install(
+	FILES
+		${PROJECT_BINARY_DIR}/irccd-config.cmake
+		${PROJECT_BINARY_DIR}/irccd-config-version.cmake
+		${PROJECT_SOURCE_DIR}/cmake/IrccdDefinePlugin.cmake
+	DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/irccd
+)
--- a/cmake/IrccdDefinePlugin.cmake	Sat Dec 04 13:20:42 2021 +0100
+++ b/cmake/IrccdDefinePlugin.cmake	Sat Dec 04 20:14:49 2021 +0100
@@ -42,6 +42,10 @@
 		target_link_libraries(irccd-plugin-${PLG_NAME} ${PLG_LIBRARIES})
 	endif ()
 
+	if (APPLE)
+		target_link_libraries(irccd-plugin-${PLG_NAME} "-undefined dynamic_lookup")
+	endif ()
+
 	set_target_properties(
 		irccd-plugin-${PLG_NAME}
 		PROPERTIES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake/irccd-config.cmake.in	Sat Dec 04 20:14:49 2021 +0100
@@ -0,0 +1,27 @@
+#
+# CMakeLists.txt -- CMake build system 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.
+#
+
+#
+# C native plugins are special objects because they don't link to any library
+# so we need to create a fake target that contains at least include directories
+# and a flag to create lookup symbols in the host irccd program.
+#
+add_library(irccd INTERFACE)
+target_include_directories(irccd INTERFACE @CMAKE_INSTALL_FULL_INCLUDEDIR@)
+
+include("${CMAKE_CURRENT_LIST_DIR}/IrccdDefinePlugin.cmake")
--- a/irccd/CMakeLists.txt	Sat Dec 04 13:20:42 2021 +0100
+++ b/irccd/CMakeLists.txt	Sat Dec 04 20:14:49 2021 +0100
@@ -107,7 +107,10 @@
 set_target_properties(irccd PROPERTIES ENABLE_EXPORTS On)
 
 # Installation.
-install(TARGETS irccd RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+install(
+	TARGETS irccd
+	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
 
 # Source grouping.
 source_group(TREE ${irccd_SOURCE_DIR} FILES ${SOURCES} ${irccd_SOURCE_DIR}/main.c)