diff --git a/CMakeLists.txt b/CMakeLists.txt index 51ea19f..75a44cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,51 +1,44 @@ project(kde-gtk-config) set(PROJECT_VERSION "5.18.80") cmake_minimum_required(VERSION 3.10) find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ${ECM_MODULE_PATH}) find_package(Qt5 REQUIRED NO_MODULE COMPONENTS DBus) find_package(KF5CoreAddons REQUIRED) find_package(KF5Config REQUIRED) find_package(KF5IconThemes REQUIRED) find_package(KF5DBusAddons REQUIRED) -find_package(PkgConfig REQUIRED) +find_package(GTK3 REQUIRED) find_package(GSettingSchemas REQUIRED) find_package(XSettingsd) -pkg_check_modules(GTK+3 REQUIRED IMPORTED_TARGET gtk+-3.0) -pkg_check_modules(GTK+2 REQUIRED IMPORTED_TARGET gtk+-2.0) -pkg_check_modules(GLib2 REQUIRED IMPORTED_TARGET glib-2.0) -pkg_check_modules(GObject REQUIRED IMPORTED_TARGET gobject-2.0) -pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) -pkg_check_modules(giomm REQUIRED IMPORTED_TARGET giomm-2.4) - include(ECMSetupVersion) include(ECMInstallIcons) include(ECMMarkAsTest) include(GenerateExportHeader) include(FeatureSummary) include(KDEInstallDirs) include(KDECMakeSettings) include(KDECompilerSettings NO_POLICY_SCOPE) include(KDEClangFormat) set_package_properties(XSettingsd PROPERTIES DESCRIPTION "XSettingsd daemon" TYPE RUNTIME PURPOSE "Allows GTK Config kded module to apply settings to GTK applications on the fly" ) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake kded/config.h) add_subdirectory(gtkproxies) add_subdirectory(gtk3proxies) add_subdirectory(kded) add_subdirectory(kconf_update) # add clang-format target for all our real source files file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h) kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/cmake/modules/FindGTK3.cmake b/cmake/modules/FindGTK3.cmake new file mode 100644 index 0000000..b5a6efb --- /dev/null +++ b/cmake/modules/FindGTK3.cmake @@ -0,0 +1,193 @@ +# - Find gtk3, glib +# Defines: +# GTK3_FOUND +# GTK3_INCLUDE_DIRS +# GTK3_LIBRARY_DIRS +# GTK3_DEFINITIONS +# GTK3_DEFINITIONS + +FIND_PACKAGE(PkgConfig) + +# +# gtk +# +PKG_CHECK_MODULES(PC_GTK3 REQUIRED gtk+-3.0) + +SET(GTK3_DEFINITIONS ${PC_GTK3_CXXFLAGS_OTHER}) + +FIND_PATH( + GTK3_INCLUDE_DIR gtk/gtk.h + HINTS ${PC_GTK3_INCLUDEDIR} ${PC_GTK3_INCLUDE_DIRS} + PATH_SUFFIXES gtk-3.0) + +FIND_LIBRARY( + GTK3_LIBRARY NAMES gtk-3 + HINTS ${PC_GTK3_LIBDIR} ${PC_GTK3_LIBRARY_DIRS}) + +# +# glib +# +PKG_CHECK_MODULES(PC_GLIB2 REQUIRED glib-2.0) + +SET(GLIB2_DEFINITIONS ${PC_GLIB2_CXXFLAGS_OTHER}) + +FIND_PATH( + GLIB2_INCLUDE_DIR_PART1 glib.h + HINTS ${PC_GLIB2_INCLUDEDIR} ${PC_GLIB2_INCLUDE_DIRS} + PATH_SUFFIXES glib-2.0) + +FIND_PATH( + GLIB2_INCLUDE_DIR_PART2 glibconfig.h + HINTS ${PC_GLIB2_INCLUDEDIR} ${PC_GLIB2_INCLUDE_DIRS} + PATH_SUFFIXES glib-2.0/include) + +SET(GLIB2_INCLUDE_DIR ${GLIB2_INCLUDE_DIR_PART1} ${GLIB2_INCLUDE_DIR_PART2}) + +FIND_LIBRARY( + GLIB2_LIBRARY NAMES glib-2.0 + HINTS ${PC_GLIB2_LIBDIR} ${PC_GLIB2_LIBRARY_DIRS}) + +# +# gobject +# +PKG_CHECK_MODULES(PC_GOBJECT2 REQUIRED gobject-2.0) + +SET(GLIB2_DEFINITIONS ${PC_GOBJECT2_CXXFLAGS_OTHER}) + +FIND_PATH( + GOBJECT2_INCLUDE_DIR_PART1 glib.h + HINTS ${PC_GOBJECT2_INCLUDEDIR} ${PC_GOBJECT2_INCLUDE_DIRS} + PATH_SUFFIXES gobject-2.0) + +FIND_PATH( + GOBJECT2_INCLUDE_DIR_PART2 gobject.h + HINTS ${PC_GOBJECT2_INCLUDEDIR} ${PC_GOBJECT2_INCLUDE_DIRS} + PATH_SUFFIXES glib-2.0/gobject) + +SET(GOBJECT2_INCLUDE_DIR ${GOBJECT2_INCLUDE_DIR_PART1} ${GOBJECT2_INCLUDE_DIR_PART2}) + +FIND_LIBRARY( + GOBJECT2_LIBRARY NAMES gobject-2.0 + HINTS ${PC_GOBJECT2_LIBDIR} ${PC_GOBJECT2_LIBRARY_DIRS}) + +# +# gio +# +PKG_CHECK_MODULES(PC_GIO2 REQUIRED gio-2.0) + +SET(GLIB2_DEFINITIONS ${PC_GIO2_CXXFLAGS_OTHER}) + +FIND_PATH( + GIO2_INCLUDE_DIR_PART1 glib.h + HINTS ${PC_GIO2_INCLUDEDIR} ${PC_GIO2_INCLUDE_DIRS} + PATH_SUFFIXES gio) + +FIND_PATH( + GIO2_INCLUDE_DIR_PART2 gio.h + HINTS ${PC_GIO2_INCLUDEDIR} ${PC_GIO2_INCLUDE_DIRS} + PATH_SUFFIXES glib-2.0/gio) + +SET(GIO2_INCLUDE_DIR ${GIO2_INCLUDE_DIR_PART1} ${GIO2_INCLUDE_DIR_PART2}) + +FIND_LIBRARY( + GIO2_LIBRARY NAMES gio-2.0 + HINTS ${PC_GIO2_LIBDIR} ${PC_GIO2_LIBRARY_DIRS}) + + +# +# pango +# +PKG_CHECK_MODULES(PC_PANGO REQUIRED pango) + +SET(PANGO_DEFINITIONS ${PC_PANGO_CXXFLAGS_OTHER}) + +FIND_PATH( + PANGO_INCLUDE_DIR pango/pango.h + HINTS ${PC_PANGO_INCLUDEDIR} ${PC_PANGO_INCLUDE_DIRS} + PATH_SUFFIXES pango-1.0) + +FIND_LIBRARY( + PANGO_LIBRARY NAMES pango-1.0 + HINTS ${PC_PANGO_LIBDIR} ${PC_PANGO_LIBRARY_DIRS}) + +# +# harfbuzz +# +if(PC_PANGO_VERSION VERSION_EQUAL 1.44 OR PC_PANGO_VERSION VERSION_GREATER 1.44) + PKG_CHECK_MODULES(PC_HARFBUZZ REQUIRED harfbuzz) + + SET(HARFBUZZ_DEFINITIONS ${PC_HARFBUZZ_CXXFLAGS_OTHER}) + + FIND_PATH( + HARFBUZZ_INCLUDE_DIR hb.h + HINTS ${PC_HARFBUZZ_INCLUDEDIR} ${PC_HARFBUZZ_INCLUDE_DIRS} + PATH_SUFFIXES harfbuzz) + + FIND_LIBRARY( + HARFBUZZ_LIBRARY NAMES harfbuzz + HINTS ${PC_HARFBUZZ_LIBDIR} ${PC_HARFBUZZ_LIBRARY_DIRS}) +endif() + +# +# cairo +# +PKG_CHECK_MODULES(PC_CAIRO REQUIRED cairo) + +SET(CAIRO_DEFINITIONS ${PC_CAIRO_CXXFLAGS_OTHER}) + +FIND_PATH( + CAIRO_INCLUDE_DIR cairo.h + HINTS ${PC_CAIRO_INCLUDEDIR} ${PC_CAIRO_INCLUDE_DIRS} + PATH_SUFFIXES cairo) + +FIND_LIBRARY( + CAIRO_LIBRARY NAMES cairo + HINTS ${PC_CAIRO_LIBDIR} ${PC_CAIRO_LIBRARY_DIRS}) + +# +# gdk-pixbuf +# +PKG_CHECK_MODULES(PC_GDKPIXBUF REQUIRED gdk-pixbuf-2.0) + +SET(GDKPIXBUF_DEFINITIONS ${PC_GDKPIXBUF_CXXFLAGS_OTHER}) + +FIND_PATH( + GDKPIXBUF_INCLUDE_DIR gdk-pixbuf/gdk-pixbuf.h + HINTS ${PC_GDKPIXBUF_INCLUDEDIR} ${PC_GDKPIXBUF_INCLUDE_DIRS} + PATH_SUFFIXES gdk-pixbuf-2.0) + +FIND_LIBRARY( + GDKPIXBUF_LIBRARY NAMES gdk_pixbuf-2.0 + HINTS ${PC_GDKPIXBUF_LIBDIR} ${PC_GDKPIXBUF_LIBRARY_DIRS}) + +# +# atk +# +PKG_CHECK_MODULES(PC_ATK REQUIRED atk) + +SET(ATK_DEFINITIONS ${PC_ATK_CXXFLAGS_OTHER}) + +FIND_PATH( + ATK_INCLUDE_DIR atk/atk.h + HINTS ${PC_ATK_INCLUDEDIR} ${PC_ATK_INCLUDE_DIRS} + PATH_SUFFIXES atk-1.0) + +FIND_LIBRARY( + ATK_LIBRARY NAMES atk-1.0 + HINTS ${PC_ATK_LIBDIR} ${PC_ATK_LIBRARY_DIRS}) + +# +# +#result +# +# +SET(GTK3_LIBRARY_DIRS ${GTK3_LIBRARY} ${GLIB2_LIBRARY} ${PANGO_LIBRARY} ${HARFBUZZ_LIBRARY} ${CAIRO_LIBRARY} ${GDKPIXBUF_LIBRARY} ${ATK_LIBRARY}) +SET(GTK3_INCLUDE_DIRS ${GTK3_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} ${GIO2_INCLUDE_DIR} ${HARFBUZZ_INCLUDE_DIR} ${PANGO_INCLUDE_DIR} ${CAIRO_INCLUDE_DIR} ${GDKPIXBUF_INCLUDE_DIR} ${ATK_INCLUDE_DIR}) + +INCLUDE(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS( + GTK3 DEFAULT_MSG + GTK3_LIBRARY GTK3_INCLUDE_DIR) + +MARK_AS_ADVANCED(GTK3_INCLUDE_DIR GTK3_LIBRARY) diff --git a/gtk3proxies/CMakeLists.txt b/gtk3proxies/CMakeLists.txt index cac3608..04d9c7f 100644 --- a/gtk3proxies/CMakeLists.txt +++ b/gtk3proxies/CMakeLists.txt @@ -1,12 +1,14 @@ +find_package(GTK3 REQUIRED) # gtk3 pulls in X11 headers, we need to add the include path if they are not in /usr/include find_package(X11) -add_executable(gtk3_preview preview3.c) +include_directories(${GTK3_INCLUDE_DIRS}) + +add_executable(gtk3_preview preview3.c) if(X11_FOUND) target_include_directories(gtk3_preview PRIVATE ${X11_X11_INCLUDE_PATH}) endif() - target_compile_definitions(gtk3_preview PRIVATE "-DDATA_DIR=\"${KDE_INSTALL_FULL_DATADIR}/kcm-gtk-module/\"") -target_link_libraries(gtk3_preview PkgConfig::GTK+3 PkgConfig::GLib2 PkgConfig::GObject) +target_link_libraries(gtk3_preview ${GTK3_LIBRARY} ${GOBJECT2_LIBRARY} ${GLIB2_LIBRARY}) install(TARGETS gtk3_preview RUNTIME DESTINATION "${LIBEXEC_INSTALL_DIR}") diff --git a/gtkproxies/CMakeLists.txt b/gtkproxies/CMakeLists.txt index 5c95f6c..cd6ab1e 100644 --- a/gtkproxies/CMakeLists.txt +++ b/gtkproxies/CMakeLists.txt @@ -1,12 +1,17 @@ +find_package(GTK2 REQUIRED) + +include_directories(BEFORE ${GTK2_INCLUDE_DIRS}) + add_executable(reload_gtk_apps reload.c) -target_link_libraries(reload_gtk_apps PkgConfig::GTK+2) +target_link_libraries(reload_gtk_apps ${GTK2_LIBRARIES}) install(TARGETS reload_gtk_apps RUNTIME DESTINATION "${LIBEXEC_INSTALL_DIR}") + add_executable(gtk_preview preview.c) target_compile_definitions(gtk_preview PRIVATE "-DDATA_DIR=\"${KDE_INSTALL_FULL_DATADIR}/kcm-gtk-module/\"") -target_link_libraries(gtk_preview PkgConfig::GTK+2 PkgConfig::giomm) +target_link_libraries(gtk_preview ${GTK2_LIBRARIES} ${GTK2_GIOMM_LIBRARY}) install(TARGETS gtk_preview RUNTIME DESTINATION "${LIBEXEC_INSTALL_DIR}") # preview file used for the gtk3 version too install(FILES preview.ui DESTINATION ${DATA_INSTALL_DIR}/kcm-gtk-module/) diff --git a/kconf_update/CMakeLists.txt b/kconf_update/CMakeLists.txt index bea9787..94eaa55 100644 --- a/kconf_update/CMakeLists.txt +++ b/kconf_update/CMakeLists.txt @@ -1,37 +1,38 @@ add_executable(gtk_theme gtktheme.cpp) target_sources(gtk_theme PRIVATE ../kded/configeditor.cpp ) target_link_libraries(gtk_theme PRIVATE Qt5::Core KF5::ConfigCore - PkgConfig::GIO - PkgConfig::GObject + ${GIO2_LIBRARY} + ${GOBJECT2_LIBRARY} ) target_include_directories(gtk_theme PRIVATE ../kded/ + ${GTK3_INCLUDE_DIRS} ) target_compile_definitions(gtk_theme PRIVATE QT_NO_SIGNALS_SLOTS_KEYWORDS ) install( TARGETS gtk_theme DESTINATION ${LIB_INSTALL_DIR}/kconf_update_bin/ ) install( FILES gtkconfig.upd DESTINATION ${KCONF_UPDATE_INSTALL_DIR} ) diff --git a/kded/CMakeLists.txt b/kded/CMakeLists.txt index 75af803..07affc2 100644 --- a/kded/CMakeLists.txt +++ b/kded/CMakeLists.txt @@ -1,31 +1,31 @@ set(kscreen_daemon_SRCS gtkconfig.cpp configeditor.cpp configvalueprovider.cpp themepreviewer.cpp ) add_library(gtkconfig MODULE ${kscreen_daemon_SRCS}) target_compile_definitions(gtkconfig PUBLIC -DQT_NO_SIGNALS_SLOTS_KEYWORDS ) target_include_directories(gtkconfig PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${GTK3_INCLUDE_DIRS} ) target_link_libraries(gtkconfig Qt5::DBus KF5::CoreAddons KF5::ConfigCore KF5::DBusAddons KF5::IconThemes - PkgConfig::GIO - PkgConfig::GObject + ${GIO2_LIBRARY} + ${GOBJECT2_LIBRARY} ) install(TARGETS gtkconfig DESTINATION ${KDE_INSTALL_PLUGINDIR}/kf5/kded)