From: "Ulrich Müller" <ulm@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/devmanual:master commit in: /
Date: Sat, 2 Apr 2016 08:54:18 +0000 (UTC) [thread overview]
Message-ID: <1459584444.7977d86d8cfa8ef8b4368c338cb6933024361186.ulm@gentoo> (raw)
commit: 7977d86d8cfa8ef8b4368c338cb6933024361186
Author: Göktürk Yüksek <gokturk <AT> binghamton <DOT> edu>
AuthorDate: Tue Mar 29 09:48:40 2016 +0000
Commit: Ulrich Müller <ulm <AT> gentoo <DOT> org>
CommitDate: Sat Apr 2 08:07:24 2016 +0000
URL: https://gitweb.gentoo.org/proj/devmanual.git/commit/?id=7977d86d
Makefile: construct the full dependency tree instead of pattern matching
Currently, the Makefile assumes that each document can be
independently transformed and thus exposes a flat dependency
hierarchy. This is incorrect because of the way table of contents
(TOC) is generated. When a page is added or removed, its immediate
parent and all of the parent's parents, all the way up to the root
node, need to be recompiled in a bottom-up fashion to regenerate the
TOC in each page.
Use black magic to automatically generate build rules with proper
prerequisites during runtime. The idea is to mirror the hierarchy in the
document: every section has a dependency to its subsections. The rules
are generated by iterating through each directory in the entire file
system tree.
Signed-off-by: Göktürk Yüksek <gokturk <AT> binghamton.edu>
Makefile | 33 +++++++++++++++++++++++++--------
1 file changed, 25 insertions(+), 8 deletions(-)
diff --git a/Makefile b/Makefile
index f22f304..d4182a8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,5 @@
-text_files := $(shell find -name "text.xml" | sed -e "s/text.xml$$/index.html/")
+ALL_DIRS := $(shell find -name "text.xml" -exec dirname {} +)
+text_files := $(addsuffix /index.html,$(ALL_DIRS))
image_files := $(shell find -name "*.svg" | sed -e "s/svg$$/png/")
all: prereq $(text_files) $(image_files)
@@ -7,13 +8,6 @@ prereq:
@type -p convert &>/dev/null || { echo "media-gfx/imagemagick with corefonts, svg and truetype required" >&2; exit 1; }; \
type -p xsltproc &>/dev/null || { echo "dev-libs/libxslt is required" >&2; exit 1; }
-%index.html : %text.xml devbook.xsl
- xsltproc devbook.xsl $< > $@
-
-# Someone should figure out a way to put this to the pattern
-index.html : text.xml devbook.xsl
- xsltproc devbook.xsl $< > $@
-
%.png : %.svg
convert $< $@
@@ -21,3 +15,26 @@ clean:
@find . -name "*.png" -a \! -path "./icons/*" -exec rm -v {} +
@find . -name "index.html" -exec rm -v {} +
+# Given a directory with text.xml in it, return its immediate children as prerequisites
+# Hypothetical example:
+# INPUT: "./archs" "./archs/amd64 ./archs/x86 ./ebuild-writing ./appendices"
+# OUTPUT: ./archs/amd64/index.html ./archs/amd64/index.html
+define get_prerequisites =
+$(addsuffix /index.html,$(foreach subdir,$(2),$(if $(subst $(1)/,,$(dir $(subdir))),,$(subdir))))
+endef
+
+# Given a directory with text.xml in it, genereate a complete build rule with prerequisites
+# Hypothetical example:
+# INPUT: "./archs" "./archs/amd64 ./archs/x86 ./ebuild-writing ./appendices"
+# OUTPUT ./archs/index.html: ./archs/text.xml devbook.xsl ./archs/amd64/index.html ./archs/x86/index.html
+# xsltproc devbook.xsl ./archs/text.xml > ./archs/index.html
+define generate_rule =
+$(1)/index.html: $(1)/text.xml devbook.xsl $(call get_prerequisites,$(1),$(2))
+ xsltproc devbook.xsl $$< > $$@
+endef
+
+# This generates individual build rules for all the text files by
+# iterating over all the directories in the file system tree
+$(foreach dir,$(ALL_DIRS),$(eval $(call generate_rule,$(dir),$(filter-out $(dir),$(ALL_DIRS)))))
+
+.PHONY: all prereq clean
next reply other threads:[~2016-04-02 8:54 UTC|newest]
Thread overview: 214+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-02 8:54 Ulrich Müller [this message]
-- strict thread matches above, loose matches on Subject: below --
2025-01-06 21:39 [gentoo-commits] proj/devmanual:master commit in: / Ulrich Müller
2024-11-12 18:51 Ulrich Müller
2024-11-09 6:58 Ulrich Müller
2024-11-06 20:00 Ulrich Müller
2024-11-05 22:13 Ulrich Müller
2024-11-01 20:01 Ulrich Müller
2024-11-01 17:27 Ulrich Müller
2024-11-01 11:20 Ulrich Müller
2024-11-01 11:20 Ulrich Müller
2024-10-31 18:59 Ulrich Müller
2024-10-31 11:08 Ulrich Müller
2024-10-31 11:08 Ulrich Müller
2024-10-28 16:19 Ulrich Müller
2024-10-27 7:55 Ulrich Müller
2024-07-30 14:30 Ulrich Müller
2024-06-11 16:24 Ulrich Müller
2024-06-10 15:41 Ulrich Müller
2024-05-08 6:43 Ulrich Müller
2024-04-22 18:19 Ulrich Müller
2024-03-23 7:10 Ulrich Müller
2024-01-28 17:40 Ulrich Müller
2023-11-23 17:24 Ulrich Müller
2023-11-05 16:44 Ulrich Müller
2023-11-02 17:08 Ulrich Müller
2023-11-02 17:06 Ulrich Müller
2023-11-02 17:06 Ulrich Müller
2023-10-31 20:03 Ulrich Müller
2023-10-31 20:03 Ulrich Müller
2023-10-31 20:03 Ulrich Müller
2023-10-31 20:03 Ulrich Müller
2023-10-31 20:03 Ulrich Müller
2023-10-22 11:44 Ulrich Müller
2023-10-22 11:44 Ulrich Müller
2023-10-05 20:43 Ulrich Müller
2022-06-24 10:51 Ulrich Müller
2022-06-22 14:35 Ulrich Müller
2022-06-17 8:00 Ulrich Müller
2022-06-10 17:20 Ulrich Müller
2022-01-24 18:16 Ulrich Müller
2022-01-19 11:30 Ulrich Müller
2022-01-16 21:52 Ulrich Müller
2021-10-11 10:53 Ulrich Müller
2021-10-10 10:34 Ulrich Müller
2021-10-10 10:34 Ulrich Müller
2021-09-08 17:52 Ulrich Müller
2021-09-08 17:52 Ulrich Müller
2021-07-14 12:27 Ulrich Müller
2021-03-10 19:51 Ulrich Müller
2021-03-10 19:51 Ulrich Müller
2021-03-10 19:51 Ulrich Müller
2021-03-10 19:51 Ulrich Müller
2021-03-10 19:51 Ulrich Müller
2021-03-10 18:39 Ulrich Müller
2021-03-07 17:40 Ulrich Müller
2021-03-03 19:08 Ulrich Müller
2021-02-27 15:47 Ulrich Müller
2021-02-25 23:49 Ulrich Müller
2021-02-25 19:30 Ulrich Müller
2021-02-25 19:30 Ulrich Müller
2021-02-24 19:36 Ulrich Müller
2021-02-06 10:39 Ulrich Müller
2021-01-25 10:34 Ulrich Müller
2021-01-18 12:17 Ulrich Müller
2021-01-17 22:09 Ulrich Müller
2020-08-28 17:46 Ulrich Müller
2020-03-06 16:30 Ulrich Müller
2020-03-03 8:30 Ulrich Müller
2020-03-03 8:18 Ulrich Müller
2020-03-02 10:23 Ulrich Müller
2020-03-02 10:23 Ulrich Müller
2020-02-28 7:20 Ulrich Müller
2020-02-28 7:20 Ulrich Müller
2020-02-28 7:17 Ulrich Müller
2020-02-28 7:15 Ulrich Müller
2020-02-28 7:15 Ulrich Müller
2020-02-28 7:15 Ulrich Müller
2020-02-26 20:41 Ulrich Müller
2020-02-26 20:41 Ulrich Müller
2020-02-26 18:59 Ulrich Müller
2020-02-26 18:53 Ulrich Müller
2020-02-26 18:53 Ulrich Müller
2020-02-26 18:53 Ulrich Müller
2020-02-16 13:16 Ulrich Müller
2020-02-11 11:30 Ulrich Müller
2020-02-10 17:31 Ulrich Müller
2020-02-07 14:01 Ulrich Müller
2020-02-07 5:34 Ulrich Müller
2020-02-06 20:53 Ulrich Müller
2020-02-03 10:06 Ulrich Müller
2020-02-03 0:07 Ulrich Müller
2020-02-03 0:07 Ulrich Müller
2020-02-03 0:07 Ulrich Müller
2020-01-30 13:45 Brian Evans
2020-01-27 20:44 Ulrich Müller
2020-01-27 19:58 Ulrich Müller
2020-01-27 19:58 Ulrich Müller
2020-01-22 18:24 Ulrich Müller
2020-01-21 21:53 Ulrich Müller
2020-01-16 18:53 Ulrich Müller
2020-01-15 7:06 Ulrich Müller
2020-01-14 8:15 Ulrich Müller
2020-01-12 9:23 Ulrich Müller
2020-01-09 7:34 Ulrich Müller
2020-01-09 7:34 Ulrich Müller
2020-01-02 13:38 Ulrich Müller
2020-01-02 12:54 Ulrich Müller
2020-01-02 12:54 Ulrich Müller
2020-01-02 12:54 Ulrich Müller
2019-12-26 21:36 Ulrich Müller
2019-12-26 20:33 Ulrich Müller
2019-12-26 17:06 Ulrich Müller
2019-12-26 16:47 Ulrich Müller
2019-12-21 5:19 Ulrich Müller
2019-12-19 21:02 Göktürk Yüksek
2019-12-19 21:02 Göktürk Yüksek
2019-12-19 21:02 Göktürk Yüksek
2019-12-19 21:02 Göktürk Yüksek
2019-12-19 21:02 Göktürk Yüksek
2019-12-19 21:02 Göktürk Yüksek
2019-12-19 21:02 Göktürk Yüksek
2019-12-19 21:02 Göktürk Yüksek
2019-12-19 21:02 Göktürk Yüksek
2019-12-19 21:02 Göktürk Yüksek
2019-12-14 10:46 Ulrich Müller
2019-12-10 8:47 Ulrich Müller
2019-12-10 8:47 Ulrich Müller
2019-12-07 22:05 Ulrich Müller
2019-11-26 3:05 Göktürk Yüksek
2019-03-22 18:51 Brian Evans
2019-03-22 18:51 Brian Evans
2019-03-19 19:02 Brian Evans
2019-03-19 17:11 Brian Evans
2018-01-03 5:57 [gentoo-commits] proj/devmanual:codesample-indent-fix " Göktürk Yüksek
2018-01-03 21:59 ` [gentoo-commits] proj/devmanual:master " Göktürk Yüksek
2017-02-05 22:41 Ulrich Müller
2016-10-31 1:21 Göktürk Yüksek
2016-10-28 17:15 Ulrich Müller
2016-10-06 22:09 Mike Gilbert
2016-06-15 18:46 Ulrich Müller
2016-05-15 11:48 Ulrich Müller
2016-05-15 11:48 Ulrich Müller
2016-02-05 8:41 Ulrich Müller
2016-01-01 21:59 NP Hardass
2015-09-05 15:48 Markos Chandras
2015-08-27 6:50 Justin Lecher
2015-08-21 6:36 Justin Lecher
2015-08-21 6:36 Justin Lecher
2015-08-20 7:06 Justin Lecher
2015-08-20 7:04 Justin Lecher
2015-08-18 11:47 Justin Lecher
2015-08-09 12:39 Justin Lecher
2015-08-09 12:39 Justin Lecher
2015-08-09 9:30 Justin Lecher
2015-08-09 9:30 Justin Lecher
2015-07-22 1:15 Jorge Manuel B. S. Vicetto
2015-06-17 12:05 Ulrich Müller
2015-06-01 18:41 Ulrich Müller
2015-06-01 15:38 Ulrich Müller
2015-05-31 10:45 Markus Meier
2015-05-31 10:45 Markus Meier
2015-03-30 18:21 Markos Chandras
2015-03-11 18:26 Markos Chandras
2015-02-15 9:54 Markos Chandras
2015-01-17 9:07 Markos Chandras
2014-11-14 18:07 Markos Chandras
2014-11-14 18:07 Markos Chandras
2014-11-14 18:07 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-11-08 12:27 Markos Chandras
2014-10-18 17:36 Markos Chandras
2014-10-18 17:36 Markos Chandras
2014-10-18 17:36 Markos Chandras
2014-10-18 17:35 Markos Chandras
2014-07-24 18:06 ` Markos Chandras
2014-10-18 17:35 Markos Chandras
2014-07-24 18:06 ` Markos Chandras
2014-10-18 17:35 Markos Chandras
2014-07-24 18:06 ` Markos Chandras
2014-07-24 18:06 Markos Chandras
2014-10-18 17:35 ` Markos Chandras
2014-03-16 10:24 Markos Chandras
2014-03-16 10:24 Markos Chandras
2014-03-16 10:24 Markos Chandras
2014-03-08 14:53 Markos Chandras
2014-01-05 12:35 Markos Chandras
2014-01-04 11:23 Markos Chandras
2014-01-03 18:32 Markos Chandras
2013-09-26 7:41 Markos Chandras
2013-09-21 12:23 Markos Chandras
2013-09-21 12:23 Markos Chandras
2013-07-25 8:28 Justin Lecher
2013-05-19 8:38 Markos Chandras
2013-05-15 12:57 Dirkjan Ochtman
2013-05-12 19:25 Markos Chandras
2013-05-12 15:06 Markos Chandras
2013-05-11 19:02 Markos Chandras
2012-10-12 17:44 Ulrich Mueller
2012-08-08 19:23 Markos Chandras
2012-03-18 0:16 Markos Chandras
2011-12-20 12:39 Torsten Veller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1459584444.7977d86d8cfa8ef8b4368c338cb6933024361186.ulm@gentoo \
--to=ulm@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox