From b8f525ff7dfe7cced8691760eaa51ce0479a88fe Mon Sep 17 00:00:00 2001
From: Mohammad Akhlaghi <mohammad@akhlaghi.org>
Date: Thu, 24 Oct 2019 19:02:27 +0100
Subject: APR, APR Utility, Boost and Eigen are now available

As part of an effort to bring in all the dependencies of the LSST Science
pipeline (which includes the last commit), these software are now available
in the template.
---
 .../software/config/installation/checksums.mk      |  4 ++
 reproduce/software/config/installation/versions.mk |  4 ++
 reproduce/software/make/high-level.mk              | 63 +++++++++++++++++++++-
 reproduce/software/make/python.mk                  |  1 +
 4 files changed, 70 insertions(+), 2 deletions(-)

(limited to 'reproduce')

diff --git a/reproduce/software/config/installation/checksums.mk b/reproduce/software/config/installation/checksums.mk
index 6c12712..39c8a7f 100644
--- a/reproduce/software/config/installation/checksums.mk
+++ b/reproduce/software/config/installation/checksums.mk
@@ -73,13 +73,17 @@ zlib-checksum = 73fd3fff4adeccd4894084c15ddac89890cd10ef105dd5e1835e1e9bbb6a49ff
 # `reproduce/software/config/installation/TARGETS.mk' will be built as part
 # of a project. To specify a software there, just remove the `-checksum'
 # suffix from the list below.
+apr-checksum = daa140c83c7e2c45c3980d9dc81d34fa662bebd050653562c39572d0ddf2eaedb71767c518a59d77f59db9b32e00221ef48b9f72ec3666c4521dd511969f3706
+apr-util-checksum = 84da76e9b64da2de0996d4d6f3ab3f23db3724eb6352d218e0e8196bcc0b0a5d4fe791f41b4cc350ce3d04cce3bb3cf8bfb513d777d0cd030928368e6b55a536
 astrometrynet-checksum = 35c268bf0a7068e01323b9bfccdf255c993df83c24b2e6026a00084c4ab87d031f1024205d0ed3aecc7e2a495d4bc0b0e67270d66679020b7cc2e4b2f30f5c4a
 atlas-checksum = bf17306f09f2aa973cb776e2c9eacfb2409ad4d95d19802e1c4e0597d0a099fccdb5eaafe273c2682a41e41a3c6fabc8bbba4ce03180cffea40ede5df1d1f56e
 bison-checksum = 00d2b37187b93100ec4b220ce2752d12ccf68f9d0d39b380d375d36dd8a22aa1d6e60156918f95e4493f9531c5d42d8fad38fd807307b491c1ca7ca4177823d9
+boost-checksum = 4378e20f18db9f186ac0f38ad98c522526e0fe48a8deb968c41325e3f69e733be3298505e91ea713e79a9d9e741305fa879d289f74e6276e0ec7286f03be87fc
 cairo-checksum = 9eb27c4cf01c0b8b56f2e15e651f6d4e52c99d0005875546405b64f1132aed12fbf84727273f493d84056a13105e065009d89e94a8bfaf2be2649e232b82377f
 cdsclient-checksum = 2d7abf0079189b9dd19cb8919061445fd19ea9f7dfd54e8ceee26b743218cf62ab00eba0147abe82d9294223927f04b4cc3328620dfc9184a7049f8d515b29e4
 cfitsio-checksum = c0502699e266928dd25abe57730dc4b357ccc9023789fe745324ae01aa688516aceaf37321ee578f0430111d9718f0fec0dc5b54c07f935529560f00b32ce1e3
 cmake-checksum = 7d0abf2f7c661c6b555a7e93a2fce5ab5610c653b0aa4949bed6e97bfbe6523fd0665f67115d3944d3729cbe07ae3aaf780ee673b06dd80f90018cec8a999658
+eigen-checksum = 34cf600914cce719d61511577ef9cd26fbdcb7a6fad1d0ab8396f98b887fac6a5577d3967e84a8f56225cc50de38f3b91f34f447d14312028383e32b34ea1972
 fftw-checksum = ab918b742a7c7dcb56390a0a0014f517a6dff9a2e4b4591060deeb2c652bf3c6868aa74559a422a276b853289b4b701bdcbd3d4d8c08943acf29167a7be81a38
 flex-checksum = e9785f3d620a204b7d20222888917dc065c2036cae28667065bf7862dfa1b25235095a12fd04efdbd09bfd17d3452e6b9ef953a8c1137862ff671c97132a082e
 freetype-checksum = 02f0f4211f9cee5b5e46ebe61190482fca5b41bc26be06fcf0d2d717e9fb119229308398c420eeea476fa2511ca2d52948f1a3242efad30ca82ed0b07cd50e3a
diff --git a/reproduce/software/config/installation/versions.mk b/reproduce/software/config/installation/versions.mk
index 3002078..54e1f2e 100644
--- a/reproduce/software/config/installation/versions.mk
+++ b/reproduce/software/config/installation/versions.mk
@@ -71,13 +71,17 @@ zlib-version = 1.2.11
 # `reproduce/software/config/installation/TARGETS.mk' will be built as part
 # of a project. To specify a software there, just remove the `-version'
 # suffix from the list below.
+apr-version = 1.7.0
+apr-util-version = 1.6.1
 astrometrynet-version = 0.77
 atlas-version = 3.10.3
 bison-version = 3.4.2
+boost-version = 1.71.0
 cairo-version = 1.16.0
 cdsclient-version = 3.84
 cfitsio-version = 3.47
 cmake-version = 3.15.3
+eigen-version = 3.3.7
 fftw-version = 3.3.8
 flex-version = 2.6.4
 flock-version = 0.2.3
diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk
index 9f7b7e1..36e88ef 100644
--- a/reproduce/software/make/high-level.mk
+++ b/reproduce/software/make/high-level.mk
@@ -40,6 +40,7 @@ ddir    = $(BDIR)/software/build-tmp
 idir    = $(BDIR)/software/installed
 ibdir   = $(BDIR)/software/installed/bin
 ildir   = $(BDIR)/software/installed/lib
+iidir   = $(BDIR)/software/installed/include
 dtexdir = $(shell pwd)/reproduce/software/bibtex
 itidir  = $(BDIR)/software/installed/version-info/tex
 ictdir  = $(BDIR)/software/installed/version-info/cite
@@ -131,13 +132,17 @@ include reproduce/software/make/python.mk
 # convention, but include the name/version in their tarball names with
 # another format, we'll do the modification before the download so the
 # downloaded file has our desired format.
-tarballs = $(foreach t, astrometry.net-$(astrometrynet-version).tar.gz \
+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 \
                         bison-$(bison-version).tar.xz \
+                        boost-$(boost-version).tar.gz \
                         cairo-$(cairo-version).tar.xz \
                         cdsclient-$(cdsclient-version).tar.gz \
                         cfitsio-$(cfitsio-version).tar.gz \
                         cmake-$(cmake-version).tar.gz \
+                        eigen-$(eigen-version).tar.gz \
                         fftw-$(fftw-version).tar.gz \
                         flex-$(flex-version).tar.gz \
                         freetype-$(freetype-version).tar.gz \
@@ -181,12 +186,20 @@ $(tarballs): $(tdir)/%: | $(lockdir)
 
         # Set the top download link of the requested tarball.
 	mergenames=1
-	if   [ $$n = astrometry  ]; then c=$(astrometrynet-checksum); w=http://astrometry.net/downloads
+	if [ $* = apr-util-$(apr-util-version).tar.gz ];
+	  then c=$(apr-util-checksum); w=https://www-us.apache.org/dist/apr
+	elif [ $$n = apr         ]; then c=$(apr-checksum); w=https://www-us.apache.org/dist/apr
+	elif [ $$n = astrometry  ]; then c=$(astrometrynet-checksum); w=http://astrometry.net/downloads
 	elif [ $$n = atlas       ]; then
 	  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 = boost       ]; then
+	  mergenames=0
+	  c=$(boost-checksum)
+	  vstr=$$(echo $(boost-version) | sed -e's/\./_/g')
+	  w=https://dl.bintray.com/boostorg/release/$(boost-version)/source/boost_$$vstr.tar.gz
 	elif [ $$n = cairo       ]; then c=$(cairo-checksum); w=https://www.cairographics.org/releases
 	elif [ $$n = cdsclient   ]; then c=$(cdsclient-checksum); w=http://cdsarc.u-strasbg.fr/ftp/pub/sw
 	elif [ $$n = cfitsio     ]; then c=$(cfitsio-checksum); w=https://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c
@@ -197,6 +210,10 @@ $(tarballs): $(tdir)/%: | $(lockdir)
 	               | sed -e's/\./ /' \
 	               | awk '{printf("%d.%d", $$1, $$2)}')
 	  w=https://cmake.org/files/v$$majv/cmake-$(cmake-version).tar.gz
+	elif [ $$n = eigen       ]; then
+	  mergenames=0
+	  c=$(eigen-checksum);
+	  w=http://bitbucket.org/eigen/eigen/get/$(eigen-version).tar.gz
 	elif [ $$n = fftw        ]; then c=$(fftw-checksum); w=ftp://ftp.fftw.org/pub/fftw
 	elif [ $$n = flex        ]; then c=$(flex-checksum); w=https://github.com/westes/flex/files/981163
 	elif [ $$n = freetype    ]; then c=$(freetype-checksum); w=https://download.savannah.gnu.org/releases/freetype
@@ -314,6 +331,19 @@ $(tarballs): $(tdir)/%: | $(lockdir)
 # libraries. Therefore, we can't use the easy `.a' suffix for static
 # libraries as targets and there are different conventions for shared
 # library names.
+$(ibidir)/apr: $(tdir)/apr-$(apr-version).tar.gz
+	$(call gbuild, $<, apr-$(apr-version), ,--disable-static) \
+	&& echo "Apache Portable Runtime $(apr-version)" > $@
+
+$(ibidir)/apr-util: $(tdir)/apr-util-$(apr-util-version).tar.gz \
+                       $(ibidir)/apr
+	$(call gbuild, $<, apr-util-$(apr-util-version), , \
+	               --disable-static \
+	               --with-apr=$(idir) \
+	               --with-openssl=$(idir) \
+	               --with-crypto ) \
+	&& echo "Apache Portable Runtime Utility $(apr-util-version)" > $@
+
 $(ibidir)/atlas: $(tdir)/atlas-$(atlas-version).tar.bz2 \
 	         $(tdir)/lapack-$(lapack-version).tar.gz
 
@@ -394,6 +424,23 @@ $(ibidir)/atlas: $(tdir)/atlas-$(atlas-version).tar.bz2 \
 	  echo "ATLAS $(atlas-version)" > $@; \
 	fi
 
+# Boost doesn't use the standard GNU Build System.
+$(ibidir)/boost: $(tdir)/boost-$(boost-version).tar.gz \
+                 $(ibidir)/openmpi \
+                 $(ibidir)/python
+	vstr=$$(echo $(boost-version) | sed -e's/\./_/g')
+	rm -rf $(ddir)/boost_$$vstr
+	topdir=$(pwd); cd $(ddir); tar xf $<
+	cd boost_$$vstr
+	./bootstrap.sh --prefix=$(idir) --with-libraries=all \
+	               --with-python=python3 \
+	&& echo "using mpi ;" > project-config.jam \
+	&& ./b2 stage threading=multi link=shared --prefix=$(idir) -j$(numthreads) \
+	&& ./b2 install threading=multi link=shared --prefix=$(idir) -j$(numthreads) \
+	&& cd $$topdir \
+	&& rm -rf $(ddir)/boost_$$vstr \
+	&& echo "Boost $(boost-version)" > $@
+
 $(ibidir)/cfitsio: $(tdir)/cfitsio-$(cfitsio-version).tar.gz \
                    $(ibidir)/curl
 
@@ -428,6 +475,18 @@ $(ibidir)/cairo: $(tdir)/cairo-$(cairo-version).tar.xz \
 	               --with-x=no, -j$(numthreads) V=1) \
 	&& echo "Cairo $(cairo-version)" > $@
 
+# 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
+	rm -rf $(ddir)/eigen-eigen-*
+	topdir=$(pwd); cd $(ddir); tar xf $<
+	cd eigen-eigen-*
+	cp -r Eigen $(iidir)/eigen3 \
+	&& cd $$topdir \
+	&& rm -rf $(ddir)/eigen-eigen-* \
+	&& echo "Eigen $(eigen-version)" > $@
+
 $(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
diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk
index f624a20..9cf99e5 100644
--- a/reproduce/software/make/python.mk
+++ b/reproduce/software/make/python.mk
@@ -271,6 +271,7 @@ $(ibidir)/python: $(tdir)/python-$(python-version).tar.gz \
 	    {printf "%d.%d\n", $$1, $$2}') \
 	&& ln -sf $(ildir)/python$$v $(ildir)/python \
 	&& ln -sf $(ibdir)/python$$v $(ibdir)/python \
+	&& ln -sf $(iidir)/python$$v"m" $(iidir)/python$$v \
 	&& rm -rf $(ipydir) \
 	&& mkdir $(ipydir) \
 	&& echo "Python $(python-version)" > $@
-- 
cgit v1.2.1