aboutsummaryrefslogtreecommitdiff
path: root/reproduce/src/make/Top-Makefile
blob: 4c547be15bcfbad2b958ff3577c61ca1918af257 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# A ONE-LINE DESCRIPTION OF THE WHOLE PIPELINE
#
# Original author:
#     Mohammad Akhlaghi <mohammad@akhlaghi.org>
# Contributing author(s):
#     Your name <your@email.address>
# Copyright (C) 2018, 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 here.
#
# Note that if you don't have LaTeX to build the PDF, or generally are just
# interested in the processing, you can skip create the final PDF creation
# with `pdf-build-final' of `reproduce/config/pipeline/pdf-build.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                      \
                     delete-me                     \
                     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.
#
# 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-build-final'
# variable in `reproduce/config/pdf-build.mk'.
tex/pipeline.tex: $(foreach f, initialize          \
                               download            \
                               delete-me           \
                             , $(mtexdir)/$(f).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
	  cat $(mtexdir)/*.tex > $@
	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 pipeline (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/config/pipeline/pdf-build.mk'."
	    echo
	    echo "If you don't have LaTeX within the pipeline, 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