diff --git a/doc/build-manuals.sh b/doc/build-manuals.sh index fe10cb984ddceb6a75b0e799b7e0f3381dd41228..725ae1c670b36d9f33b091d199cb851cfd55c332 100755 --- a/doc/build-manuals.sh +++ b/doc/build-manuals.sh @@ -28,7 +28,13 @@ mkdir -p manuals FC_SUFFIX=$(cat ../VERSION)-$(cat ../VERSION_CODENAME) -ACSL_SUFFIX=$(grep acslversion acsl/version.tex | sed 's/.*{\([^{}].*\)}.*/\1/') +ACSL_SUFFIX=$(grep acslversion acsl/version.tex | sed 's/.*{\([^{}\\]*\).*/\1/') +EACSL_SUFFIX=$(grep 'newcommand{\\eacsllangversion' ../src/plugins/e-acsl/doc/refman/main.tex | sed 's/.*{\([^{}\\]*\).*/\1/') +# sanity check +if [ "$EACSL_SUFFIX" = "" ]; then + echo "error: could not retrive E-ACSL version from ../src/plugins/e-acsl/doc/refman/main.tex" + exit 1 +fi build () { @@ -36,7 +42,8 @@ build () { make -C $(dirname $1) $(basename $1) || \ (echo "######### $1 failed" ; exit 1) echo "##### $1 done" - MANUAL=$(basename $2 .pdf)-$3.pdf + # extract extension, add suffix, re-append extension + MANUAL=${2%.*}-$3.${2##*.} cp -f $1 manuals/$MANUAL echo "##### $MANUAL copied" ln -srf manuals/$MANUAL manuals/$2 @@ -45,16 +52,29 @@ build () { EACSL_DOC=../src/plugins/e-acsl/doc export -f build -SHELL=(type -p bash) parallel -j 4 --csv build {1} {2} {3} ::: \ + +# 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,$ACSL_SUFFIX +$EACSL_DOC/refman/e-acsl.pdf,e-acsl.pdf,$EACSL_SUFFIX + +# Sanity check: version differences between Frama-C, ACSL and E-ACSL +if [ "$ACSL_SUFFIX" != "$EACSL_SUFFIX" ]; then + echo "WARNING: different versions for ACSL and E-ACSL manuals: $ACSL_SUFFIX versus $EACSL_SUFFIX" +fi