From 515bdd658d91020c73f82b70ff001015b359adc0 Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Thu, 6 Jun 2024 08:17:18 -0300 Subject: Initial import --- Makefile.bookup | 215 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 Makefile.bookup (limited to 'Makefile.bookup') diff --git a/Makefile.bookup b/Makefile.bookup new file mode 100644 index 0000000..44158f0 --- /dev/null +++ b/Makefile.bookup @@ -0,0 +1,215 @@ +# +# Parameters +# +# Customize to your needs in your main Makefile. Examples: +# +# BOOKUP = vendor/bookup +# OUTPUT = my-essay +# OUTPUT = essay +# WEBSITE = some.hostname + +# Bookup base folder +BOOKUP ?= . + +# Project name +PROJECT ?= bookup + +# Output file names (prefix) +OUTPUT ?= $(PROJECT) + +# Destination website hostname (for rsync+ssh) +WEBSITE ?= $(PROJECT) + +# +# Exclusion patterns +# + +#EXCLUDES = --exclude=.htpasswd +#EXCLUDES = --exclude=Makefile.local +EXCLUDES = archive + +# +# Metadata +# + +REVISION = $(shell git describe --tags 2> /dev/null || git log -1 --format=oneline | cut -d ' ' -f 1) +DATE = $(shell date) +YEAR = $(shell date +%Y) + +# +# Phony targets +# + +.PHONY: archive + +# +# Default target +# + +all: submodules book clean + @true + +# +# Archive +# + +archive: + @$(BOOKUP)/bin/archive + +# +# Cleanup +# + +clean: + @true + @rm -f $(OUTPUT).aux $(OUTPUT).log $(OUTPUT).nav $(OUTPUT).out $(OUTPUT).snm $(OUTPUT).tex $(OUTPUT).toc $(OUTPUT).vrb + @rm -f index.md index.Rmd + @rm -f _main.log _main.tex _main.loe _main.Rmd + @rm -rf _book _bookdown_files + +# +# Submodules +# + +submodules: + @git submodule update --init --recursive + +# +# Metadata +# + +metadata: + @mkdir -p .metadata + @echo $(REVISION) > .metadata/revision.txt + @echo $(DATE) > .metadata/date.txt + @echo $(YEAR) > .metadata/year.txt + +# +# Compilation +# + +compile_book: metadata + @rm -f $(OUTPUT).md + @#cat sections/*.md >> $(OUTPUT).md + @/bin/bash -c 'cat _bookup.yml >> essays.md ; echo "" >> $(OUTPUT).md' + @/bin/bash -c 'cat _biblio.yml >> essays.md ; echo "" >> $(OUTPUT).md' + @/bin/bash -c 'for file in $(BOOKUP)/structure/00*.yml; do cat $$file >> essays.md ; echo "---" >> essays.md; done' + @/bin/bash -c 'for file in $(BOOKUP)/structure/00*.md; do cat $$file >> $(OUTPUT).md ; echo "" >> $(OUTPUT).md; done' + @/bin/bash -c 'for file in content/published/*/*.md; do cat $$file >> $(OUTPUT).md ; echo "" >> $(OUTPUT).md ; cat templates/references.md >> $(OUTPUT).md ; echo "" >> $(OUTPUT).md; done' + @/bin/bash -c 'for file in $(BOOKUP)/structure/99*.md; do cat $$file >> $(OUTPUT).md ; echo "" >> $(OUTPUT).md; done' + @sed -i -e "s|%%revision%%|$(REVISION)|g" -e "s|%%date%%|$(DATE)|g" $(OUTPUT).md + @#sed -i -f snippets/terminology.sed $(OUTPUT).md + @ln -sf $(OUTPUT).md $(OUTPUT).Rmd + +compile: compile_book move_book + @true + +# +# Main bookdown targets +# + +bookdown_clean: + @rm -f _main.Rmd + +bookdown_html: + @# Needs to backup the index.html to avoid overwriting + @#mv index.html index.html.old + + # Cleanup + @#rm -rf $(OUTPUT)/html $(OUTPUT)/$(OUTPUT).html + @rm -rf compiled + + # Fix references + # Use sed to fix a weird reference issue on fig.cap inside knitr blocks that are not properly converted. + # Not using "sed -i" since it yields a permission denied error when running inside a guest VM. + # This fix no longer works with citeproc. + @#cp $(OUTPUT).md $(OUTPUT).md.base + @#sed -e 's/\\\\citet{\([^}]*\)}/@\1/g' $(OUTPUT).md > $(OUTPUT).new && mv $(OUTPUT).new $(OUTPUT).md + + # Build + Rscript -e 'bookdown::render_book("$(OUTPUT).md", "bookdown::gitbook")' + + # Restore $(OUTPUT).md after the weird reference fix + @#mv $(OUTPUT).md.base $(OUTPUT).md + + # See https://stackoverflow.com/questions/58340924/bookdown-generates-index-file-with-a-chapter-title-instead-of-index-html-when + # Fixed using section ID naming in the preamble + #@cd _book && ln -s "inĂ­cio.html" index.html + @#mv _book $(OUTPUT)/html + @#mv index.html.old index.html + @mv _book compiled + + # Replace fuse.js from CDN to local + # This ensures the HTML output can be browsed offline + #@find $(OUTPUT)/html -name *.html -exec sed -i -e 's|https://cdn.jsdelivr.net/npm/fuse.js@[^"]*|../../vendor/Fuse.js/dist/fuse.min.js|' {} \; + @mkdir compiled/js + @cp vendor/Fuse.js/dist/fuse.min.js compiled/js + @find compiled -name *.html -exec sed -i -e 's|https://cdn.jsdelivr.net/npm/fuse.js@[^"]*|js/fuse.min.js|' {} \; + + # Add revision information + @echo $(REVISION) > compiled/revision + + # Add symlink to the archive and to the slides + # This symlink is useful for checking things in localhost + # But it tends to be replaced during remote deployment + @cd compiled && ln -s ../archive + @cd compiled && ln -s ../slides + +bookdown_pdf: + # Cleanup old builds + @rm -rf _book/_main.pdf + + # Build + @Rscript -e 'bookdown::render_book("$(OUTPUT).md", "bookdown::tufte_book2")' + + # Move + @#mv _main.pdf $(OUTPUT).pdf + @#mv _book/_main.pdf $(OUTPUT)/$(OUTPUT).pdf + @mv _book/_main.pdf compiled/$(OUTPUT).pdf + +# Use sed to convert tufte::margin_note to marginfigure +# Also, "sed -i" yields a permission denied error when running inside a guest VM. +bookdown_epub: + @# EPUB format is broken right now + @true + + # Fix margin notes + @#sed -e 's/r tufte::margin_note/marginfigure/' $(OUTPUT).md > $(OUTPUT).new && mv $(OUTPUT).new $(OUTPUT).md + + # Build + @#Rscript -e 'bookdown::render_book("$(OUTPUT).md", "bookdown::epub_book")' + + # Move + @##mv _book/_main.epub $(OUTPUT)/$(OUTPUT).epub + @#mv _book/_main.epub compiled/$(OUTPUT)s.epub + + # Cleanup + @#rm _book/reference-keys.txt + @#rmdir _book + +bookdown: bookdown_clean bookdown_html bookdown_pdf bookdown_epub + +# +# Build the essays +# + +move_book: + @mv $(OUTPUT).* compiled/ + +book: archive compile_book bookdown move_book clean + +# +# Remote copies +# + +web_deploy: + @rsync -avz --delete $(EXCLUDES) ./compiled/ $(WEBSITE):/ + @rsync -avz --delete ./archive/ $(WEBSITE):/archive/ + @rsync -avz --delete ./slides/ $(WEBSITE):/slides/ + +# +# Offline copies +# + +usb_stick: + sudo rsync -av --exclude=backups --delete ./ /media/usb/$(PROJECT)/ -- cgit v1.2.3