protocols/
test/
.clang-format
571 B
.clangd
365 B
.gitignore
82 B
.gitsigners
91 B
LICENSE
32.3 KiB
LICENSE.dwl
34.9 KiB
LICENSE.dwm
2.0 KiB
LICENSE.spectrwm
1.3 KiB
LICENSE.sway
1.0 KiB
LICENSE.tinywl
7.0 KiB
Makefile
7.8 KiB
PKGBUILD
952 B
README
5.6 KiB
config.def.h
15.7 KiB
config.mk
269 B
swm.1.adoc
3.3 KiB
swm.c
246.5 KiB
swm.desktop
81 B
swm.h
3.5 KiB
swmctl.1.adoc
2.5 KiB
swmctl.c
19.6 KiB
util.c
2.2 KiB
util.h
399 B
Makefile
raw
| 1 | include config.mk |
| 2 | |
| 3 | PKGS = wayland-server xkbcommon libinput xcb xcb-icccm |
| 4 | |
| 5 | CPPFLAGS += -I. -DWLR_USE_UNSTABLE -D_POSIX_C_SOURCE=200809L \ |
| 6 | -DVERSION=\"$(VERSION)\" \ |
| 7 | `$(PKG_CONFIG) --cflags $(PKGS)` $(WLR_INCS) |
| 8 | CFLAGS := -fvisibility=hidden -std=c23 -Os \ |
| 9 | -Wall -Wextra -Wpedantic \ |
| 10 | -Wformat=2 -Wformat-security \ |
| 11 | -Wnull-dereference -Wno-format-nonliteral \ |
| 12 | -Wunused -Wuninitialized -Wmissing-field-initializers \ |
| 13 | -Wdeclaration-after-statement -Wno-unused-parameter \ |
| 14 | -Wshadow -Wunused-macros \ |
| 15 | -Werror=strict-prototypes -Werror=implicit -Werror=return-type \ |
| 16 | -Werror=incompatible-pointer-types -Wfloat-conversion \ |
| 17 | -fno-common -fstack-protector-all -mcmodel=medium |
| 18 | LDFLAGS := -fuse-ld=lld |
| 19 | LDLIBS := `$(PKG_CONFIG) --libs $(PKGS)` $(WLR_LIBS) -lm $(LIBS) |
| 20 | |
| 21 | # swmctl |
| 22 | CTL_PKGS = wayland-client |
| 23 | CTL_CPPFLAGS := `$(PKG_CONFIG) --cflags $(CTL_PKGS)` |
| 24 | CTL_LDLIBS := `$(PKG_CONFIG) --libs $(CTL_PKGS)` |
| 25 | |
| 26 | SRC := swm.c util.c ext-workspace-v1-protocol.c swm-toplevel-v1-protocol.c \ |
| 27 | swm-workspace-v1-protocol.c |
| 28 | OBJ := $(SRC:.c=.o) |
| 29 | PROTO := \ |
| 30 | cursor-shape-v1-protocol.h \ |
| 31 | ext-workspace-v1-protocol.h \ |
| 32 | pointer-constraints-unstable-v1-protocol.h \ |
| 33 | wlr-layer-shell-unstable-v1-protocol.h \ |
| 34 | wlr-output-power-management-unstable-v1-protocol.h \ |
| 35 | swm-workspace-v1-protocol.h \ |
| 36 | swm-toplevel-v1-protocol.h \ |
| 37 | xdg-shell-protocol.h |
| 38 | HDRS := config.h swm.h util.h $(PROTO) |
| 39 | |
| 40 | WL_SCANNER := $(shell $(PKG_CONFIG) --variable=wayland_scanner wayland-scanner) |
| 41 | WL_PROTO := $(shell $(PKG_CONFIG) --variable=pkgdatadir wayland-protocols) |
| 42 | |
| 43 | TEST_BUILD ?= test/.build |
| 44 | TEST_SRC := $(TEST_BUILD)/source |
| 45 | TEST_BIN := $(TEST_BUILD)/bin |
| 46 | TEST_CPPFLAGS := -I$(TEST_SRC) $(CPPFLAGS) |
| 47 | TEST_CFLAGS := -std=c23 -g -O0 \ |
| 48 | -Wno-unused-function -Wno-unused-variable -Wno-unused-parameter |
| 49 | |
| 50 | ifeq ($(TEST_COVERAGE),1) |
| 51 | TEST_CFLAGS += -fprofile-instr-generate -fcoverage-mapping |
| 52 | endif |
| 53 | |
| 54 | all: man swm swmctl |
| 55 | |
| 56 | man: swm.1 swmctl.1 |
| 57 | |
| 58 | swm.1: swm.1.adoc |
| 59 | @echo "man $< => $@" |
| 60 | @asciidoctor -b manpage -o $@ $< |
| 61 | |
| 62 | swmctl.1: swmctl.1.adoc |
| 63 | @echo "man $< => $@" |
| 64 | @asciidoctor -b manpage -o $@ $< |
| 65 | |
| 66 | swm: $(OBJ) |
| 67 | @echo "ld $^ => $@" |
| 68 | @$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@ |
| 69 | @echo "ok $@" |
| 70 | |
| 71 | swmctl: swmctl.o ext-foreign-toplevel-list-v1-protocol.o \ |
| 72 | swm-toplevel-v1-protocol.o swm-workspace-v1-protocol.o |
| 73 | @echo "ld $^ => $@" |
| 74 | @$(CC) $(LDFLAGS) $^ $(CTL_LDLIBS) -o $@ |
| 75 | @echo "ok $@" |
| 76 | |
| 77 | swmctl.o: swmctl.c ext-foreign-toplevel-list-v1-client-protocol.h \ |
| 78 | swm-toplevel-v1-client-protocol.h swm-workspace-v1-client-protocol.h \ |
| 79 | Makefile config.mk |
| 80 | @echo "cc $< => $@" |
| 81 | @$(CC) $(CTL_CPPFLAGS) $(CFLAGS) -c $< -o $@ |
| 82 | |
| 83 | $(OBJ): Makefile config.mk |
| 84 | |
| 85 | %.o: %.c $(HDRS) |
| 86 | @echo "cc $< => $@" |
| 87 | @$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ |
| 88 | |
| 89 | cursor-shape-v1-protocol.h: \ |
| 90 | $(WL_PROTO)/staging/cursor-shape/cursor-shape-v1.xml |
| 91 | @echo "hdr $@" |
| 92 | @$(WL_SCANNER) enum-header $< $@ |
| 93 | ext-workspace-v1-protocol.h: \ |
| 94 | $(WL_PROTO)/staging/ext-workspace/ext-workspace-v1.xml |
| 95 | @echo "hdr $@" |
| 96 | @$(WL_SCANNER) server-header $< $@ |
| 97 | ext-workspace-v1-protocol.c: \ |
| 98 | $(WL_PROTO)/staging/ext-workspace/ext-workspace-v1.xml |
| 99 | @echo "hdr $@" |
| 100 | @$(WL_SCANNER) private-code $< $@ |
| 101 | ext-foreign-toplevel-list-v1-client-protocol.h: \ |
| 102 | $(WL_PROTO)/staging/ext-foreign-toplevel-list/ext-foreign-toplevel-list-v1.xml |
| 103 | @echo "hdr $@" |
| 104 | @$(WL_SCANNER) client-header $< $@ |
| 105 | ext-foreign-toplevel-list-v1-protocol.c: \ |
| 106 | $(WL_PROTO)/staging/ext-foreign-toplevel-list/ext-foreign-toplevel-list-v1.xml |
| 107 | @echo "src $@" |
| 108 | @$(WL_SCANNER) private-code $< $@ |
| 109 | swm-toplevel-v1-protocol.h: protocols/swm-toplevel-v1.xml |
| 110 | @echo "hdr $@" |
| 111 | @$(WL_SCANNER) server-header $< $@ |
| 112 | swm-toplevel-v1-client-protocol.h: protocols/swm-toplevel-v1.xml |
| 113 | @echo "hdr $@" |
| 114 | @$(WL_SCANNER) client-header $< $@ |
| 115 | swm-toplevel-v1-protocol.c: protocols/swm-toplevel-v1.xml |
| 116 | @echo "src $@" |
| 117 | @$(WL_SCANNER) private-code $< $@ |
| 118 | swm-workspace-v1-protocol.h: protocols/swm-workspace-v1.xml |
| 119 | @echo "hdr $@" |
| 120 | @$(WL_SCANNER) server-header $< $@ |
| 121 | swm-workspace-v1-client-protocol.h: protocols/swm-workspace-v1.xml |
| 122 | @echo "hdr $@" |
| 123 | @$(WL_SCANNER) client-header $< $@ |
| 124 | swm-workspace-v1-protocol.c: protocols/swm-workspace-v1.xml |
| 125 | @echo "src $@" |
| 126 | @$(WL_SCANNER) private-code $< $@ |
| 127 | pointer-constraints-unstable-v1-protocol.h: \ |
| 128 | $(WL_PROTO)/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml |
| 129 | @echo "hdr $@" |
| 130 | @$(WL_SCANNER) enum-header $< $@ |
| 131 | wlr-layer-shell-unstable-v1-protocol.h: \ |
| 132 | protocols/wlr-layer-shell-unstable-v1.xml |
| 133 | @echo "hdr $@" |
| 134 | @$(WL_SCANNER) enum-header $< $@ |
| 135 | wlr-output-power-management-unstable-v1-protocol.h: \ |
| 136 | protocols/wlr-output-power-management-unstable-v1.xml |
| 137 | @echo "hdr $@" |
| 138 | @$(WL_SCANNER) server-header $< $@ |
| 139 | xdg-shell-protocol.h: \ |
| 140 | $(WL_PROTO)/stable/xdg-shell/xdg-shell.xml |
| 141 | @echo "hdr $@" |
| 142 | @$(WL_SCANNER) server-header $< $@ |
| 143 | |
| 144 | config.h: |
| 145 | @test -e $@ || cp config.def.h $@ |
| 146 | |
| 147 | fmt: |
| 148 | git ls-files "*.c" "*.h" | xargs clang-format -i |
| 149 | |
| 150 | install: swm swmctl swm.1 swmctl.1 |
| 151 | install -Dm755 swm $(DESTDIR)$(PREFIX)/bin/swm |
| 152 | install -Dm755 swmctl $(DESTDIR)$(PREFIX)/bin/swmctl |
| 153 | install -Dm644 swm.1 $(DESTDIR)$(MANDIR)/man1/swm.1 |
| 154 | install -Dm644 swmctl.1 $(DESTDIR)$(MANDIR)/man1/swmctl.1 |
| 155 | @test -e $(DESTDIR)$(DATADIR)/wayland-sessions/swm.desktop || \ |
| 156 | install -Dm644 swm.desktop \ |
| 157 | $(DESTDIR)$(DATADIR)/wayland-sessions/swm.desktop |
| 158 | |
| 159 | uninstall: |
| 160 | rm -f $(DESTDIR)$(PREFIX)/bin/swm |
| 161 | rm -f $(DESTDIR)$(PREFIX)/bin/swmctl |
| 162 | rm -f $(DESTDIR)$(MANDIR)/man1/swm.1 |
| 163 | rm -f $(DESTDIR)$(MANDIR)/man1/swmctl.1 |
| 164 | rm -f $(DESTDIR)$(DATADIR)/wayland-sessions/swm.desktop |
| 165 | |
| 166 | archive: |
| 167 | git archive --format=tar.gz --prefix=swm/ -o swm.tar.gz HEAD |
| 168 | |
| 169 | package: PKGBUILD |
| 170 | makepkg --force |
| 171 | |
| 172 | clean: |
| 173 | rm -f swm swmctl swm.1 swmctl.1 *.o *-protocol.h *-protocol.c |
| 174 | |
| 175 | $(TEST_SRC) $(TEST_BIN): |
| 176 | @mkdir -p $@ |
| 177 | |
| 178 | $(TEST_SRC)/swm.c: swm.c | $(TEST_SRC) |
| 179 | @cp -p $< $@ |
| 180 | |
| 181 | $(TEST_SRC)/config.h: config.def.h | $(TEST_SRC) |
| 182 | @cp -p $< $@ |
| 183 | |
| 184 | TEST_COMMON := Makefile config.mk $(TEST_SRC)/swm.c $(TEST_SRC)/config.h \ |
| 185 | swm.h util.c util.h $(PROTO) ext-workspace-v1-protocol.c \ |
| 186 | swm-toplevel-v1-protocol.c swm-workspace-v1-protocol.c |
| 187 | |
| 188 | $(TEST_BIN)/unit: test/unit.c $(TEST_COMMON) | $(TEST_BIN) |
| 189 | @echo "cc test/unit.c => $@" |
| 190 | @$(CC) $(TEST_CPPFLAGS) $(TEST_CFLAGS) test/unit.c util.c \ |
| 191 | ext-workspace-v1-protocol.c swm-toplevel-v1-protocol.c \ |
| 192 | swm-workspace-v1-protocol.c $(LDLIBS) -o $@ |
| 193 | |
| 194 | $(TEST_BIN)/swm: $(TEST_COMMON) | $(TEST_BIN) |
| 195 | @echo "cc swm.c => $@" |
| 196 | @$(CC) $(TEST_CPPFLAGS) $(TEST_CFLAGS) $(TEST_SRC)/swm.c util.c \ |
| 197 | ext-workspace-v1-protocol.c swm-toplevel-v1-protocol.c \ |
| 198 | swm-workspace-v1-protocol.c $(LDLIBS) -o $@ |
| 199 | |
| 200 | $(TEST_BIN)/swmctl: swmctl.c ext-foreign-toplevel-list-v1-client-protocol.h \ |
| 201 | swm-toplevel-v1-client-protocol.h swm-workspace-v1-client-protocol.h \ |
| 202 | ext-foreign-toplevel-list-v1-protocol.c swm-toplevel-v1-protocol.c \ |
| 203 | swm-workspace-v1-protocol.c | $(TEST_BIN) |
| 204 | @echo "cc swmctl.c => $@" |
| 205 | @$(CC) $(CTL_CPPFLAGS) $(TEST_CFLAGS) swmctl.c \ |
| 206 | ext-foreign-toplevel-list-v1-protocol.c swm-toplevel-v1-protocol.c \ |
| 207 | swm-workspace-v1-protocol.c $(CTL_LDLIBS) -o $@ |
| 208 | |
| 209 | test-build: $(TEST_BIN)/unit $(TEST_BIN)/swm $(TEST_BIN)/swmctl |
| 210 | |
| 211 | test: test-build |
| 212 | @SWM_TEST_BUILD=$(abspath $(TEST_BUILD)) PKG_CONFIG=$(PKG_CONFIG) $(PYTHON) test/run.py |
| 213 | |
| 214 | test-unit: $(TEST_BIN)/unit |
| 215 | @SWM_TEST_BUILD=$(abspath $(TEST_BUILD)) PKG_CONFIG=$(PKG_CONFIG) $(PYTHON) test/run.py unit |
| 216 | |
| 217 | test-integration: $(TEST_BIN)/swm $(TEST_BIN)/swmctl |
| 218 | @SWM_TEST_BUILD=$(abspath $(TEST_BUILD)) PKG_CONFIG=$(PKG_CONFIG) $(PYTHON) test/run.py integration |
| 219 | |
| 220 | coverage: |
| 221 | @$(MAKE) --no-print-directory TEST_BUILD=$(TEST_BUILD)/coverage TEST_COVERAGE=1 test-build |
| 222 | @SWM_TEST_BUILD=$(abspath $(TEST_BUILD)/coverage) PKG_CONFIG=$(PKG_CONFIG) \ |
| 223 | $(PYTHON) test/run.py coverage |
| 224 | |
| 225 | test-clean: |
| 226 | @SWM_TEST_BUILD=$(abspath $(TEST_BUILD)) $(PYTHON) test/run.py clean |
| 227 | |
| 228 | .PHONY: all man fmt install uninstall archive package clean coverage |
| 229 | .PHONY: test-build test test-unit test-integration test-clean |