sway/meson.build

306 lines
8.6 KiB
Meson
Raw Normal View History

2017-11-29 15:03:12 +01:00
project(
'sway',
'c',
version: '1.2', #release_version
2017-11-29 15:03:12 +01:00
license: 'MIT',
2019-01-17 18:02:25 +01:00
meson_version: '>=0.48.0',
2017-11-29 15:03:12 +01:00
default_options: [
'c_std=c11',
'warning_level=2',
'werror=true',
],
)
add_project_arguments(
[
'-DWLR_USE_UNSTABLE',
'-Wno-unused-parameter',
'-Wno-unused-result',
'-Wno-missing-braces',
'-Wundef',
2019-01-16 02:57:53 +01:00
'-Wvla',
],
language: 'c',
)
2017-12-01 11:42:12 +01:00
2017-11-29 15:03:12 +01:00
cc = meson.get_compiler('c')
2017-11-30 14:31:13 +01:00
is_freebsd = host_machine.system().startswith('freebsd')
datadir = get_option('datadir')
sysconfdir = get_option('sysconfdir')
prefix = get_option('prefix')
if is_freebsd
add_project_arguments('-D_C11_SOURCE', language: 'c')
endif
2018-01-04 16:43:40 +01:00
jsonc = dependency('json-c', version: '>=0.13')
2017-11-30 09:41:51 +01:00
pcre = dependency('libpcre')
2017-11-29 15:03:12 +01:00
wayland_server = dependency('wayland-server')
wayland_client = dependency('wayland-client')
2018-03-31 03:38:28 +02:00
wayland_cursor = dependency('wayland-cursor')
2017-11-29 15:03:12 +01:00
wayland_egl = dependency('wayland-egl')
2018-05-19 00:47:47 +02:00
wayland_protos = dependency('wayland-protocols', version: '>=1.14')
2017-11-29 15:03:12 +01:00
xkbcommon = dependency('xkbcommon')
2018-03-27 21:25:25 +02:00
cairo = dependency('cairo')
2017-11-30 09:41:51 +01:00
pango = dependency('pango')
2018-03-27 21:25:25 +02:00
pangocairo = dependency('pangocairo')
gdk_pixbuf = dependency('gdk-pixbuf-2.0', required: get_option('gdk-pixbuf'))
2017-11-30 09:41:51 +01:00
pixman = dependency('pixman-1')
2019-11-13 19:23:36 +01:00
glesv2 = dependency('glesv2')
libevdev = dependency('libevdev')
2018-04-08 01:34:12 +02:00
libinput = dependency('libinput', version: '>=1.6.0')
systemd = dependency('libsystemd', version: '>=239', required: false)
elogind = dependency('libelogind', version: '>=239', required: false)
2019-01-17 18:02:25 +01:00
xcb = dependency('xcb', required: get_option('xwayland'))
bash_comp = dependency('bash-completion', required: false)
fish_comp = dependency('fish', required: false)
2017-11-29 15:03:12 +01:00
math = cc.find_library('m')
rt = cc.find_library('rt')
2017-11-30 17:34:44 +01:00
# Try first to find wlroots as a subproject, then as a system dependency
2019-12-31 17:18:58 +01:00
wlroots_version = ['>=0.9.0', '<0.10.0']
wlroots_proj = subproject(
'wlroots',
default_options: ['examples=false'],
required: false,
2019-02-27 21:13:16 +01:00
version: wlroots_version,
)
if wlroots_proj.found()
wlroots = wlroots_proj.get_variable('wlroots')
wlroots_conf = wlroots_proj.get_variable('conf_data')
wlroots_has_xwayland = wlroots_conf.get('WLR_HAS_XWAYLAND') == 1
else
2019-02-27 21:13:16 +01:00
wlroots = dependency('wlroots', version: wlroots_version)
wlroots_has_xwayland = cc.get_define('WLR_HAS_XWAYLAND', prefix: '#include <wlr/config.h>', dependencies: wlroots) == '1'
endif
if get_option('xwayland').enabled() and not wlroots_has_xwayland
error('Cannot enable Xwayland in sway: wlroots has been built without Xwayland support')
endif
have_xwayland = xcb.found() and wlroots_has_xwayland
2018-03-28 18:21:50 +02:00
2019-01-17 18:02:25 +01:00
tray_deps_found = systemd.found() or elogind.found()
if get_option('tray').enabled() and not tray_deps_found
error('Building with -Dtray=enabled, but libsystemd and libelogind have not been not found')
endif
2019-01-17 18:02:25 +01:00
have_tray = (not get_option('tray').disabled()) and tray_deps_found
conf_data = configuration_data()
2019-01-17 18:02:25 +01:00
conf_data.set10('HAVE_XWAYLAND', have_xwayland)
2018-11-18 00:33:06 +01:00
conf_data.set10('HAVE_GDK_PIXBUF', gdk_pixbuf.found())
conf_data.set10('HAVE_SYSTEMD', systemd.found())
conf_data.set10('HAVE_ELOGIND', elogind.found())
2019-01-17 18:02:25 +01:00
conf_data.set10('HAVE_TRAY', have_tray)
scdoc = dependency('scdoc', version: '>=1.9.2', native: true, required: get_option('man-pages'))
2018-05-11 14:39:46 +02:00
if scdoc.found()
scdoc_prog = find_program(scdoc.get_pkgconfig_variable('scdoc'), native: true)
sh = find_program('sh', native: true)
2017-11-30 17:34:44 +01:00
mandir = get_option('mandir')
man_files = [
2018-05-11 14:39:46 +02:00
'sway/sway.1.scd',
2018-05-12 02:58:34 +02:00
'sway/sway.5.scd',
2018-05-12 03:13:43 +02:00
'sway/sway-bar.5.scd',
2018-05-12 03:25:05 +02:00
'sway/sway-input.5.scd',
'sway/sway-ipc.7.scd',
2018-10-14 16:48:51 +02:00
'sway/sway-output.5.scd',
'swaybar/swaybar-protocol.7.scd',
2018-05-12 03:39:47 +02:00
'swaymsg/swaymsg.1.scd',
2018-07-27 17:19:42 +02:00
'swaynag/swaynag.1.scd',
2018-07-28 15:34:25 +02:00
'swaynag/swaynag.5.scd',
2017-11-30 17:34:44 +01:00
]
foreach filename : man_files
topic = filename.split('.')[-3].split('/')[-1]
section = filename.split('.')[-2]
2018-05-11 14:39:46 +02:00
output = '@0@.@1@'.format(topic, section)
2017-11-30 17:34:44 +01:00
custom_target(
2018-05-11 14:39:46 +02:00
output,
2017-11-30 17:34:44 +01:00
input: filename,
2018-05-11 14:39:46 +02:00
output: output,
2017-11-30 17:34:44 +01:00
command: [
2019-02-27 22:19:53 +01:00
sh, '-c', '@0@ < @INPUT@ > @1@'.format(scdoc_prog.path(), output)
2017-11-30 17:34:44 +01:00
],
install: true,
install_dir: '@0@/man@1@'.format(mandir, section)
)
endforeach
endif
2017-11-29 15:03:12 +01:00
add_project_arguments('-DSYSCONFDIR="/@0@"'.format(join_paths(prefix, sysconfdir)), language : 'c')
2017-12-05 10:40:55 +01:00
version = '"@0@"'.format(meson.project_version())
git = find_program('git', native: true, required: false)
if git.found()
git_commit = run_command([git, 'rev-parse', '--short', 'HEAD'])
git_branch = run_command([git, 'rev-parse', '--abbrev-ref', 'HEAD'])
if git_commit.returncode() == 0 and git_branch.returncode() == 0
version = '"@0@-@1@ (" __DATE__ ", branch \'@2@\')"'.format(
meson.project_version(),
git_commit.stdout().strip(),
git_branch.stdout().strip(),
)
endif
2017-11-30 10:48:08 +01:00
endif
2017-11-30 10:29:32 +01:00
add_project_arguments('-DSWAY_VERSION=@0@'.format(version), language: 'c')
2017-11-29 15:03:12 +01:00
# Compute the relative path used by compiler invocations.
source_root = meson.current_source_dir().split('/')
build_root = meson.build_root().split('/')
relative_dir_parts = []
i = 0
in_prefix = true
foreach p : build_root
if i >= source_root.length() or not in_prefix or p != source_root[i]
in_prefix = false
relative_dir_parts += '..'
endif
i += 1
endforeach
i = 0
in_prefix = true
foreach p : source_root
if i >= build_root.length() or not in_prefix or build_root[i] != p
in_prefix = false
relative_dir_parts += p
endif
i += 1
endforeach
relative_dir = join_paths(relative_dir_parts) + '/'
# Strip relative path prefixes from the code if possible, otherwise hide them.
if cc.has_argument('-fmacro-prefix-map=/prefix/to/hide=')
add_project_arguments(
'-fmacro-prefix-map=@0@='.format(relative_dir),
language: 'c',
)
else
add_project_arguments(
'-DSWAY_REL_SRC_DIR="@0@"'.format(relative_dir),
language: 'c',
)
endif
2017-11-29 15:03:12 +01:00
sway_inc = include_directories('include')
2018-03-28 18:21:50 +02:00
subdir('include')
subdir('protocols')
2017-11-30 09:39:27 +01:00
subdir('common')
subdir('sway')
2017-11-30 17:40:49 +01:00
subdir('swaymsg')
2018-03-27 21:25:25 +02:00
subdir('client')
subdir('swaybar')
2018-07-27 17:19:42 +02:00
subdir('swaynag')
2018-09-21 01:31:09 +02:00
2017-11-30 14:31:13 +01:00
config = configuration_data()
config.set('datadir', join_paths(prefix, datadir))
config.set('prefix', prefix)
config.set('sysconfdir', join_paths(prefix, sysconfdir))
2017-11-30 14:31:13 +01:00
configure_file(
configuration: config,
input: 'config.in',
output: '@BASENAME@',
install_dir: join_paths(sysconfdir, 'sway')
2017-11-30 14:31:13 +01:00
)
if is_freebsd
configure_file(
configuration: config,
input: 'security.d/10-freebsd.in',
output: '@BASENAME@',
install_dir: join_paths(sysconfdir, 'sway', 'security.d')
2017-11-30 14:31:13 +01:00
)
else
configure_file(
configuration: config,
input: 'security.d/00-defaults.in',
output: '@BASENAME@',
install_dir: join_paths(sysconfdir, 'sway', 'security.d')
2017-11-30 14:31:13 +01:00
)
endif
install_data(
'sway.desktop',
install_dir: join_paths(datadir, 'wayland-sessions')
2017-11-30 14:31:13 +01:00
)
2019-01-18 08:44:02 +01:00
if get_option('default-wallpaper')
2017-11-30 14:31:13 +01:00
wallpaper_files = files(
'assets/Sway_Wallpaper_Blue_768x1024.png',
'assets/Sway_Wallpaper_Blue_768x1024_Portrait.png',
'assets/Sway_Wallpaper_Blue_1136x640.png',
'assets/Sway_Wallpaper_Blue_1136x640_Portrait.png',
'assets/Sway_Wallpaper_Blue_1366x768.png',
'assets/Sway_Wallpaper_Blue_1920x1080.png',
'assets/Sway_Wallpaper_Blue_2048x1536.png',
'assets/Sway_Wallpaper_Blue_2048x1536_Portrait.png',
)
wallpaper_install_dir = join_paths(datadir, 'backgrounds', 'sway')
2017-11-30 14:31:13 +01:00
install_data(wallpaper_files, install_dir: wallpaper_install_dir)
endif
2017-11-30 17:51:58 +01:00
2019-01-18 08:44:02 +01:00
if get_option('zsh-completions')
2017-11-30 17:51:58 +01:00
zsh_files = files(
'completions/zsh/_sway',
'completions/zsh/_swaymsg',
)
zsh_install_dir = join_paths(datadir, 'zsh', 'site-functions')
2017-11-30 17:51:58 +01:00
install_data(zsh_files, install_dir: zsh_install_dir)
endif
2018-07-27 18:50:33 +02:00
2019-01-18 08:44:02 +01:00
if get_option('bash-completions')
2018-07-27 18:50:33 +02:00
bash_files = files(
'completions/bash/sway',
2018-12-31 19:17:05 +01:00
'completions/bash/swaybar',
2018-07-27 18:50:33 +02:00
'completions/bash/swaymsg',
)
if bash_comp.found()
bash_install_dir = bash_comp.get_pkgconfig_variable('completionsdir')
else
bash_install_dir = join_paths(datadir, 'bash-completion', 'completions')
endif
2018-07-27 18:50:33 +02:00
install_data(bash_files, install_dir: bash_install_dir)
endif
2018-08-26 18:27:18 +02:00
2019-01-18 08:44:02 +01:00
if get_option('fish-completions')
2018-08-26 18:27:18 +02:00
fish_files = files(
'completions/fish/sway.fish',
'completions/fish/swaymsg.fish',
2018-10-27 16:54:32 +02:00
'completions/fish/swaynag.fish',
2018-08-26 18:27:18 +02:00
)
if fish_comp.found()
fish_install_dir = fish_comp.get_pkgconfig_variable('completionsdir')
else
fish_install_dir = join_paths(datadir, 'fish', 'completions')
endif
2018-08-26 18:27:18 +02:00
install_data(fish_files, install_dir: fish_install_dir)
endif
2019-02-27 21:26:50 +01:00
status = [
'',
'Features:',
'xwayland: @0@'.format(have_xwayland),
'gdk-pixbuf: @0@'.format(gdk_pixbuf.found()),
'systemd: @0@'.format(systemd.found()),
'elogind: @0@'.format(elogind.found()),
'tray: @0@'.format(have_tray),
'man-pages: @0@'.format(scdoc.found()),
'',
]
message('\n'.join(status))
if not systemd.found() and not elogind.found()
warning('The sway binary must be setuid when compiled without (e)logind')
warning('You must do this manually post-install: chmod a+s /path/to/sway')
endif