aboutsummaryrefslogtreecommitdiff
path: root/reproduce/software/make/high-level.mk
diff options
context:
space:
mode:
authorMohammad Akhlaghi <mohammad@akhlaghi.org>2020-06-03 21:03:00 +0100
committerMohammad Akhlaghi <mohammad@akhlaghi.org>2020-06-03 21:03:00 +0100
commitd85dfdf8d7b0f2769d824fd4994eccec55db963a (patch)
tree93afba26310a300fe834ed5a74258ba0353fc862 /reproduce/software/make/high-level.mk
parentfc9bdf8d3793ffdb4168ca5c5c7ed97bbd5ab036 (diff)
parenta69f2ce5624b0b683b793a2f4cb68c7023458f15 (diff)
Imported recent updated in Maneage, minor conflict fixed
The minor conflict was with 'reproduce/software/make/high-level.mk', and in particular because we implemented the fix to Maneage's Task #15664 in this project first. After it was moved to the main Maneage branch some minor stylistic corrections were done to it, thus causing the conflict. To resolve the conflict, I simply imported the full Maneage version of the file with this command: git checkout maneage -- reproduce/software/make/high-level.mk The other conflicts were due to the deleted files (that were resolved as described in 'README-hacking.md') and the LaTeX files that I had told '.gitattributes' to ignore from the Maneage branch.
Diffstat (limited to 'reproduce/software/make/high-level.mk')
-rw-r--r--reproduce/software/make/high-level.mk330
1 files changed, 194 insertions, 136 deletions
diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk
index 4480e19..7cc2d51 100644
--- a/reproduce/software/make/high-level.mk
+++ b/reproduce/software/make/high-level.mk
@@ -11,15 +11,18 @@
# Copyright (C) 2018-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
# Copyright (C) 2019-2020 Raul Infante-Sainz <infantesainz@gmail.com>
#
-# This Makefile is part of Maneage. Maneage 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 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.
#
-# Maneage 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. See <http://www.gnu.org/licenses/>.
+# 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.
+#
+# You should have received a copy of the GNU General Public License
+# along with this Makefile. If not, see <http://www.gnu.org/licenses/>.
@@ -39,6 +42,7 @@ ibdir = $(BDIR)/software/installed/bin
ildir = $(BDIR)/software/installed/lib
iidir = $(BDIR)/software/installed/include
dtexdir = $(shell pwd)/reproduce/software/bibtex
+patchdir= $(shell pwd)/reproduce/software/patches
itidir = $(BDIR)/software/installed/version-info/tex
ictdir = $(BDIR)/software/installed/version-info/cite
ipydir = $(BDIR)/software/installed/version-info/python
@@ -100,7 +104,8 @@ export BASH_ENV := $(shell pwd)/reproduce/software/shell/bashrc.sh
# Servers to use as backup, later this should go in a file that is not
# under version control (the actual server that the tarbal comes from is
# irrelevant).
-backupservers = http://akhlaghi.org/maneage-software
+backupservers := $(shell awk '!/^#/{printf "%s ", $$1}' \
+ reproduce/software/config/servers-backup.conf)
# Building flags:
#
@@ -180,12 +185,12 @@ tarballs = $(foreach t, apachelog4cxx-$(apachelog4cxx-version).tar.lz \
libnsl-$(libnsl-version).tar.gz \
libpng-$(libpng-version).tar.xz \
libtirpc-$(libtirpc-version).tar.bz2 \
- libxml2-$(libxml2-version).tar.gz \
missfits-$(missfits-version).tar.gz \
netpbm-$(netpbm-version).tar.gz \
openblas-$(openblas-version).tar.gz \
openmpi-$(openmpi-version).tar.gz \
openssh-$(openssh-version).tar.gz \
+ patch-$(patch-version).tar.gz \
pixman-$(pixman-version).tar.gz \
R-$(R-version).tar.gz \
scamp-$(scamp-version).tar.lz \
@@ -196,6 +201,7 @@ tarballs = $(foreach t, apachelog4cxx-$(apachelog4cxx-version).tar.lz \
rpcsvc-proto-$(rpcsvc-proto-version).tar.xz \
tides-$(tides-version).tar.gz \
tiff-$(libtiff-version).tar.gz \
+ valgrind-$(valgrind-version).tar.bz2 \
wcslib-$(wcslib-version).tar.bz2 \
xlsxio-$(xlsxio-version).tar.gz \
yaml-$(yaml-version).tar.gz \
@@ -280,7 +286,6 @@ $(tarballs): $(tdir)/%: | $(lockdir)
c=$(libgit2-checksum)
w=https://github.com/libgit2/libgit2/archive/v$(libgit2-version).tar.gz
elif [ $$n = libtirpc ]; then c=$(libtirpc-checksum); w=https://downloads.sourceforge.net/libtirpc
- elif [ $$n = libxml2 ]; then c=$(libxml2-checksum); w=ftp://xmlsoft.org/libxml2
elif [ $$n = missfits ]; then c=$(missfits-checksum); w=https://www.astromatic.net/download/missfits
elif [ $$n = netpbm ]; then c=$(netpbm-checksum); w=http://akhlaghi.org/maneage-software
elif [ $$n = openblas ]; then
@@ -293,6 +298,7 @@ $(tarballs): $(tdir)/%: | $(lockdir)
majorver=$$(echo $(openmpi-version) | sed -e 's/\./ /g' | awk '{printf("%d.%d", $$1, $$2)}')
w=https://download.open-mpi.org/release/open-mpi/v$$majorver/$*
elif [ $$n = openssh ]; then c=$(openssh-checksum); w=https://artfiles.org/openbsd/OpenSSH/portable
+ elif [ $$n = patch ]; then c=$(patch-checksum); w=http://ftp.gnu.org/gnu/patch
elif [ $$n = pixman ]; then c=$(pixman-checksum); w=https://www.cairographics.org/releases
elif [ $$n = R ]; then c=$(R-checksum);
majver=$$(echo $(R-version) | sed -e's/\./ /g' | awk '{print $$1}')
@@ -308,6 +314,7 @@ $(tarballs): $(tdir)/%: | $(lockdir)
elif [ $$n = swig ]; then c=$(swig-checksum); w=https://sourceforge.net/projects/swig/files/swig/swig-$(swig-version)
elif [ $$n = tides ]; then c=$(tides-checksum); w=http://akhlaghi.org/maneage-software
elif [ $$n = tiff ]; then c=$(libtiff-checksum); w=https://download.osgeo.org/libtiff
+ elif [ $$n = valgrind ]; then c=$(valgrind-checksum); w=https://sourceware.org/pub/valgrind
elif [ $$n = wcslib ]; then c=$(wcslib-checksum); w=ftp://ftp.atnf.csiro.au/pub/software/wcslib
elif [ $$n = xlsxio ]; then
mergenames=0
@@ -329,6 +336,7 @@ $(tarballs): $(tdir)/%: | $(lockdir)
# storing all the tarballs in one directory, we want it to have the
# same naming convention, so we'll download it to a temporary name,
# then rename that.
+ rm -f "$@.unchecked"
if [ -f $(DEPENDENCIES-DIR)/$* ]; then
cp $(DEPENDENCIES-DIR)/$* "$@.unchecked"
else
@@ -401,14 +409,14 @@ $(tarballs): $(tdir)/%: | $(lockdir)
# build it because it will complain about the version of libtool, so until
# the version 0.11.0 of log4cxx, we'll have to run `autogen.sh' on the
# unpacked source also.
-$(ibidir)/apachelog4cxx: | $(ibidir)/automake \
- $(tdir)/apachelog4cxx-$(apachelog4cxx-version).tar.lz
+$(ibidir)/apachelog4cxx: $(ibidir)/automake \
+ $(tdir)/apachelog4cxx-$(apachelog4cxx-version).tar.lz
pdir=apachelog4cxx-$(apachelog4cxx-version)
rm -rf $(ddir)/$$pdir
topdir=$(pwd)
cd $(ddir)
- tar xf $(word 1,$(filter $(tdir)/%,$|))
+ tar xf $(word 1,$(filter $(tdir)/%,$^))
cd $$pdir
./autogen.sh \
&& ./configure SHELL=$(ibdir)/bash --prefix=$(idir) \
@@ -419,12 +427,12 @@ $(ibidir)/apachelog4cxx: | $(ibidir)/automake \
&& cd $$topdir \
&& echo "Apache log4cxx $(apachelog4cxx-version)" > $@
-$(ibidir)/apr: | $(tdir)/apr-$(apr-version).tar.gz
+$(ibidir)/apr: $(tdir)/apr-$(apr-version).tar.gz
$(call gbuild, apr-$(apr-version), ,--disable-static) \
&& echo "Apache Portable Runtime $(apr-version)" > $@
$(ibidir)/apr-util: $(ibidir)/apr \
- | $(tdir)/apr-util-$(apr-util-version).tar.gz
+ $(tdir)/apr-util-$(apr-util-version).tar.gz
$(call gbuild, apr-util-$(apr-util-version), , \
--disable-static \
--with-apr=$(idir) \
@@ -432,8 +440,8 @@ $(ibidir)/apr-util: $(ibidir)/apr \
--with-crypto ) \
&& echo "Apache Portable Runtime Utility $(apr-util-version)" > $@
-$(ibidir)/atlas: | $(tdir)/atlas-$(atlas-version).tar.bz2 \
- $(tdir)/lapack-$(lapack-version).tar.gz
+$(ibidir)/atlas: $(tdir)/atlas-$(atlas-version).tar.bz2 \
+ $(tdir)/lapack-$(lapack-version).tar.gz
# Get the operating system specific features (how to get
# CPU frequency and the library suffixes). To make the steps
@@ -514,12 +522,12 @@ $(ibidir)/atlas: | $(tdir)/atlas-$(atlas-version).tar.bz2 \
# Boost doesn't use the standard GNU Build System.
$(ibidir)/boost: $(ibidir)/openmpi \
- | $(ibidir)/python \
- $(tdir)/boost-$(boost-version).tar.gz
+ $(ibidir)/python \
+ $(tdir)/boost-$(boost-version).tar.gz
vstr=$$(echo $(boost-version) | sed -e's/\./_/g')
rm -rf $(ddir)/boost_$$vstr
topdir=$(pwd); cd $(ddir);
- tar xf $(word 1,$(filter $(tdir)/%,$|)) \
+ tar xf $(word 1,$(filter $(tdir)/%,$^)) \
&& cd boost_$$vstr \
&& ./bootstrap.sh --prefix=$(idir) --with-libraries=all \
--with-python=python3 \
@@ -531,13 +539,13 @@ $(ibidir)/boost: $(ibidir)/openmpi \
&& echo "Boost $(boost-version)" > $@
$(ibidir)/cfitsio: $(ibidir)/curl \
- | $(tdir)/cfitsio-$(cfitsio-version).tar.gz
+ $(tdir)/cfitsio-$(cfitsio-version).tar.gz
# CFITSIO hard-codes '@rpath' inside the shared library on
# Mac systems. So we need to change it to our library
# installation path. It doesn't affect GNU/Linux, so we'll
# just do it in any case to keep things clean.
- topdir=$(pwd); cd $(ddir); tar xf $(word 1,$(filter $(tdir)/%,$|))
+ topdir=$(pwd); cd $(ddir); tar xf $(word 1,$(filter $(tdir)/%,$^))
customtar=cfitsio-$(cfitsio-version)-custom.tar.gz
cd cfitsio-$(cfitsio-version)
sed configure -e's|@rpath|$(ildir)|g' > configure_tmp
@@ -560,7 +568,7 @@ $(ibidir)/cfitsio: $(ibidir)/curl \
$(ibidir)/cairo: $(ibidir)/freetype \
$(ibidir)/libpng \
$(ibidir)/pixman \
- | $(tdir)/cairo-$(cairo-version).tar.xz
+ $(tdir)/cairo-$(cairo-version).tar.xz
$(call gbuild, cairo-$(cairo-version), static, \
--with-x=no, -j$(numthreads) V=1) \
&& echo "Cairo $(cairo-version)" > $@
@@ -568,20 +576,20 @@ $(ibidir)/cairo: $(ibidir)/freetype \
# Eigen is just headers! So it doesn't need to be compiled. Once unpacked
# it has a checksum after `eigen-eigen', so we'll just use a `*' to choose
# the unpacked directory.
-$(ibidir)/eigen: | $(tdir)/eigen-$(eigen-version).tar.gz
+$(ibidir)/eigen: $(tdir)/eigen-$(eigen-version).tar.gz
rm -rf $(ddir)/eigen-eigen-*
- topdir=$(pwd); cd $(ddir); tar xf $(word 1,$(filter $(tdir)/%,$|))
+ topdir=$(pwd); cd $(ddir); tar xf $(word 1,$(filter $(tdir)/%,$^))
cd eigen-eigen-*
cp -r Eigen $(iidir)/eigen3 \
&& cd $$topdir \
&& rm -rf $(ddir)/eigen-eigen-* \
&& echo "Eigen $(eigen-version)" > $@
-$(ibidir)/expat: | $(tdir)/expat-$(expat-version).tar.lz
+$(ibidir)/expat: $(tdir)/expat-$(expat-version).tar.lz
$(call gbuild, expat-$(expat-version), static) \
&& echo "Expat $(expat-version)" > $@
-$(ibidir)/fftw: | $(tdir)/fftw-$(fftw-version).tar.gz
+$(ibidir)/fftw: $(tdir)/fftw-$(fftw-version).tar.gz
# FFTW's single and double precission libraries must be built
# independently: for the the single-precision library, we need to
# add the `--enable-float' option. We will build this first, then
@@ -596,16 +604,16 @@ $(ibidir)/fftw: | $(tdir)/fftw-$(fftw-version).tar.gz
# Freetype is necessary to install matplotlib
$(ibidir)/freetype: $(ibidir)/libpng \
- | $(tdir)/freetype-$(freetype-version).tar.gz
+ $(tdir)/freetype-$(freetype-version).tar.gz
$(call gbuild, freetype-$(freetype-version), static) \
&& echo "FreeType $(freetype-version)" > $@
-$(ibidir)/gsl: | $(tdir)/gsl-$(gsl-version).tar.gz
+$(ibidir)/gsl: $(tdir)/gsl-$(gsl-version).tar.gz
$(call gbuild, gsl-$(gsl-version), static) \
&& echo "GNU Scientific Library $(gsl-version)" > $@
$(ibidir)/hdf5: $(ibidir)/openmpi \
- | $(tdir)/hdf5-$(hdf5-version).tar.gz
+ $(tdir)/hdf5-$(hdf5-version).tar.gz
export CC=mpicc; \
export FC=mpif90; \
$(call gbuild, hdf5-$(hdf5-version), static, \
@@ -629,10 +637,10 @@ else
healpix-python-dep = $(ipydir)/matplotlib $(ipydir)/astropy
endif
$(ibidir)/healpix: $(ibidir)/cfitsio \
+ $(ibidir)/autoconf \
+ $(ibidir)/automake \
$(healpix-python-dep) \
- | $(ibidir)/autoconf \
- $(ibidir)/automake \
- $(tdir)/healpix-$(healpix-version).tar.gz
+ $(tdir)/healpix-$(healpix-version).tar.gz
if [ x"$(healpix-python-dep)" = x ]; then
pycommand1="echo no-healpy-because-no-other-python"
pycommand2="echo no-healpy-because-no-other-python"
@@ -642,7 +650,7 @@ $(ibidir)/healpix: $(ibidir)/cfitsio \
fi
rm -rf $(ddir)/Healpix_$(healpix-version)
topdir=$(pwd); cd $(ddir);
- tar xf $(word 1,$(filter $(tdir)/%,$|))
+ tar xf $(word 1,$(filter $(tdir)/%,$^))
&& cd Healpix_$(healpix-version)/src/C/autotools/ \
&& autoreconf --install \
&& ./configure --prefix=$(idir) \
@@ -661,51 +669,40 @@ $(ibidir)/healpix: $(ibidir)/cfitsio \
&& cp $(dtexdir)/healpix.tex $(ictdir)/ \
&& echo "HEALPix $(healpix-version) \citep{healpix}" > $@
-$(ibidir)/libjpeg: | $(tdir)/jpegsrc.$(libjpeg-version).tar.gz
+$(ibidir)/libjpeg: $(tdir)/jpegsrc.$(libjpeg-version).tar.gz
$(call gbuild, jpeg-9b, static,,V=1) \
&& echo "Libjpeg $(libjpeg-version)" > $@
$(ibidir)/libnsl: $(ibidir)/libtirpc \
$(ibidir)/rpcsvc-proto \
- | $(tdir)/libnsl-$(libnsl-version).tar.gz
+ $(tdir)/libnsl-$(libnsl-version).tar.gz
$(call gbuild, libnsl-$(libnsl-version), static, \
--sysconfdir=$(idir)/etc) \
&& echo "Libnsl $(libnsl-version)" > $@
-$(ibidir)/libpng: | $(tdir)/libpng-$(libpng-version).tar.xz
+$(ibidir)/libpng: $(tdir)/libpng-$(libpng-version).tar.xz
$(call gbuild, libpng-$(libpng-version), static) \
&& echo "Libpng $(libpng-version)" > $@
$(ibidir)/libtiff: $(ibidir)/libjpeg \
- | $(tdir)/tiff-$(libtiff-version).tar.gz
+ $(tdir)/tiff-$(libtiff-version).tar.gz
$(call gbuild, tiff-$(libtiff-version), static, \
--disable-jbig \
--disable-webp \
--disable-zstd) \
&& echo "Libtiff $(libtiff-version)" > $@
-$(ibidir)/libtirpc: | $(tdir)/libtirpc-$(libtirpc-version).tar.bz2
+$(ibidir)/libtirpc: $(tdir)/libtirpc-$(libtirpc-version).tar.bz2
$(call gbuild, libtirpc-$(libtirpc-version), static, \
--disable-gssapi, V=1) \
echo "libtirpc $(libtirpc-version)" > $@
-$(ibidir)/libxml2: | $(tdir)/libxml2-$(libxml2-version).tar.gz
- # The libxml2 tarball also contains Python bindings which are built and
- # installed to a system directory by default. If you don't need the Python
- # bindings, the easiest solution is to compile without Python support:
- # ./configure --without-python
- # If you really need the Python bindings, try the
- # --with-python-install-dir=DIR option
- $(call gbuild, libxml2-$(libxml2-version), static, \
- --without-python) \
- && echo "Libxml2 $(libxml2-version)" > $@
-
-$(ibidir)/openblas: | $(tdir)/openblas-$(openblas-version).tar.gz
+$(ibidir)/openblas: $(tdir)/openblas-$(openblas-version).tar.gz
if [ x$(on_mac_os) = xyes ]; then \
export CC=clang; \
fi; \
cd $(ddir) \
- && tar xf $(word 1,$(filter $(tdir)/%,$|)) \
+ && tar xf $(word 1,$(filter $(tdir)/%,$^)) \
&& cd OpenBLAS-$(openblas-version) \
&& make \
&& make PREFIX=$(idir) install \
@@ -713,7 +710,7 @@ $(ibidir)/openblas: | $(tdir)/openblas-$(openblas-version).tar.gz
&& rm -rf OpenBLAS-$(openblas-version) \
&& echo "OpenBLAS $(openblas-version)" > $@
-$(ibidir)/openmpi: | $(tdir)/openmpi-$(openmpi-version).tar.gz
+$(ibidir)/openmpi: $(tdir)/openmpi-$(openmpi-version).tar.gz
$(call gbuild, openmpi-$(openmpi-version), static, , \
-j$(numthreads) V=1) \
&& echo "Open MPI $(openmpi-version)" > $@
@@ -723,7 +720,7 @@ $(ibidir)/openmpi: | $(tdir)/openmpi-$(openmpi-version).tar.gz
# within the project because of all the security issues it may cause. Only
# enable/build it in a project with caution, and if there is no other
# solution (for example to disable SSH in a program that may ask for it.
-$(ibidir)/openssh: | $(tdir)/openssh-$(openssh-version).tar.gz
+$(ibidir)/openssh: $(tdir)/openssh-$(openssh-version).tar.gz
$(call gbuild, openssh-$(openssh-version), static, \
--with-privsep-path=$(ibdir)/.ssh_privsep \
--with-privsep-user=nobody \
@@ -732,22 +729,49 @@ $(ibidir)/openssh: | $(tdir)/openssh-$(openssh-version).tar.gz
, -j$(numthreads) V=1) \
&& echo "OpenSSH $(openssh-version)" > $@
-$(ibidir)/pixman: | $(tdir)/pixman-$(pixman-version).tar.gz
+$(ibidir)/pixman: $(tdir)/pixman-$(pixman-version).tar.gz
$(call gbuild, pixman-$(pixman-version), static, , \
-j$(numthreads) V=1) \
&& echo "Pixman $(pixman-version)" > $@
-$(ibidir)/rpcsvc-proto: | $(tdir)/rpcsvc-proto-$(rpcsvc-proto-version).tar.xz
+$(ibidir)/rpcsvc-proto: $(tdir)/rpcsvc-proto-$(rpcsvc-proto-version).tar.xz
$(call gbuild, rpcsvc-proto-$(rpcsvc-proto-version), static) \
&& echo "rpcsvc $(rpcsvc-proto-version)" > $@
-$(ibidir)/tides: | $(tdir)/tides-$(tides-version).tar.gz
+$(ibidir)/tides: $(tdir)/tides-$(tides-version).tar.gz
$(call gbuild, tides-$(tides-version), static,\
--with-gmp=$(idir) --with-mpfr=$(idir)) \
&& cp $(dtexdir)/tides.tex $(ictdir)/ \
&& echo "TIDES $(tides-version) \citep{tides}" > $@
-$(ibidir)/yaml: | $(tdir)/yaml-$(yaml-version).tar.gz
+$(ibidir)/valgrind: $(ibidir)/patch \
+ $(ibidir)/autoconf \
+ $(ibidir)/automake \
+ $(tdir)/valgrind-$(valgrind-version).tar.bz2
+ # For valgrind-3.15.0, see
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=946329 for a
+ # report on an MPI-related compile bug and the two patches
+ # below. These two patches and `automake` should allow valgrind to
+ # compile with gcc-9.2.0.
+ cd $(ddir) \
+ && tar -x -f $(word 1,$(filter $(tdir)/%,$^)) \
+ && valgrinddir=valgrind-$(valgrind-version) \
+ && cd $${valgrinddir} \
+ && printf "valgrindir=$${valgrinddir} ; pwd = %s .\n" $$($(ibdir)/pwd) \
+ && if [ "x$(valgrind-version)" = "x3.15.0" ]; then \
+ patch --verbose -p1 < $(patchdir)/valgrind-3.15.0-mpi-fix1.patch; \
+ patch --verbose -p1 < $(patchdir)/valgrind-3.15.0-mpi-fix2.patch; \
+ fi \
+ && autoreconf \
+ && ./configure --prefix=$(idir) \
+ && make -j$(numthreads) \
+ && if ! make check -j$(numthreads); then \
+ echo; echo "Valgrind's 'make check' failed!"; echo; \
+ fi \
+ && make install \
+ && echo "Valgrind $(valgrind-version)" > $@
+
+$(ibidir)/yaml: $(tdir)/yaml-$(yaml-version).tar.gz
$(call gbuild, yaml-$(yaml-version), static) \
&& echo "LibYAML $(yaml-version)" > $@
@@ -777,8 +801,8 @@ $(ibidir)/yaml: | $(tdir)/yaml-$(yaml-version).tar.gz
# that it uses if it can't find libiconv on macOS. So, to fix this problem
# it is necessary to use the option `-DUSE_ICONV=OFF` in the configure step.
$(ibidir)/libgit2: $(ibidir)/curl \
- | $(ibidir)/cmake \
- $(tdir)/libgit2-$(libgit2-version).tar.gz
+ $(ibidir)/cmake \
+ $(tdir)/libgit2-$(libgit2-version).tar.gz
$(call cbuild, libgit2-$(libgit2-version), static, \
-DUSE_SSH=OFF -DBUILD_CLAR=OFF \
-DTHREADSAFE=ON -DUSE_ICONV=OFF ) \
@@ -789,12 +813,18 @@ $(ibidir)/libgit2: $(ibidir)/curl \
&& echo "Libgit2 $(libgit2-version)" > $@
$(ibidir)/wcslib: $(ibidir)/cfitsio \
- | $(tdir)/wcslib-$(wcslib-version).tar.bz2
+ $(tdir)/wcslib-$(wcslib-version).tar.bz2
+ # If Fortran isn't present, don't build WCSLIB with it.
+ if type gfortran &> /dev/null; then fortranopt="";
+ else fortranopt="--disable-fortran"
+ fi
+
+ # Build WCSLIB.
$(call gbuild, wcslib-$(wcslib-version), , \
LIBS="-pthread -lcurl -lm" \
--with-cfitsiolib=$(ildir) \
--with-cfitsioinc=$(idir)/include \
- --without-pgplot) \
+ --without-pgplot $$fortranopt) \
&& if [ x$(on_mac_os) = xyes ]; then \
install_name_tool -id $(ildir)/libwcs.6.4.dylib \
$(ildir)/libwcs.6.4.dylib; \
@@ -825,14 +855,14 @@ $(ibidir)/astrometrynet: $(ibidir)/gsl \
$(ibidir)/wcslib \
$(ibidir)/cfitsio \
$(ibidir)/libjpeg \
- | $(tdir)/astrometry.net-$(astrometrynet-version).tar.gz
+ $(tdir)/astrometry.net-$(astrometrynet-version).tar.gz
# We are modifying the Makefile in two steps because on Mac OS
# system we do not have `/proc/cpuinfo' nor `free'. Since this is
# only for the `report.txt', this changes do not causes problems in
# running `astrometrynet'
cd $(ddir) \
&& rm -rf astrometry.net-$(astrometrynet-version) \
- && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)); then \
+ && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \
echo; echo "Tar error"; exit 1; \
fi \
&& cd astrometry.net-$(astrometrynet-version) \
@@ -848,17 +878,17 @@ $(ibidir)/astrometrynet: $(ibidir)/gsl \
&& cp $(dtexdir)/astrometrynet.tex $(ictdir)/ \
&& echo "Astrometry.net $(astrometrynet-version) \citep{astrometrynet}" > $@
-$(ibidir)/autoconf: | $(tdir)/autoconf-$(autoconf-version).tar.lz
+$(ibidir)/autoconf: $(tdir)/autoconf-$(autoconf-version).tar.lz
$(call gbuild, autoconf-$(autoconf-version), static, ,V=1) \
&& echo "GNU Autoconf $(autoconf-version)" > $@
-$(ibidir)/automake: | $(ibidir)/autoconf \
- $(tdir)/automake-$(automake-version).tar.gz
+$(ibidir)/automake: $(ibidir)/autoconf \
+ $(tdir)/automake-$(automake-version).tar.gz
$(call gbuild, automake-$(automake-version), static, ,V=1) \
&& echo "GNU Automake $(automake-version)" > $@
-$(ibidir)/bison: | $(ibidir)/help2man \
- $(tdir)/bison-$(bison-version).tar.xz
+$(ibidir)/bison: $(ibidir)/help2man \
+ $(tdir)/bison-$(bison-version).tar.xz
$(call gbuild, bison-$(bison-version), static, ,V=1) \
&& echo "GNU Bison $(bison-version)" > $@
@@ -869,9 +899,9 @@ $(ibidir)/bison: | $(ibidir)/help2man \
# programs are scripts and we need to touch them before installing.
# Otherwise this software will be re-built each time the configure step is
# invoked.
-$(ibidir)/cdsclient: | $(tdir)/cdsclient-$(cdsclient-version).tar.gz
+$(ibidir)/cdsclient: $(tdir)/cdsclient-$(cdsclient-version).tar.gz
cd $(ddir) \
- && tar xf $(word 1,$(filter $(tdir)/%,$|)) \
+ && tar xf $(word 1,$(filter $(tdir)/%,$^)) \
&& cd cdsclient-$(cdsclient-version) \
&& touch * \
&& ./configure --prefix=$(idir) \
@@ -883,7 +913,7 @@ $(ibidir)/cdsclient: | $(tdir)/cdsclient-$(cdsclient-version).tar.gz
# CMake can be built with its custom `./bootstrap' script.
$(ibidir)/cmake: $(ibidir)/curl \
- | $(tdir)/cmake-$(cmake-version).tar.gz
+ $(tdir)/cmake-$(cmake-version).tar.gz
# After searching in `bootstrap', I couldn't find `LIBS', only
# `LDFLAGS'. So the extra libraries are being added to `LDFLAGS',
# not `LIBS'.
@@ -896,7 +926,7 @@ $(ibidir)/cmake: $(ibidir)/curl \
fi; \
cd $(ddir) \
&& rm -rf cmake-$(cmake-version) \
- && tar xf $(word 1,$(filter $(tdir)/%,$|)) \
+ && tar xf $(word 1,$(filter $(tdir)/%,$^)) \
&& cd cmake-$(cmake-version) \
&& ./bootstrap --prefix=$(idir) --system-curl --system-zlib \
--system-bzip2 --system-liblzma --no-qt-gui \
@@ -908,18 +938,18 @@ $(ibidir)/cmake: $(ibidir)/curl \
&& echo "CMake $(cmake-version)" > $@
$(ibidir)/flex: $(ibidir)/bison \
- | $(tdir)/flex-$(flex-version).tar.gz
+ $(tdir)/flex-$(flex-version).tar.gz
$(call gbuild, flex-$(flex-version), static, ,V=1) \
&& echo "Flex $(flex-version)" > $@
-$(ibidir)/gdb: | $(ibidir)/python \
- $(tdir)/gdb-$(gdb-version).tar.gz
+$(ibidir)/gdb: $(ibidir)/python \
+ $(tdir)/gdb-$(gdb-version).tar.gz
$(call gbuild, gdb-$(gdb-version),,,V=1) \
&& echo "GNU Project Debugger (GDB) $(gdb-version)" > $@
$(ibidir)/ghostscript: $(ibidir)/libpng \
$(ibidir)/libtiff \
- | $(tdir)/ghostscript-$(ghostscript-version).tar.gz
+ $(tdir)/ghostscript-$(ghostscript-version).tar.gz
# First we need to make sure some necessary X11 libraries that we
# don't yet install in this template are present on the host
# system, see https://savannah.nongnu.org/task/?15481 .
@@ -965,7 +995,7 @@ $(ibidir)/gnuastro: $(ibidir)/gsl \
$(ibidir)/libtiff \
$(ibidir)/libgit2 \
$(ibidir)/ghostscript \
- | $(tdir)/gnuastro-$(gnuastro-version).tar.lz
+ $(tdir)/gnuastro-$(gnuastro-version).tar.lz
ifeq ($(static_build),yes)
staticopts="--enable-static=yes --enable-shared=no";
endif
@@ -974,14 +1004,14 @@ endif
&& cp $(dtexdir)/gnuastro.tex $(ictdir)/ \
&& echo "GNU Astronomy Utilities $(gnuastro-version) \citep{gnuastro}" > $@
-$(ibidir)/help2man: | $(tdir)/help2man-$(help2man-version).tar.xz
+$(ibidir)/help2man: $(tdir)/help2man-$(help2man-version).tar.xz
$(call gbuild, help2man-$(help2man-version), static, ,V=1) \
&& echo "Help2man $(Help2man-version)" > $@
$(ibidir)/imagemagick: $(ibidir)/zlib \
$(ibidir)/libjpeg \
$(ibidir)/libtiff \
- | $(tdir)/imagemagick-$(imagemagick-version).tar.xz
+ $(tdir)/imagemagick-$(imagemagick-version).tar.xz
$(call gbuild, ImageMagick-$(imagemagick-version), static, \
--without-x --disable-openmp, V=1 -j$(numthreads)) \
&& echo "ImageMagick $(imagemagick-version)" > $@
@@ -999,11 +1029,11 @@ $(ibidir)/imfit: $(ibidir)/gsl \
$(ibidir)/fftw \
$(ibidir)/scons \
$(ibidir)/cfitsio \
- | $(tdir)/imfit-$(imfit-version).tar.gz
+ $(tdir)/imfit-$(imfit-version).tar.gz
cd $(ddir) \
&& unpackdir=imfit-$(imfit-version) \
&& rm -rf $$unpackdir \
- && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)); then \
+ && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \
echo; echo "Tar error"; exit 1; \
fi \
&& cd $$unpackdir \
@@ -1037,17 +1067,17 @@ $(ibidir)/imfit: $(ibidir)/gsl \
# Autotools (Autoconf and Automake). Note that Minizip 2.x isn't like this
# any more and has its own independent tarball, but currently the programs
# that depend on Minizip need Minizip 1.x. The instructions to build
-# minizip were taken from ArchLinux.
+# minizip were taken from Arch GNU/Linux.
#
# About deleting the final crypt.h file after installation, see
# https://bugzilla.redhat.com/show_bug.cgi?id=1424609
$(ibidir)/minizip: $(ibidir)/automake \
- | $(tdir)/zlib-$(zlib-version).tar.gz
+ $(tdir)/zlib-$(zlib-version).tar.gz
cd $(ddir) \
&& unpackdir=minizip-$(minizip-version) \
&& rm -rf $$unpackdir \
&& mkdir $$unpackdir \
- && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)) \
+ && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)) \
-C$$unpackdir --strip-components=1; then \
echo; echo "Tar error"; exit 1; \
fi \
@@ -1070,7 +1100,7 @@ $(ibidir)/minizip: $(ibidir)/automake \
&& rm -rf $$unpackdir \
&& echo "Minizip $(minizip-version)" > $@
-$(ibidir)/missfits: | $(tdir)/missfits-$(missfits-version).tar.gz
+$(ibidir)/missfits: $(tdir)/missfits-$(missfits-version).tar.gz
$(call gbuild, missfits-$(missfits-version), static) \
&& cp $(dtexdir)/missfits.tex $(ictdir)/ \
&& echo "MissFITS $(missfits-version) \citep{missfits}" > $@
@@ -1086,7 +1116,7 @@ $(ibidir)/netpbm: $(ibidir)/unzip \
$(ibidir)/libjpeg \
$(ibidir)/libtiff \
$(ibidir)/libxml2 \
- | $(tdir)/netpbm-$(netpbm-version).tar.gz
+ $(tdir)/netpbm-$(netpbm-version).tar.gz
if [ x$(on_mac_os) = xyes ]; then \
answers='\n\n$(ildir)\n\n\n\n\n\n$(ildir)/include\n\n$(ildir)/include\n\n$(ildir)/include\nnone\n\n'; \
else \
@@ -1095,7 +1125,7 @@ $(ibidir)/netpbm: $(ibidir)/unzip \
cd $(ddir) \
&& unpackdir=netpbm-$(netpbm-version) \
&& rm -rf $$unpackdir \
- && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)); then \
+ && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \
echo; echo "Tar error"; exit 1; \
fi \
&& cd $$unpackdir \
@@ -1109,11 +1139,15 @@ $(ibidir)/netpbm: $(ibidir)/unzip \
&& rm -rf $$unpackdir \
&& echo "Netpbm $(netpbm-version)" > $@
+$(ibidir)/patch: $(tdir)/patch-$(patch-version).tar.gz
+ $(call gbuild, patch-$(patch-version), static, ,V=1) \
+ && echo "GNU Patch $(patch-version)" > $@
+
# R programming language
$(ibidir)/R: $(ibidir)/libpng \
$(ibidir)/libjpeg \
$(ibidir)/libtiff \
- | $(tdir)/R-$(R-version).tar.gz
+ $(tdir)/R-$(R-version).tar.gz
export R_SHELL=$(SHELL); \
$(call gbuild, R-$(R-version), static, \
--without-x --with-readline \
@@ -1128,9 +1162,11 @@ $(ibidir)/R: $(ibidir)/libpng \
$(ibidir)/scamp: $(ibidir)/fftw \
$(ibidir)/openblas \
$(ibidir)/cdsclient \
- | $(tdir)/scamp-$(scamp-version).tar.lz
+ $(tdir)/scamp-$(scamp-version).tar.lz
$(call gbuild, scamp-$(scamp-version), static, \
- --enable-threads --enable-openblas \
+ --enable-threads \
+ --enable-openblas \
+ --enable-plplot=no \
--with-fftw-libdir=$(idir) \
--with-fftw-incdir=$(idir)/include \
--with-openblas-libdir=$(ildir) \
@@ -1140,12 +1176,12 @@ $(ibidir)/scamp: $(ibidir)/fftw \
# Since `scons' doesn't use the traditional GNU installation with
# `configure' and `make' it is installed manually using `python'.
-$(ibidir)/scons: | $(ibidir)/python \
- $(tdir)/scons-$(scons-version).tar.gz
+$(ibidir)/scons: $(ibidir)/python \
+ $(tdir)/scons-$(scons-version).tar.gz
cd $(ddir) \
&& unpackdir=scons-$(scons-version) \
&& rm -rf $$unpackdir \
- && if ! tar xf $(word 1,$(filter $(tdir)/%,$|)); then \
+ && if ! tar xf $(word 1,$(filter $(tdir)/%,$^)); then \
echo; echo "Tar error"; exit 1; \
fi \
&& cd $$unpackdir \
@@ -1158,7 +1194,7 @@ $(ibidir)/scons: | $(ibidir)/python \
# the configuration step.
$(ibidir)/sextractor: $(ibidir)/fftw \
$(ibidir)/openblas \
- | $(tdir)/sextractor-$(sextractor-version).tar.lz
+ $(tdir)/sextractor-$(sextractor-version).tar.lz
$(call gbuild, sextractor-$(sextractor-version), static, \
--enable-threads --enable-openblas \
--with-openblas-libdir=$(ildir) \
@@ -1168,13 +1204,13 @@ $(ibidir)/sextractor: $(ibidir)/fftw \
&& echo "SExtractor $(sextractor-version) \citep{sextractor}" > $@
$(ibidir)/swarp: $(ibidir)/fftw \
- | $(tdir)/swarp-$(swarp-version).tar.gz
+ $(tdir)/swarp-$(swarp-version).tar.gz
$(call gbuild, swarp-$(swarp-version), static, \
--enable-threads) \
&& cp $(dtexdir)/swarp.tex $(ictdir)/ \
&& echo "SWarp $(swarp-version) \citep{swarp}" > $@
-$(ibidir)/swig: | $(tdir)/swig-$(swig-version).tar.gz
+$(ibidir)/swig: $(tdir)/swig-$(swig-version).tar.gz
# Option --without-pcre was a suggestion once the configure step
# was tried and it failed. It was not recommended but it works!
# pcr is a dependency of swig
@@ -1184,7 +1220,7 @@ $(ibidir)/swig: | $(tdir)/swig-$(swig-version).tar.gz
$(ibidir)/xlsxio: $(ibidir)/cmake \
$(ibidir)/expat \
$(ibidir)/minizip \
- | $(tdir)/xlsxio-$(xlsxio-version).tar.gz
+ $(tdir)/xlsxio-$(xlsxio-version).tar.gz
if [ x$(on_mac_os) = xyes ]; then \
export CC=clang; \
export CXX=clang++; \
@@ -1220,7 +1256,6 @@ $(ibidir)/xlsxio: $(ibidir)/cmake \
-
# Since we want to avoid complicating the PATH, we are putting a symbolic
# link of all the TeX Live executables in $(ibdir). But symbolic links are
# hard to track for Make (as a target). Also, TeX in general is optional
@@ -1228,18 +1263,7 @@ $(ibidir)/xlsxio: $(ibidir)/cmake \
# the final PDF). So we'll make a simple ASCII file called
# `texlive-ready-tlmgr' and use its contents to mark if we can use it or
# not.
-# TeX tarball are updated yearly, and because of that, it may crash when trying
-# to re-configure the project. As an example: an already present TeX tarball of
-# year 2019 and try to re-configure the project when the official version is of
-# the year 2020. In that case the installation will do the following:
#
-# - Install the 2019 (but the official version is 2020!), so it will complain
-# about that, and the error will be saved into a log file.
-# - Check if the error mesage correspond to this problem.
-# - If yes, it will move the old tarball, and download and install the new one.
-# - If not, it will complain about not being able to install it (for any other
-# reason).
-
# TeX Live mirror
# ---------------
#
@@ -1252,7 +1276,7 @@ tlmirror=http://mirrors.rit.edu/CTAN/systems/texlive/tlnet
# The core TeX Live system.
$(itidir)/texlive-ready-tlmgr: reproduce/software/config/texlive.conf \
- | $(tdir)/install-tl-unx.tar.gz
+ $(tdir)/install-tl-unx.tar.gz
# Unpack, enter the directory, and install based on the given
# configuration (prerequisite of this rule).
@@ -1268,11 +1292,33 @@ $(itidir)/texlive-ready-tlmgr: reproduce/software/config/texlive.conf \
# TeX Live's installation may fail due to any reason. But TeX Live
# is optional (only necessary for building the final PDF). So we
# don't want the configure script to fail if it can't run.
- # Possible error messages will be saved into `log.tx'. After that, this
- # file will be checked to see if the error during the installation is
- # due to the different version of the current tarball while it expects
- # to have a newer version.
- if ./install-tl --profile=texlive.conf -repository $(tlmirror) 2> log.txt; then
+ # Possible error messages will be saved into `log.txt' and if it
+ # fails, 'log.txt' will be checked to see if the error is due to
+ # the different version of the current tarball and the TeXLive
+ # server or something else.
+ #
+ # The problem with versions is this: each installer tarball (that
+ # is downloaded and a user may backup) is for a specific version of
+ # TeXLive (specified by year, usually around April). So if a user
+ # has an old tarball, but the CTAN server has been updated, the
+ # script will fail with a message like this:
+ #
+ # =============================================================
+ # ./install-tl: The TeX Live versions of the local installation
+ # and the repository being accessed are not compatible:
+ # local: 2019
+ # repository: 2020
+ # Perhaps you need to use a different CTAN mirror?
+ # (For more, see the output of install-tl --help, especially the
+ # -repository option. Online via https://tug.org/texlive/doc.)
+ # =============================================================
+ #
+ # To address this problem, when this happens, we simply download a
+ # the most recent tarball, and if it succeeds, we will build
+ # TeXLive using that. The old tarball will be preserved, but will
+ # have an '-OLD' suffix after it.
+ if ./install-tl --profile=texlive.conf -repository \
+ $(tlmirror) 2> log.txt; then
# Put a symbolic link of the TeX Live executables in `ibdir' to
# avoid all the complexities of its sub-directories and additions
@@ -1282,31 +1328,38 @@ $(itidir)/texlive-ready-tlmgr: reproduce/software/config/texlive.conf \
# Register that the build was successful.
echo "TeX Live is ready." > $@
+ # The build failed!
else
- # Print on the command line the error messages during the installation
+ # Print on the command line the error messages during the
+ # installation.
cat log.txt
- # Look for words `repository:' and `local:' in `log.txt'
- version_check=$$(grep -w 'repository:\|local:' log.txt)
-
- # If these words exists, then there is a conflict with tarball
- # versions. So it is necessary to move the old tarball and download
- # the new one to install it.
- if [ x"$$version_check" != x ]; then
+ # Look for words `repository:' and `local:' in `log.txt' and make
+ # sure that two lines are returned. Note that we need to check
+ # for two lines because one of them may exist, but another may
+ # not (in this case, its not a version conflict scenario).
+ version_check=$$(grep -w 'repository:\|local:' log.txt | wc -l)
+
+ # If these words exists and two lines are found, there is a
+ # conflict with the main TeXLive version in the tarball and on
+ # the server. So it is necessary to move the old tarball and
+ # download the new one to install it.
+ if [ x"$$version_check" = x2 ]; then
+ # Go back to the top project directory, don't remove the
+ # tarball, just rename it.
cd $$topdir
-
- # Don't remove the tarball, just rename it
mv $(tdir)/install-tl-unx.tar.gz $(tdir)/install-tl-unx-OLD.tar.gz
- # Download using the script specially defined for this job.
- tarballurl=http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
+ # Download using the script specially defined for this job. If
+ # the download of new tarball success, install it (same lines
+ # than above). If not, record the fail into the target.
+ url=http://mirror.ctan.org/systems/texlive/tlnet
+ tarballurl=$$url/install-tl-unx.tar.gz
touch $(lockdir)/download
downloader="wget --no-use-server-timestamps -O"
if $(downloadwrapper) "$$downloader" $(lockdir)/download \
$$tarballurl "$(tdir)/install-tl-unx.tar.gz" \
- "$(backupservers)"; then
- # If the download of new tarball success, install it (same lines
- # than above). If not, record the fail into the target.
+ "$(backupservers)"; then
cd $(ddir)
rm -rf install-tl-*
tar xf $(tdir)/install-tl-unx.tar.gz
@@ -1314,15 +1367,18 @@ $(itidir)/texlive-ready-tlmgr: reproduce/software/config/texlive.conf \
sed -e's|@installdir[@]|$(idir)|g' \
$$topdir/reproduce/software/config/texlive.conf \
> texlive.conf
- if ./install-tl --profile=texlive.conf -repository $(tlmirror); then
+ if ./install-tl --profile=texlive.conf -repository \
+ $(tlmirror); then
ln -fs $(idir)/texlive/maneage/bin/*/* $(ibdir)/
echo "TeX Live is ready." > $@
else
- echo "NOT!" > $@
+ echo "NOT!" > $@ # Building failed.
fi
else
- echo "NOT!" > $@
+ echo "NOT!" > $@ # Download failed.
fi
+ else
+ echo "NOT!" > $@ # Error was not version.
fi
fi
@@ -1381,7 +1437,9 @@ $(itidir)/texlive: reproduce/software/config/texlive-packages.conf \
ln -fs $(idir)/texlive/maneage/bin/*/* $(ibdir)/
# Get all the necessary versions.
- texlive=$$(pdflatex --version | awk 'NR==1' | sed 's/.*(\(.*\))/\1/' \
+ texlive=$$(pdflatex --version \
+ | awk 'NR==1' \
+ | sed 's/.*(\(.*\))/\1/' \
| awk '{print $$NF}');
# Package names and versions. Note that all TeXLive packages