cmake_minimum_required(VERSION 3.26)

project(authdb)

include(GNUInstallDirs)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_ENABLE_EXPORTS 1)

set(DATAPATH "${CMAKE_INSTALL_DATADIR}/authdb" CACHE FILEPATH "path where stored webinterface files are located")
set(PLUGINPATH "${CMAKE_INSTALL_LIBDIR}/authdb" CACHE FILEPATH "default plugin search path")

add_definitions(-D${CMAKE_HOST_SYSTEM_NAME} -DDATAPATH="${DATAPATH}" -DPLUGINPATH="${PLUGINPATH}")

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

# Ensure /usr/local is searched (needed on Alpine/musl with CMake 4.x)
list(APPEND CMAKE_PREFIX_PATH "/usr/local")

message(STATUS "System: ${CMAKE_HOST_SYSTEM_NAME}")

if( NOT ${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows" )
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -Wextra --warn-no-unused-parameter -Wstack-usage=4096 --std=c++20")
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DNDEBUG")
endif()

set(version 0.1)

set(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake" )

link_directories("lib")

find_package(libconfplus REQUIRED)
find_package(libcmdplus REQUIRED)
find_package(libnetplus REQUIRED)
find_package(libhttppp REQUIRED)
find_package(libhtmlpp REQUIRED)
find_package(json-c REQUIRED)
find_package(libuuidp REQUIRED)
find_package(paritypp REQUIRED)

include_directories(
    ${LIBUUIDP_INCLUDE_DIR}
    BEFORE ${CMAKE_SOURCE_DIR}/src ${UUIDP_INCLUDE_DIR}
)

add_subdirectory(src)
add_subdirectory(plugin/krb5)
add_subdirectory(plugin/ad)
add_subdirectory(client)
add_subdirectory(cli)

option(BUILD_BINDINGS "Build language bindings (Node.js, Python, PHP)" ON)
if(BUILD_BINDINGS)
    add_subdirectory(bindings)
endif()

option(BUILD_TESTING "Build unit tests" OFF)
if(BUILD_TESTING)
    add_subdirectory(tests)
endif()

install(FILES
    data/authdb.js
    data/style.css
    data/wizzard.html
    data/login.html
    data/index.html
    data/authdb.png
    data/admin.html
DESTINATION ${CMAKE_INSTALL_DATADIR}/authdb)

if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
    set(CPACK_GENERATOR WIX)
    set(CPACK_WIX_UPGRADE_GUID "dbf5510e-d834-4ec7-94de-6c31bf29a92e")
    set(CPACK_PACKAGE_NAME "authdb")
    set(CPACK_PACKAGE_VENDOR "tuxist.de")
    set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "authdb - A C++ Auth Database")
    set(CPACK_PACKAGE_VERSION "1.0.0")
    set(CPACK_PACKAGE_VERSION_MAJOR "1")
    set(CPACK_PACKAGE_VERSION_MINOR "0")
    set(CPACK_PACKAGE_VERSION_PATCH "0")
    set(CPACK_PACKAGE_INSTALL_DIRECTORY "authdb")
    INCLUDE(CPack)
endif()
