include(GenerateExportHeader)

list(APPEND hldsviewsrc
    hldsview.cpp
    exception.cpp
)

if(${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
    add_library(gameinfoplus STATIC ${hldsviewsrc})
else()
    add_library(gameinfoplus SHARED ${hldsviewsrc})
endif()

set_target_properties(gameinfoplus PROPERTIES
    GLOBAL_TARGET_SCOPE ON
    VERSION ${Upstream_VERSION}
    SOVERSION ${LIBV}
)

target_link_libraries(gameinfoplus PUBLIC netplus::netplus)

target_compile_options(gameinfoplus PUBLIC "-fPIC")

generate_export_header(gameinfoplus)

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

install(FILES
    hldsview.h
    gameinfoplus.h
    exception.h
    "${CMAKE_CURRENT_BINARY_DIR}/gameinfoplus_export.h"
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/gameinfoplus
    COMPONENT Devel
)

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

export(EXPORT gameinfoplusTargets
  FILE "${CMAKE_CURRENT_BINARY_DIR}/gameinfoplus/gameinfoplusTargets.cmake"
  NAMESPACE Upstream::
)

configure_file(gameinfoplusConfig.cmake
  "${CMAKE_CURRENT_BINARY_DIR}/gameinfoplus/gameinfoplusConfig.cmake"
  @ONLY
)

set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/gameinfoplus)
install(EXPORT gameinfoplusTargets
  FILE
    gameinfoplusTargets.cmake
  NAMESPACE
    gameinfoplus::
  DESTINATION
    ${ConfigPackageLocation}
)

install(
  FILES
    "${CMAKE_CURRENT_BINARY_DIR}/gameinfoplus/gameinfoplusConfig.cmake"
    "${CMAKE_CURRENT_BINARY_DIR}/gameinfoplus/gameinfoplusConfigVersion.cmake"
  DESTINATION
    ${ConfigPackageLocation}
  COMPONENT
    Devel
)