diff cmake/IrccdOptions.cmake @ 0:1158cffe5a5e

Initial import
author David Demelier <markand@malikania.fr>
date Mon, 08 Feb 2016 16:43:14 +0100
parents
children 78a9c59de053
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake/IrccdOptions.cmake	Mon Feb 08 16:43:14 2016 +0100
@@ -0,0 +1,234 @@
+#
+# Options.cmake -- CMake build system for irccd
+#
+# Copyright (c) 2013-2016 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.
+#
+
+#
+# Options that controls the build:
+#
+# WITH_SSL		Enable OpenSSL (default: on)
+# WITH_JS		Enable JavaScript (default: on)
+# WITH_TESTS		Enable unit testing (default: off)
+# WITH_SYSTEMD		Install systemd service (default: off)
+# WITH_DOCS		Enable building of all documentation (default: on)
+# WITH_DOXYGEN	Enable internal irccd documentation (default: on)
+# WITH_HTML	Enable HTML documentation
+# WITH_MAN		Install manpages (default: on, off for Windows)
+# WITH_PLUGIN_<NAME>	Enable or disable the specified plugin (default: on)
+#
+# Note: the option() commands for WITH_PLUGIN_<name> variables are defined automatically from the IRCCD_PLUGINS
+# list.
+#
+
+#
+# Options that controls both installations and the irccd runtime:
+#
+# Note: it is allowed to use absolute path but it's *strongly* recommended to
+#       use relative paths if you want to keep irccd relocatable.
+#
+# WITH_BINDIR		Binary directory for irccd, irccdctl
+# WITH_PLUGINDIR	Path where plugins must be installed
+# WITH_DOCDIR		Path where to install documentation
+# WITH_MANDIR		Path where to install manuals
+# WITH_CONFDIR		Path where to search configuration files
+# WITH_CACHEDIR		Path where to store temporary files
+#
+
+#
+# Options for unit tests only:
+#
+# WITH_TEST_IRCHOST	Which IRC server to use for tests (default: 127.0.0.1)
+# WITH_TEST_IRCPORT	Which IRC server port to use for tests (default: 6667)
+#
+
+# Manual pages on Windows are pretty useless.
+if (WIN32)
+	set(DEFAULT_MAN "No")
+else ()
+	set(DEFAULT_MAN "Yes")
+endif ()
+
+# Systemd unit file
+if (CMAKE_SYSTEM_NAME MATCHES "Linux")
+	set(DEFAULT_SYSTEMD "Yes")
+else ()
+	set(DEFAULT_SYSTEMD "No")
+endif ()
+
+option(WITH_SSL "Enable SSL" On)
+option(WITH_JS "Enable embedded Duktape" On)
+option(WITH_TESTS "Enable unit testing" Off)
+option(WITH_SYSTEMD "Install systemd service" ${DEFAULT_SYSTEMD})
+option(WITH_DOCS "Enable building of all documentation" On)
+option(WITH_HTML "Enable building of HTML documentation" On)
+option(WITH_DOXYGEN "Enable doxygen" On)
+option(WITH_MAN "Install man pages" ${DEFAULT_MAN})
+
+# Build options for all plugins.
+foreach (plugin ${IRCCD_PLUGINS})
+	string(TOUPPER ${plugin} optname)
+	option(WITH_PLUGIN_${optname} "Enable ${plugin} plugin" On)
+
+	if (NOT WITH_PLUGIN_${optname})
+		set(WITH_PLUGIN_${optname}_MSG "No (disabled by user)")
+	else ()
+		set(WITH_PLUGIN_${optname}_MSG "Yes")
+	endif ()
+endforeach ()
+
+set(WITH_TEST_IRCHOST "127.0.0.1" CACHE STRING "IRC host for tests")
+set(WITH_TEST_IRCPORT 6667 CACHE STRING "IRC port for test")
+
+# ---------------------------------------------------------
+# Installation paths
+# ---------------------------------------------------------
+
+set(WITH_BINDIR "bin" CACHE STRING "Binary directory")
+set(WITH_MANDIR "share/man" CACHE STRING "Man directory")
+set(WITH_CONFDIR "etc" CACHE STRING "Configuration directory")
+
+#
+# On Windows, we install the applcation like C:/Program Files/irccd so do not append irccd to the
+# directories again.
+#
+if (WIN32)
+	set(WITH_DATADIR "share" CACHE STRING "Data directory")
+	set(WITH_CACHEDIR "var" CACHE STRING "Temporary files directory")
+	set(WITH_PLUGINDIR "share/plugins" CACHE STRING "Module prefix where to install")
+	set(WITH_DOCDIR "share/doc" CACHE STRING "Documentation directory")
+else ()
+	set(WITH_DATADIR "share/irccd" CACHE STRING "Data directory")
+	set(WITH_CACHEDIR "var/irccd" CACHE STRING "Temporary files directory")
+	set(WITH_PLUGINDIR "share/irccd/plugins" CACHE STRING "Module prefix where to install")
+	set(WITH_DOCDIR "share/doc/irccd" CACHE STRING "Documentation directory")
+endif ()
+
+#
+# Check if any of these path is absolute and mark irccd relocatable
+# only if all paths are relative
+#
+set(IRCCD_RELOCATABLE TRUE)
+
+foreach (d WITH_BINDIR WITH_CACHEDIR WITH_DATADIR WITH_CONFDIR WITH_PLUGINDIR)
+	if (IS_ABSOLUTE ${${d}})
+		list(APPEND IRCCD_ABSOLUTE_PATHS ${d})
+		set(IRCCD_RELOCATABLE FALSE)
+	endif ()
+endforeach ()
+
+if (IRCCD_RELOCATABLE)
+	set(IRCCD_FAKEDIR ${CMAKE_BINARY_DIR}/fakeroot)
+endif ()
+
+# ---------------------------------------------------------
+# Internal dependencies
+# ---------------------------------------------------------
+
+if (WITH_JS)
+	add_subdirectory(extern/duktape)
+	set(WITH_JS_MSG "Yes")
+else ()
+	set(WITH_JS_MSG "No")
+endif ()
+
+if (WITH_TESTS)
+	add_subdirectory(extern/gtest)
+	set(WITH_TESTS_MSG "Yes")
+else ()
+	set(WITH_TESTS_MSG "No")
+endif ()
+
+# ---------------------------------------------------------
+# External dependencies
+# ---------------------------------------------------------
+
+find_package(Doxygen)
+find_package(Pandoc)
+find_package(OpenSSL)
+
+if (NOT WITH_DOCS)
+	set(WITH_HTML FALSE)
+	set(WITH_DOXYGEN FALSE)
+	set(WITH_MAN FALSE)
+endif ()
+
+if (WITH_SSL)
+	if (OPENSSL_FOUND)
+		set(WITH_SSL_MSG "Yes")
+	else ()
+		set(WITH_SSL_MSG "No (OpenSSL not found)")
+		set(WITH_SSL FALSE)
+	endif ()
+else()
+	set(WITH_SSL_MSG "No (disabled by user)")
+endif ()
+
+if (WITH_DOXYGEN)
+	if (DOXYGEN_FOUND)
+		set(WITH_DOXYGEN_MSG "Yes")
+	else ()
+		set(WITH_DOXYGEN_MSG "No (doxygen not found)")
+		set(WITH_DOXYGEN FALSE)
+	endif ()
+else ()
+	set(WITH_DOXYGEN_MSG "No (disabled by user)")
+endif ()
+
+if (WITH_HTML)
+	if (Pandoc_FOUND)
+		set(WITH_HTML_MSG "Yes")
+	else ()
+		set(WITH_HTML_MSG "No (pandoc not found)")
+		set(WITH_HTML FALSE)
+	endif ()
+else ()
+	set(WITH_HTML_MSG "No (disabled by user)")
+	set(WITH_HTML FALSE)
+endif ()
+
+#
+# Determine if allowed to package.
+# -------------------------------------------------------------------
+#
+# Do not move this section because irccd's CMake functions requires the IRCCD_PACKAGE value.
+#
+
+find_package(QtIFW)
+
+set(IRCCD_PACKAGE FALSE)
+
+if (NOT IRCCD_RELOCATABLE)
+	set(IRCCD_PACKAGE_MSG "No (irccd not relocatable)")
+elseif (NOT WITH_HTML)
+	set(IRCCD_PACKAGE_MSG "No (HTML documentation disabled)")
+elseif (NOT WIN32)
+	set(IRCCD_PACKAGE_MSG "No (only for Windows)")
+elseif (NOT QtIFW_FOUND)
+	set(IRCCD_PACKAGE_MSG "No (QtIFW not found)")
+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 WITH_PLUGIN_${optname})
+			set(IRCCD_PACKAGE FALSE)
+			set(IRCCD_PACKAGE_MSG "No (Plugin ${plugin} disabled)")
+		endif ()
+	endforeach ()
+endif ()