PROJECT(eurephia C) cmake_minimum_required(VERSION 2.6) SET(eurephia_auth_SRC certinfo.c eurephia-auth.c eurephia.c eurephiadb.c eurephiadb_session.c eurephiafw.c eurephiafw_helpers.c eurephia_getsym.c eurephia_log.c eurephia_values.c passwd.c sha512.c ) 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" ON) IF(NOT SQLITE3) message(FATAL_ERROR "Cannot build eurephia without any database drivers (-DSQLITE3=ON)") ENDIF(NOT SQLITE3) IF(DEBUG) ADD_DEFINITIONS(-DENABLE_DEBUG) IF(SHOW_SECRETS) ADD_DEFINITIONS(-DSHOW_SECRETS) ENDIF(SHOW_SECRETS) ENDIF(DEBUG) SET(OPENVPN_SRC "$ENV{OPENVPN_SRC_DIR}") IF(NOT OPENVPN_SRC) message(FATAL_ERROR "Cannot build eurephia without OPENVPN_SRC_DIR environment variable set to point at OpenVPN source") ENDIF(NOT OPENVPN_SRC) INCLUDE_DIRECTORIES(BEFORE ${OPENVPN_SRC} .) SET(CHECK_INCL_FILE "${OPENVPN_SRC}/openvpn-plugin.h") IF(NOT EXISTS ${CHECK_INCL_FILE}) message(FATAL_ERROR "Missing openvpn-plugin.h ... Is $OPENVPN_SRC_DIR pointing to the real OpenVPN source code?") ENDIF(NOT EXISTS ${CHECK_INCL_FILE}) 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(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) CHECK_LIBRARY_EXISTS(rt sem_wait "" HAVE_RT_SEM_WAIT) CHECK_LIBRARY_EXISTS(rt sem_post "" HAVE_RT_SEM_POST) CHECK_LIBRARY_EXISTS(rt mq_open "" HAVE_RT_MQ_OPEN) CHECK_LIBRARY_EXISTS(rt mq_close "" HAVE_RT_MQ_CLOSE) CHECK_LIBRARY_EXISTS(rt mq_unlink "" HAVE_RT_MQ_UNLINK) CHECK_LIBRARY_EXISTS(rt mq_send "" HAVE_RT_MQ_SEND) CHECK_LIBRARY_EXISTS(rt mq_receive "" HAVE_RT_MQ_RECEIVE) CHECK_LIBRARY_EXISTS(rt mq_getattr "" HAVE_RT_MQ_GETATTR) IF(NOT HAVE_RT_SEM_WAIT OR NOT HAVE_RT_SEM_POST) message(FATAL_ERROR "Missing proper pthread semaphore support") ENDIF(NOT HAVE_RT_SEM_WAIT OR NOT HAVE_RT_SEM_POST) IF(NOT HAVE_RT_MQ_OPEN OR NOT HAVE_RT_MQ_CLOSE OR NOT HAVE_RT_MQ_UNLINK OR NOT HAVE_RT_MQ_SEND OR NOT HAVE_RT_MQ_RECEIVE OR NOT HAVE_RT_MQ_GETATTR) message(FATAL_ERROR "Missing proper pthread message queue support") ENDIF(NOT HAVE_RT_MQ_OPEN OR NOT HAVE_RT_MQ_CLOSE OR NOT HAVE_RT_MQ_UNLINK OR NOT HAVE_RT_MQ_SEND OR NOT HAVE_RT_MQ_RECEIVE OR NOT HAVE_RT_MQ_GETATTR) 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) ADD_DEFINITIONS(-g -Wall) ADD_LIBRARY(eurephia-auth MODULE ${eurephia_auth_SRC}) TARGET_LINK_LIBRARIES(eurephia-auth dl pthread rt crypto) SET_TARGET_PROPERTIES(eurephia-auth PROPERTIES OUTPUT_NAME eurephia-auth PREFIX "") SUBDIRS(database/sqlite firewall/iptables)