From 6d0ace0518f0da18c7e81be1edecd50d997230b1 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 11 May 2021 10:43:27 +0200 Subject: [PATCH] CMake: Fix automagic dependency on X11 Related: https://bugs.gentoo.org/768663 Related: https://github.com/gentoo/gentoo/pull/20181 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,7 @@ set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME inkscape) # needs to be before any inst include(GNUInstallDirs) # for the CMAKE_INSTALL_LIBDIR variable include(CMakeScripts/ConfigPaths.cmake) +include(CMakeDependentOption) set(PROJECT_NAME inkscape) @@ -126,6 +127,7 @@ option(WITH_GSPELL "Compile with support of gspell" ON) option(WITH_NLS "Compile with Native Language Support (using gettext)" ON) option(WITH_JEMALLOC "Compile with JEMALLOC support" OFF) option(WITH_ASAN "Compile with Clang's AddressSanitizer (for debugging purposes)" OFF) +cmake_dependent_option(WITH_X11 "Compile with X11 support" ON "UNIX; NOT APPLE" OFF) option(WITH_INTERNAL_2GEOM "Prefer internal copy of lib2geom" OFF) option(WITH_FUZZ "Compile for fuzzing purpose (use 'make fuzz' only)" OFF) @@ -285,6 +287,7 @@ message("WITH_LIBWPG: ${WITH_LIBWPG}") message("WITH_NLS: ${WITH_NLS}") message("WITH_OPENMP: ${WITH_OPENMP}") message("WITH_JEMALLOC: ${WITH_JEMALLOC}") +message("WITH_X11: ${WITH_X11}") message("WITH_INTERNAL_2GEOM: ${WITH_INTERNAL_2GEOM}") message("WITH_PROFILING: ${WITH_PROFILING}") --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -403,12 +403,17 @@ sanitize_ldflags_for_libs(SIGC++_LDFLAGS) list(APPEND INKSCAPE_LIBS ${SIGC++_LDFLAGS}) list(APPEND INKSCAPE_CXX_FLAGS ${SIGC++_CFLAGS_OTHER}) -# Some linkers, like gold, don't find symbols recursively. So we have to link against X11 explicitly -find_package(X11) -if(X11_FOUND) +if(WITH_X11) + find_package(X11 REQUIRED) list(APPEND INKSCAPE_INCS_SYS ${X11_INCLUDE_DIRS}) list(APPEND INKSCAPE_LIBS ${X11_LIBRARIES}) -endif(X11_FOUND) + add_definitions(-DHAVE_X11) + + pkg_get_variable(GTK3_TARGETS gtk+-3.0 targets) + if(NOT("${GTK3_TARGETS}" MATCHES "x11")) + message(FATAL_ERROR "GTK+3 doesn't targets X11, this is required for WITH_X11") + endif() +endif(WITH_X11) # end Dependencies --- a/src/ege-color-prof-tracker.cpp +++ b/src/ege-color-prof-tracker.cpp @@ -46,11 +46,11 @@ #include -#ifdef GDK_WINDOWING_X11 +#ifdef HAVE_X11 #include #include -#endif /* GDK_WINDOWING_X11 */ +#endif /* HAVE_X11 */ #include "ege-color-prof-tracker.h" #include "helper/sp-marshal.h" @@ -69,24 +69,24 @@ static void ege_color_prof_tracker_dispose(GObject *); class ScreenTrack { public: -#ifdef GDK_WINDOWING_X11 +#ifdef HAVE_X11 gboolean zeroSeen; gboolean otherSeen; -#endif /* GDK_WINDOWING_X11 */ +#endif /* HAVE_X11 */ std::vector *trackers; GPtrArray* profiles; ~ScreenTrack(){ delete trackers; } }; -#ifdef GDK_WINDOWING_X11 +#ifdef HAVE_X11 GdkFilterReturn x11_win_filter(GdkXEvent *xevent, GdkEvent *event, gpointer data); void handle_property_change(GdkScreen* screen, const gchar* name); void add_x11_tracking_for_screen(GdkScreen* screen); static void fire(gint monitor); static void clear_profile( guint monitor ); static void set_profile( guint monitor, const guint8* data, guint len ); -#endif /* GDK_WINDOWING_X11 */ +#endif /* HAVE_X11 */ static guint signals[LAST_SIGNAL] = {0}; @@ -323,10 +323,10 @@ void track_screen( GdkScreen* screen, EgeColorProfTracker* tracker ) int numMonitors = gdk_display_get_n_monitors(display); -#ifdef GDK_WINDOWING_X11 +#ifdef HAVE_X11 tracked_screen->zeroSeen = FALSE; tracked_screen->otherSeen = FALSE; -#endif /* GDK_WINDOWING_X11 */ +#endif /* HAVE_X11 */ tracked_screen->trackers= new std::vector; tracked_screen->trackers->push_back(tracker ); tracked_screen->profiles = g_ptr_array_new(); @@ -336,14 +336,14 @@ void track_screen( GdkScreen* screen, EgeColorProfTracker* tracker ) g_signal_connect( G_OBJECT(screen), "size-changed", G_CALLBACK( screen_size_changed_cb ), tracker ); -#ifdef GDK_WINDOWING_X11 +#ifdef HAVE_X11 if (GDK_IS_X11_DISPLAY (display) ) { // printf( "track_screen: Display is using X11\n" ); add_x11_tracking_for_screen(screen); } else { // printf( "track_screen: Display is not using X11\n" ); } -#endif // GDK_WINDOWING_X11 +#endif // HAVE_X11 } } @@ -411,13 +411,13 @@ void screen_size_changed_cb(GdkScreen* screen, gpointer user_data) if ( numMonitors > (gint)tracked_screen->profiles->len ) { for ( guint i = tracked_screen->profiles->len; i < (guint)numMonitors; i++ ) { g_ptr_array_add( tracked_screen->profiles, nullptr ); -#ifdef GDK_WINDOWING_X11 +#ifdef HAVE_X11 if (GDK_IS_X11_DISPLAY (display) ) { gchar* name = g_strdup_printf( "_ICC_PROFILE_%d", i ); handle_property_change( screen, name ); g_free(name); } -#endif /* GDK_WINDOWING_X11 */ +#endif /* HAVE_X11 */ } } else if ( numMonitors < (gint)tracked_screen->profiles->len ) { /* g_message("The count of monitors decreased, remove some"); */ @@ -425,7 +425,7 @@ void screen_size_changed_cb(GdkScreen* screen, gpointer user_data) } } -#ifdef GDK_WINDOWING_X11 +#ifdef HAVE_X11 GdkFilterReturn x11_win_filter(GdkXEvent *xevent, GdkEvent *event, gpointer data) @@ -618,7 +618,7 @@ static void set_profile( guint monitor, const guint8* data, guint len ) } } } -#endif /* GDK_WINDOWING_X11 */ +#endif /* HAVE_X11 */ /* Local Variables: mode:c++