From 69b0ce2a2e45bb3e55347125fcd5b640cb7834f3 Mon Sep 17 00:00:00 2001 From: sewn Date: Tue, 6 Aug 2024 00:37:43 +0300 Subject: [PATCH] add meson --- .gitignore | 5 +-- Makefile | 78 ---------------------------------- meson.build | 91 ++++++++++++++++++++++++++++++++++++++++ subprojects/wlroots.wrap | 5 +++ 4 files changed, 97 insertions(+), 82 deletions(-) delete mode 100644 Makefile create mode 100644 meson.build create mode 100644 subprojects/wlroots.wrap diff --git a/.gitignore b/.gitignore index 0dde90e..861ff45 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -dwl -*.o -*-protocol.c -*-protocol.h .ccls-cache config.h +subprojects/wlroots diff --git a/Makefile b/Makefile deleted file mode 100644 index f955e7b..0000000 --- a/Makefile +++ /dev/null @@ -1,78 +0,0 @@ -.POSIX: -.SUFFIXES: - -include config.mk - -# flags for compiling -DWLCPPFLAGS = -I. -DWLR_USE_UNSTABLE -D_POSIX_C_SOURCE=200809L \ - -DVERSION=\"$(VERSION)\" $(XWAYLAND) -DWLDEVCFLAGS = -g -pedantic -Wall -Wextra -Wdeclaration-after-statement \ - -Wno-unused-parameter -Wshadow -Wunused-macros -Werror=strict-prototypes \ - -Werror=implicit -Werror=return-type -Werror=incompatible-pointer-types \ - -Wfloat-conversion - -# CFLAGS / LDFLAGS -PKGS = wlroots-0.19 wayland-server xkbcommon libinput $(XLIBS) -DWLCFLAGS = `$(PKG_CONFIG) --cflags $(PKGS)` $(DWLCPPFLAGS) $(DWLDEVCFLAGS) $(CFLAGS) -LDLIBS = `$(PKG_CONFIG) --libs $(PKGS)` -lm $(LIBS) - -all: dwl -dwl: dwl.o util.o - $(CC) dwl.o util.o $(DWLCFLAGS) $(LDFLAGS) $(LDLIBS) -o $@ -dwl.o: dwl.c client.h config.h config.mk cursor-shape-v1-protocol.h \ - pointer-constraints-unstable-v1-protocol.h wlr-layer-shell-unstable-v1-protocol.h \ - wlr-output-power-management-unstable-v1-protocol.h xdg-shell-protocol.h -util.o: util.c util.h - -# 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. -WAYLAND_SCANNER = `$(PKG_CONFIG) --variable=wayland_scanner wayland-scanner` -WAYLAND_PROTOCOLS = `$(PKG_CONFIG) --variable=pkgdatadir wayland-protocols` - -cursor-shape-v1-protocol.h: - $(WAYLAND_SCANNER) enum-header \ - $(WAYLAND_PROTOCOLS)/staging/cursor-shape/cursor-shape-v1.xml $@ -pointer-constraints-unstable-v1-protocol.h: - $(WAYLAND_SCANNER) enum-header \ - $(WAYLAND_PROTOCOLS)/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml $@ -wlr-layer-shell-unstable-v1-protocol.h: - $(WAYLAND_SCANNER) enum-header \ - protocols/wlr-layer-shell-unstable-v1.xml $@ -wlr-output-power-management-unstable-v1-protocol.h: - $(WAYLAND_SCANNER) server-header \ - protocols/wlr-output-power-management-unstable-v1.xml $@ -xdg-shell-protocol.h: - $(WAYLAND_SCANNER) server-header \ - $(WAYLAND_PROTOCOLS)/stable/xdg-shell/xdg-shell.xml $@ - -config.h: - cp config.def.h $@ -clean: - rm -f dwl *.o *-protocol.h - -dist: clean - mkdir -p dwl-$(VERSION) - cp -R LICENSE* Makefile CHANGELOG.md README.md client.h config.def.h \ - config.mk protocols dwl.1 dwl.c util.c util.h dwl.desktop \ - dwl-$(VERSION) - tar -caf dwl-$(VERSION).tar.gz dwl-$(VERSION) - rm -rf dwl-$(VERSION) - -install: dwl - mkdir -p $(DESTDIR)$(PREFIX)/bin - cp -f dwl $(DESTDIR)$(PREFIX)/bin - chmod 755 $(DESTDIR)$(PREFIX)/bin/dwl - mkdir -p $(DESTDIR)$(MANDIR)/man1 - cp -f dwl.1 $(DESTDIR)$(MANDIR)/man1 - chmod 644 $(DESTDIR)$(MANDIR)/man1/dwl.1 - mkdir -p $(DESTDIR)$(DATADIR)/wayland-sessions - cp -f dwl.desktop $(DESTDIR)$(DATADIR)/wayland-sessions/dwl.desktop - chmod 644 $(DESTDIR)$(DATADIR)/wayland-sessions/dwl.desktop -uninstall: - rm -f $(DESTDIR)$(PREFIX)/bin/dwl $(DESTDIR)$(MANDIR)/man1/dwl.1 \ - $(DESTDIR)$(DATADIR)/wayland-sessions/dwl.desktop - -.SUFFIXES: .c .o -.c.o: - $(CC) $(CPPFLAGS) $(DWLCFLAGS) -o $@ -c $< diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..d533eea --- /dev/null +++ b/meson.build @@ -0,0 +1,91 @@ +project( + 'dwl', + 'c', + version: run_command('git', 'describe', '--tags', '--dirty').stdout().strip(), + license: [ 'GPL-3.0-only', 'CC0-1.0', 'MIT' ], + meson_version: '>=1.3', + default_options: [ + 'c_std=c99', + 'warning_level=2', + ], +) + +configure_file( + input: 'config.def.h', + output: 'config.h', + copy: true, + install_dir: '.', +) + +cc = meson.get_compiler('c') + +add_project_arguments([ + '-DWLR_USE_UNSTABLE', + '-D_POSIX_C_SOURCE=200809L', + '-DVERSION="@0@"'.format(meson.project_version()), + + '-Wno-unused-parameter', +], language: 'c') + +wlroots = subproject('wlroots', + default_options: [ + 'default_library=static', + 'examples=false', + ], +) +wlroots_has_xwlr = wlroots.get_variable('features').get('xwayland') + +libinput = dependency('libinput') +math = cc.find_library('m') +wayland_server = dependency('wayland-server') +xcb = dependency('xcb', required: wlroots_has_xwlr) +xcb_icccm = dependency('xcb-icccm', required: wlroots_has_xwlr) +xkbcommon = dependency('xkbcommon') + +dwl_deps = [ + libinput, + math, + wayland_server, + wlroots.get_variable('wlroots'), + xkbcommon, +] + +if wlroots_has_xwlr + add_project_arguments('-DXWAYLAND', language: 'c') + dwl_deps += [ xcb, xcb_icccm ] +endif + +wayland_protos = dependency('wayland-protocols') +wayland_scanner = dependency('wayland-scanner') +wayland_protocol_dir = wayland_protos.get_variable('pkgdatadir') +wayland_scanner_prog = find_program( + wayland_scanner.get_variable('wayland_scanner'), + native: true, +) + +protocols = [ + wayland_protocol_dir / 'staging/cursor-shape/cursor-shape-v1.xml', + wayland_protocol_dir / 'unstable/pointer-constraints/pointer-constraints-unstable-v1.xml', + 'protocols/wlr-layer-shell-unstable-v1.xml', + 'protocols/wlr-output-power-management-unstable-v1.xml', + wayland_protocol_dir / 'stable/xdg-shell/xdg-shell.xml', +] +protocols_src = [] + +wayland_scanner_server = generator( + wayland_scanner_prog, + output: '@BASENAME@-protocol.h', + arguments: ['server-header', '@INPUT@', '@OUTPUT@'], +) + +foreach xml : protocols + protocols_src += wayland_scanner_server.process(xml) +endforeach + +executable( + 'dwl', + [ 'dwl.c', 'util.c', protocols_src ], + include_directories: [include_directories('.')], + dependencies: dwl_deps, + install: true, +) diff --git a/subprojects/wlroots.wrap b/subprojects/wlroots.wrap new file mode 100644 index 0000000..3d9cbfa --- /dev/null +++ b/subprojects/wlroots.wrap @@ -0,0 +1,5 @@ +[wrap-git] +url = https://gitlab.freedesktop.org/wlroots/wlroots.git +revision = master +depth = 1 +clone-recursive = true -- 2.46.0