aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorMohammad Akhlaghi <mohammad@akhlaghi.org>2018-02-07 20:37:15 +0100
committerMohammad Akhlaghi <mohammad@akhlaghi.org>2018-02-07 20:37:15 +0100
commita16f22881841e57f2652f2a17b7f60b5106b2e60 (patch)
tree6e5a86c38e68cd9f9be546d17c69adad17483825 /Makefile
First commit to the reproduction pipeline template
Let's start working on this pipeline independently with this first commit. It is based on my previous experiences, but I had never made a skeleton of a pipeline before, it was always within a working analysis. But now that the pipeline has a separate repository for its self, we will be able to work on it and use it as a base for future work and modify it to make it even better. Hopefully in time (and with the help of others), it will grow and become much more robust and useful.
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile110
1 files changed, 110 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..357a2e0
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,110 @@
+# A ONE-LINE DESCRIPTION OF THE WHOLE PIPELINE
+#
+# Original author:
+# Your name <your@email.address>
+# Contributing author(s):
+# Copyright (C) YYYY, Your Name.
+#
+# 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/>.
+
+
+
+
+
+# Ultimate target of this pipeline
+# --------------------------------
+#
+# The final paper (in PDF format) is the main target of this whole
+# reproduction pipeline. So as defined in the Make paradigm, we are
+# defining it as the first target.
+#
+# Note that if you don't have LaTeX to build the PDF or generally are just
+# interested in the processing, you can avoid the skip to create the final
+# PDF, see `reproduce/config/pipeline/pdf.mk'.
+all: paper.pdf
+
+
+
+
+
+# Include specific Makefiles
+# --------------------------
+#
+# To keep things clean, managable and readable, each set of operations is
+# (and must be) classified (modularized) by context into separate
+# Makefiles: the more the better. They are included in this top-level
+# Makefile through the command below.
+#
+# To further help in readability, it is best to avoid including Makefiles
+# within any other Makefile. So in short, it is best that the `foreach'
+# loop below contains all the `reproduce/src/make/*.mk' files.
+#
+# IMPORTANT NOTE: order matters in the inclusion of the processing
+# Makefiles. As the pipeline grows, some Makefiles will probably define
+# variables/dependencies that others need. Therefore unlike the
+# `reproduce/config/pipeline/*.mk' Makefiles which only define low-level
+# variables (not dependent on other variables and contain no rules), the
+# high-level processing Makefiles are included through the `foreach' loop
+# below by explicitly requesting them in a specific order here.
+include reproduce/config/pipeline/*.mk
+include $(foreach f, initialize download paper, reproduce/src/make/$(f).mk)
+
+
+
+
+
+# LaTeX macros for paper
+# ----------------------
+#
+# The final report's PDF (final target of this reproduction pipeline) takes
+# variable strings from the pipeline. Those variables are defined as LaTeX
+# macros in `tex/pipeline.tex'. This file is thus the interface between the
+# pipeline scripts and the final PDF.
+#
+# Each of the pipeline steps will save their macros into their own `.tex'
+# file in the `$(mtexdir)' directory. Those individual macros are the
+# pre-requisite to `tex/pipeline.txt'. `tex/pipeline.tex' is thus a
+# high-level output and is defined in this top-most Makefile (and not
+# `reproduce/src/make/paper.mk'). This enables a clear demonstration of the
+# top-level dependencies clearly.
+#
+# The symbolic link to the build directory (`bdirsym') is also placed here
+# as a dependency if the pipeline is to be created. It is very important
+# that it be an "order-only prerequisite" (after a `|', otherwise, it will
+# try to be remade on every call and `ln' will complain and abort).
+#
+# Note that if you don't want the final PDF and just want the processing
+# and file outputs, you can remove the value of the `pdf-compile' variable
+# in `reproduce/config/pipeline/pdf.mk'.
+tex/pipeline.tex: $(foreach f, initialize download, $(mtexdir)/$(f).tex) \
+ | $(bdirsym)
+
+ # If no PDF is requested, then just exit here.
+ifeq ($(pdf-compile),)
+ @echo;
+ @echo "Everything is OK until this point, but not building PDF."
+ @echo "To do so, give a value to the 'pdf-compile' variable."
+ @echo;
+ @exit 1
+endif
+
+ # Read all the separate files and put them into the final TeX
+ # macros file. Since `bdirsym' maybe empty, we can't use the
+ # `filter-out' function generically. We'll have to check `bdirsym'
+ # first.
+ifeq ($(bdirsym),)
+ cat $^ > $@
+else
+ cat $(filter-out $(bdirsym),$^) > $@
+endif