summaryrefslogtreecommitdiff
path: root/Makefile
blob: eb561ac9884143b6e27900d1245989ec0f65623d (plain)
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
112
113
114
115
116
117
118
119
# SPDX-License-Identifier: GPL-2.0

.SUFFIXES:
MAKEFLAGS += -Rr
.ONESHELL:
.SHELLFLAGS := -ec

RM := rm -f
MKDIR_P := mkdir -p

ifeq ("$(origin CC)", "default")
        CC := cc
endif
ifeq ("$(origin V)", "command line")
	SAY =
else
	SAY = @echo '$(strip $(1))'
endif

COPYRIGHT_YEAR := 2018
LOGLEVELS := LL_DEBUG,LL_INFO,LL_NOTICE,LL_WARNING,LL_ERROR,LL_CRIT,LL_EMERG
GIT_VERSION := $(shell ./version-gen.sh)
cc_version := $(shell $(CC) --version | head -n 1)
build_date := $(shell date)
uname_rs := $(shell uname -rs)

all := tfortune tfortune.1
all: $(all)

deps := txp.bison.d txp.flex.d ast.d tfortune.d util.d txp.flex.d \
	tfortune.lsg.d version.d

ifeq ($(findstring clean, $(MAKECMDGOALS)),)
-include $(deps)
include config.mak
endif

.PRECIOUS: %.flex.c %.bison.c %.bison.h %.lsg.h %.lsg.c %.lsg.h

# created by version-gen.sh
version.c:

%.lsg.c: %.suite
	$(call SAY, LSGC $<)
	$(LOPSUBGEN) --gen-c < $<

%.lsg.h: %.suite
	$(call SAY, LSGH $<)
	$(LOPSUBGEN) --gen-header < $<

%.1: %.suite
	$(call SAY, LSGM $<)
	$(LOPSUBGEN) --gen-man=$@ --version-string $(GIT_VERSION) < $<

%.flex.c: %.lex
	$(call SAY, FLEX $<)
	$(FLEX) -o $@ $<

%.bison.c %.bison.h: %.y
	$(call SAY, BISON $<)
	$(BISON) --defines=$(notdir $(<:.y=.bison.h)) \
		--output=$(notdir $(<:.y=.bison.c)) $<

TF_CPPFLAGS += -DCOPYRIGHT_YEAR='"$(COPYRIGHT_YEAR)"'
TF_CPPFLAGS += -DLOGLEVELS='$(LOGLEVELS)'
TF_CPPFLAGS += -DBUILD_DATE='"$(build_date)"'
TF_CPPFLAGS += -DCC_VERSION='"$(cc_version)"'
TF_CPPFLAGS += -DUNAME_RS='"$(uname_rs)"'
TF_CPPFLAGS += -I/usr/local/include

TF_CFLAGS += -g
TF_CFLAGS += -O2
TF_CFLAGS += -Wall
TF_CFLAGS += -Wundef -W -Wuninitialized
TF_CFLAGS += -Wchar-subscripts
TF_CFLAGS += -Werror-implicit-function-declaration
TF_CFLAGS += -Wmissing-noreturn
TF_CFLAGS += -Wbad-function-cast
TF_CFLAGS += -Wredundant-decls
TF_CFLAGS += -Wdeclaration-after-statement
TF_CFLAGS += -Wformat -Wformat-security -Wmissing-format-attribute

%.flex.o: TF_CFLAGS += -Wno-all

%.o: %.c tfortune.lsg.h txp.bison.h
	$(call SAY, CC $<)
	$(CC) \
		-o $@ -c -MMD -MF $(*F).d \
		-MT $@ $(TF_CPPFLAGS) $(CPPFLAGS) $(TF_CFLAGS) $(CFLAGS) $<

TF_LDFLAGS=-llopsub
tfortune: $(deps:.d=.o)
	$(call SAY, LD $@)
	$(CC) $^ -o $@ $(TF_LDFLAGS) $(LDFLAGS)

.PHONY: all mostlyclean clean install install-strip

mostlyclean:
	$(RM) tfortune *.o *.d
clean: mostlyclean
	$(RM) *.lsg.* *.flex.* *.bison.* *.1 version.c
distclean: clean
	$(RM) config.mak config.status config.log config.h configure config.h.in
	$(RM) -r autom4te.cache
maintainer-clean: distclean
	git clean -dfqx > /dev/null 2>&1

mandir := $(datarootdir)/man/man1
INSTALL ?= install
INSTALL_PROGRAM ?= $(INSTALL) -m 755
INSTALL_DATA ?= $(INSTALL) -m 644
ifneq ($(findstring strip, $(MAKECMDGOALS)),)
	strip_option := -s
endif

install install-strip: all
	$(MKDIR_P) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)
	$(INSTALL_PROGRAM) $(strip_option) tfortune $(DESTDIR)$(bindir)
	$(INSTALL_DATA) tfortune.1 $(DESTDIR)$(mandir)