Files
digFTP/CMakeLists.txt
Wirlaburla 5ff35c26ab * Added plugin support
* Improved Filer (LocalFiler)
* Supports Explicit SSL/TLS with OpenSSL/Crypto
* Fixed most of the bugs that drove me nuts.
* Properly handled socket closes
* Improved socket cleanup
* Buffered file downloads
* Lots 'o errors!

I did it again! I made a single commit with everything!
2024-12-13 10:51:10 -06:00

107 lines
2.3 KiB
CMake

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}
)