diff --git a/.gitignore b/.gitignore index c8ac764..693ec29 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,9 @@ /.cache /.vscode config.h +maomao +maomao.o +util.o +*-protocol.h +*-protocol.c +*-protocol.o diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..94c6f19 --- /dev/null +++ b/Makefile @@ -0,0 +1,89 @@ +.POSIX: +.SUFFIXES: + +include config.mk + +# flags for compiling +MAOMAOCPPFLAGS = -I. -DIM -DWLR_USE_UNSTABLE -D_POSIX_C_SOURCE=200809L \ + -DVERSION=\"$(VERSION)\" $(XWAYLAND) +MAOMAODEVCFLAGS = -g -Wpedantic -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 -Wno-unused-function -Wno-declaration-after-statement \ + -Wno-sign-compare -Wno-float-conversion + +# CFLAGS / LDFLAGS +PKGS = wayland-server xkbcommon libinput $(XLIBS) +MAOMAOCFLAGS = `$(PKG_CONFIG) --cflags $(PKGS)` $(WLR_INCS) $(MAOMAOCPPFLAGS) $(MAOMAODEVCFLAGS) $(CFLAGS) +LDLIBS = `$(PKG_CONFIG) --libs $(PKGS)` $(WLR_LIBS) -lm $(LIBS) + +all: maomao +maomao: maomao.o util.o dwl-ipc-unstable-v2-protocol.o + $(CC) maomao.o util.o dwl-ipc-unstable-v2-protocol.o $(MAOMAOCFLAGS) $(LDFLAGS) $(LDLIBS) -o $@ +maomao.o: maomao.c IM.h client.h config.h config.mk cursor-shape-v1-protocol.h \ + pointer-constraints-unstable-v1-protocol.h wlr-layer-shell-unstable-v1-protocol.h \ + xdg-shell-protocol.h \ + wlr-foreign-toplevel-management-unstable-v1-protocol.h \ + dwl-ipc-unstable-v2-protocol.h +util.o: util.c util.h +dwl-ipc-unstable-v2-protocol.o: dwl-ipc-unstable-v2-protocol.c dwl-ipc-unstable-v2-protocol.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-foreign-toplevel-management-unstable-v1-protocol.h: + $(WAYLAND_SCANNER) server-header \ + protocols/wlr-foreign-toplevel-management-unstable-v1.xml $@ +dwl-ipc-unstable-v2-protocol.h: + $(WAYLAND_SCANNER) server-header \ + protocols/dwl-ipc-unstable-v2.xml $@ +xdg-shell-protocol.h: + $(WAYLAND_SCANNER) server-header \ + $(WAYLAND_PROTOCOLS)/stable/xdg-shell/xdg-shell.xml $@ + +dwl-ipc-unstable-v2-protocol.c: + $(WAYLAND_SCANNER) private-code \ + protocols/dwl-ipc-unstable-v2.xml $@ + +config.h: + cp config.def.h $@ +clean: + rm -f maomao *.o *-protocol.h *-protocol.c + +dist: clean + mkdir -p maomao-$(VERSION) + cp -R LICENSE* Makefile CHANGELOG.md README.md client.h config.def.h \ + config.mk protocols maomao.c util.c util.h maomao.desktop \ + maomao-$(VERSION) + tar -caf maomao-$(VERSION).tar.gz maomao-$(VERSION) + rm -rf maomao-$(VERSION) + +install: maomao + mkdir -p $(DESTDIR)$(PREFIX)/bin + rm -f $(DESTDIR)$(PREFIX)/bin/maomao + cp -f maomao $(DESTDIR)$(PREFIX)/bin + chmod 755 $(DESTDIR)$(PREFIX)/bin/maomao + mkdir -p $(DESTDIR)$(MANDIR)/man1 + mkdir -p $(DESTDIR)$(DATADIR)/wayland-sessions + cp -f maomao.desktop $(DESTDIR)$(DATADIR)/wayland-sessions/maomao.desktop + chmod 644 $(DESTDIR)$(DATADIR)/wayland-sessions/maomao.desktop + rm -f maomao *.o *-protocol.h *-protocol.c +uninstall: + rm -f $(DESTDIR)$(PREFIX)/bin/maomao \ + $(DESTDIR)$(DATADIR)/wayland-sessions/maomao.desktop + +.SUFFIXES: .c .o +.c.o: + $(CC) $(CPPFLAGS) $(MAOMAOCFLAGS) -o $@ -c $< diff --git a/config.def.h b/config.def.h index 51cfb56..cb5103b 100644 --- a/config.def.h +++ b/config.def.h @@ -101,7 +101,7 @@ static const Rule rules[] = { }; /* layout(s) */ -static const Layout overviewlayout = { "󰃇", overview }; +static const Layout overviewlayout = { "󰃇", overview, "ovgrid" }; static const Layout layouts[] = { // At least two layouts, cannot delete less than two /* symbol arrange function */ diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..f5a0b84 --- /dev/null +++ b/config.mk @@ -0,0 +1,36 @@ +_VERSION = 0.8-dev +VERSION = `git describe --tags --dirty 2>/dev/null || echo $(_VERSION)` + +PKG_CONFIG = pkg-config + +# paths +PREFIX = /usr/local +MANDIR = $(PREFIX)/share/man +DATADIR = $(PREFIX)/share + +WLR_INCS = `$(PKG_CONFIG) --cflags wlroots` +WLR_LIBS = `$(PKG_CONFIG) --libs wlroots` + +# Allow using an alternative wlroots installations +# This has to have all the includes required by wlroots, e.g: +# Assuming wlroots git repo is "${PWD}/wlroots" and you only ran "meson setup build && ninja -C build" +#WLR_INCS = -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/libdrm \ +# -I$(PWD)/wlroots/include +# Set -rpath to avoid using the wrong library. +#WLR_LIBS = -Wl,-rpath,$(PWD)/wlroots/build -L$(PWD)/wlroots/build -lwlroots-0.19 + +# Assuming you ran "meson setup --prefix ${PWD}/0.19 build && ninja -C build install" +#WLR_INCS = -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/libdrm \ +# -I$(PWD)/wlroots/0.19/include/wlroots-0.19 +#WLR_LIBS = -Wl,-rpath,$(PWD)/wlroots/0.19/lib64 -L$(PWD)/wlroots/0.19/lib64 -lwlroots-0.19 + +# XWAYLAND = +# XLIBS = +# Uncomment to build XWayland support +XWAYLAND = -DXWAYLAND +XLIBS = xcb xcb-icccm + +# maomao itself only uses C99 features, but wlroots' headers use anonymous unions (C11). +# To avoid warnings about them, we do not use -std=c99 and instead of using the +# gmake default 'CC=c99', we use cc. +CC = cc