~singpolyma/biboumi

2bb4a347cdfbee92334d5340ba640c8680a81d9e — Florent Le Coz 9 years ago 12eeb4d
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
9 files changed, 80 insertions(+), 67 deletions(-)

M CMakeLists.txt
M INSTALL
R cmake/Modules/{FindBotan.cmake => FindBOTAN.cmake}
R cmake/Modules/{FindIconv.cmake => FindICONV.cmake}
R cmake/Modules/{FindLibidn.cmake => FindLIBIDN.cmake}
R cmake/Modules/{FindLibuuid.cmake => FindLIBUUID.cmake}
A cmake/Modules/FindSYSTEMD.cmake
D cmake/Modules/FindSystemdDaemon.cmake
M src/config.h.cmake
M CMakeLists.txt => CMakeLists.txt +18 -7
@@ 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(WITH_SYSTEMD)
  find_package(SYSTEMD REQUIRED)
elseif(NOT WITHOUT_SYSTEMD)
  find_package(SYSTEMD)
endif()
if(NOT WITHOUT_BOTAN)
  find_package(Botan)

if(WITH_BOTAN)
  find_package(BOTAN REQUIRED)
elseif(NOT WITHOUT_BOTAN)
  find_package(BOTAN)
endif()

#

M INSTALL => INSTALL +21 -19
@@ 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).


==============

R cmake/Modules/FindBotan.cmake => cmake/Modules/FindBOTAN.cmake +1 -1
@@ 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})

R cmake/Modules/FindIconv.cmake => cmake/Modules/FindICONV.cmake +0 -0
R cmake/Modules/FindLibidn.cmake => cmake/Modules/FindLIBIDN.cmake +0 -0
R cmake/Modules/FindLibuuid.cmake => cmake/Modules/FindLIBUUID.cmake +0 -0
A cmake/Modules/FindSYSTEMD.cmake => cmake/Modules/FindSYSTEMD.cmake +39 -0
@@ 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)
\ No newline at end of file

D cmake/Modules/FindSystemdDaemon.cmake => cmake/Modules/FindSystemdDaemon.cmake +0 -39
@@ 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)
\ No newline at end of file

M src/config.h.cmake => src/config.h.cmake +1 -1
@@ 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}"