Code offer: alternative build script for comparison
ThrawnCA opened this issue · comments
ThrawnCA commented
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