aboutsummaryrefslogtreecommitdiff
path: root/Makefile.bookup
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2024-06-06 08:17:18 -0300
committerSilvio Rhatto <rhatto@riseup.net>2024-06-06 08:17:18 -0300
commit515bdd658d91020c73f82b70ff001015b359adc0 (patch)
treee7c62578e2ef61bf7c9a46de91d92d37620553fe /Makefile.bookup
downloadbookup-515bdd658d91020c73f82b70ff001015b359adc0.tar.gz
bookup-515bdd658d91020c73f82b70ff001015b359adc0.tar.bz2
Initial import
Diffstat (limited to 'Makefile.bookup')
-rw-r--r--Makefile.bookup215
1 files changed, 215 insertions, 0 deletions
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)/