cmake_minimum_required(VERSION 3.20)

project(libprozilla VERSION 1.2.3 LANGUAGES C)

include(CTest)

include(GNUInstallDirs)
include(CheckIncludeFile)
include(CheckFunctionExists)
include(CMakePackageConfigHelpers)

find_package(Threads REQUIRED)
find_package(CURL 8.17 REQUIRED)
find_package(Intl)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)

foreach(header
    assert.h arpa/inet.h ctype.h errno.h fcntl.h limits.h locale.h memory.h
    netdb.h netinet/in.h pthread.h pwd.h stdio.h stdlib.h string.h strings.h
    sys/socket.h sys/stat.h sys/time.h sys/types.h time.h unistd.h)
  string(TOUPPER "${header}" header_var)
  string(REGEX REPLACE "[^A-Z0-9]" "_" header_var "${header_var}")
  check_include_file("${header}" "HAVE_${header_var}")
endforeach()
foreach(function snprintf strdup strerror strncasecmp vsnprintf)
  string(TOUPPER "${function}" function_var)
  check_function_exists("${function}" "HAVE_${function_var}")
endforeach()

set(HAVE_CONFIG_H 1)
set(STDC_HEADERS 1)
set(PACKAGE "libprozilla")
set(PACKAGE_NAME "libprozilla")
set(PACKAGE_VERSION "${PROJECT_VERSION}")
set(VERSION "${PROJECT_VERSION}")
set(LOCALEDIR "${CMAKE_INSTALL_FULL_LOCALEDIR}")
configure_file(cmake/config.h.in generated/config.h)

add_subdirectory(src)
add_subdirectory(po)
add_subdirectory(docs)
if(BUILD_TESTING)
  add_subdirectory(tests)
endif()

configure_package_config_file(cmake/libprozillaConfig.cmake.in
  "${CMAKE_CURRENT_BINARY_DIR}/libprozillaConfig.cmake"
  INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libprozilla")
write_basic_package_version_file(
  "${CMAKE_CURRENT_BINARY_DIR}/libprozillaConfigVersion.cmake"
  VERSION "${PROJECT_VERSION}" COMPATIBILITY SameMajorVersion)
install(FILES
  "${CMAKE_CURRENT_BINARY_DIR}/libprozillaConfig.cmake"
  "${CMAKE_CURRENT_BINARY_DIR}/libprozillaConfigVersion.cmake"
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libprozilla")
install(EXPORT libprozillaTargets NAMESPACE libprozilla::
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libprozilla")

set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Download accelerator library used by ProZilla")
set(CPACK_PACKAGE_CONTACT "prozilla-dev@disconnected-by-peer.at")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
set(CPACK_GENERATOR "TGZ;TXZ")
set(CPACK_SOURCE_GENERATOR "TGZ;TXZ")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
set(CPACK_SOURCE_IGNORE_FILES
    "/\\.git/"
    "/build/"
    "/_CPack_Packages/"
    "/CMakeFiles/"
    "/CMakeCache\\.txt$"
    "/cmake_install\\.cmake$"
    "/CPack(Config|SourceConfig)\\.cmake$"
    "~$"
    ${CPACK_SOURCE_IGNORE_FILES})
include(CPack)
