* 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!
107 lines
2.3 KiB
CMake
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}
|
|
) |