Bug 1507032 - Work around bug in wayland (< 1.12) headers. r=froydnj
authorMike Hommey <mh+mozilla@glandium.org>
Wed, 14 Nov 2018 22:48:26 +0000
changeset 446435 1f1eec6abd9b1a33186fd463ba1406adb7e1c233
parent 446434 e762fce85daa2b0399f443c4644c6e61a11b1eb3
child 446436 1840a5cbb59f53760b7c1d5c7295d1db223c4f2e
push id35041
push useraiakab@mozilla.com
push dateThu, 15 Nov 2018 09:52:43 +0000
treeherdermozilla-central@48720735b142 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersfroydnj
bugs1507032
milestone65.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1507032 - Work around bug in wayland (< 1.12) headers. r=froydnj Differential Revision: https://phabricator.services.mozilla.com/D11837
config/make-system-wrappers.py
config/system-headers.mozbuild
--- a/config/make-system-wrappers.py
+++ b/config/make-system-wrappers.py
@@ -2,21 +2,37 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 from __future__ import print_function
 import os
 from mozbuild.util import FileAvoidWrite
 
 header_template = '''#pragma GCC system_header
 #pragma GCC visibility push(default)
-#include_next <%(header)s>
+{includes}
 #pragma GCC visibility pop
 '''
 
+include_next_template = '#include_next <{header}>'
+
 
 # The 'unused' arg is the output file from the file_generate action. We actually
 # generate all the files in header_list
 def gen_wrappers(unused, outdir, *header_list):
     for header in header_list:
         with FileAvoidWrite(os.path.join(outdir, header)) as f:
-            f.write(header_template % {
-                'header': header,
-            })
+            includes = include_next_template.format(header=header)
+            if header == 'wayland-util.h':
+                # wayland-util.h in Wayland < 1.12 includes math.h inside an
+                # extern "C" block, which breaks including the header from C++.
+                # This was fixed in Wayland 1.12, but for versions earlier than
+                # that, we work around that by force-including math.h first.
+                includes = '#include <math.h>\n' + includes
+            elif header == 'wayland-client.h':
+                # The system wayland-client.h uses quote includes for
+                # wayland-util.h, which means wayland-util.h is picked from the
+                # directory containing wayland-client.h first, and there's no
+                # way around that with -I, -isystem, or other flags. So, we
+                # force to include it from our wrapper, before including the
+                # system header, so that our wayland-util.h wrapper is picked
+                # first.
+                includes = '#include "wayland-util.h"\n' + includes
+            f.write(header_template.format(includes=includes))
--- a/config/system-headers.mozbuild
+++ b/config/system-headers.mozbuild
@@ -1343,16 +1343,17 @@ if CONFIG['ENABLE_BIGINT']:
         'gmp.h'
     ]
 
 if CONFIG['MOZ_WAYLAND']:
     system_headers += [
         'xkbcommon/xkbcommon.h',
         'wayland-client.h',
         'wayland-egl.h',
+        'wayland-util.h',
     ]
 
 if CONFIG['MOZ_LIB_SECRET']:
     system_headers += [
         'libsecret/secret.h',
         'libsecret/secret-attributes.h',
         'libsecret/secret-collection.h',
         'libsecret/secret-enum-types.h',