1 # SPDX-License-Identifier: GPL-3.0-only
13 ifeq ("$(origin CC)", "default")
16 ifeq ("$(origin V)", "command line")
19 SAY = @echo '$(strip $(1))'
23 SLOGAN := fortune cookies with tags
25 EMAIL := maan@tuebingen.mpg.de
26 COPYRIGHT_YEAR := 2019
27 PACKAGE_HOMEPAGE := https://people.tuebingen.mpg.de/maan/$(PACKAGE)/
28 CLONE_URL := https://git.tuebingen.mpg.de/$(PACKAGE)/
29 GITWEB_URL := https://git.tuebingen.mpg.de/$(PACKAGE).git
30 LICENSE := GNU GPL version 3
31 LICENSE_URL := https://www.gnu.org/licenses/gpl-3.0-standalone.html
32 HOME_URL := https://people.tuebingen.mpg.de/maan/
34 define DESCRIPTION1 :=
35 Like fortune(6), tfortune is a Unix command line utility which prints
36 a random epigram. Epigrams are stored as plain text files, but they
37 must be annotated with tags to make full use of the features which
38 tfortune offers over other implementations.
41 define DESCRIPTION2 :=
42 Tfortune has a built-in matching language for epigrams. User-supplied
43 tag expressions define subsets of admissible epigrams. If a tag
44 expression is given, epigrams are picked from the admissible subset
48 define DESCRIPTION3 :=
49 Besides printing random epigrams, tfortune supports a number of other
50 subcommands which help to maintain epigrams and tag expressions. There
51 are subcommands for listing and for editing the input files, and for
52 printing statistics about epigrams, expressions and tags. A subcommand
53 that enables bash command line completion is also included.
55 LOGLEVELS := LL_DEBUG,LL_INFO,LL_NOTICE,LL_WARNING,LL_ERROR,LL_CRIT,LL_EMERG
56 GIT_VERSION := $(shell ./version-gen.sh $(PACKAGE) version.c)
57 cc_version := $(shell $(CC) --version | head -n 1)
58 build_date := $(shell date)
59 uname_rs := $(shell uname -rs)
63 epigrams := epigrams/en.tfortunes
65 man build-indep: $(man)
66 exe build-arch: $(exe)
68 deps := txp.bison.d txp.flex.d ast.d tfortune.d util.d txp.flex.d \
69 tfortune.lsg.d version.d linhash.d
71 ifeq ($(findstring clean, $(MAKECMDGOALS)),)
76 config.h.in: configure.ac
79 config.mak config.h: config.status config.mak.in config.h.in
82 test -f config.h && touch config.h
83 config.status: configure.sh
85 if test -x config.status; then \
86 ./config.status --recheck; \
88 ./configure.sh --no-create; \
90 configure.sh: configure.ac
92 autoconf configure.ac > $@
95 .PRECIOUS: %.flex.c %.bison.c %.bison.h %.lsg.h %.lsg.c %.lsg.h
97 # created by version-gen.sh
100 index.html tfortune.suite: %: %.m4
102 $(M4) -D "AUTHOR=$(AUTHOR)" -D "COPYRIGHT_YEAR=$(COPYRIGHT_YEAR)" \
103 -D "DATADIR=$(datadir)" \
104 -D "PACKAGE=$(PACKAGE)" \
105 -D "SLOGAN=$(SLOGAN)" \
106 -D "EMAIL=$(EMAIL)" \
107 -D "PACKAGE_URL=$(PACKAGE_URL)" \
108 -D "PACKAGE_HOMEPAGE=$(PACKAGE_HOMEPAGE)" \
109 -D "CLONE_URL=$(CLONE_URL)" \
110 -D "GITWEB_URL=$(GITWEB_URL)" \
111 -D "HOME_URL=$(HOME_URL)" \
112 -D "LICENSE=$(LICENSE)" \
113 -D "LICENSE_URL=$(LICENSE_URL)" \
114 -D "DESCRIPTION1=$(DESCRIPTION1)" \
115 -D "DESCRIPTION2=$(DESCRIPTION2)" \
116 -D "DESCRIPTION3=$(DESCRIPTION3)" $< > $@
119 $(LOPSUBGEN) --gen-c < $<
123 $(LOPSUBGEN) --gen-header < $<
125 %.6.gz: %.suite version.c
127 $(LOPSUBGEN) --gen-man=${@:.gz=} --version-string $(GIT_VERSION) < $<
134 %.bison.c %.bison.h: %.y
135 $(call SAY, BISON $<)
136 $(BISON) --defines=$(notdir $(<:.y=.bison.h)) \
137 --output=$(notdir $(<:.y=.bison.c)) $<
139 TF_CPPFLAGS += -Wunused-macros
140 TF_CPPFLAGS += -DCOPYRIGHT_YEAR='"$(COPYRIGHT_YEAR)"'
141 TF_CPPFLAGS += -DPACKAGE='"$(PACKAGE)"'
142 TF_CPPFLAGS += -DAUTHOR='"$(AUTHOR)"'
143 TF_CPPFLAGS += -DEMAIL='"$(EMAIL)"'
144 TF_CPPFLAGS += -DPACKAGE_HOMEPAGE='"$(PACKAGE_HOMEPAGE)"'
145 TF_CPPFLAGS += -DCLONE_URL='"$(CLONE_URL)"'
146 TF_CPPFLAGS += -DGITWEB_URL='"$(GITWEB_URL)"'
147 TF_CPPFLAGS += -DHOME_URL='"$(HOME_URL)"'
148 TF_CPPFLAGS += -DGET_VERSION='$(PACKAGE)_version'
149 TF_CPPFLAGS += -DLOGLEVELS='$(LOGLEVELS)'
150 TF_CPPFLAGS += -DBUILD_DATE='"$(build_date)"'
151 TF_CPPFLAGS += -DCC_VERSION='"$(cc_version)"'
152 TF_CPPFLAGS += -DUNAME_RS='"$(uname_rs)"'
153 TF_CPPFLAGS += -DLICENSE='"$(LICENSE)"'
154 TF_CPPFLAGS += -DLICENSE_URL='"$(LICENSE_URL)"'
155 TF_CPPFLAGS += -DDATADIR='"$(datadir)"'
156 TF_CPPFLAGS += -I/usr/local/include
161 TF_CFLAGS += -Wundef -W -Wuninitialized
162 TF_CFLAGS += -Wchar-subscripts
163 TF_CFLAGS += -Werror-implicit-function-declaration
164 TF_CFLAGS += -Wmissing-noreturn
165 TF_CFLAGS += -Wbad-function-cast
166 TF_CFLAGS += -Wredundant-decls
167 TF_CFLAGS += -Wdeclaration-after-statement
168 TF_CFLAGS += -Wformat -Wformat-security -Wmissing-format-attribute
169 #TF_CFLAGS += -fsanitize=address
171 %.flex.o: TF_CFLAGS += -Wno-all -Wno-sign-compare -Wno-unused-parameter
172 %.flex.o %.bison.o: TF_CPPFLAGS += -Wno-unused-macros
174 %.o: %.c tfortune.lsg.h txp.bison.h
177 -o $@ -c -MMD -MF $(*F).d \
178 -MT $@ $(TF_CPPFLAGS) $(CPPFLAGS) $(TF_CFLAGS) $(CFLAGS) $<
180 TF_LDFLAGS = -llopsub
181 #TF_LDFLAGS += -fsanitize=address
183 tfortune: $(deps:.d=.o)
185 $(CC) $^ -o $@ $(TF_LDFLAGS) $(LDFLAGS)
187 .PHONY: all mostlyclean clean distclan maintainer-clean install \
188 install-strip README exe build-arch man build-indep
193 $(RM) *.lsg.* *.flex.* *.bison.* $(man) *.suite
195 $(RM) config.mak config.status config.log config.h config.h.in \
196 version.c configure.sh
197 $(RM) -r autom4te.cache
199 git clean -dfqx > /dev/null 2>&1
201 mandir := $(datarootdir)/man/man6
202 epidir := $(datadir)/tfortunes/epigrams
204 INSTALL_PROGRAM ?= $(INSTALL) -m 755
205 INSTALL_DATA ?= $(INSTALL) -m 644
206 ifneq ($(findstring strip, $(MAKECMDGOALS)),)
210 install install-strip: all
211 $(MKDIR_P) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir) $(DESTDIR)$(epidir)
212 $(INSTALL_PROGRAM) $(strip_option) $(exe) $(DESTDIR)$(bindir)
213 $(INSTALL_DATA) $(man) $(DESTDIR)$(mandir)
214 $(INSTALL_DATA) $(epigrams) $(DESTDIR)$(epidir)
227 | web page: $(PACKAGE_HOMEPAGE)
228 | git clone URL: $(CLONE_URL)
229 | gitweb: $(GITWEB_URL)
230 | author's home page: $(HOME_URL)
231 | Send feedback to: $(AUTHOR) <$(EMAIL)>
235 See tfortune.suite. Or build the man page with \"make man\"
236 and run \"man -l $(man)\".
240 This package requires m4, autoconf, gnu make, flex, bison, gcc or
241 clang, and lopsub. The configure script checks if all required
242 dependencies are installed and prints a meaningful error message if
243 one of them is missing.
247 Run \"make\" to build tfortune with the default settings. Run
248 \"./configure -h\" to list configuration options.
252 Run \"sudo make install\" to install to /usr/local. To install to
253 /somewhere/else, run \"./configure --prefix /somewhere/else && make\"
258 @printf '%s\n' "$(README)"