1PREFIX       ?= /usr/local
2BINDIR       ?= $(PREFIX)/bin
3LIBDIR       ?= $(PREFIX)/lib
4SYSCONFDIR   ?= $(PREFIX)/etc
5DATAROOTDIR  ?= $(PREFIX)/share
6MANDIR       ?= $(DATAROOTDIR)/man
7DOCDIR       ?= $(DATAROOTDIR)/doc/spectrwm
8XSESSIONSDIR ?= $(DATAROOTDIR)/xsessions
9PKG_CONFIG   ?= pkg-config
10
11BUILDVERSION    = $(shell sh $(CURDIR)/../buildver.sh)
12LIBVERSION      = $(shell .  $(CURDIR)/../lib/shlib_version; echo $$major.$$minor)
13LIBMAJORVERSION = $(shell .  $(CURDIR)/../lib/shlib_version; echo $$major)
14
15MAINT_CFLAGS   = -std=c99 -Wmissing-prototypes -Wall -Wextra -Wshadow -Wno-uninitialized -g
16MAINT_LDFLAGS  = -Wl,--as-needed
17MAINT_CPPFLAGS = -I. -D_GNU_SOURCE -DSWM_LIB=\"$(LIBDIR)/libswmhack.so.$(LIBVERSION)\"
18
19ifneq ("${BUILDVERSION}", "")
20MAINT_CPPFLAGS += -DSPECTRWM_BUILDSTR=\"$(BUILDVERSION)\"
21endif
22
23BIN_CFLAGS   = -fPIE
24BIN_LDFLAGS  = -fPIE -pie
25BIN_CPPFLAGS = $(shell $(PKG_CONFIG) --cflags x11 x11-xcb xcb-icccm xcb-keysyms xcb-randr xcb-util xcb-xinput xcb-xtest xcursor xft)
26BIN_LDLIBS   = $(shell $(PKG_CONFIG) --libs   x11 x11-xcb xcb-icccm xcb-keysyms xcb-randr xcb-util xcb-xinput xcb-xtest xcursor xft)
27LIB_CFLAGS   = -fPIC
28LIB_LDFLAGS  = -fPIC -shared
29LIB_CPPFLAGS = $(shell $(PKG_CONFIG) --cflags x11)
30LIB_LDLIBS   = $(shell $(PKG_CONFIG) --libs   x11) -ldl
31
32all: spectrwm libswmhack.so.$(LIBVERSION)
33
34spectrwm: spectrwm.o linux.o
35	$(CC) $(MAINT_LDFLAGS) $(BIN_LDFLAGS) $(LDFLAGS) -o $@ $+ $(BIN_LDLIBS) $(LDLIBS)
36
37spectrwm.o: ../spectrwm.c ../version.h tree.h util.h
38	$(CC) $(MAINT_CFLAGS) $(BIN_CFLAGS) $(CFLAGS) $(MAINT_CPPFLAGS) $(BIN_CPPFLAGS) $(CPPFLAGS) -c -o $@ $<
39
40linux.o: linux.c util.h
41	$(CC) $(MAINT_CFLAGS) $(BIN_CFLAGS) $(CFLAGS) $(MAINT_CPPFLAGS) $(BIN_CPPFLAGS) $(CPPFLAGS) -c -o $@ $<
42
43libswmhack.so.$(LIBVERSION): swm_hack.so
44	$(CC) $(MAINT_LDFLAGS) $(LIB_LDFLAGS) $(LDFLAGS) -Wl,-soname,$@ -o $@ $+ $(LIB_LDLIBS) $(LDLIBS)
45
46swm_hack.so: ../lib/swm_hack.c
47	$(CC) $(MAINT_CFLAGS) $(LIB_CFLAGS) $(CFLAGS) $(MAINT_CPPFLAGS) $(LIB_CPPFLAGS) $(CPPFLAGS) -c -o $@ $<
48
49clean:
50	rm -f spectrwm *.o libswmhack.so.* *.so
51
52install: all
53	install -m 755 -d $(DESTDIR)$(BINDIR)
54	install -m 755 -d $(DESTDIR)$(LIBDIR)
55	install -m 755 -d $(DESTDIR)$(SYSCONFDIR)
56	install -m 755 -d $(DESTDIR)$(MANDIR)/man1
57	install -m 755 -d $(DESTDIR)$(DOCDIR)
58	install -m 755 -d $(DESTDIR)$(DOCDIR)/examples
59	install -m 755 -d $(DESTDIR)$(XSESSIONSDIR)
60	install -m 755 spectrwm                    $(DESTDIR)$(BINDIR)
61	ln -sf spectrwm                            $(DESTDIR)$(BINDIR)/scrotwm
62	install -m 755 libswmhack.so.$(LIBVERSION) $(DESTDIR)$(LIBDIR)
63	ln -sf libswmhack.so.$(LIBVERSION)         $(DESTDIR)$(LIBDIR)/libswmhack.so.$(LIBMAJORVERSION)
64	ln -sf libswmhack.so.$(LIBVERSION)         $(DESTDIR)$(LIBDIR)/libswmhack.so
65	install -m 644 ../spectrwm.conf            $(DESTDIR)$(SYSCONFDIR)
66	install -m 644 ../spectrwm.1               $(DESTDIR)$(MANDIR)/man1
67	install -m 644 ../CHANGELOG.md             $(DESTDIR)$(DOCDIR)
68	install -m 644 ../LICENSE.md               $(DESTDIR)$(DOCDIR)
69	install -m 644 baraction.sh                $(DESTDIR)$(DOCDIR)/examples
70	install -m 644 ../initscreen.sh            $(DESTDIR)$(DOCDIR)/examples
71	install -m 644 ../screenshot.sh            $(DESTDIR)$(DOCDIR)/examples
72	install -m 644 ../spectrwm_*.conf          $(DESTDIR)$(DOCDIR)/examples
73	install -m 644 spectrwm.desktop            $(DESTDIR)$(XSESSIONSDIR)
74
75uninstall:
76	rm -f $(DESTDIR)$(BINDIR)/spectrwm
77	rm -f $(DESTDIR)$(BINDIR)/scrotwm
78	rm -f $(DESTDIR)$(LIBDIR)/libswmhack.so.$(LIBVERSION)
79	rm -f $(DESTDIR)$(LIBDIR)/libswmhack.so.$(LIBMAJORVERSION)
80	rm -f $(DESTDIR)$(LIBDIR)/libswmhack.so
81	rm -f $(DESTDIR)$(SYSCONFDIR)/spectrwm.conf
82	rm -f $(DESTDIR)$(MANDIR)/man1/spectrwm.1
83	rm -f $(DESTDIR)$(DOCDIR)/CHANGELOG.md
84	rm -f $(DESTDIR)$(DOCDIR)/LICENSE.md
85	rm -f $(DESTDIR)$(DOCDIR)/examples/baraction.sh
86	rm -f $(DESTDIR)$(DOCDIR)/examples/initscreen.sh
87	rm -f $(DESTDIR)$(DOCDIR)/examples/screenshot.sh
88	rm -f $(DESTDIR)$(DOCDIR)/examples/spectrwm_*.conf
89	rm -f $(DESTDIR)$(XSESSIONSDIR)/spectrwm.desktop
90
91.PHONY: all clean install uninstall
92