spectrwm/linux/Makefile
Andrea Bolognani 092e5c269f linux: Enable PIE
PIE (position-independent executables) is a security feature
that has been made reasonably cheap by recent improvements in
GCC; as a result, more and more Linux distributions are pushing
for its adoption.

Unfortunately, PIE and PIC are not compatible, so we have to
manage the CFLAGS and LDFLAGS used to compile the library and
the executable indipendently.
2016-07-31 19:05:10 +02:00

71 lines
2.9 KiB
Makefile

PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
LIBDIR ?= $(PREFIX)/lib
DATAROOTDIR ?= $(PREFIX)/share
MANDIR ?= $(DATAROOTDIR)/man
XSESSIONSDIR ?= $(DATAROOTDIR)/xsessions
BUILDVERSION = $(shell sh $(CURDIR)/../buildver.sh)
LIBVERSION = $(shell . $(CURDIR)/../lib/shlib_version; echo $$major.$$minor)
LIBMAJORVERSION = $(shell . $(CURDIR)/../lib/shlib_version; echo $$major)
MAINT_CFLAGS = -std=c99 -Wmissing-prototypes -Wall -Wextra -Wshadow -Wno-uninitialized -g
MAINT_LDFLAGS = -Wl,--as-needed
MAINT_CPPFLAGS = -I. -D_GNU_SOURCE -DSWM_LIB=\"$(LIBDIR)/libswmhack.so.$(LIBVERSION)\"
ifneq ("${BUILDVERSION}", "")
MAINT_CPPFLAGS += -DSPECTRWM_BUILDSTR=\"$(BUILDVERSION)\"
endif
BIN_CFLAGS = -fPIE
BIN_LDFLAGS = -fPIE -pie
BIN_CPPFLAGS = $(shell pkg-config --cflags x11 x11-xcb xcb-icccm xcb-keysyms xcb-randr xcb-util xcb-xtest xcursor xft)
BIN_LDLIBS = $(shell pkg-config --libs x11 x11-xcb xcb-icccm xcb-keysyms xcb-randr xcb-util xcb-xtest xcursor xft)
LIB_CFLAGS = -fPIC
LIB_LDFLAGS = -fPIC -shared
LIB_CPPFLAGS = $(shell pkg-config --cflags x11)
LIB_LDLIBS = $(shell pkg-config --libs x11) -ldl
all: spectrwm libswmhack.so.$(LIBVERSION)
spectrwm: spectrwm.o linux.o
$(CC) $(MAINT_LDFLAGS) $(BIN_LDFLAGS) $(LDFLAGS) -o $@ $+ $(BIN_LDLIBS) $(LDLIBS)
spectrwm.o: ../spectrwm.c ../version.h tree.h util.h
$(CC) $(MAINT_CFLAGS) $(BIN_CFLAGS) $(CFLAGS) $(MAINT_CPPFLAGS) $(BIN_CPPFLAGS) $(CPPFLAGS) -c -o $@ $<
linux.o: linux.c util.h
$(CC) $(MAINT_CFLAGS) $(BIN_CFLAGS) $(CFLAGS) $(MAINT_CPPFLAGS) $(BIN_CPPFLAGS) $(CPPFLAGS) -c -o $@ $<
libswmhack.so.$(LIBVERSION): swm_hack.so
$(CC) $(MAINT_LDFLAGS) $(LIB_LDFLAGS) $(LDFLAGS) -Wl,-soname,$@ -o $@ $+ $(LIB_LDLIBS) $(LDLIBS)
swm_hack.so: ../lib/swm_hack.c
$(CC) $(MAINT_CFLAGS) $(LIB_CFLAGS) $(CFLAGS) $(MAINT_CPPFLAGS) $(LIB_CPPFLAGS) $(CPPFLAGS) -c -o $@ $<
clean:
rm -f spectrwm *.o libswmhack.so.* *.so
install: all
install -m 755 -d $(DESTDIR)$(BINDIR)
install -m 755 -d $(DESTDIR)$(LIBDIR)
install -m 755 -d $(DESTDIR)$(MANDIR)/man1
install -m 755 -d $(DESTDIR)$(XSESSIONSDIR)
install -m 755 spectrwm $(DESTDIR)$(BINDIR)
ln -sf spectrwm $(DESTDIR)$(BINDIR)/scrotwm
install -m 644 libswmhack.so.$(LIBVERSION) $(DESTDIR)$(LIBDIR)
ln -sf libswmhack.so.$(LIBVERSION) $(DESTDIR)$(LIBDIR)/libswmhack.so.$(LIBMAJORVERSION)
ln -sf libswmhack.so.$(LIBVERSION) $(DESTDIR)$(LIBDIR)/libswmhack.so
install -m 644 ../spectrwm.1 $(DESTDIR)$(MANDIR)/man1/spectrwm.1
install -m 644 spectrwm.desktop $(DESTDIR)$(XSESSIONSDIR)
uninstall:
rm -f $(DESTDIR)$(BINDIR)/spectrwm
rm -f $(DESTDIR)$(BINDIR)/scrotwm
rm -f $(DESTDIR)$(LIBDIR)/libswmhack.so.$(LIBVERSION)
rm -f $(DESTDIR)$(LIBDIR)/libswmhack.so.$(LIBMAJORVERSION)
rm -f $(DESTDIR)$(LIBDIR)/libswmhack.so
rm -f $(DESTDIR)$(MANDIR)/man1/spectrwm.1
rm -f $(DESTDIR)$(XSESSIONSDIR)/spectrwm.desktop
.PHONY: all clean install uninstall