cmake_minimum_required(VERSION 3.16) project(ngs LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) add_definitions(-DHPSOCKET_STATIC_LIB) add_executable(ngs src/main.cpp src/utils.cpp src/api/api_server.cpp src/store/store.cpp src/system/metrics.cpp src/system/metrics_history.cpp src/system/process.cpp src/system/shell.cpp src/files/files.cpp src/tasks/tasks.cpp src/schedule/schedule.cpp src/software/software.cpp src/software/nginx/nginx.cpp src/software/fastweb/fastweb.cpp src/software/mysql/mysql.cpp src/software/redis/redis.cpp src/website/website.cpp src/ssl/acme.cpp src/auth/auth.cpp src/weblog/weblog.cpp src/selfupdate/selfupdate.cpp ) target_include_directories(ngs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src /usr/local/include ) target_compile_options(ngs PRIVATE -Wall -Wextra) target_compile_definitions(ngs PRIVATE NGS_SOURCE_DIR="${CMAKE_SOURCE_DIR}" NGS_BINARY_DIR="${CMAKE_BINARY_DIR}" ) list(APPEND CMAKE_LIBRARY_PATH /usr/local/lib /usr/lib/x86_64-linux-gnu /usr/lib) # Prefer shared mysqlcppconn so we do not require linkable libmysqlclient at build time # (libmysqlcppconn.so already DT_NEEDED libmysqlclient.so.*). set(_ngs_saved_suffixes "${CMAKE_FIND_LIBRARY_SUFFIXES}") set(CMAKE_FIND_LIBRARY_SUFFIXES ".so") find_library(MYSQLCPPCONN_LIB NAMES mysqlcppconn) set(CMAKE_FIND_LIBRARY_SUFFIXES "${_ngs_saved_suffixes}") if(NOT MYSQLCPPCONN_LIB) find_library(MYSQLCPPCONN_LIB NAMES mysqlcppconn REQUIRED) endif() find_library(MYSQLCLIENT_LIB NAMES mysqlclient) find_library(YLIB_LIB NAMES ylib REQUIRED) find_library(HPSOCKET_LIB NAMES hpsocket REQUIRED) find_library(LEVELDB_LIB NAMES leveldb REQUIRED) find_library(SQLITE3_LIB NAMES sqlite3 REQUIRED) find_library(SSL_LIB NAMES ssl REQUIRED) find_library(CRYPTO_LIB NAMES crypto REQUIRED) find_library(Z_LIB NAMES z REQUIRED) find_library(X11_LIB NAMES X11 REQUIRED) find_library(CURL_LIB NAMES curl REQUIRED) set(NGS_LIBS ${YLIB_LIB} ${MYSQLCPPCONN_LIB} ${HPSOCKET_LIB} ${LEVELDB_LIB} ${SQLITE3_LIB} ${SSL_LIB} ${CRYPTO_LIB} ${Z_LIB} ${X11_LIB} ${CURL_LIB} pthread dl rt util stdc++fs ) # Needed when linking a static libmysqlcppconn; optional for the shared .so case. if(MYSQLCLIENT_LIB) list(APPEND NGS_LIBS ${MYSQLCLIENT_LIB}) elseif(MYSQLCPPCONN_LIB MATCHES "\\.(a)$") message(FATAL_ERROR "libmysqlcppconn is static but libmysqlclient was not found. " "Install libmysqlclient-dev (or ./build.sh deps).") endif() target_link_libraries(ngs PRIVATE ${NGS_LIBS}) message(STATUS "mysqlcppconn: ${MYSQLCPPCONN_LIB}") if(MYSQLCLIENT_LIB) message(STATUS "mysqlclient: ${MYSQLCLIENT_LIB}") else() message(STATUS "mysqlclient: (not found, using shared mysqlcppconn runtime dep)") endif() install(TARGETS ngs RUNTIME DESTINATION bin) add_custom_target(install-deps COMMAND sudo apt-get update COMMAND sudo DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential cmake pkg-config libpcre3-dev zlib1g-dev libssl-dev libsqlite3-dev libleveldb-dev libmysqlcppconn-dev libmysqlclient-dev libcurl4-openssl-dev curl tar COMMENT "Install apt build dependencies (ylib and HPSocket must be preinstalled)" VERBATIM )