aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfigure86
-rw-r--r--reproduce/src/make/Top-Makefile33
-rw-r--r--reproduce/src/make/dependencies.mk122
-rw-r--r--reproduce/src/make/paper.mk43
4 files changed, 181 insertions, 103 deletions
diff --git a/configure b/configure
index fc3aa44..413dcd8 100755
--- a/configure
+++ b/configure
@@ -182,7 +182,6 @@ if [ $rewritepconfig = yes ]; then
else
cat <<EOF
-
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!! Warning !!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -194,7 +193,6 @@ the system.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
EOF
downloader="no-downloader-found"
fi;
@@ -482,7 +480,7 @@ fi
# Build Basic dependencies
# ------------------------
make -f reproduce/src/make/dependencies-basic.mk \
- static_build=$static_build #-j8
+ static_build=$static_build -j8
@@ -497,37 +495,83 @@ make -f reproduce/src/make/dependencies-basic.mk \
# to build them in this script. But after this, we can rely on Makefiles.
numthreads=$($instdir/bin/nproc)
./.local/bin/make -f reproduce/src/make/dependencies.mk \
- static_build=$static_build #-j$numthreads
+ static_build=$static_build -j$numthreads
-# Print a final notice
-# --------------------
+# Make sure TeX Live installed successfully
+# -----------------------------------------
#
-# The configuration is now complete, we can inform the user on the next
-# step(s) to take.
-echo
-echo "----------------"
-echo "The reproduction pipeline and its environment are SUCCESSFULLY configured."
-echo
-echo "Please run the following command to start."
-echo "(Replace '8' with the number of CPU threads)"
-echo
-echo " ./.local/bin/make -j8"
-echo
-echo "To change the configuration later, please re-run './configure',"
-echo "DO NOT manually edit the relevant files."
-echo
+# TeX Live is managed over the internet, so if there isn't any, or it
+# suddenly gets cut, it can't be built. However, when TeX Live isn't
+# installed, the pipeline and can do all its processing independent of
+# it. It will just stop at the stage when all the processing is complete
+# and it is only necessary to build the PDF. So we don't want to stop the
+# pipeline if its not present.
+if ! [ -f $instdir/bin/texlive-ready ]; then
+ $instdir/bin/texlive-ready-tlmgr
+ rm -rf $instdir/texlive
+ cat <<EOF
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!! Warning !!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+TeX Live couldn't be installed during the configuration (probably because
+there was no internet). TeX Live is only necessary in making the final PDF
+(which is only done after all the analysis has been complete). It is not
+used at all during the analysis.
+
+Therefore, if you don't need the final PDF, and just want to do the
+analysis, you can safely ignore this warning and continue.
+If you later have internet access and would like to add TeX live to your
+pipeline, please delete the respective files, then re-run configure as
+shown below. Within configure, answer 'n' (for "no") when asked to re-write
+the configuration files.
+ rm .local/bin/texlive-ready-*
+ ./configure
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+EOF
+fi
-# Final target: the Makefile
+
+
+# Final step: the Makefile
# --------------------------
#
# To see why this is the last step of the configuration, see above (when we
# delete the top-level Makefile at the start of this script).
ln -s $(pwd)/reproduce/src/make/Top-Makefile Makefile
+
+
+
+
+
+# Final notice
+# ------------
+#
+# The configuration is now complete, we can inform the user on the next
+# step(s) to take.
+cat <<EOF
+
+----------------
+The reproduction pipeline and its environment are configured with no errors.
+
+Please run the following command to start.
+(Replace '8' with the number of CPU threads)
+
+ ./.local/bin/make -j8
+
+To change the configuration later, please re-run './configure',
+DO NOT manually edit the relevant files.
+
+EOF
diff --git a/reproduce/src/make/Top-Makefile b/reproduce/src/make/Top-Makefile
index abd0f45..4c547be 100644
--- a/reproduce/src/make/Top-Makefile
+++ b/reproduce/src/make/Top-Makefile
@@ -93,19 +93,30 @@ tex/pipeline.tex: $(foreach f, initialize \
, $(mtexdir)/$(f).tex)
# If no PDF is requested, or if LaTeX isn't available, don't
- # continue to building LaTeX.
- @if ! latex --version &> /dev/null || [ x$(pdf-build-final) = x ]; then
+ # 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 we won't be"
- echo "building the final LaTeX-built PDF."
+ echo "The processing has COMPLETED SUCCESSFULLY! But the final "
+ echo "LaTeX-built PDF paper will not be built."
echo
- echo "To do so, make sure you have LaTeX within the pipeline and"
- echo "give a value to the 'pdf-build-final' variable. It is defined"
- echo "in 'reproduce/config/pipeline/pdf-build.mk'."
+ 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
- exit 1
+ echo "" > $@
fi
-
- # Merge all the TeX macros that are prepared for building the PDF.
- @cat $(mtexdir)/*.tex > $@
diff --git a/reproduce/src/make/dependencies.mk b/reproduce/src/make/dependencies.mk
index 768bafb..455a3b8 100644
--- a/reproduce/src/make/dependencies.mk
+++ b/reproduce/src/make/dependencies.mk
@@ -270,56 +270,70 @@ endif
# Since we want to avoid complicating the PATH, we are putting a symbolic
-# link of all the TeX Live executables in $(ibdir). Therefore, since the
-# symbolic link is hard to track for Make (as a target), we'll make a
-# simple ASCII file called `texlive-ready' when it is complete and use that
-# as a target.
-$(ibdir)/texlive-ready: reproduce/config/pipeline/dependency-texlive.mk
-
- # We'll need the current directory later down.
- topdir=$$(pwd)
-
- # First, if necessary, we'll download the tarball. Note that since
- # a new version of the installer is created every day, the
- # installer's version is hard to configure at this stage and is
- # mostly irrelevant.
- if $(ibdir)/tlmgr --version &> /dev/null; then
- echo "TeX Live manager ('tlmgr') is already installed."
- else
- if wget -O$(tdir)/install-tl-unx.tar.gz \
+# link of all the TeX Live executables in $(ibdir). But symbolic links are
+# hard to track for Make (as a target). So we'll make a simple ASCII file
+# called `texlive-ready' when it is complete and use that as a target.
+$(ibdir)/texlive-ready-tlmgr: reproduce/config/pipeline/texlive.conf
+
+ # To work with TeX live installation, we'll need the internet.
+ if ping -c1 ctan.org; then
+ # Download the TeX Live installation tarball.
+ $(DOWNLOADER) $(tdir)/install-tl-unx.tar.gz \
http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
- then
- # Unpack, enter the directory, and do a basic installation.
- cd $(ddir)
- rm -rf install-tl-*
- tar xf $(tdir)/install-tl-unx.tar.gz
- cd install-tl-*
- sed -e's|@installdir[@]|$(idir)|g' -e's|@topdir[@]|'"$$topdir"'|g' \
- $$topdir/reproduce/config/pipeline/texlive.conf > texlive.conf
- ./install-tl --profile=texlive.conf
- cd ..
- rm -rf install-tl-* $(tdir)/install-tl-unx.tar.gz
-
- # Put a symbolic link of the TeX Live executables in
- # `ibdir'. For `latex' do a copy, because it is the target of
- # this rule and it won't cause problems.
- ln -fs $(idir)/texlive/20*/bin/*/* $(ibdir)/
- fi
+
+ # Unpack, enter the directory, and install based on the given
+ # configuration (prerequisite of this rule).
+ topdir=$$(pwd)
+ cd $(ddir)
+ rm -rf install-tl-*
+ tar xf $(tdir)/install-tl-unx.tar.gz
+ cd install-tl-*
+ sed -e's|@installdir[@]|$(idir)|g' -e's|@topdir[@]|'"$$topdir"'|g' \
+ $$topdir/$< > texlive.conf
+ ./install-tl --profile=texlive.conf
+
+ # Put a symbolic link of the TeX Live executables in `ibdir'. The
+ # main problem is that the year and build system (for example
+ # `x86_64-linux') are also in the directory names, making it hard
+ # to be generic. We are using wildcards here, but only in this
+ # Makefile, not in any other.
+ ln -fs $(idir)/texlive/20*/bin/*/* $(ibdir)/
+
+ # Clean up and build the final target.
+ cd .. && rm -rf install-tl-* $(tdir)/install-tl-unx.tar.gz
+ echo "TeX Live is ready." > $@
fi
- # In scenarios like having no internet on the first run, its
- # possible to get to this point without actually having `tlmgr'
- # ready for usage. Since the pipeline can still do its processing
- # without building the final PDF, we don't want to stop the build.
- if $(ibdir)/tlmgr --version &> /dev/null; then
+
+
+
+
+# To keep things modular and simple, we'll break up the installation of TeX
+# Live itself (only very basic TeX and LaTeX) and the installation of its
+# necessary packages into two packages.
+$(ibdir)/texlive-ready: reproduce/config/pipeline/dependency-texlive.mk \
+ $(ibdir)/texlive-ready-tlmgr
+
+ # To work with TeX live installation, we'll need the internet.
+ res=$(cat $(ibdir)/texlive-ready-tlmgr)
+ if ping -c1 ctan.org \
+ && [ -f $(ibdir)/texlive-ready-tlmgr ] \
+ && [ x$$res != x"NOT" ]; then
+ # The current directory is necessary later.
+ topdir=$$(pwd)
# Install all the extra necessary packages. If LaTeX complains
- # about not finding a package, simply run the following command
- # to find which package its in, then add it to the
- # `texlive-packages' variable.
+ # about not finding a command/file/what-ever/XXXXXX, simply run
+ # the following command to find which package its in, then add it
+ # to the `texlive-packages' variable of the first prerequisite.
+ #
+ # ./.local/bin/tlmgr info XXXXXX
#
- # tlmgr info XXXXXX.sty
+ # We are putting a notice, because if there is no internet,
+ # `tlmgr' just hangs waiting.
+ echo; echo; echo "Downloading necessary TeX packages..."; echo;
tlmgr install $(texlive-packages)
+ echo "returned: $$?"; echo; echo;
# Make a symbolic link of all the TeX Live executables in the bin
# directory so we don't have to modify `PATH'.
@@ -333,16 +347,14 @@ $(ibdir)/texlive-ready: reproduce/config/pipeline/dependency-texlive.mk
# LaTeX Package versions.
tlmgr info $(texlive-packages) --only-installed | awk \
- '$$1=="package:" {version=0; \
- if($$NF=="tex-gyre") name="texgyre"; \
- else name=$$NF} \
- $$1=="cat-version:" {version=$$NF} \
- $$1=="cat-date:" {if(version==0) version=$$2; \
- printf("\\newcommand{\\tex%sversion}{%s}\n",\
- name, version)}' >> $$tv
+ '$$1=="package:" {version=0; \
+ if($$NF=="tex-gyre") name="texgyre"; \
+ else name=$$NF} \
+ $$1=="cat-version:" {version=$$NF} \
+ $$1=="cat-date:" {if(version==0) version=$$2; \
+ printf("\\newcommand{\\tex%sversion}{%s}\n", \
+ name, version)}' >> $$tv
+
+ # Write the target if TeX live was actually installed.
+ echo "TeX Live's packages are also ready." > $@
fi
-
- # Write the target if TeX live was actually installed.
- if [ -f $(idir)/texlive/20*/bin/*/latex ]; then
- echo "TeX Live is installed." > $@
- fi;
diff --git a/reproduce/src/make/paper.mk b/reproduce/src/make/paper.mk
index 79d7722..d50c59a 100644
--- a/reproduce/src/make/paper.mk
+++ b/reproduce/src/make/paper.mk
@@ -37,14 +37,19 @@
# PDF.
$(texbdir)/paper.bbl: tex/references.tex \
| $(tikzdir) $(texbdir) tex/pipeline.tex
+ # If `tex/pipeline.tex' is empty, then the PDF must not be built.
+ @macros=$$(cat tex/pipeline.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
+ # 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
@@ -61,13 +66,19 @@ $(texbdir)/paper.bbl: tex/references.tex \
paper.pdf: tex/pipeline.tex paper.tex $(texbdir)/paper.bbl \
| $(tikzdir) $(texbdir)
- # 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
+ # If `tex/pipeline.tex' is empty, then the PDF must not be built.
+ @macros=$$(cat tex/pipeline.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 pipeline directory and copy the built PDF
+ # file here.
+ cd $$p
+ cp $(texbdir)/$@ $@
- # Come back to the top pipeline directory and copy the built PDF
- # file here.
- cd $$p
- cp $(texbdir)/$@ $@
+ fi