From f36b30bcd67f8a753d4ba0ba097b96eba5c70de6 Mon Sep 17 00:00:00 2001
From: Allan Blanchard <allan.blanchard@cea.fr>
Date: Fri, 4 Mar 2022 10:48:37 +0100
Subject: [PATCH] [doc] allow sequential build of manuals

---
 doc/build-manuals.sh | 63 ++++++++++++++++++++++++++++----------------
 1 file changed, 40 insertions(+), 23 deletions(-)

diff --git a/doc/build-manuals.sh b/doc/build-manuals.sh
index 53e5ab503a6..ee63e0d148b 100755
--- a/doc/build-manuals.sh
+++ b/doc/build-manuals.sh
@@ -1,9 +1,10 @@
 #! /usr/bin/env bash
 
-# GNU parallel needs to be installed
+# Look for GNU parallel
+PARALLEL=1
 if ! command -v parallel >/dev/null 2>/dev/null; then
-    echo "parallel is required"
-    exit 127
+    echo "parallel not found, building in sequential"
+    PARALLEL=0
 fi
 
 # latexmk needs to be installed
@@ -73,26 +74,42 @@ EACSL_DOC=../src/plugins/e-acsl/doc
 
 export -f build
 
-# Note: The makefiles of ACSL/E-ACSL are not parallelizable when producing both
-# acsl.pdf and acsl-implementation.pdf (race conditions in intermediary files,
-# leading to non-deterministic errors).
-# Therefore, we perform a second call to parellel for these files.
-SHELL=(type -p bash) parallel --halt soon,fail=1 --csv build {1} {2} {3} ::: \
-userman/userman.pdf,user-manual.pdf,$FC_SUFFIX \
-developer/developer.pdf,plugin-development-guide.pdf,$FC_SUFFIX \
-rte/main.pdf,rte-manual.pdf,$FC_SUFFIX \
-aorai/main.pdf,aorai-manual.pdf,$FC_SUFFIX \
-aorai/aorai-example.tgz,aorai-example.tgz,$FC_SUFFIX \
-value/main.pdf,eva-manual.pdf,$FC_SUFFIX \
-metrics/metrics.pdf,metrics-manual.pdf,$FC_SUFFIX \
-../src/plugins/wp/doc/manual/wp.pdf,wp-manual.pdf,$FC_SUFFIX \
-acsl/acsl-implementation.pdf,acsl-implementation.pdf,$FC_SUFFIX \
-$EACSL_DOC/refman/e-acsl-implementation.pdf,e-acsl-implementation.pdf,$FC_SUFFIX \
-$EACSL_DOC/userman/main.pdf,e-acsl-manual.pdf,$FC_SUFFIX \
-
-SHELL=(type -p bash) parallel --halt soon,fail=1 --csv build {1} {2} {3} ::: \
-acsl/acsl.pdf,acsl.pdf,$ACSL_SUFFIX \
-$EACSL_DOC/refman/e-acsl.pdf,e-acsl.pdf,$EACSL_SUFFIX
+if [[ $PARALLEL -eq 1 ]]; then
+    # Note: The makefiles of ACSL/E-ACSL are not parallelizable when producing both
+    # acsl.pdf and acsl-implementation.pdf (race conditions in intermediary files,
+    # leading to non-deterministic errors).
+    # Therefore, we perform a second call to parellel for these files.
+    SHELL=(type -p bash) parallel --halt soon,fail=1 --csv build {1} {2} {3} ::: \
+    userman/userman.pdf,user-manual.pdf,$FC_SUFFIX \
+    developer/developer.pdf,plugin-development-guide.pdf,$FC_SUFFIX \
+    rte/main.pdf,rte-manual.pdf,$FC_SUFFIX \
+    aorai/main.pdf,aorai-manual.pdf,$FC_SUFFIX \
+    aorai/aorai-example.tgz,aorai-example.tgz,$FC_SUFFIX \
+    value/main.pdf,eva-manual.pdf,$FC_SUFFIX \
+    metrics/metrics.pdf,metrics-manual.pdf,$FC_SUFFIX \
+    ../src/plugins/wp/doc/manual/wp.pdf,wp-manual.pdf,$FC_SUFFIX \
+    acsl/acsl-implementation.pdf,acsl-implementation.pdf,$FC_SUFFIX \
+    $EACSL_DOC/refman/e-acsl-implementation.pdf,e-acsl-implementation.pdf,$FC_SUFFIX \
+    $EACSL_DOC/userman/main.pdf,e-acsl-manual.pdf,$FC_SUFFIX \
+
+    SHELL=(type -p bash) parallel --halt soon,fail=1 --csv build {1} {2} {3} ::: \
+    acsl/acsl.pdf,acsl.pdf,$ACSL_SUFFIX \
+    $EACSL_DOC/refman/e-acsl.pdf,e-acsl.pdf,$EACSL_SUFFIX
+else
+    build userman/userman.pdf user-manual.pdf $FC_SUFFIX
+    build developer/developer.pdf plugin-development-guide.pdf $FC_SUFFIX
+    build rte/main.pdf rte-manual.pdf $FC_SUFFIX
+    build aorai/main.pdf aorai-manual.pdf $FC_SUFFIX
+    build aorai/aorai-example.tgz aorai-example.tgz $FC_SUFFIX
+    build value/main.pdf eva-manual.pdf $FC_SUFFIX
+    build metrics/metrics.pdf metrics-manual.pdf $FC_SUFFIX
+    build ../src/plugins/wp/doc/manual/wp.pdf wp-manual.pdf $FC_SUFFIX
+    build acsl/acsl.pdf acsl.pdf $ACSL_SUFFIX
+    build acsl/acsl-implementation.pdf acsl-implementation.pdf $FC_SUFFIX
+    build $EACSL_DOC/refman/e-acsl-implementation.pdf e-acsl-implementation.pdf $FC_SUFFIX
+    build $EACSL_DOC/userman/main.pdf e-acsl-manual.pdf $FC_SUFFIX
+    build $EACSL_DOC/refman/e-acsl.pdf e-acsl.pdf $EACSL_SUFFIX
+fi
 
 # Sanity check: version differences between Frama-C, ACSL and E-ACSL
 FAIL = 0
-- 
GitLab