From 1d4c587489cbb17c7ae9f6c0d0d5d919690fafde Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Mon, 28 Oct 2019 15:19:34 +0000 Subject: HEALPix, Autoconf and Automake now in library The tarball of HEALPix includes multiple languages and doesn't include the ready-to-run GNU Build System by default, we actually have to build the `./configure' script for the C/C++ libraries. So it was necessary to also include GNU Autoconf and GNU Automake as prerequisites of HEALPix. However, the official GNU Autoconf tarball (dating from 2012) doesn't build on modern systems, so I just cloned it from its source and bootstrapped it and built its modern tarball which we are using here. --- reproduce/software/make/basic.mk | 1 + reproduce/software/make/high-level.mk | 63 ++++++++++++++++++++++++++++++++++- reproduce/software/make/python.mk | 10 ++++++ 3 files changed, 73 insertions(+), 1 deletion(-) (limited to 'reproduce/software/make') diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index b0b757f..65bdf1e 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -904,6 +904,7 @@ $(ibidir)/glibtool: $(tdir)/libtool-$(libtool-version).tar.xz \ | $(ibidir)/m4 $(call gbuild, $<, libtool-$(libtool-version), static, \ --program-prefix=g) \ + && ln -s $(ibdir)/glibtoolize $(ibdir)/libtoolize \ && echo "GNU Libtool $(libtool-version)" > $@ $(ibidir)/grep: $(tdir)/grep-$(grep-version).tar.xz \ diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk index 36e88ef..7ee7062 100644 --- a/reproduce/software/make/high-level.mk +++ b/reproduce/software/make/high-level.mk @@ -136,6 +136,8 @@ tarballs = $(foreach t, apr-$(apr-version).tar.gz \ apr-util-$(apr-util-version).tar.gz \ astrometry.net-$(astrometrynet-version).tar.gz \ atlas-$(atlas-version).tar.bz2 \ + autoconf-$(autoconf-version).tar.lz \ + automake-$(automake-version).tar.gz \ bison-$(bison-version).tar.xz \ boost-$(boost-version).tar.gz \ cairo-$(cairo-version).tar.xz \ @@ -150,6 +152,7 @@ tarballs = $(foreach t, apr-$(apr-version).tar.gz \ gnuastro-$(gnuastro-version).tar.lz \ gsl-$(gsl-version).tar.gz \ hdf5-$(hdf5-version).tar.gz \ + healpix-$(healpix-version).tar.gz \ help2man-$(help2man-version).tar.xz \ imagemagick-$(imagemagick-version).tar.xz \ imfit-$(imfit-version).tar.gz \ @@ -194,7 +197,9 @@ $(tarballs): $(tdir)/%: | $(lockdir) mergenames=0 c=$(atlas-checksum) w=https://sourceforge.net/projects/math-atlas/files/Stable/$(atlas-version)/atlas$(atlas-version).tar.bz2/download - elif [ $$n = bison ]; then c=$(bison-checksum); w=http://ftp.gnu.org/gnu/bison/ + elif [ $$n = autoconf ]; then c=$(autoconf-checksum); w=http://akhlaghi.org/reproduce-software + elif [ $$n = automake ]; then c=$(automake-checksum); w=http://ftp.gnu.org/gnu/automake + elif [ $$n = bison ]; then c=$(bison-checksum); w=http://ftp.gnu.org/gnu/bison elif [ $$n = boost ]; then mergenames=0 c=$(boost-checksum) @@ -228,6 +233,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) c=$(hdf5-checksum) majorver=$$(echo $(hdf5-version) | sed -e 's/\./ /g' | awk '{printf("%d.%d", $$1, $$2)}') w=https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$$majorver/hdf5-$(hdf5-version)/src/$* + elif [ $$n = healpix ]; then c=$(healpix-checksum); w=http://akhlaghi.org/reproduce-software elif [ $$n = help ]; then c=$(help2man-checksum); w=http://ftp.gnu.org/gnu/help2man elif [ $$n = imagemagick ]; then c=$(imagemagick-checksum); w=http://akhlaghi.org/reproduce-software elif [ $$n = imfit ]; then @@ -519,6 +525,53 @@ $(ibidir)/hdf5: $(tdir)/hdf5-$(hdf5-version).tar.gz \ --enable-fortran, -j$(numthreads) V=1) \ && echo "HDF5 library $(hdf5-version)" > $@ +# HEALPix includes the source of its C, C++, Python (and several other +# languages) libraries within one tarball. We will include the Python +# installation only when any other Python module is requested (in +# `TARGETS.mk'). +# +# Note that the default `./configure' script is an interactive script which +# is hard to automate. So we need to go into the `autotools' directory of +# the `C' and `cxx' directories and configure the GNU Build System (with +# `autoreconf', which uses `autoconf' and `automake') to easily build the +# HEALPix C/C++ libraries in batch mode. +ifeq ($(strip $(top-level-python)),) +healpix-python-dep = +else +healpix-python-dep = $(ipydir)/matplotlib $(ipydir)/astropy +endif +$(ibidir)/healpix: $(tdir)/healpix-$(healpix-version).tar.gz \ + $(healpix-python-dep) \ + $(ibidir)/autoconf \ + $(ibidir)/automake \ + $(ibidir)/cfitsio + if [ x"$(healpix-python-dep)" = x ]; then + pycommand1="echo no-healpy-because-no-other-python" + pycommand2="echo no-healpy-because-no-other-python" + else + pycommand1="python setup.py build" + pycommand2="python setup.py install" + fi + rm -rf $(ddir)/Healpix_$(healpix-version) + topdir=$(pwd); cd $(ddir); tar xf $< + cd Healpix_$(healpix-version)/src/C/autotools/ \ + && autoreconf --install \ + && ./configure --prefix=$(idir) \ + && make V=1 -j$(numthreads) SHELL=$(ibdir)/bash \ + && make install \ + && cd ../../cxx/autotools/ \ + && autoreconf --install \ + && ./configure --prefix=$(idir) \ + && make V=1 -j$(numthreads) SHELL=$(ibdir)/bash \ + && make install \ + && cd ../../healpy \ + && $$pycommand1 \ + && $$pycommand2 \ + && cd $$topdir \ + && rm -rf $(ddir)/Healpix_$(healpix-version) \ + && cp $(dtexdir)/healpix.tex $(ictdir)/ \ + && echo "HEALPix $(healpix-version) \citep{healpix}" > $@ + $(ibidir)/libjpeg: $(tdir)/jpegsrc.$(libjpeg-version).tar.gz $(call gbuild, $<, jpeg-9b, static) \ && echo "Libjpeg $(libjpeg-version)" > $@ @@ -705,6 +758,14 @@ $(ibidir)/astrometrynet: $(tdir)/astrometry.net-$(astrometrynet-version).tar.gz && cp $(dtexdir)/astrometrynet.tex $(ictdir)/ \ && echo "Astrometry.net $(astrometrynet-version) \citep{astrometrynet}" > $@ +$(ibidir)/autoconf: $(tdir)/autoconf-$(autoconf-version).tar.lz + $(call gbuild, $<, autoconf-$(autoconf-version), static, ,V=1) \ + && echo "GNU Autoconf $(autoconf-version)" > $@ + +$(ibidir)/automake: $(tdir)/automake-$(automake-version).tar.gz + $(call gbuild, $<, automake-$(automake-version), static, ,V=1) \ + && echo "GNU Automake $(automake-version)" > $@ + $(ibidir)/bison: $(tdir)/bison-$(bison-version).tar.xz \ $(ibidir)/help2man $(call gbuild, $<, bison-$(bison-version), static, ,V=1) \ diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk index b7cbc9b..14e7b75 100644 --- a/reproduce/software/make/python.mk +++ b/reproduce/software/make/python.mk @@ -455,6 +455,16 @@ $(ipydir)/h5py: $(tdir)/h5py-$(h5py-version).tar.gz \ $(call pybuild, tar xf, $<, h5py-$(h5py-version), ,\ h5py $(h5py-version)) +# `healpy' is actually installed as part of the HEALPix package. It will be +# installed with its C/C++ libraries if any other Python library is +# requested with HEALPix. So actually calling for `healpix' (when `healpix' +# is requested) is not necessary. But some users might not know about this +# and just ask for `healpy'. To avoid confusion in such cases, we'll just +# set `healpy' to be dependent on `healpix' and not download any tarball +# for it, or write anything in the final target. +$(ipydir)/healpy: $(ibidir)/healpix + touch $@ + $(ipydir)/html5lib: $(tdir)/html5lib-$(html5lib-version).tar.gz \ $(ipydir)/webencodings \ $(ipydir)/six -- cgit v1.2.1