bspwm/Makefile
Tobias Stoeckmann baa6a55847 Enforce strict mode of jsmn.
If no strict mode of jsmn is enforced, then the correct amount of
json elements would have to be checked to avoid segmentation faults
on malformed state files:

$ echo '{ "focusedMonitorId" }' > malformed-state
$ bspwm -s malformed-state
Segmentation fault
$ _

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
2019-07-12 20:40:39 +02:00

78 lines
2.5 KiB
Makefile

VERCMD ?= git describe 2> /dev/null
VERSION := $(shell $(VERCMD) || cat VERSION)
CPPFLAGS += -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\"
CFLAGS += -std=c99 -pedantic -Wall -Wextra -DJSMN_STRICT
LDFLAGS ?=
LDLIBS = $(LDFLAGS) -lm -lxcb -lxcb-util -lxcb-keysyms -lxcb-icccm -lxcb-ewmh -lxcb-randr -lxcb-xinerama -lxcb-shape
PREFIX ?= /usr/local
BINPREFIX ?= $(PREFIX)/bin
MANPREFIX ?= $(PREFIX)/share/man
DOCPREFIX ?= $(PREFIX)/share/doc/bspwm
BASHCPL ?= $(PREFIX)/share/bash-completion/completions
FISHCPL ?= $(PREFIX)/share/fish/vendor_completions.d
ZSHCPL ?= $(PREFIX)/share/zsh/site-functions
MD_DOCS = README.md doc/CHANGELOG.md doc/CONTRIBUTING.md doc/INSTALL.md doc/MISC.md doc/TODO.md
XSESSIONS ?= $(PREFIX)/share/xsessions
WM_SRC = bspwm.c helpers.c geometry.c jsmn.c settings.c monitor.c desktop.c tree.c stack.c history.c \
events.c pointer.c window.c messages.c parse.c query.c restore.c rule.c ewmh.c subscribe.c
WM_OBJ := $(WM_SRC:.c=.o)
CLI_SRC = bspc.c helpers.c
CLI_OBJ := $(CLI_SRC:.c=.o)
all: bspwm bspc
debug: CFLAGS += -O0 -g
debug: bspwm bspc
VPATH=src
include Sourcedeps
$(WM_OBJ) $(CLI_OBJ): Makefile
bspwm: $(WM_OBJ)
bspc: $(CLI_OBJ)
install:
mkdir -p "$(DESTDIR)$(BINPREFIX)"
cp -pf bspwm "$(DESTDIR)$(BINPREFIX)"
cp -pf bspc "$(DESTDIR)$(BINPREFIX)"
mkdir -p "$(DESTDIR)$(MANPREFIX)"/man1
cp -p doc/bspwm.1 "$(DESTDIR)$(MANPREFIX)"/man1
cp -Pp doc/bspc.1 "$(DESTDIR)$(MANPREFIX)"/man1
mkdir -p "$(DESTDIR)$(BASHCPL)"
cp -p contrib/bash_completion "$(DESTDIR)$(BASHCPL)"/bspc
mkdir -p "$(DESTDIR)$(FISHCPL)"
cp -p contrib/fish_completion "$(DESTDIR)$(FISHCPL)"/bspc.fish
mkdir -p "$(DESTDIR)$(ZSHCPL)"
cp -p contrib/zsh_completion "$(DESTDIR)$(ZSHCPL)"/_bspc
mkdir -p "$(DESTDIR)$(DOCPREFIX)"
cp -p $(MD_DOCS) "$(DESTDIR)$(DOCPREFIX)"
mkdir -p "$(DESTDIR)$(DOCPREFIX)"/examples
cp -pr examples/* "$(DESTDIR)$(DOCPREFIX)"/examples
mkdir -p "$(DESTDIR)$(XSESSIONS)"
cp -p contrib/freedesktop/bspwm.desktop "$(DESTDIR)$(XSESSIONS)"
uninstall:
rm -f "$(DESTDIR)$(BINPREFIX)"/bspwm
rm -f "$(DESTDIR)$(BINPREFIX)"/bspc
rm -f "$(DESTDIR)$(MANPREFIX)"/man1/bspwm.1
rm -f "$(DESTDIR)$(MANPREFIX)"/man1/bspc.1
rm -f "$(DESTDIR)$(BASHCPL)"/bspc
rm -f "$(DESTDIR)$(FISHCPL)"/bspc.fish
rm -f "$(DESTDIR)$(ZSHCPL)"/_bspc
rm -rf "$(DESTDIR)$(DOCPREFIX)"
rm -f "$(DESTDIR)$(XSESSIONS)"/bspwm.desktop
doc:
a2x -v -d manpage -f manpage -a revnumber=$(VERSION) doc/bspwm.1.asciidoc
clean:
rm -f $(WM_OBJ) $(CLI_OBJ) bspwm bspc
.PHONY: all debug install uninstall doc clean