add_definitions(
    -DSQLITE_THREADSAFE=2
)

add_library(blogidev STATIC
    mail.cpp
    session.cpp
    auth.cpp
    conf.cpp
    plugin.cpp
    theme.cpp
    cookie.cpp
    mail.cpp
)

target_include_directories(blogidev PRIVATE ${SMTPCLIENT_INCLUDE_DIR})

target_link_libraries(blogidev PUBLIC
    htmlpp::htmlpp
    httppp::httppp
    netplus::netplus
    cmdplus::cmdplus
    Brotli::Brotli
    json-c::json-c
    authdb::client
    confplus::confplus
    smtpclient::smtpclient
    dbpp::dbpp
    uuidp::uuidp
    tinyxml2::tinyxml2
)

if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")
    target_compile_definitions(blogidev PUBLIC -D_CRT_SECURE_NO_WARNINGS)
else()
    target_compile_options(blogidev PUBLIC "-fPIC")
endif()

install(TARGETS blogidev DESTINATION lib/blogi)
install(FILES
    api.h auth.h blogi.h compress.h conf.h cookie.h
    i18n.h mail.h plugin.h session.h theme.h translations.h
    DESTINATION include/blogi
)

add_executable(blogi
    blogi.cpp
)

if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")
    # Compile message catalog for Windows Event Log
    set(MC_INPUT ${CMAKE_CURRENT_SOURCE_DIR}/blogi_events.mc)
    set(MC_OUTPUT_H ${CMAKE_CURRENT_BINARY_DIR}/blogi_events.h)
    set(MC_OUTPUT_RC ${CMAKE_CURRENT_BINARY_DIR}/blogi_events.rc)
    add_custom_command(
        OUTPUT ${MC_OUTPUT_H} ${MC_OUTPUT_RC}
        COMMAND mc -A -b -h ${CMAKE_CURRENT_BINARY_DIR} -r ${CMAKE_CURRENT_BINARY_DIR} ${MC_INPUT}
        DEPENDS ${MC_INPUT}
        COMMENT "Compiling message catalog blogi_events.mc"
    )
    target_sources(blogi PRIVATE ${MC_OUTPUT_RC})
    target_include_directories(blogi PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
endif()

include_directories(
    ${CMAKE_SOURCE_DIR}/data
    ${CMAKE_SOURCE_DIR}/src/database
)


#target_include_directories(blogi PUBLIC
#
#)

if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")
    target_link_libraries(blogi PUBLIC
        blogidev
        kernel32.lib
        shlwapi.lib
        advapi32.lib
        paritypp::paritypp
    )
else()
    target_link_libraries(blogi PUBLIC
        blogidev
        paritypp::paritypp
    )
endif()

install(
    TARGETS blogi  DESTINATION bin RUNTIME_DEPENDENCY_SET blogidyn
)

if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows" )
    install(
        RUNTIME_DEPENDENCY_SET blogidyn 
        DIRECTORIES 
            "$<TARGET_FILE_DIR:htmlpp::htmlpp>" 
            "$<TARGET_FILE_DIR:httppp::httppp>"
            "$<TARGET_FILE_DIR:uuidp::uuidp>"
            "$<TARGET_FILE_DIR:json-c::json-c>"
            "$<TARGET_FILE_DIR:Brotli::Enc>"
            "$<TARGET_FILE_DIR:Brotli::Dec>"
            "$<TARGET_FILE_DIR:dbpp::dbpp>"
            "$<TARGET_FILE_DIR:Brotli::Common>"
        DESTINATION bin
        PRE_EXCLUDE_REGEXES "((api|ext)-ms-.*|.*azureattest.*|vcruntime.*|ucrtbase.*|msvcrt.*|wpaxholder.*|hvsifiletrust.*|pdmutilities.*)\\.dll"
        POST_EXCLUDE_REGEXES [[.*(\\|/)system32(\\|/).*\.dll]]
    )

    set(CPACK_GENERATOR WIX)
    set(CPACK_WIX_UPGRADE_GUID "09343967-6c52-4c2f-b72f-0703fd4b4350")
    set(CPACK_PACKAGE_NAME "blogi")
    set(CPACK_PACKAGE_VENDOR "tuxist.de")
    set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A small Blog written in C++")
    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 "blogi")
    INCLUDE(CPack)
endif()
