PROJECT(eurephia C) cmake_minimum_required(VERSION 2.6) OPTION(DEBUG "Add more verbose debug information" OFF) OPTION(SHOW_SECRETS "Show passwords as clear text in logs." OFF) OPTION(SQLITE3 "Build database driver for SQLite3" OFF) OPTION(EUREPHIADM "Build command line based admin utility" OFF) OPTION(PLUGIN "Build the eurephia plugin for OpenVPN" OFF) SET(OPENVPN_SRC "" CACHE STRING "Path to OpenVPN source code") SET(PREFIX "/etc/openvpn/eurephia" CACHE STRING "Install prefix for eurephia") SET(CMAKE_INSTALL_PREFIX ${PREFIX}) IF(SQLITE3) message(STATUS "Will build database interface for SQLite") SET(subdirs ${subdirs} database/sqlite) SET(DATABASE ON) ENDIF(SQLITE3) IF(EUREPHIADM) message(STATUS "Will build command line based admin utility") SET(subdirs ${subdirs} eurephiadm) SET(ADMIN_ENABLED on) ENDIF(EUREPHIADM) IF(ADMIN_ENABLED) find_package(PkgConfig) pkg_search_module(LIBXML2 REQUIRED libxml-2.0 libxml2 libxml>=2.6) INCLUDE_DIRECTORIES(BEFORE ${LIBXML2_INCLUDE_DIRS}) ADD_DEFINITIONS(-DHAVE_LIBXML2) SET(EXTRA_LIBS ${EXTRA_LIBS} ${LIBXML2_LIBRARIES}) pkg_search_module(OPENSSL OPTIONAL openssl>=0.9.8) IF(OPENSSL_FOUND) ADD_DEFINITIONS(-DHAVE_OPENSSL) SET(EXTRA_LIBS ${EXTRA_LIBS} ${OPENSSL_LIBRARIES}) ENDIF(OPENSSL_FOUND) ENDIF(ADMIN_ENABLED) IF(NOT DATABASE) message(FATAL_ERROR "Cannot build eurephia without any database drivers.") ENDIF(NOT DATABASE) IF(FW_IPTABLES) SET(FIREWALL on) ENDIF(FW_IPTABLES) IF(DEBUG) message(STATUS "DEBUG enabled - might be a security issue") ADD_DEFINITIONS(-DENABLE_DEBUG) IF(SHOW_SECRETS) message(STATUS "SHOW_SECRETS ENABLED -- THIS WILL LOG PASSWORDS IN CLEAR TEXT") ADD_DEFINITIONS(-DSHOW_SECRETS) ENDIF(SHOW_SECRETS) ENDIF(DEBUG) IF(PLUGIN) IF(NOT OPENVPN_SRC) message(FATAL_ERROR "Missing path to OpenVPN source - try running ./configure again") ENDIF(NOT OPENVPN_SRC) message(STATUS "Building eurephia plug-in for OpenVPN") SET(CHECK_INCL_FILE "${OPENVPN_SRC}/openvpn-plugin.h") IF(NOT EXISTS ${CHECK_INCL_FILE}) message(FATAL_ERROR "Missing openvpn-plugin.h ... Is the OpenVPN source code really located here? ${OPENVPN_SRC}") ENDIF(NOT EXISTS ${CHECK_INCL_FILE}) INCLUDE_DIRECTORIES(BEFORE ${OPENVPN_SRC} .) SET(subdirs ${subdirs} plugin) ENDIF(PLUGIN) INCLUDE(CheckIncludeFile) CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H) INCLUDE(CheckLibraryExists) CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_DLOPEN) CHECK_LIBRARY_EXISTS(dl dlclose "" HAVE_DLCLOSE) IF(NOT HAVE_DLOPEN OR NOT HAVE_DLCLOSE) message(FATAL_ERROR "Missing proper dl library") ENDIF(NOT HAVE_DLOPEN OR NOT HAVE_DLCLOSE) CHECK_INCLUDE_FILE(openssl/rand.h HAVE_OPENSSL_RAND_H) CHECK_LIBRARY_EXISTS(crypto RAND_load_file "" HAVE_OPENSSL_RAND_LOAD_FILE) CHECK_LIBRARY_EXISTS(crypto RAND_pseudo_bytes "" HAVE_OPENSSL_RAND_PSEUDO_BYTES) IF(NOT HAVE_OPENSSL_RAND_H OR NOT HAVE_OPENSSL_RAND_LOAD_FILE OR NOT HAVE_OPENSSL_RAND_PSEUDO_BYTES) message(FATAL_ERROR "Missing OpenSSL crypto support") ENDIF(NOT HAVE_OPENSSL_RAND_H OR NOT HAVE_OPENSSL_RAND_LOAD_FILE OR NOT HAVE_OPENSSL_RAND_PSEUDO_BYTES) CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H) CHECK_LIBRARY_EXISTS(pthread pthread_mutex_lock "" HAVE_PTHREAD_MUTEX_LOCK) CHECK_LIBRARY_EXISTS(pthread pthread_mutex_unlock "" HAVE_PTHREAD_MUTEX_UNLOCK) IF(NOT HAVE_PTHREAD_MUTEX_LOCK OR NOT HAVE_PTHREAD_MUTEX_UNLOCK) message(FATAL_ERROR "Missing proper pthread_mutex support") ENDIF(NOT HAVE_PTHREAD_MUTEX_LOCK OR NOT HAVE_PTHREAD_MUTEX_UNLOCK) ADD_DEFINITIONS(-g -Wall) SUBDIRS(${subdirs})