man6 := $(filter man/%.6, $(src))
builtins := $(filter src/lib/global/%.config, $(src))
-# Info subjects (automatically generated)
--include subjects.mk
+# Info subjects
+include $(srcdir)/info/subjects.mk
# Abbreviations
topics := $(patsubst %.t,%,$(notdir $(tsrc)))
# Generated files
# See `Cleanliness' below
-mk := subjects.mk
+mk :=
ifeq ($(revctrl),git)
mk += $(srcdir)/sources.mk
endif
# Formatted info:
info.nr := $(addprefix info.nr/, $(info))
info.html := $(addprefix info.html/, $(addsuffix .html, $(info)))
-info.all := $(info.nr) $(info.html) info.ps
+info.all := $(info.nr) $(info.html) info.ps info/stamp-subj
# Tests
# sandbox
$(checks): all
check-smoke:
@echo "Warning: smoke test is immature and needs work." >&2
+ $(srcdir)/tests/files-test $(srcdir)
+ $(srcdir)/tests/fairland-test $(srcdir)
ifeq ($(empthread),LWP)
$(srcdir)/tests/smoke-test $(srcdir)
else
# Info formatting
-# FIXME Remaking subjects doesn't work correctly when info sources get
-# removed or subjects get dropped.
-
-subjects.mk: info/findsubj.pl $(tsrc)
- perl $(srcdir)/info/findsubj.pl $(filter %.t, $^)
-
-$(tsubj): info/mksubj.pl
- perl $(srcdir)/info/mksubj.pl $@ $(filter %.t, $^)
+# mksubj.pl reads $(tsrc) and writes $(tsubj). The naive rule
+# $(ttop) $(tsubj): $(tsrc)
+# COMMAND
+# runs COMMAND once for each target. That's because multiple targets
+# in an explicit rule is just a shorthand for one rule per target,
+# each with the same prerequisites and commands. Use a stamp file.
+$(tsubj): info/stamp-subj ;
+info/stamp-subj: info/mksubj.pl $(tsrc)
+ $(call quiet-command,perl $(srcdir)/info/mksubj.pl $(subjects) $(filter %.t, $^),GEN '$$(subjects)')
+ >$@
-$(ttop): $(tsubj)
- perl $(srcdir)/info/mktop.pl $@ $(filter %.t, $^)
+$(ttop): info/mktop.pl info/subjects.mk
+ $(call quiet-command,perl $(srcdir)/info/mktop.pl $@ $(subjects),GEN $@)
info.nr/all: $(filter-out info.nr/all, $(info.nr))
>$@
cd $(srcdir) && autoconf
# autoheader might not change config.h.in, so touch a stamp file.
-$(srcdir)/config.h.in: stamp-h.in
+$(srcdir)/config.h.in: stamp-h.in ;
$(srcdir)/stamp-h.in: configure.ac aclocal.m4
cd $(srcdir) && autoheader
touch $@
cd $(srcdir) && aclocal -I m4
# config.status might not change config.h; use the stamp file.
-config.h: stamp-h
+config.h: stamp-h ;
stamp-h: config.h.in config.status
./config.status config.h stamp-h