Much more portable Makefile
The config.mk file is now optional and only needs to be created if one wants to persistently overwrite default macro values. Features used in the Makefile that are not yet in the POSIX standard: - Advanced macro assignment operators '+=' and '?=' [1] - Special target .PHONY [2] - Pattern rules [3]; only needed when $srcdir != '.'. For every pattern rule there is an inference rule with the same effect. Hopefully, the inference rules get picked up by make programs not supporting pattern rules. - Silently including multiple possibly not exisiting files [4] [5] [1] http://austingroupbugs.net/view.php?id=330 [2] http://austingroupbugs.net/view.php?id=523 [3] http://austingroupbugs.net/view.php?id=513 [4] http://austingroupbugs.net/view.php?id=333 [5] http://austingroupbugs.net/view.php?id=518
This commit is contained in:
parent
6beb8b4d71
commit
5155d52ab1
99
Makefile
99
Makefile
@ -1,42 +1,72 @@
|
||||
# Requires GNU make 3.80 or later
|
||||
# Works best with GNU make 3.80 or later
|
||||
|
||||
VERSION := git-20171006
|
||||
VERSION = git-20171012
|
||||
|
||||
srcdir = .
|
||||
|
||||
PREFIX = /usr/local
|
||||
MANPREFIX = $(PREFIX)/share/man
|
||||
|
||||
CC ?= gcc
|
||||
CFLAGS += -std=c99 -Wall -pedantic
|
||||
CPPFLAGS += -I/usr/include/freetype2 -D_XOPEN_SOURCE=700
|
||||
DEPFLAGS = -MMD -MP
|
||||
LDFLAGS +=
|
||||
|
||||
# autoreload backend: inotify/nop
|
||||
AUTORELOAD = inotify
|
||||
|
||||
# enable features requiring giflib (-lgif)
|
||||
HAVE_GIFLIB = 1
|
||||
|
||||
# enable features requiring libexif (-lexif)
|
||||
HAVE_LIBEXIF = 1
|
||||
|
||||
REQ_CPPFLAGS = -I. -DVERSION=\"$(VERSION)\" \
|
||||
-DHAVE_GIFLIB=$(HAVE_GIFLIB) -DHAVE_LIBEXIF=$(HAVE_LIBEXIF)
|
||||
ALL_CPPFLAGS = $(REQ_CPPFLAGS) $(CPPFLAGS)
|
||||
|
||||
LIB_EXIF_0 =
|
||||
LIB_EXIF_1 = -lexif
|
||||
LIB_GIF_0 =
|
||||
LIB_GIF_1 = -lgif
|
||||
LDLIBS = -lImlib2 -lX11 -lXft \
|
||||
$(LIB_EXIF_$(HAVE_LIBEXIF)) $(LIB_GIF_$(HAVE_GIFLIB))
|
||||
|
||||
-include config.mk
|
||||
|
||||
SRCS = autoreload_$(AUTORELOAD).c commands.c image.c main.c options.c \
|
||||
thumbs.c util.c window.c
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
DEPS = $(SRCS:.c=.d)
|
||||
|
||||
all: sxiv
|
||||
|
||||
include config.mk
|
||||
.PHONY: all clean install uninstall
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o
|
||||
$(V).SILENT:
|
||||
|
||||
override CPPFLAGS += -I. -DVERSION=\"$(VERSION)\" -DHAVE_GIFLIB=$(HAVE_GIFLIB) -DHAVE_LIBEXIF=$(HAVE_LIBEXIF)
|
||||
|
||||
LDLIBS := -lImlib2 -lX11 -lXft
|
||||
|
||||
ifneq ($(HAVE_GIFLIB),0)
|
||||
LDLIBS += -lgif
|
||||
endif
|
||||
ifneq ($(HAVE_LIBEXIF),0)
|
||||
LDLIBS += -lexif
|
||||
endif
|
||||
|
||||
SRC := autoreload_$(AUTORELOAD).c commands.c image.c main.c options.c thumbs.c util.c window.c
|
||||
DEP := $(SRC:.c=.d)
|
||||
OBJ := $(SRC:.c=.o)
|
||||
|
||||
$(OBJ): config.h Makefile
|
||||
|
||||
%.o: %.c
|
||||
@echo "CC $@"
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) $(DEPFLAGS) -c -o $@ $<
|
||||
|
||||
config.h: | config.def.h
|
||||
@echo "GEN $@"
|
||||
cp $| $@
|
||||
|
||||
sxiv: $(OBJ)
|
||||
sxiv: $(OBJS)
|
||||
@echo "LINK $@"
|
||||
$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS)
|
||||
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
|
||||
|
||||
$(OBJS): config.h $(srcdir)/Makefile
|
||||
|
||||
.c.o:
|
||||
@echo "CC $@"
|
||||
$(CC) $(ALL_CPPFLAGS) $(DEPFLAGS) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
%.o: $(srcdir)/%.c
|
||||
@echo "CC $@"
|
||||
$(CC) $(ALL_CPPFLAGS) $(DEPFLAGS) $(CFLAGS) -c -o $@ $(srcdir)/$(@:.o=.c)
|
||||
|
||||
config.h:
|
||||
@echo "GEN $@"
|
||||
cp $(srcdir)/config.def.h $@
|
||||
|
||||
clean:
|
||||
rm -f $(OBJ) $(DEP) sxiv
|
||||
rm -f $(OBJS) $(DEPS) sxiv
|
||||
|
||||
install: all
|
||||
@echo "INSTALL bin/sxiv"
|
||||
@ -45,7 +75,8 @@ install: all
|
||||
chmod 755 $(DESTDIR)$(PREFIX)/bin/sxiv
|
||||
@echo "INSTALL sxiv.1"
|
||||
mkdir -p $(DESTDIR)$(MANPREFIX)/man1
|
||||
sed "s!PREFIX!$(PREFIX)!g; s!VERSION!$(VERSION)!g" sxiv.1 > $(DESTDIR)$(MANPREFIX)/man1/sxiv.1
|
||||
sed "s!PREFIX!$(PREFIX)!g; s!VERSION!$(VERSION)!g" sxiv.1 \
|
||||
>$(DESTDIR)$(MANPREFIX)/man1/sxiv.1
|
||||
chmod 644 $(DESTDIR)$(MANPREFIX)/man1/sxiv.1
|
||||
@echo "INSTALL share/sxiv/"
|
||||
mkdir -p $(DESTDIR)$(PREFIX)/share/sxiv/exec
|
||||
@ -60,9 +91,5 @@ uninstall:
|
||||
@echo "REMOVE share/sxiv/"
|
||||
rm -rf $(DESTDIR)$(PREFIX)/share/sxiv
|
||||
|
||||
.PHONY: all clean install uninstall
|
||||
.SUFFIXES:
|
||||
$(V).SILENT:
|
||||
|
||||
-include $(DEP)
|
||||
|
||||
|
18
config.mk
18
config.mk
@ -1,18 +0,0 @@
|
||||
PREFIX := /usr/local
|
||||
MANPREFIX := $(PREFIX)/share/man
|
||||
|
||||
CC ?= gcc
|
||||
CFLAGS += -std=c99 -Wall -pedantic
|
||||
CPPFLAGS += -I/usr/include/freetype2 -D_XOPEN_SOURCE=700
|
||||
DEPFLAGS := -MMD -MP
|
||||
LDFLAGS +=
|
||||
|
||||
# autoreload backend: inotify/nop
|
||||
AUTORELOAD := inotify
|
||||
|
||||
# enable features requiring giflib (-lgif)
|
||||
HAVE_GIFLIB := 1
|
||||
|
||||
# enable features requiring libexif (-lexif)
|
||||
HAVE_LIBEXIF := 1
|
||||
|
Loading…
Reference in New Issue
Block a user