X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=common.mk;h=ce41f287394af52d3400517ab19875dcda845f7f;hb=dfda878272a40bb9ed5d1d7af53b6a4fcbebe223;hp=bcb771428e23cfcd9162d708a8de9f5d47332ae7;hpb=86117db4345190302b73ca4e95e8431459b3868b;p=i3%2Fi3 diff --git a/common.mk b/common.mk index bcb77142..ce41f287 100644 --- a/common.mk +++ b/common.mk @@ -1,15 +1,31 @@ UNAME=$(shell uname) DEBUG=1 +COVERAGE=0 INSTALL=install -PREFIX=/usr -ifeq ($(PREFIX),/usr) -SYSCONFDIR=/etc -else -SYSCONFDIR=$(PREFIX)/etc +ifndef PREFIX + PREFIX=/usr +endif +ifndef SYSCONFDIR + ifeq ($(PREFIX),/usr) + SYSCONFDIR=/etc + else + SYSCONFDIR=$(PREFIX)/etc + endif endif -GIT_VERSION:="$(shell git describe --tags --always) ($(shell git log --pretty=format:%cd --date=short -n1))" +TERM_EMU=xterm +# The escaping is absurd, but we need to escape for shell, sed, make, define +GIT_VERSION:="$(shell git describe --tags --always) ($(shell git log --pretty=format:%cd --date=short -n1), branch $(shell [ -f $(TOPDIR)/.git/HEAD ] && sed 's/ref: refs\/heads\/\(.*\)/\\\\\\"\1\\\\\\"/g' $(TOPDIR)/.git/HEAD || echo 'unknown'))" VERSION:=$(shell git describe --tags --abbrev=0) +ifeq ($(shell which pkg-config 2>/dev/null 1>/dev/null || echo 1),1) +$(error "pkg-config was not found") +endif + +# An easier way to get CFLAGS and LDFLAGS falling back in case there's +# no pkg-config support for certain libraries +cflags_for_lib = $(shell pkg-config --silence-errors --cflags $(1)) +ldflags_for_lib = $(shell pkg-config --exists $(1) && pkg-config --libs $(1) || echo -l$(2)) + CFLAGS += -std=c99 CFLAGS += -pipe CFLAGS += -Wall @@ -17,44 +33,49 @@ CFLAGS += -Wall # We don’t want unused-parameter because of the use of many callbacks CFLAGS += -Wunused-value CFLAGS += -Iinclude -CFLAGS += -I/usr/local/include -CFLAGS += -DI3_VERSION=\"${GIT_VERSION}\" - -# Check if pkg-config is installed, because without pkg-config, the following -# check for the version of libxcb cannot be done. -ifeq ($(shell which pkg-config 2>/dev/null 1>/dev/null || echo 1),1) -$(error "pkg-config was not found") -endif - -ifeq ($(shell pkg-config --exists xcb-keysyms || echo 1),1) -$(error "pkg-config could not find xcb-keysyms.pc") -endif - -ifeq ($(shell pkg-config --exact-version=0.3.3 xcb-keysyms && echo 1),1) -# xcb-keysyms fixed API from 0.3.3 to 0.3.4, so for some months, we will -# have this here. Distributions should upgrade their libxcb in the meantime. -CFLAGS += -DOLD_XCB_KEYSYMS_API +CFLAGS += $(call cflags_for_lib, xcb-keysyms) +ifeq ($(shell pkg-config --exists xcb-util || echo 1),1) +CPPFLAGS += -DXCB_COMPAT +CFLAGS += $(call cflags_for_lib, xcb-atom) +CFLAGS += $(call cflags_for_lib, xcb-aux) +else +CFLAGS += $(call cflags_for_lib, xcb-util) endif +CFLAGS += $(call cflags_for_lib, xcb-icccm) +CFLAGS += $(call cflags_for_lib, xcb-xinerama) +CFLAGS += $(call cflags_for_lib, xcb-randr) +CFLAGS += $(call cflags_for_lib, xcb) +CFLAGS += $(call cflags_for_lib, xcursor) +CFLAGS += $(call cflags_for_lib, x11) +CFLAGS += $(call cflags_for_lib, yajl) +CFLAGS += $(call cflags_for_lib, libev) +CPPFLAGS += -DI3_VERSION=\"${GIT_VERSION}\" +CPPFLAGS += -DSYSCONFDIR=\"${SYSCONFDIR}\" +CPPFLAGS += -DTERM_EMU=\"$(TERM_EMU)\" -LDFLAGS += -lm -LDFLAGS += -lxcb-event -LDFLAGS += -lxcb-property -LDFLAGS += -lxcb-keysyms +LIBS += -lm +LIBS += $(call ldflags_for_lib, xcb-event, xcb-event) +LIBS += $(call ldflags_for_lib, xcb-keysyms, xcb-keysyms) ifeq ($(shell pkg-config --exists xcb-util || echo 1),1) -CFLAGS += -DXCB_COMPAT -LDFLAGS += -lxcb-atom -LDFLAGS += -lxcb-aux +LIBS += $(call ldflags_for_lib, xcb-atom, xcb-atom) +LIBS += $(call ldflags_for_lib, xcb-aux, xcb-aux) else -LDFLAGS += -lxcb-util +LIBS += $(call ldflags_for_lib, xcb-util) +endif +LIBS += $(call ldflags_for_lib, xcb-icccm, xcb-icccm) +LIBS += $(call ldflags_for_lib, xcb-xinerama, xcb-xinerama) +LIBS += $(call ldflags_for_lib, xcb-randr, xcb-randr) +LIBS += $(call ldflags_for_lib, xcb, xcb) +LIBS += $(call ldflags_for_lib, xcursor, Xcursor) +LIBS += $(call ldflags_for_lib, x11, X11) +LIBS += $(call ldflags_for_lib, yajl, yajl) +LIBS += $(call ldflags_for_lib, libev, ev) + +# Please test if -Wl,--as-needed works on your platform and send me a patch. +# it is known not to work on Darwin (Mac OS X) +ifneq (,$(filter Linux GNU GNU/%, $(UNAME))) +LDFLAGS += -Wl,--as-needed endif -LDFLAGS += -lxcb-icccm -LDFLAGS += -lxcb-xinerama -LDFLAGS += -lxcb-randr -LDFLAGS += -lxcb -LDFLAGS += -lyajl -LDFLAGS += -lX11 -LDFLAGS += -lev -LDFLAGS += -L/usr/local/lib -L/usr/pkg/lib ifeq ($(UNAME),NetBSD) # We need -idirafter instead of -I to prefer the system’s iconv over GNU libiconv @@ -64,16 +85,24 @@ endif ifeq ($(UNAME),OpenBSD) CFLAGS += -I${X11BASE}/include -LDFLAGS += -liconv +LIBS += -liconv LDFLAGS += -L${X11BASE}/lib endif ifeq ($(UNAME),FreeBSD) -LDFLAGS += -liconv +LIBS += -liconv +endif + +ifeq ($(UNAME),Darwin) +LIBS += -liconv endif +# Fallback for libyajl 1 which did not include yajl_version.h. We need +# YAJL_MAJOR from that file to decide which code path should be used. +CFLAGS += -idirafter $(TOPDIR)/yajl-fallback + ifneq (,$(filter Linux GNU GNU/%, $(UNAME))) -CFLAGS += -D_GNU_SOURCE +CPPFLAGS += -D_GNU_SOURCE endif ifeq ($(DEBUG),1) @@ -82,6 +111,12 @@ CFLAGS += -gdwarf-2 CFLAGS += -g3 else CFLAGS += -O2 +CFLAGS += -freorder-blocks-and-partition +endif + +ifeq ($(COVERAGE),1) +CFLAGS += -fprofile-arcs -ftest-coverage +LIBS += -lgcov endif # Don’t print command lines which are run