cmake_minimum_required(VERSION 3.26) # Project definition project(digftp VERSION 1.0.0 DESCRIPTION "A modern FTP server with plugin support" LANGUAGES C CXX ) # Global settings set(APPNAME "digFTP") include(GNUInstallDirs) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") # C++ standard requirements set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # Build type configuration if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build" FORCE) endif() # Version handling if(NOT CMAKE_BUILD_TYPE MATCHES "Release") if(NOT BUILD_VERSION) find_package(Git QUIET) if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" OUTPUT_VARIABLE BUILD_VERSION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) else() set(BUILD_VERSION "unknown") endif() endif() set(VERSION "${BUILD_VERSION}") endif() # Compile Options option(WITH_SSL "Compile with SSL support" ON) # Path variables set(CONFIG_PATH "${CMAKE_INSTALL_SYSCONFDIR}/${PROJECT_NAME}") set(PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/plugins") # Configure build header configure_file( "${PROJECT_SOURCE_DIR}/src/build.h.in" "${PROJECT_BINARY_DIR}/build.h" @ONLY ) # Add compile definitions add_compile_definitions( PLUGIN_DIR="${CMAKE_INSTALL_PREFIX}/${PLUGIN_PATH}" CONFIG_DIR="${CMAKE_INSTALL_PREFIX}/${CONFIG_PATH}" WITH_SSL=${WITH_SSL} ) # Dependencies find_package(Threads REQUIRED) if(WITH_SSL) find_package(OpenSSL REQUIRED) include_directories(${OPENSSL_INCLUDE_DIR}) endif() # Output directories set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") # Include directories include_directories(${CMAKE_BINARY_DIR}) # Define plugins list set(PLUGINS auth_pam auth_passdb filer_local ) # Add main source directory which includes plugins add_subdirectory(src) # Installation install( FILES "${PROJECT_SOURCE_DIR}/conf/ftp.conf" "${PROJECT_SOURCE_DIR}/conf/motd" DESTINATION "${CONFIG_PATH}" ) install( TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install( TARGETS ${PLUGINS} LIBRARY DESTINATION ${PLUGIN_PATH} )