Skip to content
This repository has been archived by the owner on Jan 16, 2023. It is now read-only.

Commit

Permalink
Much more portable Makefile
Browse files Browse the repository at this point in the history
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
  • Loading branch information
xyb3rt committed Oct 12, 2017
1 parent 6beb8b4 commit 5155d52
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 48 deletions.
87 changes: 57 additions & 30 deletions 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

all: sxiv
srcdir = .

include config.mk
PREFIX = /usr/local
MANPREFIX = $(PREFIX)/share/man

override CPPFLAGS += -I. -DVERSION=\"$(VERSION)\" -DHAVE_GIFLIB=$(HAVE_GIFLIB) -DHAVE_LIBEXIF=$(HAVE_LIBEXIF)
CC ?= gcc
CFLAGS += -std=c99 -Wall -pedantic
CPPFLAGS += -I/usr/include/freetype2 -D_XOPEN_SOURCE=700
DEPFLAGS = -MMD -MP
LDFLAGS +=

LDLIBS := -lImlib2 -lX11 -lXft
# autoreload backend: inotify/nop
AUTORELOAD = inotify

ifneq ($(HAVE_GIFLIB),0)
LDLIBS += -lgif
endif
ifneq ($(HAVE_LIBEXIF),0)
LDLIBS += -lexif
endif
# enable features requiring giflib (-lgif)
HAVE_GIFLIB = 1

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)
# enable features requiring libexif (-lexif)
HAVE_LIBEXIF = 1

$(OBJ): config.h Makefile
REQ_CPPFLAGS = -I. -DVERSION=\"$(VERSION)\" \
-DHAVE_GIFLIB=$(HAVE_GIFLIB) -DHAVE_LIBEXIF=$(HAVE_LIBEXIF)
ALL_CPPFLAGS = $(REQ_CPPFLAGS) $(CPPFLAGS)

%.o: %.c
@echo "CC $@"
$(CC) $(CFLAGS) $(CPPFLAGS) $(DEPFLAGS) -c -o $@ $<
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))

config.h: | config.def.h
@echo "GEN $@"
cp $| $@
-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

sxiv: $(OBJ)
.PHONY: all clean install uninstall
.SUFFIXES:
.SUFFIXES: .c .o
$(V).SILENT:

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"
Expand All @@ -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
Expand All @@ -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 changes: 0 additions & 18 deletions config.mk

This file was deleted.

0 comments on commit 5155d52

Please sign in to comment.