Files
bongo/CMakeLists.txt
T
Mario Fetka 5897512fd9 Modernize Bongo protocols and administration
Complete the current IMAP, POP3, SMTP and proxy protocol work; add the validated setup and administration UI, packaging examples, tests, and maintained roadmap/documentation for the 0.7 development line.
2026-07-18 04:26:00 +02:00

133 lines
4.8 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)
# find our various build requirements
include(cmake/Requirements.cmake)
# 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 sieve sasl collectoraccounts)
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)
foreach (AGENT antispam avirus collector director imap pop queue rules sieve smtp store)
add_subdirectory (src/agents/${AGENT})
endforeach (AGENT)
foreach (EXECUTABLE admin config manager testtool queuetool storetool sendmail)
add_subdirectory (src/apps/${EXECUTABLE})
endforeach (EXECUTABLE)
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)
# include rules for make distribution tarballs
include(cmake/Distribution.cmake)