From: Matthias Clasen Date: Mon, 8 May 2023 19:43:08 +0000 (-0400) Subject: Make it build X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~286^2~11 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5ae25519a72b38dcc36591223258a3ffa382dba9;p=gtk4.git Make it build Fix the circular dependency by moving the generated headers to gdk/version/, and build that directory first. Misc other fixes, such as putting the custom targets as sources, not depedencies, and using the correct major version in the generator script. --- diff --git a/build-aux/meson/gen-visibility-macros.py b/build-aux/meson/gen-visibility-macros.py index c75f50b3b3..3416f3974a 100755 --- a/build-aux/meson/gen-visibility-macros.py +++ b/build-aux/meson/gen-visibility-macros.py @@ -135,7 +135,7 @@ def gen_visibility_macros(args, current_major_version, current_minor_version, cu f.write( textwrap.dedent( f""" - #if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_2_{minor} + #if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_{minor} #define {ns}_DEPRECATED_IN_{current_major_version}_{minor} {ns}_DEPRECATED #define {ns}_DEPRECATED_IN_{current_major_version}_{minor}_FOR(f) {ns}_DEPRECATED_FOR (f) #define {ns}_DEPRECATED_MACRO_IN_{current_major_version}_{minor} GDK_DEPRECATED_MACRO diff --git a/gdk/gdktypes.h b/gdk/gdktypes.h index 2b7804c85e..8cd6eff6e4 100644 --- a/gdk/gdktypes.h +++ b/gdk/gdktypes.h @@ -44,9 +44,6 @@ #include #include -/* Visibility macros; must be included after the two headers above */ -#include - G_BEGIN_DECLS /** diff --git a/gdk/gdkversionmacros.h.in b/gdk/gdkversionmacros.h.in deleted file mode 100644 index 0aa6348642..0000000000 --- a/gdk/gdkversionmacros.h.in +++ /dev/null @@ -1,151 +0,0 @@ -/* gdkversionmacros.h - version boundaries checks - * Copyright (C) 2012 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.▸ See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, see . - */ - -#if !defined (__GDK_H_INSIDE__) && !defined (__GTK_CSS_H_INSIDE__) && !defined (GTK_COMPILATION) && !defined (GTK_CSS_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __GDK_VERSION_MACROS_H__ -#define __GDK_VERSION_MACROS_H__ - -#include - -#ifndef _GDK_EXTERN -#define _GDK_EXTERN extern -#endif - -/* These macros are used to mark deprecated symbols in GLib headers, - * and thus have to be exposed in installed headers. But please - * do *not* use them in other projects. Instead define your own wrappers - * around it. - */ - -#if !defined(GDK_DISABLE_DEPRECATION_WARNINGS) && \ - (G_GNUC_CHECK_VERSION(4, 6) || \ - __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4)) -#define _GDK_GNUC_DO_PRAGMA(x) _Pragma(G_STRINGIFY (x)) -#define GDK_DEPRECATED_MACRO _GDK_GNUC_DO_PRAGMA(GCC warning "Deprecated pre-processor symbol") -#define GDK_DEPRECATED_MACRO_FOR(f) \ - _GDK_GNUC_DO_PRAGMA(GCC warning G_STRINGIFY (Deprecated pre-processor symbol: replace with #f)) -#define GDK_UNAVAILABLE_MACRO(maj,min) \ - _GDK_GNUC_DO_PRAGMA(GCC warning G_STRINGIFY (Not available before maj.min)) -#else -#define GDK_DEPRECATED_MACRO -#define GDK_DEPRECATED_MACRO_FOR(f) -#define GDK_UNAVAILABLE_MACRO(maj,min) -#endif - -#if !defined(GDK_DISABLE_DEPRECATION_WARNINGS) && \ - (G_GNUC_CHECK_VERSION(6, 1) || \ - (defined (__clang_major__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 0)))) -#define GDK_DEPRECATED_ENUMERATOR G_DEPRECATED -#define GDK_DEPRECATED_ENUMERATOR_FOR(f) G_DEPRECATED_FOR(f) -#define GDK_UNAVAILABLE_ENUMERATOR(maj,min) G_UNAVAILABLE(maj,min) -#else -#define GDK_DEPRECATED_ENUMERATOR -#define GDK_DEPRECATED_ENUMERATOR_FOR(f) -#define GDK_UNAVAILABLE_ENUMERATOR(maj,min) -#endif - -#if !defined(GDK_DISABLE_DEPRECATION_WARNINGS) && \ - (G_GNUC_CHECK_VERSION(3, 1) || \ - (defined (__clang_major__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 0)))) -#define GDK_DEPRECATED_TYPE G_DEPRECATED -#define GDK_DEPRECATED_TYPE_FOR(f) G_DEPRECATED_FOR(f) -#define GDK_UNAVAILABLE_TYPE(maj,min) G_UNAVAILABLE(maj,min) -#else -#define GDK_DEPRECATED_TYPE -#define GDK_DEPRECATED_TYPE_FOR(f) -#define GDK_UNAVAILABLE_TYPE(maj,min) -#endif - -@GDK_VERSIONS@ - -/* evaluates to the current stable version; for development cycles, - * this means the next stable target, with a hard backstop to the - * beginning of the stable series - */ -#if GDK_MAJOR_VERSION >= 4 && (GDK_MINOR_VERSION % 2) -# define GDK_VERSION_CUR_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION + 1)) -#elif G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION) > GDK_VERSION_4_0 -# define GDK_VERSION_CUR_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION)) -#else -# define GDK_VERSION_CUR_STABLE GDK_VERSION_4_0 -#endif - -/* evaluates to the previous stable version, with a hard backstop - * to the beginning of the stable series - */ -#if GDK_MAJOR_VERSION >= 4 && (GDK_MINOR_VERSION % 2) -# define GDK_VERSION_PREV_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION - 1)) -#elif GDK_MAJOR_VERSION >= 4 && GDK_MINOR_VERSION > 2 -# define GDK_VERSION_PREV_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION - 2)) -#else -# define GDK_VERSION_PREV_STABLE GDK_VERSION_4_0 -#endif - -/** - * GDK_VERSION_MIN_REQUIRED: - * - * A macro that should be defined by the user prior to including - * the `gdk.h` header. - * - * The definition should be one of the predefined GDK version - * macros: %GDK_VERSION_4_0, %GDK_VERSION_4_2,... - * - * This macro defines the lower bound for the GDK API to use. - * - * If a function has been deprecated in a newer version of GDK, - * it is possible to use this symbol to avoid the compiler warnings - * without disabling warning for every deprecated function. - */ -#ifndef GDK_VERSION_MIN_REQUIRED -# define GDK_VERSION_MIN_REQUIRED (GDK_VERSION_CUR_STABLE) -#endif - -/** - * GDK_VERSION_MAX_ALLOWED: - * - * A macro that should be defined by the user prior to including - * the `gdk.h` header. - * - * The definition should be one of the predefined GDK version - * macros: %GDK_VERSION_4_0, %GDK_VERSION_4_2,... - * - * This macro defines the upper bound for the GDK API to use. - * - * If a function has been introduced in a newer version of GDK, - * it is possible to use this symbol to get compiler warnings when - * trying to use that function. - */ -#ifndef GDK_VERSION_MAX_ALLOWED -# if GDK_VERSION_MIN_REQUIRED > GDK_VERSION_PREV_STABLE -# define GDK_VERSION_MAX_ALLOWED GDK_VERSION_MIN_REQUIRED -# else -# define GDK_VERSION_MAX_ALLOWED GDK_VERSION_CUR_STABLE -# endif -#endif - -/* sanity checks */ -#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_MIN_REQUIRED -# error "GDK_VERSION_MAX_ALLOWED must be >= GDK_VERSION_MIN_REQUIRED" -#endif -#if GDK_VERSION_MIN_REQUIRED < GDK_VERSION_4_0 -# error "GDK_VERSION_MIN_REQUIRED must be >= GDK_VERSION_4_0" -#endif - -#endif /* __GDK_VERSION_MACROS_H__ */ diff --git a/gdk/meson.build b/gdk/meson.build index f953b6efcc..a07f914b25 100644 --- a/gdk/meson.build +++ b/gdk/meson.build @@ -110,6 +110,7 @@ gdk_public_headers = files([ 'gdktoplevelsize.h', 'gdktoplevel.h', 'gdkdragsurface.h', + 'gdkversionmacros.h' ]) install_headers(gdk_public_headers, subdir: 'gtk-4.0/gdk/') @@ -146,7 +147,7 @@ gdk_enums = gnome.mkenums_simple('gdkenumtypes', sources: gdk_public_headers, decorator: 'GDK_AVAILABLE_IN_ALL', body_prefix: '#include "config.h"', - header_prefix: '#include "gdkversionmacros.h"\n#include "gdk-visibility.h"', + header_prefix: '#include "version/gdkversionmacros.h"\n#include "version/gdk-visibility.h"', install_dir: gtk_includedir / 'gtk-4.0/gdk', install_header: true, ) @@ -183,25 +184,6 @@ gdkversion_cdata.set('GTK_MAJOR_VERSION', gtk_major_version) gdkversion_cdata.set('GTK_MINOR_VERSION', gtk_minor_version) gdkversion_cdata.set('GTK_MICRO_VERSION', gtk_micro_version) -gdkversionmacros_h = custom_target( - input: 'gdkversionmacros.h.in', - output: 'gdkversionmacros.h', - command: [gen_visibility_macros, meson.project_version(), 'versions-macros', '@INPUT@', '@OUTPUT@'], - install: true, - install_dir: gtk_includedir / 'gtk-4.0/gdk', - # FIXME: Not needed with Meson >= 0.64.0 - install_tag: 'devel', -) - -gdk_visibility_h = custom_target( - output: 'gdk-visibility.h', - command: [gen_visibility_macros, meson.project_version(), 'visibility-macros', 'GDK', '@OUTPUT@'], - install: true, - install_dir: gtk_includedir / 'gtk-4.0/gdk', - # FIXME: Not needed with Meson >= 0.64.0 - install_tag: 'devel', -) - gdkinc = include_directories('.') gdkx11_inc = include_directories('x11') gdkwayland_inc = include_directories('wayland') diff --git a/gdk/version/gdkversionmacros.h.in b/gdk/version/gdkversionmacros.h.in new file mode 100644 index 0000000000..0aa6348642 --- /dev/null +++ b/gdk/version/gdkversionmacros.h.in @@ -0,0 +1,151 @@ +/* gdkversionmacros.h - version boundaries checks + * Copyright (C) 2012 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.▸ See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +#if !defined (__GDK_H_INSIDE__) && !defined (__GTK_CSS_H_INSIDE__) && !defined (GTK_COMPILATION) && !defined (GTK_CSS_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __GDK_VERSION_MACROS_H__ +#define __GDK_VERSION_MACROS_H__ + +#include + +#ifndef _GDK_EXTERN +#define _GDK_EXTERN extern +#endif + +/* These macros are used to mark deprecated symbols in GLib headers, + * and thus have to be exposed in installed headers. But please + * do *not* use them in other projects. Instead define your own wrappers + * around it. + */ + +#if !defined(GDK_DISABLE_DEPRECATION_WARNINGS) && \ + (G_GNUC_CHECK_VERSION(4, 6) || \ + __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4)) +#define _GDK_GNUC_DO_PRAGMA(x) _Pragma(G_STRINGIFY (x)) +#define GDK_DEPRECATED_MACRO _GDK_GNUC_DO_PRAGMA(GCC warning "Deprecated pre-processor symbol") +#define GDK_DEPRECATED_MACRO_FOR(f) \ + _GDK_GNUC_DO_PRAGMA(GCC warning G_STRINGIFY (Deprecated pre-processor symbol: replace with #f)) +#define GDK_UNAVAILABLE_MACRO(maj,min) \ + _GDK_GNUC_DO_PRAGMA(GCC warning G_STRINGIFY (Not available before maj.min)) +#else +#define GDK_DEPRECATED_MACRO +#define GDK_DEPRECATED_MACRO_FOR(f) +#define GDK_UNAVAILABLE_MACRO(maj,min) +#endif + +#if !defined(GDK_DISABLE_DEPRECATION_WARNINGS) && \ + (G_GNUC_CHECK_VERSION(6, 1) || \ + (defined (__clang_major__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 0)))) +#define GDK_DEPRECATED_ENUMERATOR G_DEPRECATED +#define GDK_DEPRECATED_ENUMERATOR_FOR(f) G_DEPRECATED_FOR(f) +#define GDK_UNAVAILABLE_ENUMERATOR(maj,min) G_UNAVAILABLE(maj,min) +#else +#define GDK_DEPRECATED_ENUMERATOR +#define GDK_DEPRECATED_ENUMERATOR_FOR(f) +#define GDK_UNAVAILABLE_ENUMERATOR(maj,min) +#endif + +#if !defined(GDK_DISABLE_DEPRECATION_WARNINGS) && \ + (G_GNUC_CHECK_VERSION(3, 1) || \ + (defined (__clang_major__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 0)))) +#define GDK_DEPRECATED_TYPE G_DEPRECATED +#define GDK_DEPRECATED_TYPE_FOR(f) G_DEPRECATED_FOR(f) +#define GDK_UNAVAILABLE_TYPE(maj,min) G_UNAVAILABLE(maj,min) +#else +#define GDK_DEPRECATED_TYPE +#define GDK_DEPRECATED_TYPE_FOR(f) +#define GDK_UNAVAILABLE_TYPE(maj,min) +#endif + +@GDK_VERSIONS@ + +/* evaluates to the current stable version; for development cycles, + * this means the next stable target, with a hard backstop to the + * beginning of the stable series + */ +#if GDK_MAJOR_VERSION >= 4 && (GDK_MINOR_VERSION % 2) +# define GDK_VERSION_CUR_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION + 1)) +#elif G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION) > GDK_VERSION_4_0 +# define GDK_VERSION_CUR_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION)) +#else +# define GDK_VERSION_CUR_STABLE GDK_VERSION_4_0 +#endif + +/* evaluates to the previous stable version, with a hard backstop + * to the beginning of the stable series + */ +#if GDK_MAJOR_VERSION >= 4 && (GDK_MINOR_VERSION % 2) +# define GDK_VERSION_PREV_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION - 1)) +#elif GDK_MAJOR_VERSION >= 4 && GDK_MINOR_VERSION > 2 +# define GDK_VERSION_PREV_STABLE (G_ENCODE_VERSION (GDK_MAJOR_VERSION, GDK_MINOR_VERSION - 2)) +#else +# define GDK_VERSION_PREV_STABLE GDK_VERSION_4_0 +#endif + +/** + * GDK_VERSION_MIN_REQUIRED: + * + * A macro that should be defined by the user prior to including + * the `gdk.h` header. + * + * The definition should be one of the predefined GDK version + * macros: %GDK_VERSION_4_0, %GDK_VERSION_4_2,... + * + * This macro defines the lower bound for the GDK API to use. + * + * If a function has been deprecated in a newer version of GDK, + * it is possible to use this symbol to avoid the compiler warnings + * without disabling warning for every deprecated function. + */ +#ifndef GDK_VERSION_MIN_REQUIRED +# define GDK_VERSION_MIN_REQUIRED (GDK_VERSION_CUR_STABLE) +#endif + +/** + * GDK_VERSION_MAX_ALLOWED: + * + * A macro that should be defined by the user prior to including + * the `gdk.h` header. + * + * The definition should be one of the predefined GDK version + * macros: %GDK_VERSION_4_0, %GDK_VERSION_4_2,... + * + * This macro defines the upper bound for the GDK API to use. + * + * If a function has been introduced in a newer version of GDK, + * it is possible to use this symbol to get compiler warnings when + * trying to use that function. + */ +#ifndef GDK_VERSION_MAX_ALLOWED +# if GDK_VERSION_MIN_REQUIRED > GDK_VERSION_PREV_STABLE +# define GDK_VERSION_MAX_ALLOWED GDK_VERSION_MIN_REQUIRED +# else +# define GDK_VERSION_MAX_ALLOWED GDK_VERSION_CUR_STABLE +# endif +#endif + +/* sanity checks */ +#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_MIN_REQUIRED +# error "GDK_VERSION_MAX_ALLOWED must be >= GDK_VERSION_MIN_REQUIRED" +#endif +#if GDK_VERSION_MIN_REQUIRED < GDK_VERSION_4_0 +# error "GDK_VERSION_MIN_REQUIRED must be >= GDK_VERSION_4_0" +#endif + +#endif /* __GDK_VERSION_MACROS_H__ */ diff --git a/gdk/version/meson.build b/gdk/version/meson.build new file mode 100644 index 0000000000..c140f363b4 --- /dev/null +++ b/gdk/version/meson.build @@ -0,0 +1,21 @@ + + +gdkversionmacros_h = custom_target( + input: 'gdkversionmacros.h.in', + output: 'gdkversionmacros.h', + command: [gen_visibility_macros, meson.project_version(), 'versions-macros', '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: gtk_includedir / 'gtk-4.0/gdk', + # FIXME: Not needed with Meson >= 0.64.0 + install_tag: 'devel', +) + +gdk_visibility_h = custom_target( + output: 'gdk-visibility.h', + command: [gen_visibility_macros, meson.project_version(), 'visibility-macros', 'GDK', '@OUTPUT@'], + install: true, + install_dir: gtk_includedir / 'gtk-4.0/gdk', + # FIXME: Not needed with Meson >= 0.64.0 + install_tag: 'devel', +) + diff --git a/gtk/css/meson.build b/gtk/css/meson.build index c56a5be788..9a5f6020b9 100644 --- a/gtk/css/meson.build +++ b/gtk/css/meson.build @@ -24,8 +24,6 @@ gtk_css_deps = [ glib_dep, gobject_dep, platform_gio_dep, - gdkversionmacros_h, - gdk_visibility_h, ] gtk_css_enums = gnome.mkenums('gtkcssenumtypes', @@ -43,6 +41,8 @@ libgtk_css = static_library('gtk_css', gtk_css_public_sources, gtk_css_private_sources, gtk_css_enums, + gdkversionmacros_h, + gdk_visibility_h, ], dependencies: gtk_css_deps, include_directories: [ confinc, ], diff --git a/meson.build b/meson.build index 28066d8e3a..0c38fcb1ca 100644 --- a/meson.build +++ b/meson.build @@ -344,12 +344,10 @@ common_cflags = cc.get_supported_arguments(test_cflags) if get_option('default_library') != 'static' if os_win32 cdata.set('DLL_EXPORT', true) - cdata.set('_GDK_EXTERN', '__declspec(dllexport) extern') if cc.get_id() != 'msvc' common_cflags += ['-fvisibility=hidden'] endif else - cdata.set('_GDK_EXTERN', '__attribute__((visibility("default"))) extern') common_cflags += ['-fvisibility=hidden'] endif endif @@ -749,6 +747,7 @@ project_build_root = meson.current_build_dir() gen_visibility_macros = find_program('build-aux/meson/gen-visibility-macros.py') +subdir('gdk/version') subdir('gtk/css') subdir('gdk') subdir('gsk')