cmake_minimum_required(VERSION 3.18)

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

include(GenerateExportHeader)

project(dbpp)

set(LIBV "1.0.0")
set(Upstream_VERSION 1.0.0)

set(CMAKE_CXX_STANDARD 20)

include(GNUInstallDirs)

configure_file(config.h.in ${CMAKE_BINARY_DIR}/config.h)

set(WINDOWS_EXPORT_ALL_SYMBOLS ON)

if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
    add_definitions( -D${CMAKE_HOST_SYSTEM_NAME} -DPLGPATH="./")
else() # Corrected from elseif()
    add_definitions( -D${CMAKE_HOST_SYSTEM_NAME} -DPLGPATH="${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/dbpp")
endif()

if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "FreeBSD")
set(CMAKE_CXX_FLAGS "-Bsymbolic")
endif()

if(NOT ${CMAKE_CXX_COMPILER} MATCHES "MSVC")
set(CMAKE_CXX_FLAGS "-fPIC -Wall")
endif()

include_directories(
  ${CMAKE_BINARY_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}/include
)

add_subdirectory(backends)

add_library(dbpp STATIC
    src/database.cpp
    src/loader.cpp
)

if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
    target_link_libraries(dbpp kernel32.lib)
else()
    target_link_libraries(dbpp dl)
endif()

install(TARGETS dbpp DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT dbppTargets)

install(
  FILES include/database.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dbpp
  COMPONENT Devel
)

export(EXPORT dbppTargets
  FILE "${CMAKE_CURRENT_BINARY_DIR}/libdbppTargets.cmake"
  NAMESPACE htmlpp::
)

install(EXPORT dbppTargets
  FILE
    libdbppTargets.cmake
  NAMESPACE
    dbpp::
  DESTINATION
    ${CMAKE_INSTALL_LIBDIR}/cmake/libdbpp
  COMPONENT
    Devel
)

install(
  FILES
    libdbppConfig.cmake
  DESTINATION
    ${CMAKE_INSTALL_LIBDIR}/cmake/libdbpp
  COMPONENT
    Devel
)

add_subdirectory(examples)

if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
    INCLUDE(CPack)
    set(CPACK_GENERATOR WIX)
    set(CPACK_WIX_UPGRADE_GUID "18bd7bef-e88a-469f-8459-455e1fce424b")
    set(CPACK_PACKAGE_NAME "libdbpp")
    set(CPACK_PACKAGE_VENDOR "tuxist.de")
    set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "libdbpp - A C++ Database Abstract Library")
    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 "libdbpp")
endif()
