Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 69 additions & 59 deletions book/makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ CHECK_1 := lacheck
CHECK_2 := chktex
CONVERT_PIC := convert
REDUCE_PIC := -resize '800x800>' \
-strip -interlace Plane -gaussian-blur 0.05 -quality 85\% \
-set colorspace Gray -separate -evaluate-sequence Mean
-strip -interlace Plane -gaussian-blur 0.05 -quality 85\% \
-set colorspace Gray -separate -evaluate-sequence Mean
REDUCE_PIC_COLOR := -quality 80\%
RSYNC := rsync -au --exclude 'book.epub' --exclude '*.jpg'
GIT := git --no-pager
Expand All @@ -30,7 +30,7 @@ endif
# and building everything take a long time.
.DEFAULT_GOAL := serif

# List all files that are dependencies {{{
# Dependencies {{{
chapters = baking basics bread-types cover flour-types history intro mix-ins\
non-wheat-sourdough sourdough-starter storing-bread troubleshooting\
wheat-sourdough glossary
Expand Down Expand Up @@ -75,15 +75,17 @@ low_res_images := $(filter-out %.png, $(low_res_images))
# All together.
src_all := $(src_tex) $(src_figures) $(src_tables) $(images) $(src_plots)

# And format specific configurations
# Format specific configuration files
ebook_src := $(src_all) tex4ebook.cfg book.mk4 book-ebook.css

website_src := $(src_all) website.cfg style.css
website_dir := static_website_html
website_assets := $(wildcard ../website/assets/*)
ruby_src := ../website/modify_build.rb $(website_assets)
ruby_pkg := ../website/Gemfile ../website/Gemfile.lock
ruby_pkg := ../website/Gemfile ../website/Gemfile.lock
#}}}

# Internal build rules {{{
# Flowcharts {{{
# TODO: check if it works on github CI
%.png: %.tex
Expand All @@ -98,7 +100,7 @@ ruby_pkg := ../website/Gemfile ../website/Gemfile.lock
ebb -x $<
# }}}

# pdf {{{
# Pdf {{{
# Default rules for pdf, getting overwritten when built in a sub-directory
%.pdf: %.tex
$(LATEX) $<
Expand All @@ -119,12 +121,12 @@ epub/%.epub: %.tex $(ebook_src) cover/cover-page.xbb
copy_ebook_files: build_ebook
$(RSYNC) --exclude '*.png' epub_build/book-epub/ bw-book-epub/

# Now that we have built the ebook we will generate 2 more versions
# Now that we have built the ebook we will generate 2 more versions
#
# 1) With kindle app on phone we want a colour version with size < 50 MB
# 2) A black-white version for actual eink readers
# 1) With kindle app on phone we want a colour version with size < 50 MB
# 2) A black-white version for actual eink readers
#
# In both cases we just convert images and repack the ebpub
# In both cases we just convert images and repack the ebpub

# We do not convert SVG to B&W or lower res for now as they are super small
# anyway
Expand Down Expand Up @@ -181,33 +183,47 @@ website: html ../website/_bundle_install_done $(ruby_src)
export_figures: pdf $(tgt_figures)
cd figures/ && bash export_figures.sh
# }}}
# }}}

# Now with the targets {{{
# Expected usual targets first
# User level targets {{{
# Build targets{{{
.PHONY: all
all: bake

# Finally actual project targets (i.e. build pdf and ebooks)
# Finally actual project targets (i.e. build pdf and ebooks)
.PHONY: pdf serif sans_serif ebook

pdf: serif sans_serif

serif: book_serif/book.pdf
sans_serif: book_sans_serif/book_sans_serif.pdf

ebook: epub/book.epub
bw_ebook: epub/bw_book.epub
low_res_ebook: epub/low_res_book.epub
#}}}

# We keep the old target names for backward compatibility
build_pdf: pdf
build_serif_pdf: serif
build_sans_serif_pdf: sans_serif
build_ebook: ebook
build_bw_ebook: bw_ebook
build_low_res_ebook: low_res_ebook
# Old target names are disabled with helpful help message #{{{
build_pdf:
@echo "build_pdf target is not supported anymore, please use make pdf"
@exit
build_serif_pdf:
@echo "build_serif_pdf target is not supported anymore, please use make serif"
@exit
build_sans_serif_pdf:
@echo "build_sans_serif_pdf target is not supported anymore, please use make sans_serif"
@exit
build_ebook:
@echo "build_ebook target is not supported anymore, please use make ebook"
@exit
build_bw_ebook:
@echo "build_bw_ebook target is not supported anymore, please use make bw_ebook"
@exit
build_low_res_ebook:
@echo "build_low_res_ebook target is not supported anymore, please use make low_res_ebook"
@exit
#}}}

# top level releases rules
# Top level releases rules {{{
.PHONY: bake release_serif release_sans_serif
bake: release_serif release_sans_serif website

Expand All @@ -225,7 +241,7 @@ release_serif: serif ebook bw_ebook low_res_ebook | release
fi

release_sans_serif: sans_serif | release
cp book_sans_serif/book_sans_serif.pdf release/TheBreadCode-The-Sourdough-Framework-sans-serif.pdf
cp book_sans_serif/book_sans_serif.pdf release/TheBreadCode-The-Sourdough-Framework-sans-serif.pdf
# }}}

# Clean up {{{
Expand All @@ -243,12 +259,9 @@ clean_figures:
clean_ebook_build:
-rm epub_build/book*.{4ct,4tc,aux,bbl,bcf,blg,dvi,fdb_latexmk,fls,html}
-rm epub_build/book*.{idv,lg,loc,log,ncx,run.xml,tmp,xref}
-rm epub_build/{book.css,content.opf} epub_build/book-epub/mimetype
-rm epub_build/book*x.svg
-rm epub_build/book.css
-rm epub_build/content.opf
-rm epub_build/book-epub/mimetype
-rm -rf epub_build/book-epub/META-INF
-rm -rf epub_build/book-epub/OEBPS
-rm -rf epub_build/book-epub/META-INF epub_build/book-epub/OEBPS

clean_website_build:
-rm website_build/book*.{4ct,4tc,aux,bbl,bcf,blg,dvi,fdb_latexmk,fls,html}
Expand All @@ -265,14 +278,10 @@ mrproper: clean
$(CLEAN) -C -output-directory=book_serif book.tex
$(CLEAN) -C -output-directory=book_sans_serif book_sans_serif.tex
-rm figures/*.png
-rm -rf epub/
-rm -rf release/
-rm -rf book_serif/
-rm -rf book_sans_serif/
-rm -rf *book-epub/
-rm -rf epub_build/
-rm -rf website_build/
-rm -rf $(website_dir)
-rm -rf book_serif/ book_sans_serif/
-rm -rf epub/ epub_build/ bw-book-epub/ low-res-book-epub/
-rm -rf website_build/ $(website_dir)
#}}}

# Help {{{
Expand Down Expand Up @@ -333,8 +342,9 @@ help:
@echo ""
@echo "set DEBUG i.e make DEBUG=1 ebook to add debug flags to commands"
# }}}
# }}}

# Debug Stuff from now on {{{
# Debug Stuff {{{
###################################

# Verify your spelling and TeX warnings {{{
Expand All @@ -360,54 +370,54 @@ spell-check: $(src_tex) spelling_exceptions.txt
.PHONY: quick quick_ebook show_tools_version printvars
# Those 2 targets allow fast debug cycles but not resolving references etc
# They also ignore dependencies and run each time you call them.
quick: # run latex only once no biber, no references etc...
quick: # run latex only once no biber, no references etc...
$(LATEX) -e '$$max_repeat=1' -halt-on-error -output-directory=book_serif book.tex

quick_ebook: cover/cover-page.xbb # run latex only once no biber, ref etc...
quick_ebook: cover/cover-page.xbb # run latex only once no biber, ref etc...
$(EBOOK) --mode draft book.tex

show_tools_version: # Show version of tools used on the build machine {{{
- $(GIT) log -1 --pretty=%B
show_tools_version: # Show version of tools used on the build machine {{{
-$(GIT) log -5 --pretty="%h: %s by %an on %as"
@echo ""
- uname -a
-uname -a
@echo ""
- $(SHELL) --version
-$(SHELL) --version
@echo ""
- @echo "PATH:"
- @echo $(PATH) | tr ':' '\n'
-@echo "PATH:"
-@echo $(PATH) | tr ':' '\n'
@echo ""
- latexmk --version
-latexmk --version
@echo ""
- lualatex --version
-lualatex --version
@echo ""
- tex4ebook --version
-tex4ebook --version
@echo ""
- make4ht --version
-make4ht --version
@echo ""
- tidy -version
-tidy -version
@echo ""
- dvisvgm --version
-dvisvgm --version
@echo ""
- lacheck | head -5 | tail -1
-lacheck | head -5 | tail -1
@echo ""
- chktex --version
-chktex --version
@echo ""
- make --version
-make --version
@echo ""
- biber -version
-biber -version
@echo ""
- ruby --version
-ruby --version
@echo ""
- $(CONVERT_PIC) --version
-$(CONVERT_PIC) --version
@echo ""
- rsync --version
-rsync --version
# }}}

# You can find the value of variable X with the following command:
# make print-X
print-%: ; @echo $* = $($*) # Print a makefile variable
print-%: ; @echo $* = $($*) # Print a makefile variable

printvars: # Print all variables in the makefile
printvars: # Print all variables in the makefile
@$(foreach V,$(sort $(.VARIABLES)), \
$(if $(filter-out environ% default automatic, \
$(origin $V)),$(info $V=$($V) ($(value $V)))))
Expand Down