set(SRC
  control.c
  timebar.c
  timerbox.c
  utils.c
  )

if (HAVE_GTK AND UNIX AND NOT APPLE)

  add_library(workrave-private-1.0 SHARED ${SRC})

  target_include_directories(workrave-private-1.0
    PRIVATE
    ${CMAKE_SOURCE_DIR}/ui/applets/common/include
    ${CMAKE_SOURCE_DIR}/libs/utils/include
    ${CMAKE_SOURCE_DIR}/libs/config/include
    ${GTK_INCLUDE_DIRS}
    INTERFACE
    ${CMAKE_SOURCE_DIR}/ui/applets/common/include
    )

  target_link_directories(workrave-private-1.0 PRIVATE ${GTK_LIBPATH})
  target_link_libraries(workrave-private-1.0 ${GTK_LIBRARIES})

  set_target_properties(workrave-private-1.0 PROPERTIES VERSION 0.0.0 SOVERSION 0)
  install(TARGETS workrave-private-1.0 RUNTIME DESTINATION bin LIBRARY DESTINATION ${LIBDIR} ARCHIVE DESTINATION ${LIBDIR} LIBRARY NAMELINK_SKIP)

  pkg_check_modules(GTK4 gtk4>=4.10.0)
  if (GTK4_FOUND)
    add_library(workrave-gtk4-private-1.0 SHARED ${SRC})

    target_include_directories(workrave-gtk4-private-1.0
      PRIVATE
      ${CMAKE_SOURCE_DIR}/ui/applets/common/include
      ${CMAKE_SOURCE_DIR}/libs/utils/include
      ${CMAKE_SOURCE_DIR}/libs/config/include
      ${GTK4_INCLUDE_DIRS}
      INTERFACE
      ${CMAKE_SOURCE_DIR}/ui/applets/common/include
      )

    target_link_directories(workrave-gtk4-private-1.0 PRIVATE ${GTK4_LIBPATH})
    target_link_libraries(workrave-gtk4-private-1.0 ${GTK4_LIBRARIES})
    target_compile_definitions(workrave-gtk4-private-1.0 PRIVATE HAVE_GTK4)

    set_target_properties(workrave-gtk4-private-1.0 PROPERTIES VERSION 0.0.0 SOVERSION 0)
    install(TARGETS workrave-gtk4-private-1.0 RUNTIME DESTINATION bin LIBRARY DESTINATION ${LIBDIR} ARCHIVE DESTINATION ${LIBDIR} LIBRARY NAMELINK_SKIP)
  endif()

  macro(_list_prefix _outvar _listvar _prefix)
    set(${_outvar})
    foreach(_item IN LISTS ${_listvar})
      list(APPEND ${_outvar} ${_prefix}${_item})
    endforeach()
  endmacro()

  function(filter_cflags original_flags filtered_flags_var)
    set(filtered_flags "")
    foreach(flag IN LISTS original_flags)
        if(flag MATCHES "^-I" OR flag MATCHES "^-D")
            set(filtered_flags "${filtered_flags} ${flag}")
        endif()
    endforeach()
    set(${filtered_flags_var} "${filtered_flags}" PARENT_SCOPE)
  endfunction()

  # GObject Introspection
  if (HAVE_INTROSPECTION)
    include(GObjectIntrospectionMacros)
    set(INTROSPECTION_GIRS)
    set(INTROSPECTION_SCANNER_ARGS --add-include-path=${CMAKE_CURRENT_SOURCE_DIR} --add-include-path=${CMAKE_CURRENT_SOURCE_DIR}/include --warn-all)
    set(INTROSPECTION_COMPILER_ARGS --includedir=${CMAKE_CURRENT_SOURCE_DIR} --includedir=${CMAKE_CURRENT_SOURCE_DIR}/include)

    filter_cflags("${GTK_CFLAGS}" GTK_CFLAGS_FILTERED)

    set(introspection_files ${SRC} ../include/timerbox.h ../include/timebar.h)
    set(Workrave_1_0_gir "workrave-private")
    set(Workrave_1_0_gir_INCLUDES GObject-2.0 Gtk-3.0 cairo-1.0)
    set(Workrave_1_0_gir_CFLAGS ${GTK_CFLAGS_FILTERED} -I${CMAKE_CURRENT_SOURCE_DIR}/include)
    set(Workrave_1_0_gir_LIBS workrave-private-1.0)
    set(Workrave_1_0_gir_VERSION "1.0")
    _list_prefix(_abs_introspection_files introspection_files "${CMAKE_CURRENT_SOURCE_DIR}/")
    set(Workrave_1_0_gir_FILES ${_abs_introspection_files})
    set(Workrave_1_0_gir_EXPORT_PACKAGES workrave-private)

    list(APPEND INTROSPECTION_GIRS Workrave-1.0.gir)

    if (GTK4_FOUND)
      filter_cflags("${GTK4_CFLAGS}" GTK4_CFLAGS_FILTERED)
      set(introspection_files ${SRC} ../include/timerbox.h ../include/timebar.h)
      set(Workrave_2_0_gir "workrave-gtk4-private")
      set(Workrave_2_0_gir_INCLUDES GObject-2.0 Gtk-4.0 cairo-1.0)
      set(Workrave_2_0_gir_CFLAGS ${GTK4_CFLAGS_FILTERED} -I${CMAKE_CURRENT_SOURCE_DIR}/include)
      set(Workrave_2_0_gir_LIBS workrave-gtk4-private-1.0)
      set(Workrave_2_0_gir_VERSION "2.0")
      _list_prefix(_abs_introspection_files introspection_files "${CMAKE_CURRENT_SOURCE_DIR}/")
      set(Workrave_2_0_gir_FILES ${_abs_introspection_files})
      set(Workrave_2_0_gir_EXPORT_PACKAGES workrave-gtk4-private)

      list(APPEND INTROSPECTION_GIRS Workrave-2.0.gir)

    endif()
    gir_add_introspections(INTROSPECTION_GIRS)
  endif ()
endif()
