Improve dependencies checks in the build process

- Rename all Find*.cmake files to uppercase, to make things more consistent,
  and fix some issues with them (notably the REQUIRED flag)

- Rename SYSTEMDDAEMON to SYSTEMD and only use the libsystemd instead of
  libsystemd-daemon because it's deprecated for a long time now

- Provide a WITH_* and WITHOUT_* switch for all optional dependencies

- Document things in the INSTALL file
This commit is contained in:
Florent Le Coz
2014-11-13 06:44:15 +01:00
parent 12eeb4d11e
commit 2bb4a347cd
9 changed files with 80 additions and 67 deletions
+18 -7
View File
@@ -18,14 +18,25 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__FILENAME__='\"$(subst ${CMAKE_SOURCE
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
include(FindEXPAT)
find_package(EXPAT REQUIRED)
find_package(Iconv REQUIRED)
find_package(Libuuid REQUIRED)
find_package(Libidn)
if(NOT WITHOUT_SYSTEMD)
find_package(SystemdDaemon)
find_package(ICONV REQUIRED)
find_package(LIBUUID REQUIRED)
if(WITH_LIBIDN)
find_package(LIBIDN REQUIRED)
elseif(NOT WITHOUT_LIBIDN)
find_package(LIBIDN)
endif()
if(NOT WITHOUT_BOTAN)
find_package(Botan)
if(WITH_SYSTEMD)
find_package(SYSTEMD REQUIRED)
elseif(NOT WITHOUT_SYSTEMD)
find_package(SYSTEMD)
endif()
if(WITH_BOTAN)
find_package(BOTAN REQUIRED)
elseif(NOT WITHOUT_BOTAN)
find_package(BOTAN)
endif()
#
+21 -19
View File
@@ -35,7 +35,7 @@ Libraries:
Other branches than the 1.11 are not supported.
http://botan.randombit.net/
- systemd-daemon (optional)
- systemd (optional)
Provides the support for a systemd service of Type=notify. This is useful only
if you are packaging biboumi in a distribution with Systemd.
@@ -67,33 +67,35 @@ In ccmake, first use 'c' to configure the build system, edit the values you
need and finaly use 'g' to generate the Makefiles to build the system and
quit ccmake.
or you can also use an interactive mode with:
You can also configure these options using a -D command line flag.
% cmake -i .
The list of available options:
and respond to the questions when you are prompted to.
You can, for example, select the poller used by biboumi, at compile-time,
using the POLLER cmake option. Available values are:
- POLLER: lets you select the poller used by biboumi, at
compile-time. Possible values are:
EPOLL: use the Linux-specific epoll(7). This is the default on Linux.
POLL: use the standard poll(2). This is the default value on all non-Linux platforms.
POLL: use the standard poll(2). This is the default value on all non-Linux
platforms.
Examples, configure the poller with cmake:
- WITH_BOTAN and WITHOUT_BOTAN: The first force the usage of the Botan library,
if it is not found, the configuration process will fail. The second will
make the build process ignore the Botan library, it will not be used even
if it's available on the system. If none of these option is specified, the
library will be used if available and will be ignored otherwise.
% cmake . -DPOLLER=EPOLL
- WITH_LIBIDN and WITHOUT_LIBIDN: Just like the WITH(OUT)_BOTAN options, but
for the IDN library
You can also decide not to use two of the optional dependencies, even if
they are present on your system, for example if Botan is available but you
do not want to use it, you can set the value of WITHOUT_BOTAN to 1, like
this:
- WITH_SYSTEMD and WITHOUT_SYSTEMD: Just like the other WITH(OUT)_* options,
but for the Systemd library
% cmake . -DWITHOUT_BOTAN=1
Example:
This way, the binary will not be linked with libotan at all (and all
connection will then be made in clear text).
You can also decide not to link with systemd, like this:
% cmake . -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX \
-DWITH_BOTAN=1 -DWITHOUT_SYSTEMD=1
% cmake . -DWITHOUT_SYSTEMD=1
This command will configure the project to build a release, with TLS enabled
(using Botan) but without using Systemd (even if available on the system).
==============
@@ -25,7 +25,7 @@ find_library(BOTAN_LIBRARIES NAMES botan botan-1.11
# Use some standard module to handle the QUIETLY and REQUIRED arguments, and
# set BOTAN_FOUND to TRUE if these two variables are set.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Botan REQUIRED_VARS BOTAN_LIBRARIES BOTAN_INCLUDE_DIRS)
find_package_handle_standard_args(BOTAN REQUIRED_VARS BOTAN_LIBRARIES BOTAN_INCLUDE_DIRS)
if(BOTAN_FOUND)
set(BOTAN_LIBRARY ${BOTAN_LIBRARIES})
+39
View File
@@ -0,0 +1,39 @@
# - Find SystemdDaemon
# Find the systemd daemon library
#
# This module defines the following variables:
# SYSTEMD_FOUND - True if library and include directory are found
# If set to TRUE, the following are also defined:
# SYSTEMD_INCLUDE_DIRS - The directory where to find the header file
# SYSTEMD_LIBRARIES - Where to find the library file
#
# For conveniance, these variables are also set. They have the same values
# than the variables above. The user can thus choose his/her prefered way
# to write them.
# SYSTEMD_LIBRARY
# SYSTEMD_INCLUDE_DIR
#
# This file is in the public domain
include(FindPkgConfig)
pkg_check_modules(SYSTEMD libsystemd)
if(NOT SYSTEMD_FOUND)
find_path(SYSTEMD_INCLUDE_DIRS NAMES systemd/sd-daemon.h
DOC "The Systemd include directory")
find_library(SYSTEMD_LIBRARIES NAMES systemd
DOC "The Systemd library")
# Use some standard module to handle the QUIETLY and REQUIRED arguments, and
# set SYSTEMD_FOUND to TRUE if these two variables are set.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SYSTEMD REQUIRED_VARS SYSTEMD_LIBRARIES SYSTEMD_INCLUDE_DIRS)
if(SYSTEMD_FOUND)
set(SYSTEMD_LIBRARY ${SYSTEMD_LIBRARIES})
set(SYSTEMD_INCLUDE_DIR ${SYSTEMD_INCLUDE_DIRS})
endif()
endif()
mark_as_advanced(SYSTEMD_INCLUDE_DIRS SYSTEMD_LIBRARIES)
-39
View File
@@ -1,39 +0,0 @@
# - Find SystemdDaemon
# Find the systemd daemon library
#
# This module defines the following variables:
# SYSTEMDDAEMON_FOUND - True if library and include directory are found
# If set to TRUE, the following are also defined:
# SYSTEMDDAEMON_INCLUDE_DIRS - The directory where to find the header file
# SYSTEMDDAEMON_LIBRARIES - Where to find the library file
#
# For conveniance, these variables are also set. They have the same values
# than the variables above. The user can thus choose his/her prefered way
# to write them.
# SYSTEMDDAEMON_LIBRARY
# SYSTEMDDAEMON_INCLUDE_DIR
#
# This file is in the public domain
include(FindPkgConfig)
pkg_check_modules(SYSTEMDDAEMON libsystemd-daemon)
if(NOT SYSTEMDDAEMON_FOUND)
find_path(SYSTEMDDAEMON_INCLUDE_DIRS NAMES systemd/sd-daemon.h
DOC "The Systemd Daemon include directory")
find_library(SYSTEMDDAEMON_LIBRARIES NAMES systemd-daemon systemd
DOC "The Systemd Daemon library")
# Use some standard module to handle the QUIETLY and REQUIRED arguments, and
# set SYSTEMDDAEMON_FOUND to TRUE if these two variables are set.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SYSTEMDDAEMON REQUIRED_VARS SYSTEMDDAEMON_LIBRARIES SYSTEMDDAEMON_INCLUDE_DIRS)
if(SYSTEMDDAEMON_FOUND)
set(SYSTEMDDAEMON_LIBRARY ${SYSTEMDDAEMON_LIBRARIES})
set(SYSTEMDDAEMON_INCLUDE_DIR ${SYSTEMDDAEMON_INCLUDE_DIRS})
endif()
endif()
mark_as_advanced(SYSTEMDDAEMON_INCLUDE_DIRS SYSTEMDDAEMON_LIBRARIES)
+1 -1
View File
@@ -1,7 +1,7 @@
#define SYSTEM_NAME "${CMAKE_SYSTEM}"
#cmakedefine ICONV_SECOND_ARGUMENT_IS_CONST
#cmakedefine LIBIDN_FOUND
#cmakedefine SYSTEMDDAEMON_FOUND
#cmakedefine SYSTEMD_FOUND
#cmakedefine POLLER ${POLLER}
#cmakedefine BOTAN_FOUND
#cmakedefine BIBOUMI_VERSION "${BIBOUMI_VERSION}"