From ac4ba8372107488ea850a74e42e9c978441c6b67 Mon Sep 17 00:00:00 2001 From: Michael Reed Date: Sun, 9 Jul 2017 03:32:14 -0400 Subject: 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. --- www/Makefile | 44 ++++++++++++++++++++++++++++++++++++++++++++ www/generate.sh | 9 --------- www/git.md | 2 +- www/publish.sh | 1 - 4 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 www/Makefile delete mode 100755 www/generate.sh (limited to 'www') 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 +# +# 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 . + +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) -- cgit v1.2.3-70-g09d2