aboutsummaryrefslogtreecommitdiff
path: root/reproduce/src/make/initialize.mk
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 /reproduce/src/make/initialize.mk
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 'reproduce/src/make/initialize.mk')
-rw-r--r--reproduce/src/make/initialize.mk114
1 files changed, 114 insertions, 0 deletions
diff --git a/reproduce/src/make/initialize.mk b/reproduce/src/make/initialize.mk
new file mode 100644
index 0000000..2da5e79
--- /dev/null
+++ b/reproduce/src/make/initialize.mk
@@ -0,0 +1,114 @@
+# Initialize the reproduction 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/>.
+
+
+
+
+
+# High-level directory definitions
+# --------------------------------
+#
+# Basic directories that are used throughout the whole pipeline.
+#
+# Locks are used to make sure that an operation is done in series not in
+# parallel (even if Make is run in parallel with the `-j' option). The most
+# common case is downloads which are better done in series and not in
+# parallel. Also, some programs may not be thread-safe, therefore it will
+# be necessary to put a lock on them. This pipeline uses the `flock'
+# program to achieve this.
+texdir = $(BDIR)/tex
+lockdir = $(BDIR)/locks
+bdirsym = reproduce/build
+mtexdir = $(texdir)/macros
+pconfdir = reproduce/config/pipeline
+
+
+
+
+
+# Make the high-level level directories
+# ------------------------------
+#
+# These are just the top-level directories for all the separate steps. The
+# directories (or possible sub-directories) for individual steps will be
+# defined and added within their own Makefiles.
+$(BDIR):; mkdir $@;
+$(mtexdir): | $(texdir); mkdir $@
+$(texdir) $(lockdir): | $(BDIR); mkdir $@
+
+
+
+
+
+# High-level Makefile management
+# ------------------------------
+#
+# About `.PHONY': these are targets that must be built even if a file with
+# their name exists. Most don't correspond to a file, but those that do are
+# included here ensure that the file is always built in every run: for
+# example the pipeline versions may change within two separate runs, so we
+# want it to be rebuilt every time.
+.PHONY: all clean clean-mmap $(texdir)/versions.tex
+clean-mmap:; rm -f reproduce/config/gnuastro/mmap*
+clean:
+ rm -rf $(BDIR) $(bdirsym) *.pdf *.log *.out *.aux *.auxlock \
+ reproduce/config/gnuastro/mmap*
+
+
+
+
+
+# Pipeline version
+# ----------------
+#
+# The pipeline's version is necessary for the analysis and must be
+# calculated everytime the pipeline is run, so even though this file
+# actually exists, it is also aded as a `.PHONY' target above.
+$(mtexdir)/initialize.tex: | $(mtexdir)
+
+ @v=$$(git describe --dirty --always); \
+ echo "\newcommand{\pipelineversion}{$$v}" > $@
+
+ @v=$$(astnoisechisel --version | awk 'NR==1{print $$NF}'); \
+ echo "\newcommand{\gnuastroversion}{$$v}" >> $@
+
+ echo "\newcommand{\bdir}{$(BDIR)}" >> $@
+
+
+
+
+
+# Symbolic link to build directory
+# --------------------------------
+#
+# Besides $(BDIR), we are also making a symbolic link to it if $(bdirsym)
+# is not empty. In case this symbolic link is not needed, simply remove its
+# value from the definitions above. In that case, it will be read as a
+# blank (non-existant).
+#
+# Note that $(BDIR) might not be an absolute path and this will complicate
+# the symbolic link creation. To be generic, we'll first call `readlink' to
+# make sure we have an absolute address, then we'll make a symbolic link to
+# that.
+ifneq ($(bdirsym),)
+$(bdirsym): | $(BDIR)
+ absbdir=$$(readlink -f $(BDIR)); \
+ ln -s $$absbdir $(bdirsym)
+endif