1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
CFLAGS?= -Wall -O2
PREFIX?= /usr
EXEC_PREFIX?= /
SBINDIR= $(DESTDIR)/$(EXEC_PREFIX)/sbin
BINDIR= $(DESTDIR)$(EXEC_PREFIX)/bin
DATAROOTDIR= $(DESTDIR)/$(PREFIX)/share
MANDIR= $(DATAROOTDIR)/man
COMPLETIONINSTALLDIR=$(DESTDIR)/etc/bash_completion.d
DEFTAPE?= /dev/tape
INSTALL= install
PROGS=mt stinit
# Release-related variables
DISTFILES = \
CHANGELOG.md \
COPYING \
Makefile \
mt.1 \
mt.c \
mtio.h \
README.md \
mt-st.bash_completion \
stinit.8 \
stinit.c \
stinit.def.examples \
.dir-locals.el \
.clang-format
TESTFILES = $(wildcard tests/*.test)
TESTDATAFILES = $(wildcard tests/data/*)
VERSION=1.8
RELEASEDIR=mt-st-$(VERSION)
TARFILE=mt-st-$(VERSION).tar.gz
all: $(PROGS)
version.h: Makefile
echo '#define VERSION "$(VERSION)"' > $@
%: %.c version.h
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -DDEFTAPE='"$(DEFTAPE)"' -o $@ $<
install: $(PROGS)
$(INSTALL) -d $(BINDIR) $(SBINDIR) $(MANDIR) $(MANDIR)/man1 $(MANDIR)/man8 $(COMPLETIONINSTALLDIR)
$(INSTALL) mt $(BINDIR)
$(INSTALL) -m 444 mt.1 $(MANDIR)/man1
$(INSTALL) -m 644 mt-st.bash_completion $(COMPLETIONINSTALLDIR)/mt-st
(if [ -f $(MANDIR)/man1/mt.1.gz ] ; then \
rm -f $(MANDIR)/man1/mt.1.gz; gzip $(MANDIR)/man1/mt.1; fi)
$(INSTALL) stinit $(SBINDIR)
$(INSTALL) -m 444 stinit.8 $(MANDIR)/man8
(if [ -f $(MANDIR)/man8/stinit.8.gz ] ; then \
rm -f $(MANDIR)/man8/stinit.8.gz; gzip $(MANDIR)/man8/stinit.8; fi)
dist:
rm -f "$(TARFILE)" && \
BASE=`mktemp -d` && \
trap "rm -rf $$BASE" EXIT && \
DIST="$$BASE/$(RELEASEDIR)" && \
mkdir "$$DIST" && \
mkdir "$$DIST/tests" && mkdir "$$DIST/tests/data" && \
$(INSTALL) -m 0644 -p -t "$$DIST/" $(DISTFILES) && \
$(INSTALL) -m 0644 -p -t "$$DIST/tests" $(TESTFILES) && \
$(INSTALL) -m 0644 -p -t "$$DIST/tests/data" $(TESTDATAFILES) && \
tar czvf $(TARFILE) -C "$$BASE" \
--owner root --group root \
$(RELEASEDIR)
distcheck: dist
BASE=`mktemp -d` && \
trap "rm -rf $$BASE" EXIT && \
SRC="$$BASE/src" && mkdir "$$SRC" && \
DST="$$BASE/dst" && mkdir "$$DST" && \
tar xvf $(TARFILE) -C "$$SRC" && \
cd "$$SRC/$(RELEASEDIR)" && \
make CFLAGS="-Wall -Wextra -Werror" && \
make check && \
make dist && \
make install DESTDIR="$$DST" && \
numfiles=$$( \
find "$$DST" -type f \
\( -name mt -o -name stinit -o -name mt.1 -o -name stinit.8 -o -name mt-st \) | \
wc -l) && \
echo "$$numfiles files installed (5 expected)" && \
test "$$numfiles" -eq 5
check: $(PROGS)
shelltest -DVERSION=$(VERSION) tests
# This needs lcov installed, and it's useful for local testing.
coverage: clean
$(MAKE) CFLAGS=-coverage
$(MAKE) check
lcov --capture --directory . --no-external --output-file lcov.info
genhtml lcov.info --output-directory out
release-tag:
git tag -s -m 'Release version $(VERSION)' v$(VERSION)
clean:
rm -f *~ \#*\# *.o *.gcno *.gcda coverage.info $(PROGS) version.h
rm -rf out
reindent:
clang-format -i mt.c stinit.c
.PHONY: dist distcheck clean reindent
|