set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)

include(GenerateExportHeader)

set(headers
    css.h
    html.h
    request.h
    utils.h
    exception.h
)

set(libhtmlSrcs
    css.cpp
    html.cpp
    request.cpp
    exception.cpp
)

add_library(htmlpp SHARED ${libhtmlSrcs} ${headers} )
target_compile_definitions(htmlpp PUBLIC -DSHARED)

add_library(htmlpp-static STATIC ${libhtmlSrcs} ${headers})

target_sources(htmlpp PUBLIC
    FILE_SET publicheaders
    TYPE HEADERS
    BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
    FILES ${headers}
)

target_sources(htmlpp-static PUBLIC
    FILE_SET publicheaders
    TYPE HEADERS
    BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
    FILES ${headers}
)

generate_export_header(htmlpp BASE_NAME htmlpp EXPORT_FILE_NAME  htmlpp_exports.h)

target_link_libraries(htmlpp)
target_link_libraries(htmlpp-static)

target_include_directories(htmlpp
  INTERFACE
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
    $<INSTALL_INTERFACE:include>
  PRIVATE
    $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
)

target_include_directories(htmlpp-static
  INTERFACE
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
    $<INSTALL_INTERFACE:include>
  PRIVATE
    $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
)

set_property(TARGET htmlpp PROPERTY VERSION ${Upstream_VERSION})
set_property(TARGET htmlpp PROPERTY SOVERSION 1)
set_property(TARGET htmlpp PROPERTY INTERFACE_htmlpp_MAJOR_VERSION 1)
set_property(TARGET htmlpp APPEND PROPERTY COMPATIBLE_INTERFACE_STRING htmlpp_MAJOR_VERSION)
 
set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/libhtmlpp)

include(CMakePackageConfigHelpers)

if("${CMAKE_HOST_SYSTEM_NAME}" MATCHES "Windows" AND "${CMAKE_BUILD_TYPE}" MATCHES "DEBUG")
    set_target_properties(htmlpp PROPERTIES
        IMPORTED_IMPLIB_DEBUG "$<TARGET_FILE_DIR:htmlpp>/htmlppd.lib"
        IMPORTED_IMPLIB "$<TARGET_FILE_DIR:htmlpp>/htmlpp.lib"
    )
    set_target_properties(htmlpp-static PROPERTIES
        IMPORTED_IMPLIB_DEBUG "$<TARGET_FILE_DIR:htmlpp-static>/htmlpp-staticd.lib"
        IMPORTED_IMPLIB "$<TARGET_FILE_DIR:htmlpp-static>/htmlpp-static.lib"
    )
endif()

install(TARGETS htmlpp htmlpp-static EXPORT htmlppTargets
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    FILE_SET publicheaders DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/htmlpp
)

install(FILES
    "${CMAKE_CURRENT_BINARY_DIR}/htmlpp_exports.h"
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/htmlpp
    COMPONENT Devel
)

write_basic_package_version_file(
  "${CMAKE_CURRENT_BINARY_DIR}/libhtmlpp/libhtmlppConfigVersion.cmake"
  VERSION ${Upstream_VERSION}
  COMPATIBILITY AnyNewerVersion
)

export(EXPORT htmlppTargets
  FILE "${CMAKE_CURRENT_BINARY_DIR}/libhtmlpp/libhtmlppTargets.cmake"
  NAMESPACE htmlpp::
)

configure_package_config_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/libhtmlppConfig.cmake"
    "${CMAKE_BINARY_DIR}/libhtmlppConfig.cmake"
    INSTALL_DESTINATION ${ConfigPackageLocation}
)

install(EXPORT htmlppTargets
  FILE
    libhtmlppTargets.cmake
  NAMESPACE
    htmlpp::
  DESTINATION
    ${ConfigPackageLocation}
)

install(
  FILES
    "${CMAKE_BINARY_DIR}/libhtmlppConfig.cmake"
    "${CMAKE_CURRENT_BINARY_DIR}/libhtmlpp/libhtmlppConfigVersion.cmake"
  DESTINATION
    ${ConfigPackageLocation}
  COMPONENT
    Devel
)

if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
    set(CPACK_GENERATOR WIX)
    set(CPACK_WIX_VERSION 3)
    set(CPACK_PACKAGE_NAME "libhtmlpp")
    set(CPACK_PACKAGE_VENDOR "tuxist.de")
    set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "libhtmlpp - A C++ Html and Css 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 "libhtmlpp")
    set(CPACK_WIX_UPGRADE_GUID "BEC7615C-EAFD-44EF-8E06-B790373B8EBC")
    INCLUDE(CPack)
endif()
