diff options
Diffstat (limited to 'reproduce/software/make/high-level.mk')
-rw-r--r-- | reproduce/software/make/high-level.mk | 330 |
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 |