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>
This commit is contained in:
parent
5ddb8dff87
commit
618663c791
27
meson.build
27
meson.build
|
@ -84,19 +84,20 @@ if get_option('libraries')
|
|||
subdir('cursor')
|
||||
subdir('egl')
|
||||
subdir('tests')
|
||||
if get_option('documentation')
|
||||
subdir('doc')
|
||||
endif
|
||||
endif
|
||||
|
||||
if get_option('documentation')
|
||||
subdir('doc')
|
||||
if get_option('scanner')
|
||||
install_data([
|
||||
'wayland-scanner.mk',
|
||||
'protocol/wayland.xml',
|
||||
'protocol/wayland.dtd',
|
||||
])
|
||||
|
||||
install_data(
|
||||
[ 'wayland-scanner.m4' ],
|
||||
install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'aclocal'),
|
||||
)
|
||||
endif
|
||||
|
||||
install_data([
|
||||
'wayland-scanner.mk',
|
||||
'protocol/wayland.xml',
|
||||
'protocol/wayland.dtd',
|
||||
])
|
||||
|
||||
install_data(
|
||||
[ 'wayland-scanner.m4' ],
|
||||
install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'aclocal'),
|
||||
)
|
||||
|
|
|
@ -2,6 +2,10 @@ option('libraries',
|
|||
description: 'Compile Wayland libraries',
|
||||
type: 'boolean',
|
||||
value: 'true')
|
||||
option('scanner',
|
||||
description: 'Compile wayland-scanner binary',
|
||||
type: 'boolean',
|
||||
value: 'true')
|
||||
option('documentation',
|
||||
description: 'Build the documentation (requires Doxygen, dot, xmlto, xsltproc)',
|
||||
type: 'boolean',
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -76,16 +76,18 @@ test(
|
|||
|
||||
sed_path = find_program('sed').path()
|
||||
|
||||
test(
|
||||
'scanner-test',
|
||||
find_program('scanner-test.sh'),
|
||||
env: [
|
||||
'TEST_DATA_DIR=@0@/data'.format(meson.current_source_dir()),
|
||||
'TEST_OUTPUT_DIR=@0@/output'.format(meson.current_build_dir()),
|
||||
'SED=@0@'.format(sed_path),
|
||||
'WAYLAND_SCANNER=@0@'.format(wayland_scanner.full_path()),
|
||||
],
|
||||
)
|
||||
if get_option('scanner')
|
||||
test(
|
||||
'scanner-test',
|
||||
find_program('scanner-test.sh'),
|
||||
env: [
|
||||
'TEST_DATA_DIR=@0@/data'.format(meson.current_source_dir()),
|
||||
'TEST_OUTPUT_DIR=@0@/output'.format(meson.current_build_dir()),
|
||||
'SED=@0@'.format(sed_path),
|
||||
'WAYLAND_SCANNER=@0@'.format(wayland_scanner.full_path()),
|
||||
],
|
||||
)
|
||||
endif
|
||||
|
||||
tests = {
|
||||
'array-test': [],
|
||||
|
|
Loading…
Reference in New Issue
Block a user