* 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!
This commit is contained in:
115
CMakeLists.txt
115
CMakeLists.txt
@@ -1,12 +1,107 @@
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.26)
|
||||
PROJECT(digftp)
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
SET(CMAKE_CXX_STANDARD 20)
|
||||
SET(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||
SET(CMAKE_CXX_FLAGS "-O3")
|
||||
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
|
||||
# Project definition
|
||||
project(digftp
|
||||
VERSION 1.0.0
|
||||
DESCRIPTION "A modern FTP server with plugin support"
|
||||
LANGUAGES C CXX
|
||||
)
|
||||
|
||||
ADD_SUBDIRECTORY(src)
|
||||
FILE(COPY conf DESTINATION ${CMAKE_BINARY_DIR})
|
||||
INSTALL(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
|
||||
# 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}
|
||||
)
|
||||
Reference in New Issue
Block a user