Commit 2bb4a347 authored by louiz’'s avatar louiz’

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
parent 12eeb4d1
...@@ -18,14 +18,25 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__FILENAME__='\"$(subst ${CMAKE_SOURCE ...@@ -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/") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
include(FindEXPAT) include(FindEXPAT)
find_package(EXPAT REQUIRED) find_package(EXPAT REQUIRED)
find_package(Iconv REQUIRED) find_package(ICONV REQUIRED)
find_package(Libuuid REQUIRED) find_package(LIBUUID REQUIRED)
find_package(Libidn)
if(NOT WITHOUT_SYSTEMD) if(WITH_LIBIDN)
find_package(SystemdDaemon) find_package(LIBIDN REQUIRED)
elseif(NOT WITHOUT_LIBIDN)
find_package(LIBIDN)
endif()
if(WITH_SYSTEMD)
find_package(SYSTEMD REQUIRED)
elseif(NOT WITHOUT_SYSTEMD)
find_package(SYSTEMD)
endif() endif()
if(NOT WITHOUT_BOTAN)
find_package(Botan) if(WITH_BOTAN)
find_package(BOTAN REQUIRED)
elseif(NOT WITHOUT_BOTAN)
find_package(BOTAN)
endif() endif()
# #
......
...@@ -35,7 +35,7 @@ Libraries: ...@@ -35,7 +35,7 @@ Libraries:
Other branches than the 1.11 are not supported. Other branches than the 1.11 are not supported.
http://botan.randombit.net/ http://botan.randombit.net/
- systemd-daemon (optional) - systemd (optional)
Provides the support for a systemd service of Type=notify. This is useful only Provides the support for a systemd service of Type=notify. This is useful only
if you are packaging biboumi in a distribution with Systemd. 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 ...@@ -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 need and finaly use 'g' to generate the Makefiles to build the system and
quit ccmake. 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. - POLLER: lets you select the poller used by biboumi, at
compile-time. Possible values are:
You can, for example, select the poller used by biboumi, at compile-time,
using the POLLER cmake option. Available values are:
EPOLL: use the Linux-specific epoll(7). This is the default on Linux. 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 - WITH_SYSTEMD and WITHOUT_SYSTEMD: Just like the other WITH(OUT)_* options,
they are present on your system, for example if Botan is available but you but for the Systemd library
do not want to use it, you can set the value of WITHOUT_BOTAN to 1, like
this:
% cmake . -DWITHOUT_BOTAN=1 Example:
This way, the binary will not be linked with libotan at all (and all % cmake . -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX \
connection will then be made in clear text). -DWITH_BOTAN=1 -DWITHOUT_SYSTEMD=1
You can also decide not to link with systemd, like this:
% 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 ...@@ -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 # Use some standard module to handle the QUIETLY and REQUIRED arguments, and
# set BOTAN_FOUND to TRUE if these two variables are set. # set BOTAN_FOUND to TRUE if these two variables are set.
include(FindPackageHandleStandardArgs) 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) if(BOTAN_FOUND)
set(BOTAN_LIBRARY ${BOTAN_LIBRARIES}) set(BOTAN_LIBRARY ${BOTAN_LIBRARIES})
......
...@@ -2,38 +2,38 @@ ...@@ -2,38 +2,38 @@
# Find the systemd daemon library # Find the systemd daemon library
# #
# This module defines the following variables: # This module defines the following variables:
# SYSTEMDDAEMON_FOUND - True if library and include directory are found # SYSTEMD_FOUND - True if library and include directory are found
# If set to TRUE, the following are also defined: # If set to TRUE, the following are also defined:
# SYSTEMDDAEMON_INCLUDE_DIRS - The directory where to find the header file # SYSTEMD_INCLUDE_DIRS - The directory where to find the header file
# SYSTEMDDAEMON_LIBRARIES - Where to find the library file # SYSTEMD_LIBRARIES - Where to find the library file
# #
# For conveniance, these variables are also set. They have the same values # 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 # than the variables above. The user can thus choose his/her prefered way
# to write them. # to write them.
# SYSTEMDDAEMON_LIBRARY # SYSTEMD_LIBRARY
# SYSTEMDDAEMON_INCLUDE_DIR # SYSTEMD_INCLUDE_DIR
# #
# This file is in the public domain # This file is in the public domain
include(FindPkgConfig) include(FindPkgConfig)
pkg_check_modules(SYSTEMDDAEMON libsystemd-daemon) pkg_check_modules(SYSTEMD libsystemd)
if(NOT SYSTEMDDAEMON_FOUND) if(NOT SYSTEMD_FOUND)
find_path(SYSTEMDDAEMON_INCLUDE_DIRS NAMES systemd/sd-daemon.h find_path(SYSTEMD_INCLUDE_DIRS NAMES systemd/sd-daemon.h
DOC "The Systemd Daemon include directory") DOC "The Systemd include directory")
find_library(SYSTEMDDAEMON_LIBRARIES NAMES systemd-daemon systemd find_library(SYSTEMD_LIBRARIES NAMES systemd
DOC "The Systemd Daemon library") DOC "The Systemd library")
# Use some standard module to handle the QUIETLY and REQUIRED arguments, and # Use some standard module to handle the QUIETLY and REQUIRED arguments, and
# set SYSTEMDDAEMON_FOUND to TRUE if these two variables are set. # set SYSTEMD_FOUND to TRUE if these two variables are set.
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SYSTEMDDAEMON REQUIRED_VARS SYSTEMDDAEMON_LIBRARIES SYSTEMDDAEMON_INCLUDE_DIRS) find_package_handle_standard_args(SYSTEMD REQUIRED_VARS SYSTEMD_LIBRARIES SYSTEMD_INCLUDE_DIRS)
if(SYSTEMDDAEMON_FOUND) if(SYSTEMD_FOUND)
set(SYSTEMDDAEMON_LIBRARY ${SYSTEMDDAEMON_LIBRARIES}) set(SYSTEMD_LIBRARY ${SYSTEMD_LIBRARIES})
set(SYSTEMDDAEMON_INCLUDE_DIR ${SYSTEMDDAEMON_INCLUDE_DIRS}) set(SYSTEMD_INCLUDE_DIR ${SYSTEMD_INCLUDE_DIRS})
endif() endif()
endif() endif()
mark_as_advanced(SYSTEMDDAEMON_INCLUDE_DIRS SYSTEMDDAEMON_LIBRARIES) mark_as_advanced(SYSTEMD_INCLUDE_DIRS SYSTEMD_LIBRARIES)
\ No newline at end of file \ No newline at end of file
#define SYSTEM_NAME "${CMAKE_SYSTEM}" #define SYSTEM_NAME "${CMAKE_SYSTEM}"
#cmakedefine ICONV_SECOND_ARGUMENT_IS_CONST #cmakedefine ICONV_SECOND_ARGUMENT_IS_CONST
#cmakedefine LIBIDN_FOUND #cmakedefine LIBIDN_FOUND
#cmakedefine SYSTEMDDAEMON_FOUND #cmakedefine SYSTEMD_FOUND
#cmakedefine POLLER ${POLLER} #cmakedefine POLLER ${POLLER}
#cmakedefine BOTAN_FOUND #cmakedefine BOTAN_FOUND
#cmakedefine BIBOUMI_VERSION "${BIBOUMI_VERSION}" #cmakedefine BIBOUMI_VERSION "${BIBOUMI_VERSION}"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment