set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)

include(GenerateExportHeader)

set(libhttpSrcs
  exception.cpp
  http.cpp
  httpd.cpp
  hpack.cpp
  qpack.cpp
)

add_library(httppp SHARED ${libhttpSrcs})

target_compile_definitions(httppp PUBLIC -DSHARED)

add_library(httppp-static STATIC ${libhttpSrcs})

generate_export_header(httppp)

if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
  target_link_libraries(httppp netplus::netplus cmdplus::cmdplus)
  target_link_libraries(httppp-static netplus::netplus-static cmdplus::cmdplus)
else()
  target_link_libraries(httppp netplus::netplus cmdplus::cmdplus pthread)
  target_link_libraries(httppp-static netplus::netplus-static cmdplus::cmdplus pthread)
endif()

set_property(TARGET httppp PROPERTY VERSION ${Upstream_VERSION})
set_property(TARGET httppp PROPERTY SOVERSION 1)
set_property(TARGET httppp PROPERTY INTERFACE_httppp_MAJOR_VERSION 1)
set_property(TARGET httppp APPEND PROPERTY COMPATIBLE_INTERFACE_STRING httppp_MAJOR_VERSION)

install(TARGETS httppp EXPORT httpppTargets
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(TARGETS httppp-static EXPORT httpppTargets
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(FILES httpd.h
              hpack.h
              http.h
              httpdefinitions.h
              exception.h
              https.h
              qpack.h
              mimetypes.h
              "${CMAKE_BINARY_DIR}/config.h"
              "${CMAKE_CURRENT_BINARY_DIR}/httppp_export.h"
        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/httppp
        COMPONENT Devel
)

include(CMakePackageConfigHelpers)
write_basic_package_version_file(
  "${CMAKE_CURRENT_BINARY_DIR}/httppp/libhttpppConfigVersion.cmake"
  VERSION ${Upstream_VERSION}
  COMPATIBILITY AnyNewerVersion
)

export(EXPORT httpppTargets
  FILE "${CMAKE_CURRENT_BINARY_DIR}/httppp/libhttpppTargets.cmake"
  NAMESPACE httppp::
)

configure_package_config_file(
  "${CMAKE_CURRENT_SOURCE_DIR}/cmake/httpppConfig.cmake"
  "${CMAKE_CURRENT_BINARY_DIR}/httppp/libhttpppConfig.cmake"
     INSTALL_DESTINATION ${ConfigPackageLocation}
  @ONLY
)

set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/libhttppp)
install(EXPORT httpppTargets
  FILE
    libhttpppTargets.cmake
  NAMESPACE
    httppp::
  DESTINATION
    ${ConfigPackageLocation}
)

install(
  FILES
    "${CMAKE_CURRENT_BINARY_DIR}/httppp/libhttpppConfig.cmake"
    "${CMAKE_CURRENT_BINARY_DIR}/httppp/libhttpppConfigVersion.cmake"
  DESTINATION
    ${ConfigPackageLocation}
  COMPONENT
    Devel
)

if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
    set(CPACK_GENERATOR WIX)
    set(CPACK_WIX_UPGRADE_GUID "C37C5428-A9D2-4F4E-A61F-7A999EC3225F")
    set(CPACK_PACKAGE_NAME "libhttppp")
    set(CPACK_PACKAGE_VENDOR "tuxist.de")
    set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "libhttppp - A C++ Http 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 "libhttppp")
    INCLUDE(CPack)
endif()
