1VERSION ?= $(shell cat VERSION) 2PREFIX ?= /usr/local 3includedir ?= /include 4bindir ?= /bin 5libdir ?= /lib 6mandir ?= /share/man/man1 7 8GIT_SHA1 = $(shell git rev-parse HEAD 2>/dev/null || printf 'nogit') 9GIT_TAG = $(shell git tag --points-at HEAD 2>/dev/null || cat VERSION) 10MAKEFLAGS += --no-builtin-rules 11 12WARNINGS = -Wall -Wextra -Wpedantic -Wformat=2 -Wstrict-aliasing=3 -Wstrict-overflow=5 -Wstack-usage=12500 \ 13 -Wfloat-equal -Wcast-align -Wpointer-arith -Wchar-subscripts -Warray-bounds=2 -Wno-unknown-warning-option 14 15override CFLAGS ?= -g -O2 $(WARNINGS) $(EXTRA_WARNINGS) 16override CFLAGS += -std=c99 17override CPPFLAGS ?= -D_FORTIFY_SOURCE=2 18override CPPFLAGS += -DBM_VERSION=\"$(VERSION)\" -DBM_PLUGIN_VERSION=\"$(VERSION)-$(GIT_SHA1)\" -DINSTALL_LIBDIR=\"$(PREFIX)$(libdir)\" 19override CPPFLAGS += -D_DEFAULT_SOURCE -Ilib 20 21libs = libbemenu.so 22pkgconfigs = bemenu.pc 23bins = bemenu bemenu-run 24mans = bemenu.1 25renderers = bemenu-renderer-x11.so bemenu-renderer-curses.so 26all: $(bins) $(renderers) $(mans) 27clients: $(bins) 28curses: bemenu-renderer-curses.so 29x11: bemenu-renderer-x11.so 30wayland: bemenu-renderer-wayland.so 31 32# support non git builds 33.git/index: 34 mkdir -p .git 35 touch .git/index 36 37%.a: 38 $(LINK.c) -c $(filter %.c,$^) $(LDLIBS) -o $@ 39 40$(libs): private override full=$(addsuffix .$(VERSION), $@) 41$(libs): private override major=$(addsuffix .$(firstword $(subst ., ,$(VERSION))), $@) 42$(libs): %: VERSION .git/index 43 $(LINK.c) -shared -fPIC $(filter %.c %.a,$^) $(LDLIBS) -o $(full) -Wl,-soname,$(major) 44 ln -fs $(full) $(major) 45 ln -fs $(full) $@ 46 47$(pkgconfigs): %: VERSION %.in 48 sed "s/@VERSION@/$(VERSION)/;s,@PREFIX@,$(PREFIX),;s,@LIBDIR@,$(libdir),;s,@INCLUDEDIR@,$(includedir)," $(addsuffix .in, $@) > $@ 49 50bemenu.1: man/bemenu.1.in 51 sed 's,@LIBDIR@,$(PREFIX)$(libdir),' $< > $@ 52 53$(renderers): %: VERSION .git/index | $(libs) 54 $(LINK.c) -shared -fPIC $(filter %.c %.a,$^) $(LDLIBS) -L. -lbemenu -o $@ 55 56$(bins): %: | $(libs) 57 $(LINK.c) $(filter %.c %.a,$^) $(LDLIBS) -L. -lbemenu -o $@ 58 59cdl.a: private override LDFLAGS += -fPIC 60cdl.a: lib/3rdparty/cdl.c lib/3rdparty/cdl.h 61 62libbemenu.so: private override LDLIBS += -ldl 63libbemenu.so: lib/bemenu.h lib/internal.h lib/filter.c lib/item.c lib/library.c lib/list.c lib/menu.c lib/util.c cdl.a 64 65bemenu-renderer-curses.so: private override LDLIBS += $(shell pkg-config --libs ncursesw) -lm 66bemenu-renderer-curses.so: private override CPPFLAGS += $(shell pkg-config --cflags-only-I ncursesw) 67bemenu-renderer-curses.so: lib/renderers/curses/curses.c 68 69bemenu-renderer-x11.so: private override LDLIBS += $(shell pkg-config --libs x11 xinerama cairo pango pangocairo) 70bemenu-renderer-x11.so: private override CPPFLAGS += $(shell pkg-config --cflags-only-I x11 xinerama cairo pango pangocairo) 71bemenu-renderer-x11.so: lib/renderers/cairo_renderer.h lib/renderers/x11/x11.c lib/renderers/x11/x11.h lib/renderers/x11/window.c lib/renderers/x11/xkb_unicode.c lib/renderers/x11/xkb_unicode.h 72 73lib/renderers/wayland/xdg-shell.c: 74 wayland-scanner private-code < "$$(pkg-config --variable=pkgdatadir wayland-protocols)/stable/xdg-shell/xdg-shell.xml" > $@ 75 76lib/renderers/wayland/wlr-layer-shell-unstable-v1.h: lib/renderers/wayland/wlr-layer-shell-unstable-v1.xml 77 wayland-scanner client-header < $^ > $@ 78 79lib/renderers/wayland/wlr-layer-shell-unstable-v1.c: lib/renderers/wayland/wlr-layer-shell-unstable-v1.xml 80 wayland-scanner private-code < $^ > $@ 81 82lib/renderers/wayland/xdg-output-unstable-v1.h: lib/renderers/wayland/xdg-output-unstable-v1.xml 83 wayland-scanner client-header < $^ > $@ 84 85lib/renderers/wayland/xdg-output-unstable-v1.c: lib/renderers/wayland/xdg-output-unstable-v1.xml 86 wayland-scanner private-code < $^ > $@ 87 88xdg-shell.a: private override LDFLAGS += -fPIC 89xdg-shell.a: private override CPPFLAGS += $(shell pkg-config --cflags-only-I wayland-client) 90xdg-shell.a: lib/renderers/wayland/xdg-shell.c 91wlr-layer-shell.a: private override LDFLAGS += -fPIC 92wlr-layer-shell.a: private override CPPFLAGS += $(shell pkg-config --cflags-only-I wayland-client) 93wlr-layer-shell.a: lib/renderers/wayland/wlr-layer-shell-unstable-v1.c lib/renderers/wayland/wlr-layer-shell-unstable-v1.h 94xdg-output.a: private override LDFLAGS += -fPIC 95xdg-output.a: private override CPPFLAGS += $(shell pkg-config --cflags-only-I wayland-client) 96xdg-output.a: lib/renderers/wayland/xdg-output-unstable-v1.c lib/renderers/wayland/xdg-output-unstable-v1.h 97bemenu-renderer-wayland.so: private override LDLIBS += $(shell pkg-config --libs wayland-client cairo pango pangocairo xkbcommon) 98bemenu-renderer-wayland.so: private override CPPFLAGS += $(shell pkg-config --cflags-only-I wayland-client cairo pango pangocairo xkbcommon) 99: lib/renderers/cairo_renderer.h lib/renderers/wayland/wayland.c lib/renderers/wayland/wayland.h lib/renderers/wayland/registry.c lib/renderers/wayland/window.c xdg-shell.a wlr-layer-shell.a xdg-output.a 100 101common.a: client/common/common.c client/common/common.h 102bemenu: common.a client/bemenu.c 103bemenu-run: common.a client/bemenu-run.c 104 105install-pkgconfig: $(pkgconfigs) 106 mkdir -p "$(DESTDIR)$(PREFIX)$(libdir)/pkgconfig" 107 cp $^ "$(DESTDIR)$(PREFIX)$(libdir)/pkgconfig" 108 109install-include: lib/bemenu.h 110 mkdir -p "$(DESTDIR)$(PREFIX)$(includedir)" 111 cp $^ "$(DESTDIR)$(PREFIX)$(includedir)" 112 113install-libs: $(libs) 114 mkdir -p "$(DESTDIR)$(PREFIX)$(libdir)" 115 cp $(addsuffix .$(VERSION), $^) "$(DESTDIR)$(PREFIX)$(libdir)" 116 117install-lib-symlinks: $(libs) | install-libs 118 cp -RP $^ $(addsuffix .$(firstword $(subst ., ,$(VERSION))), $^) "$(DESTDIR)$(PREFIX)$(libdir)" 119 120install-bins: 121 mkdir -p "$(DESTDIR)$(PREFIX)$(bindir)" 122 -cp $(bins) "$(DESTDIR)$(PREFIX)$(bindir)" 123 -chmod 0755 $(addprefix "$(DESTDIR)$(PREFIX)$(bindir)"/,$(bins)) 124 125install-man: bemenu.1 126 mkdir -p "$(DESTDIR)$(PREFIX)$(mandir)" 127 cp $< "$(DESTDIR)$(PREFIX)$(mandir)" 128 129install-renderers: install-curses install-x11 130 131install-curses: 132 mkdir -p "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" 133 -cp bemenu-renderer-curses.so "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" 134 135install-wayland: 136 mkdir -p "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" 137 -cp bemenu-renderer-wayland.so "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" 138 139install-x11: 140 mkdir -p "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" 141 -cp bemenu-renderer-x11.so "$(DESTDIR)$(PREFIX)$(libdir)/bemenu" 142 143install-base: install-pkgconfig install-include install-lib-symlinks install-bins install-man 144 145install: install-base install-renderers 146 @echo "Install OK!" 147 148doxygen: 149 BM_VERSION=$(VERSION) doxygen doxygen/Doxyfile 150 cp -R doxygen/doxygen-qmi-style/navtree html 151 cp -R doxygen/doxygen-qmi-style/search html/search 152 153sign: 154 test "x$(GIT_TAG)" = "x$(VERSION)" 155 git archive --prefix="bemenu-$(VERSION)/" -o "bemenu-$(VERSION).tar.gz" "$(GIT_TAG)" 156 gpg --default-key "$(GPG_KEY_ID)" --armor --detach-sign "bemenu-$(VERSION).tar.gz" 157 158clean: 159 $(RM) -r *.dSYM # OSX generates .dSYM dirs with -g ... 160 $(RM) $(pkgconfigs) $(libs) $(bins) $(renderers) $(mans) *.a *.so.* 161 $(RM) lib/renderers/wayland/wlr-*.h lib/renderers/wayland/wlr-*.c lib/renderers/wayland/xdg-shell.c 162 $(RM) -r html 163 164.DELETE_ON_ERROR: 165.PHONY: all clean install install-base install-pkgconfig install-include install-libs install-lib-symlinks \ 166 install-man install-bins install-renderers install-curses install-x11 \ 167 doxygen sign clients curses x11 wayland 168