Make it build
authorMatthias Clasen <mclasen@redhat.com>
Mon, 8 May 2023 19:43:08 +0000 (15:43 -0400)
committerEmmanuele Bassi <ebassi@gnome.org>
Tue, 9 May 2023 15:43:25 +0000 (16:43 +0100)
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.

build-aux/meson/gen-visibility-macros.py
gdk/gdktypes.h
gdk/gdkversionmacros.h.in [deleted file]
gdk/meson.build
gdk/version/gdkversionmacros.h.in [new file with mode: 0644]
gdk/version/meson.build [new file with mode: 0644]
gtk/css/meson.build
meson.build

index c75f50b3b3c79418ce9e6ce35b31511f41f8ca44..3416f3974ac266e77ca31d66dd30c81096b862b1 100755 (executable)
@@ -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
index 2b7804c85e2f572796f3627af7ffdf3fd1dc77d2..8cd6eff6e4964d98c44ce4b7745a026f6b4252b4 100644 (file)
@@ -44,9 +44,6 @@
 #include <gdk/gdkconfig.h>
 #include <gdk/gdkversionmacros.h>
 
-/* Visibility macros; must be included after the two headers above */
-#include <gdk/gdk-visibility.h>
-
 G_BEGIN_DECLS
 
 /**
diff --git a/gdk/gdkversionmacros.h.in b/gdk/gdkversionmacros.h.in
deleted file mode 100644 (file)
index 0aa6348..0000000
+++ /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 <http://www.gnu.org/licenses/>.
- */
-
-#if !defined (__GDK_H_INSIDE__) && !defined (__GTK_CSS_H_INSIDE__) && !defined (GTK_COMPILATION) && !defined (GTK_CSS_COMPILATION)
-#error "Only <gdk/gdk.h> can be included directly."
-#endif
-
-#ifndef __GDK_VERSION_MACROS_H__
-#define __GDK_VERSION_MACROS_H__
-
-#include <glib.h>
-
-#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__ */
index f953b6efcc685ed5944de5a48730128bdea4f999..a07f914b25a795747cbb9d26b02a8f97eb70704a 100644 (file)
@@ -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 (file)
index 0000000..0aa6348
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+ */
+
+#if !defined (__GDK_H_INSIDE__) && !defined (__GTK_CSS_H_INSIDE__) && !defined (GTK_COMPILATION) && !defined (GTK_CSS_COMPILATION)
+#error "Only <gdk/gdk.h> can be included directly."
+#endif
+
+#ifndef __GDK_VERSION_MACROS_H__
+#define __GDK_VERSION_MACROS_H__
+
+#include <glib.h>
+
+#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 (file)
index 0000000..c140f36
--- /dev/null
@@ -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',
+)
+
index c56a5be78809d33a98d7231e5170b724dbb67744..9a5f6020b94137034e923c9299f552062255f6d8 100644 (file)
@@ -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, ],
index 28066d8e3a14edbce3e803b59c4f6d340b8bfc75..0c38fcb1caecd5460076bf60200b73e9363e63c2 100644 (file)
@@ -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')