aboutsummaryrefslogtreecommitdiff
path: root/reproduce/analysis/make/paper.mk
diff options
context:
space:
mode:
Diffstat (limited to 'reproduce/analysis/make/paper.mk')
-rw-r--r--reproduce/analysis/make/paper.mk139
1 files changed, 139 insertions, 0 deletions
diff --git a/reproduce/analysis/make/paper.mk b/reproduce/analysis/make/paper.mk
new file mode 100644
index 0000000..5378ee3
--- /dev/null
+++ b/reproduce/analysis/make/paper.mk
@@ -0,0 +1,139 @@
+# Build the final PDF paper/report.
+#
+# Copyright (C) 2018-2019 Mohammad Akhlaghi <mohammad@akhlaghi.org>
+#
+# This Makefile is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This Makefile is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# A copy of the GNU General Public License is available at
+# <http://www.gnu.org/licenses/>.
+
+
+
+
+# LaTeX macros for paper
+# ----------------------
+#
+# To report the input settings and results, the final report's PDF (final
+# target of this project) uses macros generated from various steps of the
+# project. All these macros are defined through `$(mtexdir)/project.tex'.
+#
+# `$(mtexdir)/project.tex' is actually just a combination of separate files
+# that keep the LaTeX macros related to each workhorse Makefile (in
+# `reproduce/src/make/*.mk'). Those individual macros are pre-requisites to
+# `$(mtexdir)/project.tex'. The only workhorse Makefile that doesn't need
+# to produce LaTeX macros is this Makefile (`reproduce/src/make/paper.mk').
+#
+# This file is thus the interface between the processing scripts and the
+# final PDF: when we get to this point, all the processing has been
+# completed.
+#
+# Note that if you don't want the final PDF and just want the processing
+# and file outputs, you can remove the value of `pdf-build-final' in
+# `reproduce/analysis/config/pdf-build.mk'.
+$(mtexdir)/project.tex: $(foreach s, $(subst paper,,$(makesrc)), $(mtexdir)/$(s).tex)
+
+ # If no PDF is requested, or if LaTeX isn't available, don't
+ # continue to building the final PDF. Otherwise, merge all the TeX
+ # macros into one for building the PDF.
+ @if [ -f .local/bin/pdflatex ] && [ x"$(pdf-build-final)" != x ]; then
+
+ # Put a LaTeX input command for all the necessary macro files.
+ rm -f $(mtexdir)/project.tex
+ for t in $(subst paper,,$(makesrc)); do
+ echo "\input{tex/build/macros/$$t.tex}" >> $(mtexdir)/project.tex
+ done
+ else
+ echo
+ echo "-----"
+ echo "The processing has COMPLETED SUCCESSFULLY! But the final "
+ echo "LaTeX-built PDF paper will not be built."
+ echo
+ if [ x$(more-on-building-pdf) = x1 ]; then
+ echo "To do so, make sure you have LaTeX within the project (you"
+ echo "can check by running './.local/bin/latex --version'), _AND_"
+ echo "make sure that the 'pdf-build-final' variable has a value."
+ echo "'pdf-build-final' is defined in: "
+ echo "'reproduce/analysis/config/pdf-build.mk'."
+ echo
+ echo "If you don't have LaTeX within the project, please re-run"
+ echo "'./configure' when you have internet access. To speed it up,"
+ echo "you can keep the previous configuration files (answer 'n'"
+ echo "when it asks about re-writing previous configuration files)."
+ else
+ echo "For more, run './.local/bin/make more-on-building-pdf=1'"
+ fi
+ echo
+ echo "" > $@
+ fi
+
+
+
+
+
+# The bibliography
+# ----------------
+#
+# We need to run the `biber' program on the output of LaTeX to generate the
+# necessary bibliography before making the final paper. So we'll first have
+# one run of LaTeX (similar to the `paper.pdf' recipe), then `biber'.
+#
+# NOTE: `$(mtexdir)/project.tex' is an order-only-prerequisite for
+# `paper.bbl'. This is because we need to run LaTeX in both the `paper.bbl'
+# recipe and the `paper.pdf' recipe. But if `tex/src/references.tex' hasn't
+# been modified, we don't want to re-build the bibliography, only the final
+# PDF.
+$(texbdir)/paper.bbl: tex/src/references.tex \
+ | $(tikzdir) $(texbdir) $(mtexdir)/project.tex
+ # If `$(mtexdir)/project.tex' is empty, don't build PDF.
+ @macros=$$(cat $(mtexdir)/project.tex)
+ if [ x"$$macros" != x ]; then
+
+ # We'll run LaTeX first to generate the `.bcf' file (necessary
+ # for `biber') and then run `biber' to generate the `.bbl' file.
+ p=$$(pwd);
+ export TEXINPUTS=$$p:$$TEXINPUTS;
+ cd $(texbdir);
+ pdflatex -shell-escape -halt-on-error $$p/paper.tex;
+ biber paper
+
+ fi
+
+
+
+
+
+# The final paper
+# ---------------
+#
+# Run LaTeX in the `$(texbdir)' directory so all the intermediate and
+# auxiliary files stay there and keep the top directory clean. To be able
+# to run everything cleanly from there, it is necessary to add the current
+# directory (top project directory) to the `TEXINPUTS' environment
+# variable.
+paper.pdf: $(mtexdir)/project.tex paper.tex $(texbdir)/paper.bbl \
+ | $(tikzdir) $(texbdir)
+
+ # If `$(mtexdir)/project.tex' is empty, don't build the PDF.
+ @macros=$$(cat $(mtexdir)/project.tex)
+ if [ x"$$macros" != x ]; then
+
+ # Go into the top TeX build directory and make the paper.
+ p=$$(pwd)
+ export TEXINPUTS=$$p:$$TEXINPUTS
+ cd $(texbdir)
+ pdflatex -shell-escape -halt-on-error $$p/paper.tex
+
+ # Come back to the top project directory and copy the built PDF
+ # file here.
+ cd $$p
+ cp $(texbdir)/$@ $(final-paper)
+
+ fi