include(FindPkgConfig)
include(FetchContent)
include(GNUInstallDirs)

cmake_minimum_required(VERSION 3.10)
cmake_policy(SET CMP0048 NEW)

set(MAJOR 2)
set(MINOR 74)
set(PATCH 7)

set(VERSION "${MAJOR}.${MINOR}.${PATCH}")

project(glib-2.0-polyfill VERSION ${VERSION})

pkg_check_modules(GLIB2 glib-2.0<=2.66)

if (NOT GLIB2_FOUND)
install(FILES /dev/zero DESTINATION ${CMAKE_INSTALL_DOCDIR} EXCLUDE_FROM_ALL)
return()
endif()

FetchContent_Declare(glib-2
                     GIT_REPOSITORY https://gitlab.gnome.org/GNOME/glib.git
                     GIT_TAG ${VERSION})

if (NOT glib-2_POPULATED)
    FetchContent_Populate(glib-2)
endif()

configure_file(glibconfig.h.in glib-2.0/glibconfig.h @ONLY)

add_library(glib-2.0-polyfill
            SHARED
            ${glib-2_SOURCE_DIR}/glib/guri.c ${glib-2_SOURCE_DIR}/glib/guriprivate.h)

target_link_libraries(glib-2.0-polyfill ${GLIB2_LINK_LIBRARIES})

set_property(TARGET glib-2.0-polyfill PROPERTY VERSION ${MAJOR}.${MINOR})
target_compile_definitions(glib-2.0-polyfill PRIVATE GLIB_COMPILATION)

target_include_directories(glib-2.0-polyfill PRIVATE ${glib-2_SOURCE_DIR} ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_BINARY_DIR}/glib-2.0)

configure_file(${glib-2_SOURCE_DIR}/glib/guri.h glib-2.0/glib/guri.h COPYONLY)
add_executable(selftest test/test.c)
target_link_libraries(selftest glib-2.0-polyfill)
target_include_directories(selftest PUBLIC ${GLIB2_INCLUDE_DIRS} ${CMAKE_CURRENT_LIST_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}/glib-2.0)

enable_testing()
add_test(NAME polyfill-tests COMMAND selftest)

configure_file(${CMAKE_CURRENT_LIST_DIR}/glib-2.0-polyfill.pc.in glib-2.0-polyfill.pc @ONLY)

install(TARGETS glib-2.0-polyfill LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES ${glib-2_SOURCE_DIR}/glib/guri.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CMAKE_PROJECT_NAME}/glib/)

install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CMAKE_PROJECT_NAME}/)
#install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glib-2.0/glibconfig.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CMAKE_PROJECT_NAME}/)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/glib-2.0-polyfill.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
