diff options
Diffstat (limited to 'meson.build')
-rw-r--r-- | meson.build | 189 |
1 files changed, 71 insertions, 118 deletions
diff --git a/meson.build b/meson.build index 38a55678..f8bf4f80 100644 --- a/meson.build +++ b/meson.build | |||
@@ -1,9 +1,9 @@ | |||
1 | project( | 1 | project( |
2 | 'sway', | 2 | 'sway', |
3 | 'c', | 3 | 'c', |
4 | version: '1.5', #release_version | 4 | version: '1.10-dev', |
5 | license: 'MIT', | 5 | license: 'MIT', |
6 | meson_version: '>=0.53.0', | 6 | meson_version: '>=0.60.0', |
7 | default_options: [ | 7 | default_options: [ |
8 | 'c_std=c11', | 8 | 'c_std=c11', |
9 | 'warning_level=2', | 9 | 'warning_level=2', |
@@ -18,6 +18,7 @@ add_project_arguments( | |||
18 | '-Wno-unused-parameter', | 18 | '-Wno-unused-parameter', |
19 | '-Wno-unused-result', | 19 | '-Wno-unused-result', |
20 | '-Wno-missing-braces', | 20 | '-Wno-missing-braces', |
21 | '-Wno-format-zero-length', | ||
21 | '-Wundef', | 22 | '-Wundef', |
22 | '-Wvla', | 23 | '-Wvla', |
23 | ], | 24 | ], |
@@ -35,79 +36,65 @@ if is_freebsd | |||
35 | add_project_arguments('-D_C11_SOURCE', language: 'c') | 36 | add_project_arguments('-D_C11_SOURCE', language: 'c') |
36 | endif | 37 | endif |
37 | 38 | ||
38 | jsonc = dependency('json-c', version: '>=0.13') | 39 | # Execute the wlroots subproject, if any |
39 | pcre = dependency('libpcre') | 40 | wlroots_version = ['>=0.18.0', '<0.19.0'] |
40 | wayland_server = dependency('wayland-server') | 41 | subproject( |
41 | wayland_client = dependency('wayland-client') | ||
42 | wayland_cursor = dependency('wayland-cursor') | ||
43 | wayland_egl = dependency('wayland-egl') | ||
44 | wayland_protos = dependency('wayland-protocols', version: '>=1.14') | ||
45 | xkbcommon = dependency('xkbcommon') | ||
46 | cairo = dependency('cairo') | ||
47 | pango = dependency('pango') | ||
48 | pangocairo = dependency('pangocairo') | ||
49 | gdk_pixbuf = dependency('gdk-pixbuf-2.0', required: get_option('gdk-pixbuf')) | ||
50 | pixman = dependency('pixman-1') | ||
51 | glesv2 = dependency('glesv2') | ||
52 | libevdev = dependency('libevdev') | ||
53 | libinput = dependency('libinput', version: '>=1.6.0') | ||
54 | xcb = dependency('xcb', required: get_option('xwayland')) | ||
55 | bash_comp = dependency('bash-completion', required: false) | ||
56 | fish_comp = dependency('fish', required: false) | ||
57 | math = cc.find_library('m') | ||
58 | rt = cc.find_library('rt') | ||
59 | |||
60 | # Try first to find wlroots as a subproject, then as a system dependency | ||
61 | wlroots_version = ['>=0.12.0', '<0.13.0'] | ||
62 | wlroots_proj = subproject( | ||
63 | 'wlroots', | 42 | 'wlroots', |
64 | default_options: ['examples=false'], | 43 | default_options: ['examples=false'], |
65 | required: false, | 44 | required: false, |
66 | version: wlroots_version, | 45 | version: wlroots_version, |
67 | ) | 46 | ) |
47 | wlroots = dependency('wlroots', version: wlroots_version) | ||
68 | wlroots_features = { | 48 | wlroots_features = { |
69 | 'xwayland': false, | 49 | 'xwayland': false, |
70 | 'systemd': false, | 50 | 'libinput_backend': false, |
71 | 'elogind': false, | 51 | 'session': false, |
72 | 'libseat': false, | ||
73 | } | 52 | } |
74 | if wlroots_proj.found() | 53 | foreach name, _ : wlroots_features |
75 | wlroots = wlroots_proj.get_variable('wlroots') | 54 | var_name = 'have_' + name.underscorify() |
76 | wlroots_conf = wlroots_proj.get_variable('conf_data') | 55 | have = wlroots.get_variable(pkgconfig: var_name, internal: var_name) == 'true' |
77 | foreach name, _ : wlroots_features | 56 | wlroots_features += { name: have } |
78 | has = wlroots_conf.get('WLR_HAS_' + name.to_upper()) == 1 | 57 | endforeach |
79 | wlroots_features += { name: has } | ||
80 | endforeach | ||
81 | else | ||
82 | wlroots = dependency('wlroots', version: wlroots_version) | ||
83 | foreach name, _ : wlroots_features | ||
84 | has = cc.get_define('WLR_HAS_' + name.to_upper(), prefix: '#include <wlr/config.h>', dependencies: wlroots) == '1' | ||
85 | wlroots_features += { name: has } | ||
86 | endforeach | ||
87 | endif | ||
88 | 58 | ||
89 | if get_option('xwayland').enabled() and not wlroots_features['xwayland'] | 59 | if get_option('xwayland').enabled() and not wlroots_features['xwayland'] |
90 | error('Cannot enable Xwayland in sway: wlroots has been built without Xwayland support') | 60 | error('Cannot enable Xwayland in sway: wlroots has been built without Xwayland support') |
91 | endif | 61 | endif |
92 | have_xwayland = xcb.found() and wlroots_features['xwayland'] | 62 | |
63 | null_dep = dependency('', required: false) | ||
64 | |||
65 | jsonc = dependency('json-c', version: '>=0.13') | ||
66 | pcre2 = dependency('libpcre2-8') | ||
67 | wayland_server = dependency('wayland-server', version: '>=1.21.0') | ||
68 | wayland_client = dependency('wayland-client') | ||
69 | wayland_cursor = dependency('wayland-cursor') | ||
70 | wayland_protos = dependency('wayland-protocols', version: '>=1.24') | ||
71 | xkbcommon = dependency('xkbcommon', version: '>=1.5.0') | ||
72 | cairo = dependency('cairo') | ||
73 | pango = dependency('pango') | ||
74 | pangocairo = dependency('pangocairo') | ||
75 | gdk_pixbuf = dependency('gdk-pixbuf-2.0', required: get_option('gdk-pixbuf')) | ||
76 | pixman = dependency('pixman-1') | ||
77 | libevdev = dependency('libevdev') | ||
78 | libinput = wlroots_features['libinput_backend'] ? dependency('libinput', version: '>=1.21.0') : null_dep | ||
79 | xcb = dependency('xcb', required: get_option('xwayland')) | ||
80 | drm = dependency('libdrm') | ||
81 | libudev = wlroots_features['libinput_backend'] ? dependency('libudev') : null_dep | ||
82 | math = cc.find_library('m') | ||
83 | rt = cc.find_library('rt') | ||
84 | xcb_icccm = dependency('xcb-icccm', required: get_option('xwayland')) | ||
85 | threads = dependency('threads') # for pthread_setschedparam | ||
86 | |||
87 | have_xwayland = xcb.found() and xcb_icccm.found() and wlroots_features['xwayland'] | ||
93 | 88 | ||
94 | if get_option('sd-bus-provider') == 'auto' | 89 | if get_option('sd-bus-provider') == 'auto' |
95 | if not get_option('tray').disabled() | 90 | if not get_option('tray').disabled() |
96 | assert(get_option('auto_features').auto(), 'sd-bus-provider must not be set to auto since auto_features != auto') | 91 | assert(get_option('auto_features').auto(), 'sd-bus-provider must not be set to auto since auto_features != auto') |
97 | endif | 92 | endif |
98 | sdbus = dependency('libsystemd', | 93 | sdbus = dependency(['libsystemd', 'libelogind'], |
99 | required: false, | 94 | required: false, |
100 | version: '>=239', | 95 | version: '>=239', |
101 | not_found_message: 'libsystemd not found, trying libelogind', | ||
102 | ) | 96 | ) |
103 | if not sdbus.found() | 97 | if not sdbus.found() |
104 | sdbus = dependency('libelogind', | ||
105 | required: false, | ||
106 | version: '>=239', | ||
107 | not_found_message: 'libelogind not found, trying basu', | ||
108 | ) | ||
109 | endif | ||
110 | if not sdbus.found() | ||
111 | sdbus = dependency('basu', required: false) | 98 | sdbus = dependency('basu', required: false) |
112 | endif | 99 | endif |
113 | else | 100 | else |
@@ -128,11 +115,15 @@ conf_data.set10('HAVE_LIBSYSTEMD', sdbus.found() and sdbus.name() == 'libsystemd | |||
128 | conf_data.set10('HAVE_LIBELOGIND', sdbus.found() and sdbus.name() == 'libelogind') | 115 | conf_data.set10('HAVE_LIBELOGIND', sdbus.found() and sdbus.name() == 'libelogind') |
129 | conf_data.set10('HAVE_BASU', sdbus.found() and sdbus.name() == 'basu') | 116 | conf_data.set10('HAVE_BASU', sdbus.found() and sdbus.name() == 'basu') |
130 | conf_data.set10('HAVE_TRAY', have_tray) | 117 | conf_data.set10('HAVE_TRAY', have_tray) |
118 | conf_data.set10('HAVE_LIBINPUT_CONFIG_ACCEL_PROFILE_CUSTOM', cc.has_header_symbol( | ||
119 | 'libinput.h', | ||
120 | 'LIBINPUT_CONFIG_ACCEL_PROFILE_CUSTOM', | ||
121 | dependencies: libinput, | ||
122 | )) | ||
131 | 123 | ||
132 | scdoc = dependency('scdoc', version: '>=1.9.2', native: true, required: get_option('man-pages')) | 124 | scdoc = dependency('scdoc', version: '>=1.9.2', native: true, required: get_option('man-pages')) |
133 | if scdoc.found() | 125 | if scdoc.found() |
134 | scdoc_prog = find_program(scdoc.get_pkgconfig_variable('scdoc'), native: true) | 126 | scdoc_prog = find_program(scdoc.get_variable(pkgconfig: 'scdoc'), native: true) |
135 | sh = find_program('sh', native: true) | ||
136 | mandir = get_option('mandir') | 127 | mandir = get_option('mandir') |
137 | man_files = [ | 128 | man_files = [ |
138 | 'sway/sway.1.scd', | 129 | 'sway/sway.1.scd', |
@@ -143,9 +134,15 @@ if scdoc.found() | |||
143 | 'sway/sway-output.5.scd', | 134 | 'sway/sway-output.5.scd', |
144 | 'swaybar/swaybar-protocol.7.scd', | 135 | 'swaybar/swaybar-protocol.7.scd', |
145 | 'swaymsg/swaymsg.1.scd', | 136 | 'swaymsg/swaymsg.1.scd', |
146 | 'swaynag/swaynag.1.scd', | ||
147 | 'swaynag/swaynag.5.scd', | ||
148 | ] | 137 | ] |
138 | |||
139 | if get_option('swaynag') | ||
140 | man_files += [ | ||
141 | 'swaynag/swaynag.1.scd', | ||
142 | 'swaynag/swaynag.5.scd', | ||
143 | ] | ||
144 | endif | ||
145 | |||
149 | foreach filename : man_files | 146 | foreach filename : man_files |
150 | topic = filename.split('.')[-3].split('/')[-1] | 147 | topic = filename.split('.')[-3].split('/')[-1] |
151 | section = filename.split('.')[-2] | 148 | section = filename.split('.')[-2] |
@@ -155,10 +152,10 @@ if scdoc.found() | |||
155 | output, | 152 | output, |
156 | input: filename, | 153 | input: filename, |
157 | output: output, | 154 | output: output, |
158 | command: [ | 155 | command: scdoc_prog, |
159 | sh, '-c', '@0@ < @INPUT@ > @1@'.format(scdoc_prog.path(), output) | ||
160 | ], | ||
161 | install: true, | 156 | install: true, |
157 | feed: true, | ||
158 | capture: true, | ||
162 | install_dir: '@0@/man@1@'.format(mandir, section) | 159 | install_dir: '@0@/man@1@'.format(mandir, section) |
163 | ) | 160 | ) |
164 | endforeach | 161 | endforeach |
@@ -169,8 +166,8 @@ add_project_arguments('-DSYSCONFDIR="/@0@"'.format(join_paths(prefix, sysconfdir | |||
169 | version = '"@0@"'.format(meson.project_version()) | 166 | version = '"@0@"'.format(meson.project_version()) |
170 | git = find_program('git', native: true, required: false) | 167 | git = find_program('git', native: true, required: false) |
171 | if git.found() | 168 | if git.found() |
172 | git_commit = run_command([git, 'rev-parse', '--short', 'HEAD']) | 169 | git_commit = run_command([git, 'rev-parse', '--short', 'HEAD'], check: false) |
173 | git_branch = run_command([git, 'rev-parse', '--abbrev-ref', 'HEAD']) | 170 | git_branch = run_command([git, 'rev-parse', '--abbrev-ref', 'HEAD'], check: false) |
174 | if git_commit.returncode() == 0 and git_branch.returncode() == 0 | 171 | if git_commit.returncode() == 0 and git_branch.returncode() == 0 |
175 | version = '"@0@-@1@ (" __DATE__ ", branch \'@2@\')"'.format( | 172 | version = '"@0@-@1@ (" __DATE__ ", branch \'@2@\')"'.format( |
176 | meson.project_version(), | 173 | meson.project_version(), |
@@ -183,7 +180,7 @@ add_project_arguments('-DSWAY_VERSION=@0@'.format(version), language: 'c') | |||
183 | 180 | ||
184 | # Compute the relative path used by compiler invocations. | 181 | # Compute the relative path used by compiler invocations. |
185 | source_root = meson.current_source_dir().split('/') | 182 | source_root = meson.current_source_dir().split('/') |
186 | build_root = meson.build_root().split('/') | 183 | build_root = meson.global_build_root().split('/') |
187 | relative_dir_parts = [] | 184 | relative_dir_parts = [] |
188 | i = 0 | 185 | i = 0 |
189 | in_prefix = true | 186 | in_prefix = true |
@@ -227,9 +224,15 @@ subdir('common') | |||
227 | subdir('sway') | 224 | subdir('sway') |
228 | subdir('swaymsg') | 225 | subdir('swaymsg') |
229 | 226 | ||
230 | subdir('client') | 227 | if get_option('swaybar') or get_option('swaynag') |
231 | subdir('swaybar') | 228 | subdir('client') |
232 | subdir('swaynag') | 229 | endif |
230 | if get_option('swaybar') | ||
231 | subdir('swaybar') | ||
232 | endif | ||
233 | if get_option('swaynag') | ||
234 | subdir('swaynag') | ||
235 | endif | ||
233 | 236 | ||
234 | config = configuration_data() | 237 | config = configuration_data() |
235 | config.set('datadir', join_paths(prefix, datadir)) | 238 | config.set('datadir', join_paths(prefix, datadir)) |
@@ -264,61 +267,11 @@ if get_option('default-wallpaper') | |||
264 | install_data(wallpaper_files, install_dir: wallpaper_install_dir) | 267 | install_data(wallpaper_files, install_dir: wallpaper_install_dir) |
265 | endif | 268 | endif |
266 | 269 | ||
267 | if get_option('zsh-completions') | 270 | subdir('completions') |
268 | zsh_files = files( | ||
269 | 'completions/zsh/_sway', | ||
270 | 'completions/zsh/_swaymsg', | ||
271 | ) | ||
272 | zsh_install_dir = join_paths(datadir, 'zsh', 'site-functions') | ||
273 | |||
274 | install_data(zsh_files, install_dir: zsh_install_dir) | ||
275 | endif | ||
276 | |||
277 | if get_option('bash-completions') | ||
278 | bash_files = files( | ||
279 | 'completions/bash/sway', | ||
280 | 'completions/bash/swaybar', | ||
281 | 'completions/bash/swaymsg', | ||
282 | ) | ||
283 | if bash_comp.found() | ||
284 | bash_install_dir = bash_comp.get_pkgconfig_variable( | ||
285 | 'completionsdir', | ||
286 | define_variable: ['datadir', datadir] | ||
287 | ) | ||
288 | else | ||
289 | bash_install_dir = join_paths(datadir, 'bash-completion', 'completions') | ||
290 | endif | ||
291 | |||
292 | install_data(bash_files, install_dir: bash_install_dir) | ||
293 | endif | ||
294 | |||
295 | if get_option('fish-completions') | ||
296 | fish_files = files( | ||
297 | 'completions/fish/sway.fish', | ||
298 | 'completions/fish/swaymsg.fish', | ||
299 | 'completions/fish/swaynag.fish', | ||
300 | ) | ||
301 | if fish_comp.found() | ||
302 | fish_install_dir = fish_comp.get_pkgconfig_variable( | ||
303 | 'completionsdir', | ||
304 | define_variable: ['datadir', datadir] | ||
305 | ) | ||
306 | else | ||
307 | fish_install_dir = join_paths(datadir, 'fish', 'vendor_completions.d') | ||
308 | endif | ||
309 | |||
310 | install_data(fish_files, install_dir: fish_install_dir) | ||
311 | endif | ||
312 | 271 | ||
313 | summary({ | 272 | summary({ |
314 | 'xwayland': have_xwayland, | 273 | 'xwayland': have_xwayland, |
315 | 'gdk-pixbuf': gdk_pixbuf.found(), | 274 | 'gdk-pixbuf': gdk_pixbuf.found(), |
316 | 'sd-bus': sdbus.found(), | ||
317 | 'tray': have_tray, | 275 | 'tray': have_tray, |
318 | 'man-pages': scdoc.found(), | 276 | 'man-pages': scdoc.found(), |
319 | }, bool_yn: true) | 277 | }, bool_yn: true) |
320 | |||
321 | if not wlroots_features['systemd'] and not wlroots_features['elogind'] and not wlroots_features['libseat'] | ||
322 | warning('The sway binary must be setuid when compiled without (e)logind or libseat') | ||
323 | warning('You must do this manually post-install: chmod a+s /path/to/sway') | ||
324 | endif | ||