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
# 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): info/mktop.pl
+$(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))