Browse Source

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
master
Bert Münnich 7 years ago
parent
commit
5155d52ab1
2 changed files with 57 additions and 48 deletions
  1. +57
    -30
      Makefile
  2. +0
    -18
      config.mk

+ 57
- 30
Makefile View File

@@ -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 $@" @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: clean:
rm -f $(OBJ) $(DEP) sxiv
rm -f $(OBJS) $(DEPS) sxiv


install: all install: all
@echo "INSTALL bin/sxiv" @echo "INSTALL bin/sxiv"
@@ -45,7 +75,8 @@ install: all
chmod 755 $(DESTDIR)$(PREFIX)/bin/sxiv chmod 755 $(DESTDIR)$(PREFIX)/bin/sxiv
@echo "INSTALL sxiv.1" @echo "INSTALL sxiv.1"
mkdir -p $(DESTDIR)$(MANPREFIX)/man1 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 chmod 644 $(DESTDIR)$(MANPREFIX)/man1/sxiv.1
@echo "INSTALL share/sxiv/" @echo "INSTALL share/sxiv/"
mkdir -p $(DESTDIR)$(PREFIX)/share/sxiv/exec mkdir -p $(DESTDIR)$(PREFIX)/share/sxiv/exec
@@ -60,9 +91,5 @@ uninstall:
@echo "REMOVE share/sxiv/" @echo "REMOVE share/sxiv/"
rm -rf $(DESTDIR)$(PREFIX)/share/sxiv rm -rf $(DESTDIR)$(PREFIX)/share/sxiv


.PHONY: all clean install uninstall
.SUFFIXES:
$(V).SILENT:

-include $(DEP) -include $(DEP)



+ 0
- 18
config.mk View File

@@ -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…
Cancel
Save