[gtk+] build: Clean up Wayland protocol code generation



commit 561f41d112e048004b71e732d406f02d393f2a85
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Wed Apr 26 15:16:21 2017 +0100

    build: Clean up Wayland protocol code generation
    
    We can build the name of the input and output files for the Wayland
    protocols we use from the protocol name, stability, and version. This is
    similar to how the autotools build does it, except much more clear and
    without shelling out twice to sed just to resolve the Makefile rule.

 gdk/wayland/genprotocolfiles.py |    6 +--
 gdk/wayland/meson.build         |   78 +++++++++++++++++++++++----------------
 2 files changed, 48 insertions(+), 36 deletions(-)
---
diff --git a/gdk/wayland/genprotocolfiles.py b/gdk/wayland/genprotocolfiles.py
index 187f8ff..cf4faed 100755
--- a/gdk/wayland/genprotocolfiles.py
+++ b/gdk/wayland/genprotocolfiles.py
@@ -12,9 +12,7 @@ out_file = sys.argv[3]
 #TODO: We can infer this optinon from the name of the output file!
 option   = sys.argv[4]
 
-
-
-pc = subprocess.Popen([scanner, option , in_file , out_file], stdout=subprocess.PIPE)
+pc = subprocess.Popen([scanner, option, in_file, out_file], stdout=subprocess.PIPE)
 (stdo, _) = pc.communicate()
 if pc.returncode != 0:
     sys.exit(pc.returncode)
@@ -24,7 +22,7 @@ content = ""
 with open(out_file, 'r') as content_file:
     content = content_file.read()
 
-content = content.replace("WL_EXPORT", "")
+content = content.replace('WL_EXPORT ', '')
 ofile = open(out_file, 'w')
 ofile.write(content)
 ofile.close()
diff --git a/gdk/wayland/meson.build b/gdk/wayland/meson.build
index f5e894c..ff5674f 100644
--- a/gdk/wayland/meson.build
+++ b/gdk/wayland/meson.build
@@ -37,53 +37,67 @@ gdk_wayland_deps = [
 ]
 
 # wayland protocols
-
 proto_dir = dependency('wayland-protocols').get_pkgconfig_variable('pkgdatadir')
 assert(proto_dir != '', 'Could not get pkgdatadir from wayland-protocols.pc')
 
 wayland_scanner = find_program('wayland-scanner')
 genprotocols = find_program('genprotocolfiles.py')
 
+# Format:
+#  - protocol name
+#  - protocol stability ('stable' or 'unstable')
+#  - protocol version (if stability is 'unstable')
 proto_sources = [
-  ['gtk-shell',
-   'protocol/gtk-shell.xml'],
-
-  ['gtk-primary-selection',
-   'protocol/gtk-primary-selection.xml'],
-
-  ['pointer-gestures-unstable-v1',
-   join_paths(proto_dir, 'unstable/pointer-gestures/pointer-gestures-unstable-v1.xml')],
-
-  ['xdg-shell-unstable-v6',
-   join_paths(proto_dir, 'unstable/xdg-shell/xdg-shell-unstable-v6.xml')],
-
-  ['xdg-foreign-unstable-v1',
-   join_paths(proto_dir, 'unstable/xdg-foreign/xdg-foreign-unstable-v1.xml')],
-
-  ['tablet-unstable-v2',
-   join_paths(proto_dir, 'unstable/tablet/tablet-unstable-v2.xml')],
+  ['gtk-shell', 'stable', ],
+  ['gtk-primary-selection', 'stable', ],
+  ['pointer-gestures', 'unstable', 'v1', ],
+  ['xdg-shell', 'unstable', 'v6', ],
+  ['xdg-foreign', 'unstable', 'v1', ],
+  ['tablet', 'unstable', 'v2', ],
 ]
 
 gdk_wayland_gen_headers = []
 
-# FIXME: there's some protostability/protoname stuff in Makefile.am I don't grok
-foreach p : proto_sources
-  output_base = p[0]
-  input = p[1]
+foreach p: proto_sources
+  proto_name = p.get(0)
+  proto_stability = p.get(1)
+
+  if proto_stability == 'stable'
+    output_base = proto_name
+    input = 'protocol/@0@.xml'.format(proto_name)
+  else
+    proto_version = p.get(2)
+    output_base = '@0@-@1@-@2@'.format(proto_name, proto_stability, proto_version)
+    input = join_paths(proto_dir, '@0@/@1@/@2@.xml'.format(proto_stability, proto_name, output_base))
+  endif
 
   gdk_wayland_gen_headers += custom_target('@0@ client header'.format(output_base),
-    input : input,
-    output : '@0@-client-protocol.h'.format(output_base),
-    command: [genprotocols, wayland_scanner, '@INPUT@', '@OUTPUT@', 'client-header'])
+                                           input: input,
+                                           output: '@0@-client-protocol.h'.format(output_base),
+                                           command: [
+                                             genprotocols,
+                                             wayland_scanner,
+                                             '@INPUT@', '@OUTPUT@',
+                                             'client-header',
+                                           ])
 
   gdk_wayland_sources += custom_target('@0@ source'.format(output_base),
-    input : input,
-    output : '@0@-protocol.c'.format(output_base),
-    command: [genprotocols, wayland_scanner, '@INPUT@', '@OUTPUT@', 'code'])
+                                       input: input,
+                                       output: '@0@-protocol.c'.format(output_base),
+                                       command: [
+                                         genprotocols,
+                                         wayland_scanner,
+                                         '@INPUT@', '@OUTPUT@',
+                                         'code',
+                                       ])
 endforeach
 
 libgdk_wayland = static_library('gdk-wayland',
-  gdk_wayland_sources, gdk_wayland_gen_headers, gdkconfig, gdkenum_h,
-  include_directories: [confinc, gdkinc],
-  c_args: ['-DGDK_COMPILATION', '-DG_LOG_DOMAIN="Gdk"'],
-  dependencies: [gdk_deps, gdk_wayland_deps])
+                                gdk_wayland_sources, gdk_wayland_gen_headers, gdkconfig, gdkenum_h,
+                                include_directories: [ confinc, gdkinc, ],
+                                c_args: [
+                                  '-DGDK_COMPILATION',
+                                  '-DG_LOG_DOMAIN="Gdk"',
+                                  '-DG_LOG_USE_STRUCTURED=1',
+                                ],
+                                dependencies: [ gdk_deps, gdk_wayland_deps, ])


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]