1 # SPDX-License-Identifier: GPL-3.0-only
12 ifeq ("$(origin CC)", "default")
15 ifeq ("$(origin V)", "command line")
18 SAY = @echo '$(strip $(1))'
22 SLOGAN := fortune cookies with tags
24 EMAIL := maan@tuebingen.mpg.de
25 COPYRIGHT_YEAR := 2019
26 PACKAGE_HOMEPAGE := http://people.tuebingen.mpg.de/maan/$(PACKAGE)/
27 CLONE_URL := git://git.tuebingen.mpg.de/$(PACKAGE)/
28 GITWEB_URL := http://git.tuebingen.mpg.de/$(PACKAGE).git
29 LICENSE := GNU GPL version 3
30 LICENSE_URL := https://www.gnu.org/licenses/gpl-3.0-standalone.html
31 HOME_URL := http://people.tuebingen.mpg.de/maan/
33 define DESCRIPTION1 :=
34 Like fortune(6), tfortune is a Unix command line utility which prints
35 a random epigram. Epigrams are stored as plain text files, but they
36 must be annotated with tags to make full use of the features which
37 tfortune offers over other implementations.
40 define DESCRIPTION2 :=
41 Tfortune has a built-in matching language for epigrams. User-supplied
42 tag expressions define subsets of admissible epigrams. If a tag
43 expression is given, epigrams are picked from the admissible subset
47 define DESCRIPTION3 :=
48 Besides printing random epigrams, tfortune supports a number of other
49 subcommands which help to maintain epigrams and tag expressions. There
50 are subcommands for listing and for editing the input files, and for
51 printing statistics about epigrams, expressions and tags. A subcommand
52 that enables bash command line completion is also included.
54 LOGLEVELS := LL_DEBUG,LL_INFO,LL_NOTICE,LL_WARNING,LL_ERROR,LL_CRIT,LL_EMERG
55 GIT_VERSION := $(shell ./version-gen.sh $(PACKAGE) version.c)
56 cc_version := $(shell $(CC) --version | head -n 1)
57 build_date := $(shell date)
58 uname_rs := $(shell uname -rs)
60 all := tfortune tfortune.6
63 deps := txp.bison.d txp.flex.d ast.d tfortune.d util.d txp.flex.d \
64 tfortune.lsg.d version.d linhash.d
66 ifeq ($(findstring clean, $(MAKECMDGOALS)),)
71 config.h.in: configure.ac
74 config.mak config.h: config.status config.mak.in config.h.in
77 test -f config.h && touch config.h
78 config.status: configure.sh
80 if test -x config.status; then \
81 ./config.status --recheck; \
83 ./configure.sh --no-create; \
85 configure.sh: configure.ac
87 autoconf configure.ac > $@
90 .PRECIOUS: %.flex.c %.bison.c %.bison.h %.lsg.h %.lsg.c %.lsg.h
92 # created by version-gen.sh
95 index.html tfortune.suite: %: %.m4
97 $(M4) -D "AUTHOR=$(AUTHOR)" -D "COPYRIGHT_YEAR=$(COPYRIGHT_YEAR)" \
98 -D "PACKAGE=$(PACKAGE)" \
99 -D "SLOGAN=$(SLOGAN)" \
100 -D "EMAIL=$(EMAIL)" \
101 -D "PACKAGE_URL=$(PACKAGE_URL)" \
102 -D "PACKAGE_HOMEPAGE=$(PACKAGE_HOMEPAGE)" \
103 -D "CLONE_URL=$(CLONE_URL)" \
104 -D "GITWEB_URL=$(GITWEB_URL)" \
105 -D "HOME_URL=$(HOME_URL)" \
106 -D "LICENSE=$(LICENSE)" \
107 -D "LICENSE_URL=$(LICENSE_URL)" \
108 -D "DESCRIPTION1=$(DESCRIPTION1)" \
109 -D "DESCRIPTION2=$(DESCRIPTION2)" \
110 -D "DESCRIPTION3=$(DESCRIPTION3)" $< > $@
113 $(LOPSUBGEN) --gen-c < $<
117 $(LOPSUBGEN) --gen-header < $<
119 %.6: %.suite version.c
121 $(LOPSUBGEN) --gen-man=$@ --version-string $(GIT_VERSION) < $<
127 %.bison.c %.bison.h: %.y
128 $(call SAY, BISON $<)
129 $(BISON) --defines=$(notdir $(<:.y=.bison.h)) \
130 --output=$(notdir $(<:.y=.bison.c)) $<
132 TF_CPPFLAGS += -Wunused-macros
133 TF_CPPFLAGS += -DCOPYRIGHT_YEAR='"$(COPYRIGHT_YEAR)"'
134 TF_CPPFLAGS += -DPACKAGE='"$(PACKAGE)"'
135 TF_CPPFLAGS += -DAUTHOR='"$(AUTHOR)"'
136 TF_CPPFLAGS += -DEMAIL='"$(EMAIL)"'
137 TF_CPPFLAGS += -DPACKAGE_HOMEPAGE='"$(PACKAGE_HOMEPAGE)"'
138 TF_CPPFLAGS += -DCLONE_URL='"$(CLONE_URL)"'
139 TF_CPPFLAGS += -DGITWEB_URL='"$(GITWEB_URL)"'
140 TF_CPPFLAGS += -DHOME_URL='"$(HOME_URL)"'
141 TF_CPPFLAGS += -DGET_VERSION='$(PACKAGE)_version'
142 TF_CPPFLAGS += -DLOGLEVELS='$(LOGLEVELS)'
143 TF_CPPFLAGS += -DBUILD_DATE='"$(build_date)"'
144 TF_CPPFLAGS += -DCC_VERSION='"$(cc_version)"'
145 TF_CPPFLAGS += -DUNAME_RS='"$(uname_rs)"'
146 TF_CPPFLAGS += -DLICENSE='"$(LICENSE)"'
147 TF_CPPFLAGS += -DLICENSE_URL='"$(LICENSE_URL)"'
148 TF_CPPFLAGS += -I/usr/local/include
153 TF_CFLAGS += -Wundef -W -Wuninitialized
154 TF_CFLAGS += -Wchar-subscripts
155 TF_CFLAGS += -Werror-implicit-function-declaration
156 TF_CFLAGS += -Wmissing-noreturn
157 TF_CFLAGS += -Wbad-function-cast
158 TF_CFLAGS += -Wredundant-decls
159 TF_CFLAGS += -Wdeclaration-after-statement
160 TF_CFLAGS += -Wformat -Wformat-security -Wmissing-format-attribute
161 #TF_CFLAGS += -fsanitize=address
163 %.flex.o: TF_CFLAGS += -Wno-all -Wno-sign-compare -Wno-unused-parameter
164 %.flex.o %.bison.o: TF_CPPFLAGS += -Wno-unused-macros
166 %.o: %.c tfortune.lsg.h txp.bison.h
169 -o $@ -c -MMD -MF $(*F).d \
170 -MT $@ $(TF_CPPFLAGS) $(CPPFLAGS) $(TF_CFLAGS) $(CFLAGS) $<
172 TF_LDFLAGS = -llopsub
173 #TF_LDFLAGS += -fsanitize=address
175 tfortune: $(deps:.d=.o)
177 $(CC) $^ -o $@ $(TF_LDFLAGS) $(LDFLAGS)
179 .PHONY: all mostlyclean clean distclan maintainer-clean install \
183 $(RM) tfortune *.o *.d
185 $(RM) *.lsg.* *.flex.* *.bison.* *.6 *.suite
187 $(RM) config.mak config.status config.log config.h config.h.in version.c
188 $(RM) -r autom4te.cache
190 git clean -dfqx > /dev/null 2>&1
192 mandir := $(datarootdir)/man/man6
194 INSTALL_PROGRAM ?= $(INSTALL) -m 755
195 INSTALL_DATA ?= $(INSTALL) -m 644
196 ifneq ($(findstring strip, $(MAKECMDGOALS)),)
200 install install-strip: all
201 $(MKDIR_P) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)
202 $(INSTALL_PROGRAM) $(strip_option) tfortune $(DESTDIR)$(bindir)
203 $(INSTALL_DATA) tfortune.6 $(DESTDIR)$(mandir)
216 | web page: $(PACKAGE_HOMEPAGE)
217 | git clone URL: $(CLONE_URL)
218 | gitweb: $(GITWEB_URL)
219 | author's home page: $(HOME_URL)
220 | Send feedback to: $(AUTHOR) <$(EMAIL)>
224 See tfortune.suite. Or build the man page with \"make tfortune.6\"
225 and run \"man -l tfortune.6\".
229 This package requires m4, autoconf, gnu make, flex, bison, gcc or
230 clang, and lopsub. The configure script checks if all required
231 dependencies are installed and prints a meaningful error message if
232 one of them is missing.
236 Run \"make\" to build tfortune with the default settings. Run
237 \"./configure -h\" to list configuration options.
241 Run \"sudo make install\" to install to /usr/local. To install to
242 /somewhere/else, run \"./configure --prefix /somewhere/else && make\"
247 @printf '%s\n' "$(README)"