189 lines
7.0 KiB
CMake
189 lines
7.0 KiB
CMake
# Global build file for Bongo
|
|
cmake_minimum_required(VERSION 3.16)
|
|
project(bongo VERSION 0.7.0 LANGUAGES C)
|
|
if(POLICY CMP0177)
|
|
cmake_policy(SET CMP0177 NEW)
|
|
endif()
|
|
include(CTest)
|
|
|
|
# set version of cmake required, and module path
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
|
|
|
|
set(BONGO_V_MAJOR "${PROJECT_VERSION_MAJOR}")
|
|
set(BONGO_V_MINOR "${PROJECT_VERSION_MINOR}")
|
|
set(BONGO_V_BUILD "${PROJECT_VERSION_PATCH}")
|
|
set(BONGO_V_PATCH "${PROJECT_VERSION_PATCH}")
|
|
set(BONGO_V_STR "${PROJECT_VERSION}")
|
|
|
|
# arguments we can supply to the build system - TODO
|
|
set(BONGO_USER "bongo" CACHE STRING "User account Bongo should run under")
|
|
option(CONN_TRACE "Enable connection tracing" OFF)
|
|
include(cmake/BongoCompiler.cmake)
|
|
|
|
# Every installed ELF object must declare the libraries that satisfy its
|
|
# symbols. Do not allow a shared library to rely on whichever later object an
|
|
# executable happens to place on its link line.
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
add_link_options("LINKER:--no-undefined")
|
|
endif()
|
|
|
|
# Modern 32-bit Linux distributions build their libraries with the 64-bit
|
|
# time and file-offset ABI. Match that ABI and remain safe beyond 2038.
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
add_compile_definitions(_FILE_OFFSET_BITS=64 _TIME_BITS=64)
|
|
endif()
|
|
|
|
# find our various build requirements
|
|
include(cmake/Requirements.cmake)
|
|
|
|
if(BUILD_TESTING)
|
|
add_test(NAME c-literal-io-lengths
|
|
COMMAND "${Python3_EXECUTABLE}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/contrib/testing/c-literal-length-check.py")
|
|
endif()
|
|
|
|
# set up defines for build directories
|
|
include(cmake/Directories.cmake)
|
|
include(cmake/DefineInstallationPaths.cmake)
|
|
|
|
# define RPATH for debug/etc. builds - allows us to install libraries
|
|
# in non-system location and the binaries still link to them
|
|
set(CMAKE_INSTALL_RPATH "${XPL_DEFAULT_LIB_DIR}")
|
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
|
|
|
# any legacy defines which we want to get rid of eventually
|
|
include(cmake/Legacy.cmake)
|
|
|
|
# output header files etc. specifically configured for this build
|
|
configure_file(config.h.cmake include/config.h @ONLY)
|
|
configure_file(src/agents/store/sql/create-store.s.cmake src/agents/store/sql/createstore.s @ONLY)
|
|
configure_file(src/agents/store/sql/create-cookie-1.s.cmake src/agents/store/sql/createcookie-1.s @ONLY)
|
|
|
|
# tell compiler where to find Bongo's header files
|
|
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include/)
|
|
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/include/)
|
|
|
|
# now build our various libraries, agents, binaries.
|
|
# DO NOT ALTER (SO)VERSION ON LIBRARIES WITHOUT ASKING!
|
|
foreach (LIBRARY xpl authsecurity streamio msgapi connio util json cal mailauth tlsrpt sieve sasl collectoraccounts acme scheduler)
|
|
add_subdirectory (src/libs/${LIBRARY})
|
|
set(LIBRARY_TARGET bongo${LIBRARY})
|
|
if(LIBRARY STREQUAL "sieve")
|
|
set(LIBRARY_TARGET libbongosieve)
|
|
endif()
|
|
set_target_properties(${LIBRARY_TARGET} PROPERTIES
|
|
SOVERSION 0
|
|
VERSION ${BONGO_V_STR}
|
|
)
|
|
endforeach (LIBRARY)
|
|
|
|
add_subdirectory(src/libs/python/libbongo)
|
|
add_subdirectory(src/libs/python/bongo)
|
|
add_subdirectory(po)
|
|
|
|
foreach (AGENT antispam avirus collector director imap pop queue rules sieve smtp store worker)
|
|
add_subdirectory (src/agents/${AGENT})
|
|
endforeach (AGENT)
|
|
|
|
foreach (EXECUTABLE admin config manager testtool queuetool storetool sendmail)
|
|
add_subdirectory (src/apps/${EXECUTABLE})
|
|
endforeach (EXECUTABLE)
|
|
|
|
# CMake's release configurations define NDEBUG. The legacy test suite uses
|
|
# assert() for both checks and, in a few cases, the operation under test. Keep
|
|
# assertions enabled for test sources without changing production binaries.
|
|
# Apply the option to test targets after all target-owning directories have
|
|
# been added. This avoids relying on directory-scoped source properties.
|
|
if(BUILD_TESTING AND NOT MSVC)
|
|
function(BONGO_COLLECT_TARGETS OUTPUT DIRECTORY)
|
|
get_property(BONGO_DIRECTORY_TARGETS DIRECTORY "${DIRECTORY}"
|
|
PROPERTY BUILDSYSTEM_TARGETS)
|
|
get_property(BONGO_SUBDIRECTORIES DIRECTORY "${DIRECTORY}"
|
|
PROPERTY SUBDIRECTORIES)
|
|
foreach(BONGO_SUBDIRECTORY IN LISTS BONGO_SUBDIRECTORIES)
|
|
BONGO_COLLECT_TARGETS(BONGO_SUBDIRECTORY_TARGETS
|
|
"${BONGO_SUBDIRECTORY}")
|
|
list(APPEND BONGO_DIRECTORY_TARGETS
|
|
${BONGO_SUBDIRECTORY_TARGETS})
|
|
endforeach()
|
|
set(${OUTPUT} "${BONGO_DIRECTORY_TARGETS}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
BONGO_COLLECT_TARGETS(BONGO_ALL_TARGETS "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
foreach(BONGO_TARGET IN LISTS BONGO_ALL_TARGETS)
|
|
if(BONGO_TARGET MATCHES "-test$")
|
|
target_compile_options(${BONGO_TARGET} PRIVATE -UNDEBUG)
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
add_subdirectory(src/www)
|
|
|
|
add_subdirectory (init)
|
|
add_subdirectory(man)
|
|
|
|
# Developer-only timezone snapshot refresh. This target is deliberately not
|
|
# part of ALL: normal and distribution builds must remain reproducible and
|
|
# must not rewrite checked-in source data.
|
|
set(BONGO_TZDATA_DIR "" CACHE PATH
|
|
"Path to an unpacked IANA tzdata tree used by the update-zoneinfo target")
|
|
add_executable(bongo-vzic EXCLUDE_FROM_ALL
|
|
import/vzic/vzic.c
|
|
import/vzic/vzic-parse.c
|
|
import/vzic/vzic-dump.c
|
|
import/vzic/vzic-output.c)
|
|
target_include_directories(bongo-vzic PRIVATE import/vzic)
|
|
target_compile_definitions(bongo-vzic PRIVATE
|
|
PRODUCT_ID="-//Bongo Project//Bongo 1.0//EN"
|
|
TZID_PREFIX="/bongo/"
|
|
CREATE_SYMLINK=0
|
|
IGNORE_TOP_LEVEL_LINK=0)
|
|
target_link_libraries(bongo-vzic PRIVATE GLib2::GLib2)
|
|
|
|
add_executable(bongo-import-tz EXCLUDE_FROM_ALL src/libs/cal/bongo-import-tz.c)
|
|
target_include_directories(bongo-import-tz PRIVATE src/libs/cal)
|
|
target_link_libraries(bongo-import-tz PRIVATE
|
|
bongocal bongoutil bongomsgapi bongoxpl)
|
|
|
|
add_custom_target(update-zoneinfo
|
|
COMMAND /bin/sh ${CMAKE_CURRENT_SOURCE_DIR}/zoneinfo/update-zoneinfo.sh
|
|
"${BONGO_TZDATA_DIR}"
|
|
"$<TARGET_FILE:bongo-vzic>"
|
|
"$<TARGET_FILE:bongo-import-tz>"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/zoneinfo"
|
|
DEPENDS bongo-vzic bongo-import-tz
|
|
USES_TERMINAL
|
|
COMMENT "Refreshing the checked-in Bongo zoneinfo snapshot")
|
|
|
|
# install various other files
|
|
install(DIRECTORY include/
|
|
DESTINATION "${CMAKE_INSTALL_PREFIX}/include/bongo"
|
|
FILES_MATCHING PATTERN "*.h"
|
|
PATTERN ".svn" EXCLUDE)
|
|
|
|
install(DIRECTORY zoneinfo
|
|
DESTINATION ${XPL_DEFAULT_DATA_DIR}
|
|
FILES_MATCHING PATTERN "*.zone"
|
|
PATTERN ".svn" EXCLUDE)
|
|
install(FILES zoneinfo/IANA_VERSION
|
|
DESTINATION ${XPL_DEFAULT_DATA_DIR}/zoneinfo)
|
|
|
|
install(FILES src/agents/collector/provider-presets.json
|
|
DESTINATION ${XPL_DEFAULT_DATA_DIR}/providers)
|
|
|
|
install(DIRECTORY contrib/antispam/
|
|
DESTINATION ${DATA_INSTALL_DIR}/examples/antispam)
|
|
install(DIRECTORY contrib/reverse-proxy/
|
|
DESTINATION ${DATA_INSTALL_DIR}/examples/reverse-proxy)
|
|
install(DIRECTORY contrib/acme/
|
|
DESTINATION ${DATA_INSTALL_DIR}/examples/acme)
|
|
|
|
install(FILES README AUTHORS ROADMAP.md
|
|
DESTINATION ${DOC_INSTALL_DIR})
|
|
install(DIRECTORY docs/
|
|
DESTINATION ${DOC_INSTALL_DIR}
|
|
FILES_MATCHING PATTERN "*.md")
|
|
|
|
# include rules for make distribution tarballs
|
|
include(cmake/Distribution.cmake)
|