aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Reed <michael@michaelreed.io>2017-07-09 03:32:14 -0400
committerMichael Reed <michael@michaelreed.io>2017-07-09 15:47:47 -0400
commitac4ba8372107488ea850a74e42e9c978441c6b67 (patch)
tree0a4ae154ed08835c9f527b709474b9f75ef5c982
parent59293cc7c60688d5b34a038805a33dbdbd2133d3 (diff)
downloadlibrebootfr-ac4ba8372107488ea850a74e42e9c978441c6b67.tar.gz
librebootfr-ac4ba8372107488ea850a74e42e9c978441c6b67.zip
Build website incrementally (and faster if you have the CPU cores)
This is done by replacing www/generate.sh with a Makefile. Benefits: - Makes builds incremental, meaning that only the minimum number of markdown files will be converted to HTML during a build. The previous scheme always generated a new HTML file for every markdown file, which is a big waste of time if only 1 or 2 markdown files have been changed. - Allows for much faster builds through concurrent jobs (e.g., via "make -j4"). On my 4-core machine, my average build time for the website with generate.sh was just over 26 seconds; with "make -j4", it was 13 seconds. - Avoids portability issues with find(1) in generate.sh, which I was encountering on OpenBSD. A note on portability: unlike GNU Make, OpenBSD's Make does not have the "$(shell [commands])" construct, so we don't use that. Instead we use "!= [commands]", which is supported by both.
-rw-r--r--www/Makefile44
-rwxr-xr-xwww/generate.sh9
-rw-r--r--www/git.md2
-rwxr-xr-xwww/publish.sh1
4 files changed, 45 insertions, 11 deletions
diff --git a/www/Makefile b/www/Makefile
new file mode 100644
index 00000000..681e3067
--- /dev/null
+++ b/www/Makefile
@@ -0,0 +1,44 @@
+# Copyright (C) 2017 Michael Reed <michael@michaelreed.io>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+MD_MAIN != find -L . -name '*.md' -and ! -path '*/news/*'
+HTML_MAIN = $(MD_MAIN:.md=.html)
+
+MD_NEWS != find -L news -name '*.md' -and ! -name index.md
+HTML_NEWS = $(MD_NEWS:.md=.html)
+
+
+# news/index.html implies the building of $(HTML_NEWS).
+all: $(HTML_MAIN) news/index.html
+
+.SUFFIXES: .md .html
+# Does not apply for news/index.md; see below.
+.md.html:
+ ./publish.sh $<
+
+# Unlike all the other markdown files, news/index.md does not exist at first:
+# it must be generated by index.sh. Also note that index.sh depends on the
+# existence of the HTML version of all news items, hence the dependency line
+# below.
+news/index.md: $(HTML_NEWS)
+ ./index.sh
+
+clean:
+ rm -f $(HTML_MAIN) $(HTML_MAIN:.html=.bare.html) \
+ $(HTML_NEWS) $(HTML_NEWS:.html=.bare.html) \
+ news/index.md news/index.html news/index.bare.html \
+ feed.xml news/feed.xml
+
+.PHONY: clean
diff --git a/www/generate.sh b/www/generate.sh
deleted file mode 100755
index 3e54dc13..00000000
--- a/www/generate.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env bash
-
-[ "x${DEBUG+set}" = 'xset' ] && set -v
-set -e
-
-find -L . -name '*.html' -and -not -name 'template.html' -delete
-find -L . -name '*.md' -exec ./publish.sh {} \;
-./index.sh
-./publish.sh news/index.md
diff --git a/www/git.md b/www/git.md
index 914bb5c5..ed3b444b 100644
--- a/www/git.md
+++ b/www/git.md
@@ -24,7 +24,7 @@ with the following scripts in that directory:
- index.sh: generates the news feed (on the News section of the website)
- publish.sh: converts an .md file to an .html file
-- generate.sh: with calls to index.sh and publish.sh, compiles the entire
+- Makefile: with calls to index.sh and publish.sh, compiles the entire
Libreboot website
Use any standard text editor (e.g. Vim, Emacs, Nano, Gedit) to edit the files,
diff --git a/www/publish.sh b/www/publish.sh
index 40140728..b1b1b405 100755
--- a/www/publish.sh
+++ b/www/publish.sh
@@ -20,7 +20,6 @@
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -e
-printf '%s\n' $1
FILE=${1%.md}
TMPFILE=$(mktemp -t libreboot_www.XXXXXXXXXX)