Switch to Meson

This makes it easier to extend in the future. Also, it will make it
easier to add (un)install targets and eventually, distribute files such
as systemd services.
This commit is contained in:
Jente Hidskes 2018-11-25 22:11:08 +01:00
parent 429392ac63
commit 95372f3f37
No known key found for this signature in database
GPG key ID: 04BE5A29F32D91EA
5 changed files with 85 additions and 42 deletions

3
.gitignore vendored
View file

@ -1,3 +0,0 @@
xdg-shell-protocol.c
xdg-shell-protocol.h
cage

View file

@ -1,32 +0,0 @@
# WAYLAND_PROTOCOLS=/usr/share/wayland-protocols
# # wayland-scanner is a tool which generates C headers and rigging for Wayland
# # protocols, which are specified in XML. wlroots requires you to rig these up
# # to your build system yourself and provide them in the include path.
# xdg-shell-protocol.h:
# wayland-scanner server-header \
# $(WAYLAND_PROTOCOLS)/stable/xdg-shell/xdg-shell.xml $@
# xdg-shell-protocol.c: xdg-shell-protocol.h
# wayland-scanner private-code \
# $(WAYLAND_PROTOCOLS)/stable/xdg-shell/xdg-shell.xml $@
debug: cage.c
$(CC) $(CFLAGS) -g -Werror -Wall -I. -DWLR_USE_UNSTABLE -DDEBUG \
$(shell pkg-config --cflags --libs wlroots) \
$(shell pkg-config --cflags --libs wayland-server) \
$(shell pkg-config --cflags --libs xkbcommon) \
-o cage $<
release: cage.c
$(CC) $(CFLAGS) -Werror -Wall -I. -DWLR_USE_UNSTABLE \
$(shell pkg-config --cflags --libs wlroots) \
$(shell pkg-config --cflags --libs wayland-server) \
$(shell pkg-config --cflags --libs xkbcommon) \
-o cage $<
clean:
rm -f cage
.DEFAULT_GOAL=debug
.PHONY: debug release clean

View file

@ -26,14 +26,21 @@ Notable omissions from Cage, to be added in a future version:
## Building and running Cage
You can build Cage by simply running `make`. It requires wayland,
wlroots and xkbcommon to be installed.
You can build Cage with the [meson](https://mesonbuild.com/) build
system. It requires wayland, wlroots and xkbcommon to be
installed. Simply execute the following steps to build Cage:
You can run Cage by running `./cage APPLICATION`. If you run it from
within an existing X11 or Wayland session, wlroots will open a virtual
output as a window in your existing session. If you run it at a TTY,
it'll run with the KMS+DRM backend. In debug mode (`make debug`),
press Alt+Esc to quit.
```
$ meson build
$ ninja -C build
```
You can run Cage by running `./build/cage APPLICATION`. If you run it
from within an existing X11 or Wayland session, it will open in a
virtual output as a window in your existing session. If you run it at
a TTY, it'll run with the KMS+DRM backend. In debug mode (default
build type with Meson), press Alt+Esc to quit. To build a release
build, use `meson build --buildtype=release`.
Cage is based on the annotated source of
[TinyWL](https://gist.github.com/ddevault/ae4d1cdcca97ffeb2c35f0878d75dc17).

3
cage.c
View file

@ -5,6 +5,9 @@
*
* See the LICENSE file accompanying this file.
*/
#define _POSIX_C_SOURCE 200112L
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>

68
meson.build Normal file
View file

@ -0,0 +1,68 @@
project('cage', 'c',
version: '0.0.1',
license: 'MIT',
default_options: [
'c_std=c11',
'warning_level=3',
'werror=true',
],
)
add_project_arguments(
[
'-DWLR_USE_UNSTABLE',
'-Wall',
'-Werror',
'-Wundef',
'-Wno-unused-parameter',
],
language: 'c',
)
if get_option('buildtype').startswith('debug')
add_project_arguments('-DDEBUG', language : 'c')
endif
wlroots = dependency('wlroots')
wayland_protos = dependency('wayland-protocols', version: '>=1.14')
wayland_server = dependency('wayland-server')
xkbcommon = dependency('xkbcommon')
wl_protocol_dir = wayland_protos.get_pkgconfig_variable('pkgdatadir')
wayland_scanner = find_program('wayland-scanner')
wayland_scanner_server = generator(
wayland_scanner,
output: '@BASENAME@-protocol.h',
arguments: ['server-header', '@INPUT@', '@OUTPUT@'],
)
server_protocols = [
[wl_protocol_dir, 'stable/xdg-shell/xdg-shell.xml'],
]
server_protos_headers = []
foreach p : server_protocols
xml = join_paths(p)
server_protos_headers += wayland_scanner_server.process(xml)
endforeach
server_protos = declare_dependency(
sources: server_protos_headers,
)
cage_sources = [
'cage.c'
]
executable(
meson.project_name(),
cage_sources,
dependencies: [
server_protos,
wayland_server,
wlroots,
xkbcommon,
],
install: true,
)