cmake_minimum_required(VERSION 3.16)
project(sqlite_rational VERSION 0.1.0 LANGUAGES C)
if(DEFINED RATIONAL_NATIVE_PREFIX)
  find_path(GMP_INCLUDE_DIR gmp.h PATHS "${RATIONAL_NATIVE_PREFIX}/include" NO_DEFAULT_PATH)
  find_library(GMP_LIBRARY NAMES gmp libgmp PATHS "${RATIONAL_NATIVE_PREFIX}/lib" NO_DEFAULT_PATH)
  if(NOT GMP_INCLUDE_DIR OR NOT GMP_LIBRARY)
    message(FATAL_ERROR "Missing GMP headers or library under RATIONAL_NATIVE_PREFIX")
  endif()
  add_library(rational_gmp UNKNOWN IMPORTED)
  set_target_properties(rational_gmp PROPERTIES IMPORTED_LOCATION "${GMP_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}")
  set(RATIONAL_GMP_TARGET rational_gmp)
else()
  find_package(PkgConfig REQUIRED)
  pkg_check_modules(GMP REQUIRED IMPORTED_TARGET gmp)
  set(RATIONAL_GMP_TARGET PkgConfig::GMP)
endif()
find_package(SQLite3 3.37 REQUIRED)
if(TARGET SQLite3::SQLite3)
  set(RATIONAL_SQLITE_TARGET SQLite3::SQLite3)
else()
  set(RATIONAL_SQLITE_TARGET SQLite::SQLite3)
endif()
add_library(sqlite_rational MODULE src/rational.c src/index.c)
target_link_libraries(sqlite_rational PRIVATE ${RATIONAL_GMP_TARGET})
target_include_directories(sqlite_rational PRIVATE ${SQLite3_INCLUDE_DIRS})
set_target_properties(sqlite_rational PROPERTIES PREFIX "" C_STANDARD 99)
if(MSVC)
  target_compile_options(sqlite_rational PRIVATE /W4)
else()
  target_compile_options(sqlite_rational PRIVATE -Wall -Wextra -Werror -Wpedantic)
endif()
add_library(sqlite_rational_static STATIC src/rational.c src/index.c)
target_compile_definitions(sqlite_rational_static PRIVATE SQLITE_CORE)
target_include_directories(sqlite_rational_static PUBLIC include PRIVATE ${SQLite3_INCLUDE_DIRS})
target_link_libraries(sqlite_rational_static PUBLIC ${RATIONAL_GMP_TARGET} ${RATIONAL_SQLITE_TARGET})
set_target_properties(sqlite_rational_static PROPERTIES C_STANDARD 99
  ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
  ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}")
if(NOT MSVC)
  target_compile_options(sqlite_rational_static PRIVATE -Wall -Wextra -Werror -Wpedantic)
endif()
install(TARGETS sqlite_rational sqlite_rational_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
install(FILES include/sqlite_rational.h DESTINATION include)
install(FILES LICENSE README.md THIRD_PARTY.md CI.md DESTINATION share/doc/sqlite-rational)
include(CTest)
if(BUILD_TESTING)
  find_package(Python3 REQUIRED COMPONENTS Interpreter)
  add_executable(static_smoke test/static_smoke.c)
  target_link_libraries(static_smoke PRIVATE sqlite_rational_static)
  add_test(NAME static_smoke COMMAND static_smoke)
  add_test(NAME sqlite_rational COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/test_extension.py $<TARGET_FILE:sqlite_rational>)
  set_tests_properties(static_smoke sqlite_rational PROPERTIES TIMEOUT 120)
endif()
set(CPACK_PACKAGE_NAME sqlite-rational)
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
set(CPACK_SOURCE_GENERATOR TGZ)
set(CPACK_SOURCE_PACKAGE_FILE_NAME "sqlite-rational-${PROJECT_VERSION}")
set(CPACK_SOURCE_IGNORE_FILES "/build[^/]*/;/.git/;__pycache__;[.]pyc$;/package/;/artifacts/")
include(CPack)
