frrad / mol-ebook

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Code offer: alternative build script for comparison

ThrawnCA opened this issue · comments

Just in case you're interested: I have my own shell script for building ebooks, with some different features to yours. You might find parts worth copying.

#!/bin/sh

ARTIFACT_NAME="Mother of Learning"
ARTIFACT="$ARTIFACT_NAME.epub"
DIR=`dirname $0`
OUTPUT_DIR="$DIR/target"

clean () {
  rm -r $OUTPUT_DIR/*
}

minify_resources () {
  cp -r $DIR/mimetype $DIR/META-INF $DIR/OEBPS $OUTPUT_DIR/
  for file in `ls $DIR/OEBPS/*ml $DIR/OEBPS/*.ncx $DIR/OEBPS/*.opf`; do
    # collapse whitespace for efficiency
    sed 's|\s\s\s*| |g' "$file" | tr -d '\n' > `echo $file | sed "s|$DIR/OEBPS/|$OUTPUT_DIR/OEBPS/|"`
  done
}

make_epub () {
  SRC_DIR="$1"
  if [ $# -lt 2 ]; then
    DEST_FILE="$ARTIFACT"
  else
    DEST_FILE="$2"
  fi
  (cd "$SRC_DIR" && zip -qX0 "$DEST_FILE" mimetype && zip -qr "$DEST_FILE" META-INF OEBPS)
}

make_epub_if_needed () {
  if [ ! -e "$OUTPUT_DIR/$ARTIFACT" ]; then
    make_epub $DIR "$OUTPUT_DIR/$ARTIFACT"
  fi
}

check_epub () {
  if (which epubcheck 2>/dev/null); then
    epubcheck "$OUTPUT_DIR/$ARTIFACT" || return 1
  fi
}

to_mobi () {
  if (which ebook-convert 2>/dev/null); then
    echo "Converting to MOBI using Calibre ebook-convert..."
    (cd $OUTPUT_DIR && ebook-convert "$ARTIFACT" .mobi)
  else
    echo "No MOBI converter found. Consider installing Calibre."
    return 1
  fi
}

to_pdf () {
  if (which ebook-convert 2>/dev/null); then
    echo "Converting to PDF using Calibre ebook-convert..."
    (cd $OUTPUT_DIR && ebook-convert "$ARTIFACT" .pdf --page-size a4 --pdf-page-numbers --pdf-serif-family "Adobe Garamond Pro" --pdf-standard-font serif)
  elif (which mutool 2>/dev/null); then
    echo "Converting to PDF using Mutool..."
    (cd $OUTPUT_DIR && mutool convert -o "$ARTIFACT_NAME.pdf" "$ARTIFACT")
  else
    echo "No PDF converter found. Consider installing Calibre or MuPDF Tools."
    return 1
  fi
}

make_target () {
  BUILD_TARGET=$1
  case $BUILD_TARGET in
    all)
      clean
      minify_resources
      make_epub $OUTPUT_DIR
      to_mobi
      to_pdf
      ;;
    mobi)
      make_epub_if_needed
      to_mobi
      ;;
    pdf)
      make_epub_if_needed
      to_pdf
      ;;
    epub)
      minify_resources
      make_epub $OUTPUT_DIR
      ;;
    uncompressed_epub)
      make_epub $DIR "$OUTPUT_DIR/$ARTIFACT"
      ;;
    check)
      make_epub_if_needed
      check_epub || exit 1
      ;;
    clean)
      clean
      ;;
    *)
      echo "Unrecognised build target: $BUILD_TARGET"
  esac
}

mkdir -p $OUTPUT_DIR
if [ $# -eq 0 ]; then
  make_target all
else
  for target in $@; do
    make_target "$target"
  done
fi