diff options
| author | Matt Turner <mattst88@gmail.com> | 2020-03-05 12:04:36 -0800 |
|---|---|---|
| committer | Matt Turner <mattst88@gmail.com> | 2020-03-13 10:25:24 -0700 |
| commit | 618663c791092bb82dc0a153a4a2fe97582a54bc (patch) | |
| tree | 093358daf79b24ea4c967387e7ac943579d11887 /src/meson.build | |
| parent | meson: Require wayland-scanner of a matching version (diff) | |
| download | wayland-618663c791092bb82dc0a153a4a2fe97582a54bc.tar wayland-618663c791092bb82dc0a153a4a2fe97582a54bc.tar.gz wayland-618663c791092bb82dc0a153a4a2fe97582a54bc.tar.bz2 wayland-618663c791092bb82dc0a153a4a2fe97582a54bc.tar.lz wayland-618663c791092bb82dc0a153a4a2fe97582a54bc.tar.xz wayland-618663c791092bb82dc0a153a4a2fe97582a54bc.tar.zst wayland-618663c791092bb82dc0a153a4a2fe97582a54bc.zip | |
meson: Add option to control building wayland-scanner
Wayland requires a binary, wayland-scanner, to be run during the build
process. For any configuration other than native builds (including
cross compiling and even 32-bit x86 builds on an x86-64 build machine)
Wayland's build process builds and uses its own wayland-scanner.
For any builds using a cross file, wayland-scanner is built for the host
machine and therefore cannot be executed during the build of the Wayland
libraries. Instead builds using a cross file must execute the build
machine's wayland-scanner (typically /usr/bin/wayland-scanner).
As such, to build Wayland's libraries for a non-native ABI a package
manager must build and install /usr/bin/wayland-scanner first. But then
the build for the native ABI then rebuilds wayland-scanner itself and
doesn't use the system's, and worse, wants to install its own, which
conflicts with the /usr/bin/wayland-scanner already installed!
So, add the -Dscanner=... option to control whether to install
wayland-scanner.
Signed-off-by: Matt Turner <mattst88@gmail.com>
Diffstat (limited to 'src/meson.build')
| -rw-r--r-- | src/meson.build | 85 |
1 files changed, 50 insertions, 35 deletions
diff --git a/src/meson.build b/src/meson.build index cf92321..a61d40f 100644 --- a/src/meson.build +++ b/src/meson.build @@ -4,12 +4,6 @@ wayland_version_h.set('WAYLAND_VERSION', meson.project_version()) wayland_version_h.set('WAYLAND_VERSION_MAJOR', wayland_version[0].to_int()) wayland_version_h.set('WAYLAND_VERSION_MINOR', wayland_version[1].to_int()) wayland_version_h.set('WAYLAND_VERSION_MICRO', wayland_version[2].to_int()) -configure_file( - input: 'wayland-version.h.in', - output: 'wayland-version.h', - configuration: wayland_version_h, - install_dir: join_paths(get_option('prefix'), get_option('includedir')) -) wayland_util = static_library( 'wayland-util', @@ -21,40 +15,48 @@ wayland_util_dep = declare_dependency( include_directories: include_directories('.') ) -# wayland-scanner +if get_option('scanner') + # wayland-scanner -configure_file( - input: '../protocol/wayland.dtd', - output: 'wayland.dtd.embed', - copy: true -) + configure_file( + input: 'wayland-version.h.in', + output: 'wayland-version.h', + configuration: wayland_version_h, + ) -wayland_scanner_sources = [ 'scanner.c', 'dtddata.S' ] -wayland_scanner_includes = [ root_inc, protocol_inc ] + configure_file( + input: '../protocol/wayland.dtd', + output: 'wayland.dtd.embed', + copy: true + ) -wayland_scanner = executable( - 'wayland-scanner', - wayland_scanner_sources, - c_args: [ '-include', 'config.h' ], - include_directories: wayland_scanner_includes, - dependencies: [ scanner_deps, wayland_util_dep, ], - install: true -) + wayland_scanner_sources = [ 'scanner.c', 'dtddata.S' ] + wayland_scanner_includes = [ root_inc, protocol_inc ] -pkgconfig.generate( - name: 'Wayland Scanner', - description: 'Wayland scanner', - version: meson.project_version(), - variables: [ - 'datarootdir=' + join_paths('${prefix}', get_option('datadir')), - 'pkgdatadir=' + join_paths('${datarootdir}', meson.project_name()), - 'bindir=' + join_paths('${prefix}', get_option('bindir')), - 'wayland_scanner=${bindir}/wayland-scanner' - ], - filebase: 'wayland-scanner' -) + wayland_scanner = executable( + 'wayland-scanner', + wayland_scanner_sources, + c_args: [ '-include', 'config.h' ], + include_directories: wayland_scanner_includes, + dependencies: [ scanner_deps, wayland_util_dep, ], + install: true + ) -if meson.is_cross_build() + pkgconfig.generate( + name: 'Wayland Scanner', + description: 'Wayland scanner', + version: meson.project_version(), + variables: [ + 'datarootdir=' + join_paths('${prefix}', get_option('datadir')), + 'pkgdatadir=' + join_paths('${datarootdir}', meson.project_name()), + 'bindir=' + join_paths('${prefix}', get_option('bindir')), + 'wayland_scanner=${bindir}/wayland-scanner' + ], + filebase: 'wayland-scanner' + ) +endif + +if meson.is_cross_build() or not get_option('scanner') scanner_dep = dependency('wayland-scanner', native: true, version: meson.project_version()) wayland_scanner_for_build = find_program(scanner_dep.get_pkgconfig_variable('wayland_scanner')) else @@ -62,6 +64,19 @@ else endif if get_option('libraries') + # wayland libraries + + # Duplicated inside the "if get_option('scanner')" block above since we + # still need the wayland-version.h to build the scanner, but do not want + # to install it. Meson 0.50 adds "install: bool" which will let us + # deduplicate this block. + configure_file( + input: 'wayland-version.h.in', + output: 'wayland-version.h', + configuration: wayland_version_h, + install_dir: join_paths(get_option('prefix'), get_option('includedir')) + ) + mathlib_dep = cc.find_library('m', required: false) threads_dep = dependency('threads', required: false) |
