From 92167bff9e9cb9ab904dc6b24bc79ab87a0cfa5c Mon Sep 17 00:00:00 2001 From: Emile Clark-Boman Date: Tue, 26 Aug 2025 15:45:07 +1000 Subject: [PATCH] gmake supports restructed directories --- Makefile | 57 +++++++++++++++++++++++++++++++++++-------------------- config.mk | 4 ++++ 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 578194f..ac37303 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,11 @@ .POSIX: .SUFFIXES: +.DEFAULT_GOAL := all include config.mk # flags for compiling -DWLCPPFLAGS = -I. -DWLR_USE_UNSTABLE -D_POSIX_C_SOURCE=200809L \ +DWLCPPFLAGS = -Ibuild -DWLR_USE_UNSTABLE -D_POSIX_C_SOURCE=200809L \ -DVERSION=\"$(VERSION)\" $(XWAYLAND) DWLDEVCFLAGS = -g -Wpedantic -Wall -Wextra -Wdeclaration-after-statement \ -Wno-unused-parameter -Wshadow -Wunused-macros -Werror=strict-prototypes \ @@ -16,13 +17,28 @@ PKGS = wayland-server xkbcommon libinput $(XLIBS) DWLCFLAGS = `$(PKG_CONFIG) --cflags $(PKGS)` $(WLR_INCS) $(DWLCPPFLAGS) $(DWLDEVCFLAGS) $(CFLAGS) LDLIBS = `$(PKG_CONFIG) --libs $(PKGS)` $(WLR_LIBS) -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 \ +# macros to relevant path definitions +define mkbin +$(addprefix $(BIN)/,$1) +endef +define mkbuild +$(addprefix $(BUILD)/,$1) +endef +define mksrc +$(addprefix $(SRC)/,$1) +endef + +.PHONY: setup +setup: + mkdir -p $(BIN) $(BUILD) + +all: setup $(call mkbin,dwl) +$(BIN)/dwl: $(call mkbuild,dwl.o util.o) + $(CC) $^ $(DWLCFLAGS) $(LDFLAGS) $(LDLIBS) -o $@ +$(BUILD)/dwl.o: $(call mksrc,dwl.c client.h) config.mk $(call mkbuild,config.h 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 + wlr-output-power-management-unstable-v1-protocol.h xdg-shell-protocol.h) +$(BUILD)/util.o: $(call mksrc,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 @@ -30,39 +46,39 @@ util.o: util.c util.h WAYLAND_SCANNER = `$(PKG_CONFIG) --variable=wayland_scanner wayland-scanner` WAYLAND_PROTOCOLS = `$(PKG_CONFIG) --variable=pkgdatadir wayland-protocols` -cursor-shape-v1-protocol.h: +$(BUILD)/cursor-shape-v1-protocol.h: $(WAYLAND_SCANNER) enum-header \ $(WAYLAND_PROTOCOLS)/staging/cursor-shape/cursor-shape-v1.xml $@ -pointer-constraints-unstable-v1-protocol.h: +$(BUILD)/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: +$(BUILD)/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: +$(BUILD)/wlr-output-power-management-unstable-v1-protocol.h: $(WAYLAND_SCANNER) server-header \ protocols/wlr-output-power-management-unstable-v1.xml $@ -xdg-shell-protocol.h: +$(BUILD)/xdg-shell-protocol.h: $(WAYLAND_SCANNER) server-header \ $(WAYLAND_PROTOCOLS)/stable/xdg-shell/xdg-shell.xml $@ -config.h: - cp config.def.h $@ +$(BUILD)/config.h: + cp $(SRC)/config.def.h $@ clean: - rm -f dwl *.o *-protocol.h + rm -rf $(BUILD) $(BIN) 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 \ + cp -R LICENSE Makefile CHANGELOG.md README.md src \ + config.mk protocols dwl.1 dwl.desktop \ dwl-$(VERSION) tar -caf dwl-$(VERSION).tar.gz dwl-$(VERSION) rm -rf dwl-$(VERSION) -install: dwl +install: $(BIN)/dwl mkdir -p $(DESTDIR)$(PREFIX)/bin rm -f $(DESTDIR)$(PREFIX)/bin/dwl - cp -f dwl $(DESTDIR)$(PREFIX)/bin + cp -f $(BIN)/dwl $(DESTDIR)$(PREFIX)/bin chmod 755 $(DESTDIR)$(PREFIX)/bin/dwl mkdir -p $(DESTDIR)$(MANDIR)/man1 cp -f dwl.1 $(DESTDIR)$(MANDIR)/man1 @@ -74,6 +90,5 @@ uninstall: rm -f $(DESTDIR)$(PREFIX)/bin/dwl $(DESTDIR)$(MANDIR)/man1/dwl.1 \ $(DESTDIR)$(DATADIR)/wayland-sessions/dwl.desktop -.SUFFIXES: .c .o -.c.o: +%.c %.o: $(CC) $(CPPFLAGS) $(DWLCFLAGS) -o $@ -c $< diff --git a/config.mk b/config.mk index eb08a05..c58e660 100644 --- a/config.mk +++ b/config.mk @@ -8,6 +8,10 @@ PREFIX = /usr/local MANDIR = $(PREFIX)/share/man DATADIR = $(PREFIX)/share +SRC = src +BUILD = build +BIN = bin + WLR_INCS = `$(PKG_CONFIG) --cflags wlroots-0.19` WLR_LIBS = `$(PKG_CONFIG) --libs wlroots-0.19`