#!/bin/sh INDIVID_FOLDER="recettes_individ" INDIVID_FOLDER_PDF="recettes_individ_pdf" CHAPTERS="chapters" CHAPTERS2="chapters2" MERGE="chapters_merge" REPLACEMENT_SCRIPT="./replacements.pl" prepare_individ() { individ_source="$1" individ_dest="$2" cat > "$individ_dest" <> "$individ_dest" cat >> "$individ_dest" < /dev/null ret=$? if [ $ret -eq 1 ]; then failindex=$(echo ${failindex}+1 | bc); fi; syntax_result $ret "INDEX" done echo "Test LIGNE (ligne 'recipe' sur une ligne avec bon nombre d'arguments) : " $failligne "erreurs" echo "Test TEMPS (le paramètre de temps pour la recette est présent et bien formaté) :" $failtemps "erreurs" echo "Test PORTIONS (les portions sont sous un format listé)" $failportions "erreurs" echo "Test INDEX (une entrée dans l'index est écrite)" $failindex "erreurs" } operate_replacements() { # We check that the replacement script is there, otherwise we just # ignore this step. if [ -f "$REPLACEMENT_SCRIPT" -a -x "$REPLACEMENT_SCRIPT" ]; then echo "Processing replacement rules" $REPLACEMENT_SCRIPT $(find $@ -name '*.tex') else echo "'$REPLACEMENT_SCRIPT' not found. No automatic word substitution will occur" >&2 fi } build_pdf_book() { if which "rubber" > /dev/null; then rubber -d $1 > /dev/null 2> /dev/null else pdflatex "$1".tex > /dev/null makeindex "$1" > /dev/null 2> /dev/null pdflatex "$1".tex > /dev/null fi } build_pdf_page() { pdflatex "$1" -output-directory "$2" > /dev/null } if [ $# -eq 0 ]; then TARGET_BUILD="all" else TARGET_BUILD="$1" fi # We have to garantee that the destination folders will be there ... if [ ! -d $INDIVID_FOLDER ]; then makedir $INDIVID_FOLDER fi if [ ! -d $INDIVID_FOLDER_PDF ]; then makedir $INDIVID_FOLDER_PDF fi if [ ! -d $MERGE ]; then makedir $MERGE fi case "$TARGET_BUILD" in all) echo "Building the whole book" rm -f "$CHAPTERS"/*.tex "$CHAPTERS2"/*.tex operate_replacements "$CHAPTERS" "$CHAPTERS2" echo "Preparing build files" for chapter in $(find "$CHAPTERS"/* "$CHAPTERS2"/* -prune -type d); do perl tri.pl "$chapter".tex "$chapter" done; for chapter in $(find "$CHAPTERS"/* "$CHAPTERS2"/* -prune -type d | awk -F'/' '{print $2;}' | sort | uniq); do perl tri.pl "$MERGE"/"$chapter".tex "$CHAPTERS"/"$chapter" "$CHAPTERS2"/"$chapter" done; echo "Building book I" build_pdf_book "recettes" echo "Building book II" build_pdf_book "recettes2" echo "Building complete book" build_pdf_book "recettes_merge" ;; clean) echo "Cleaning the build files" rm -f "$CHAPTERS"/*.tex "$CHAPTERS2"/*.tex "$MERGE"/*.tex; rm -f *.aux *.log *.ind *.ilg *.idx *.toc ;; individ) echo "Building individual recipes"; operate_replacements "$CHAPTERS" "$CHAPTERS2" for chapter in $(find "$CHAPTERS"/* "$CHAPTERS2"/* -prune -type d); do for recette in $(find "$chapter"/ -name '*.tex'); do recette_base=$(basename "$recette") echo "Compiling $recette_base" prepare_individ "$recette" "$INDIVID_FOLDER"/"$recette_base"; build_pdf_page "$INDIVID_FOLDER"/"$recette_base" "$INDIVID_FOLDER_PDF" rm $(basename "$recette_base" .tex).* done done ;; individ-clean) echo "Cleaning the individual recipes"; rm -f "$INDIVID_FOLDER"/* ;; syntax-check) echo "Checking syntax for books" syntax_check $CHAPTERS syntax_check $CHAPTERS2 ;; *) echo "Build target '$TARGET_BUILD' not recognized" >&2; echo "Recognized options are : $0 [all | clean | individ | individ-clean | syntax-check]" echo "If no build target is provided, 'all' is assumed" return 10; ;; esac