172 lines
4.8 KiB
CMake
172 lines
4.8 KiB
CMake
# CMakeLists.txt for ELOG project
|
|
cmake_minimum_required(VERSION 3.10)
|
|
project(ELOG)
|
|
|
|
# C++ version
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
# compile options
|
|
option(USE_SSL "Use OpenSSL library for https" ON)
|
|
option(USE_KRB5 "Use Kerberos library for authentication" OFF)
|
|
option(USE_LDAP "Use LDAP library for authentication" OFF)
|
|
option(USE_PAM "Use PAM library for authentication" OFF)
|
|
|
|
# install directory
|
|
set(CMAKE_INSTALL_PREFIX /usr/local)
|
|
set(ELOGDIR ${CMAKE_INSTALL_PREFIX}/elog)
|
|
set(RCDIR /etc/rc.d/init.d)
|
|
set(SRVDIR /usr/lib/systemd/system)
|
|
|
|
#----------------------------------
|
|
|
|
include_directories(${CMAKE_SOURCE_DIR}/mxml)
|
|
|
|
# default compiler flags
|
|
if (MSVC)
|
|
add_compile_options(/D_CRT_SECURE_WARNINGS /wd4005 /wd4244 /wd4267 /wd4996 /nologo)
|
|
else()
|
|
add_compile_options(-W -Wall -Wno-deprecated-declarations)
|
|
endif()
|
|
|
|
# optional address sanitizer, outcomment to turn on
|
|
#add_compile_options(-fsanitize=address)
|
|
#add_link_options(-fsanitize=address)
|
|
|
|
# find git
|
|
find_package(Git)
|
|
|
|
# git revision file
|
|
set(GIT_REVISION ${CMAKE_SOURCE_DIR}/src/git-revision.h)
|
|
|
|
# disable warnings for regex.c
|
|
set_source_files_properties(${CMAKE_SOURCE_DIR}/src/regex.c PROPERTIES COMPILE_FLAGS -w)
|
|
|
|
# Package finders
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
|
|
|
|
# optional SSL library
|
|
if (USE_SSL)
|
|
add_definitions(-DHAVE_SSL)
|
|
find_package(OpenSSL REQUIRED)
|
|
include_directories(${OPENSSL_INCLUDE_DIR})
|
|
endif (USE_SSL)
|
|
|
|
# optional KRB5 library
|
|
if (USE_KRB5)
|
|
add_definitions(-DHAVE_KRB5)
|
|
find_package(KRB5 REQUIRED)
|
|
include_directories(${KERBROS5_INCLUDE_DIR})
|
|
endif (USE_KRB5)
|
|
|
|
# optional LDAP library
|
|
if (USE_LDAP)
|
|
add_definitions(-DHAVE_LDAP)
|
|
find_package(LDAP REQUIRED)
|
|
include_directories(${LDAP_INCLUDE_DIR})
|
|
endif (USE_LDAP)
|
|
|
|
# optional PAM library
|
|
if (USE_PAM)
|
|
add_compile_definitions(HAVE_PAM)
|
|
find_package(PAM REQUIRED)
|
|
include_directories(${PAM_INCLUDE_DIR})
|
|
endif (USE_PAM)
|
|
|
|
set(GIT_REVISION_TMP ${GIT_REVISION}.tmp)
|
|
|
|
if (WIN32)
|
|
add_custom_target(git_revision_h
|
|
COMMAND ${CMAKE_SOURCE_DIR}/makegit.bat
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${GIT_REVISION_TMP} ${GIT_REVISION}
|
|
COMMAND ${CMAKE_COMMAND} -E remove ${GIT_REVISION_TMP}
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/
|
|
)
|
|
else(WIN32)
|
|
add_custom_target(git_revision_h
|
|
COMMAND ${CMAKE_SOURCE_DIR}/makegit > ${GIT_REVISION_TMP}
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${GIT_REVISION_TMP} ${GIT_REVISION}
|
|
COMMAND ${CMAKE_COMMAND} -E remove ${GIT_REVISION_TMP}
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/
|
|
)
|
|
endif()
|
|
|
|
add_executable(elogd
|
|
${CMAKE_SOURCE_DIR}/src/elogd.cxx
|
|
${CMAKE_SOURCE_DIR}/src/auth.cxx
|
|
${CMAKE_SOURCE_DIR}/mxml/mxml.cxx
|
|
${CMAKE_SOURCE_DIR}/src/strlcpy.cxx
|
|
${CMAKE_SOURCE_DIR}/src/crypt.cxx
|
|
)
|
|
|
|
if (WIN32)
|
|
target_sources(elog PRIVATE
|
|
${CMAKE_SOURCE_DIR}/src/regex.c
|
|
)
|
|
endif()
|
|
|
|
add_executable(elog
|
|
${CMAKE_SOURCE_DIR}/src/elog.cxx
|
|
${CMAKE_SOURCE_DIR}/src/crypt.cxx
|
|
${CMAKE_SOURCE_DIR}/src/strlcpy.cxx
|
|
)
|
|
|
|
add_dependencies(elogd git_revision_h)
|
|
add_dependencies(elog git_revision_h)
|
|
|
|
if(USE_SSL)
|
|
target_link_libraries(elogd ${OPENSSL_LIBRARIES})
|
|
target_link_libraries(elog ${OPENSSL_LIBRARIES})
|
|
endif(USE_SSL)
|
|
if(USE_KRB5)
|
|
target_link_libraries(elogd ${KRB5_LIBRARIES})
|
|
endif(USE_KRB5)
|
|
if(USE_LDAP)
|
|
target_link_libraries(elogd ${LDAP_LIBRARIES})
|
|
endif(USE_LDAP)
|
|
if(USE_PAM)
|
|
target_link_libraries(elogd ${PAM_LIBRARIES})
|
|
endif(USE_PAM)
|
|
|
|
if (WIN32)
|
|
target_link_libraries(elogd wsock32 ws2_32)
|
|
target_link_libraries(elog wsock32 ws2_32)
|
|
endif()
|
|
|
|
install(TARGETS elog
|
|
DESTINATION bin)
|
|
install(TARGETS elogd
|
|
DESTINATION sbin)
|
|
install(FILES ${CMAKE_SOURCE_DIR}/man/elog.1
|
|
DESTINATION man/man1)
|
|
install(FILES ${CMAKE_SOURCE_DIR}/man/elogd.8
|
|
DESTINATION man/man8)
|
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/scripts
|
|
${CMAKE_SOURCE_DIR}/resources
|
|
${CMAKE_SOURCE_DIR}/themes
|
|
MESSAGE_NEVER
|
|
DESTINATION ${ELOGDIR})
|
|
install(FILES ${CMAKE_SOURCE_DIR}/ssl/server.crt
|
|
${CMAKE_SOURCE_DIR}/ssl/server.key
|
|
DESTINATION ${ELOGDIR}/ssl/)
|
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/logbooks/demo
|
|
MESSAGE_NEVER
|
|
DESTINATION ${ELOGDIR}/logbooks)
|
|
|
|
# only install elogd.cfg if not existing
|
|
set(COPY_ELOGD_CFG "cp -n ${CMAKE_SOURCE_DIR}/elogd.cfg.example ${ELOGDIR}/elogd.cfg")
|
|
install(CODE "execute_process(COMMAND ${COPY_ELOGD_CFG})")
|
|
|
|
|
|
if (${CMAKE_SYSTEM_NAME} MATCHES Darwin)
|
|
install(FILES ${CMAKE_SOURCE_DIR}/elogd.plist
|
|
DESTINATION /Library/LaunchDaemons/ch.psi.elogd.plist)
|
|
|
|
install(CODE "message(\"\nThe elogd service can be started with:\")")
|
|
install(CODE "message(\"$ sudo launchctl bootstrap system /Library/LaunchDaemons/ch.psi.elogd.plist/elogd.plist\n\")")
|
|
|
|
#install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan
|
|
# \"$ sudo launchctl load /Library/LaunchDaemons/ch.psi.elogd.plist\")")
|
|
endif()
|
|
|