]> git.tuebingen.mpg.de Git - dss.git/blob - Makefile
Merge topic branch t/misc into pu
[dss.git] / Makefile
1 # SPDX-License-Identifier: GPL-2.0
2 PREFIX ?= /usr/local
3 INSTALL ?= install
4 INSTALL_PROGRAM ?= $(INSTALL)
5 INSTALL_DATA ?= $(INSTALL) -m 644
6 MKDIR_P := mkdir -p
7 VERSION := $(shell ./version-gen.sh dss version.c)
8 RM := rm -f
9 LSG := lopsubgen
10 GZIP := gzip -fn9
11
12 units := dss str file exec sig daemon df tv snap ipc dss.lsg version
13 objs := $(addsuffix .o, $(units))
14 deps := $(addsuffix .d, $(units))
15
16 all: dss dss.1.gz
17 man: dss.1
18 $(objs): dss.lsg.h Makefile
19 -include $(deps)
20
21 DSS_CPPFLAGS += -Wunused-macros
22
23 DSS_CFLAGS := -Wno-sign-compare -g -Wunused -Wundef
24 DSS_CFLAGS += -Wredundant-decls
25 DSS_CFLAGS += -Os
26 DSS_CFLAGS += -Wall
27 DSS_CFLAGS += -Wuninitialized
28 DSS_CFLAGS += -Wchar-subscripts
29 DSS_CFLAGS += -Wformat-security
30 DSS_CFLAGS += -Werror-implicit-function-declaration
31 DSS_CFLAGS += -Wmissing-format-attribute
32 DSS_CFLAGS += -Wunused-parameter
33 DSS_CFLAGS += -Wbad-function-cast
34 DSS_CFLAGS += -Wshadow
35
36 .ONESHELL:
37 .SHELLFLAGS := -ec
38 ifeq ("$(origin V)", "command line")
39         SAY =
40 else
41         SAY = @echo '$(strip $(1))'
42 endif
43 version.c:
44         $(call SAY, VG $@)
45         ./version-gen.sh dss version.c
46 dss: $(objs)
47         $(call SAY, LD $@)
48         $(CC) -o $@ $(objs) $(LDFLAGS) -llopsub
49 %.o: %.c
50         $(call SAY, CC $<)
51         $(CC) -c -o $@ $(DSS_CPPFLAGS) $(CPPFLAGS) $(DSS_CFLAGS) $(CFLAGS) \
52                 -MMD -MF $(*F).d -MT $@ $<
53 .PRECIOUS: %.lsg.c %.lsg.h %.1.gz
54 %.lsg.h: %.suite
55         $(call SAY, LSGH $<)
56         $(LSG) --gen-h=$@ < $<
57 %.lsg.c: %.suite
58         $(call SAY, LSGC $<)
59         $(LSG) --gen-c=$@ < $<
60 %.1.gz: %.suite
61         $(call SAY, LSGM $<)
62         $(LSG) --gen-man=${@:.gz=} --version-string=$(VERSION) < $<
63         $(GZIP) ${@:.gz=}
64 %.1.html: %.1.gz
65         $(call SAY, GROFF $<)
66         zcat $< | groff -m man -Thtml -P -l -P -r \
67                 | sed -e '1,/^<body>/d; /^<\/body>/,$$d' > $@
68 clean:
69         $(call SAY, CLEAM)
70         $(RM) *.[od] dss dss.1.gz *.html dss.lsg.[ch] version.c
71
72 ifneq ($(findstring strip, $(MAKECMDGOALS)),)
73        strip_option := -s
74 endif
75 bindir := $(DESTDIR)$(PREFIX)/bin
76 mandir := $(DESTDIR)$(PREFIX)/share/man/man1
77 install install-strip: all
78         $(MKDIR_P) $(bindir) $(mandir)
79         $(INSTALL_PROGRAM) $(strip_option) dss $(bindir)
80         $(INSTALL_DATA) dss.1.gz $(mandir)
81
82 index.html: dss.1.html index.html.in INSTALL README NEWS
83         sed -e '/@README@/,$$d' index.html.in > $@
84         markdown README >> $@
85         sed -e '1,/@README@/d' -e '/@NEWS@/,$$d' index.html.in >> $@
86         markdown NEWS >> $@
87         sed -e '1,/@NEWS@/d' -e '/@INSTALL@/,$$d' index.html.in >> $@
88         markdown INSTALL >> $@
89         sed -e '1,/@INSTALL@/d' -e '/@MAN_PAGE@/,$$d' index.html.in >> $@
90         cat dss.1.html >> $@
91         sed -e '1,/@MAN_PAGE@/d' index.html.in >> $@
92
93 -include Makefile.local