aboutsummaryrefslogtreecommitdiff
path: root/reproduce/software
diff options
context:
space:
mode:
Diffstat (limited to 'reproduce/software')
-rw-r--r--reproduce/software/bibtex/corner.tex2
-rw-r--r--reproduce/software/bibtex/galsim.tex2
-rw-r--r--reproduce/software/bibtex/healpix.tex7
-rw-r--r--reproduce/software/bibtex/matplotlib.tex4
-rw-r--r--reproduce/software/bibtex/missfits.tex4
-rw-r--r--reproduce/software/bibtex/mpi4py.tex2
-rw-r--r--reproduce/software/bibtex/sympy.tex3
-rw-r--r--reproduce/software/config/checksums.conf31
-rw-r--r--reproduce/software/config/servers-backup.conf14
-rw-r--r--reproduce/software/config/versions.conf29
-rw-r--r--reproduce/software/make/README.md30
-rwxr-xr-xreproduce/software/make/atlas-multiple.mk19
-rwxr-xr-xreproduce/software/make/atlas-single.mk19
-rw-r--r--reproduce/software/make/basic.mk725
-rw-r--r--reproduce/software/make/build-rules.mk61
-rw-r--r--reproduce/software/make/high-level.mk330
-rw-r--r--reproduce/software/make/python.mk134
-rw-r--r--reproduce/software/patches/valgrind-3.15.0-mpi-fix1.patch37
-rw-r--r--reproduce/software/patches/valgrind-3.15.0-mpi-fix2.patch23
-rwxr-xr-xreproduce/software/shell/bashrc.sh21
-rwxr-xr-xreproduce/software/shell/configure.sh204
-rwxr-xr-xreproduce/software/shell/pre-make-build.sh249
22 files changed, 1174 insertions, 776 deletions
diff --git a/reproduce/software/bibtex/corner.tex b/reproduce/software/bibtex/corner.tex
index b55c157..c4359d1 100644
--- a/reproduce/software/bibtex/corner.tex
+++ b/reproduce/software/bibtex/corner.tex
@@ -8,7 +8,7 @@
@ARTICLE{corner,
author = {{Foreman-Mackey}, Daniel},
title = "{corner.py: Scatterplot matrices in Python}",
- journal = {The Journal of Open Source Software},
+ journal = {JOSS},
year = "2016",
month = "Jun",
volume = {1},
diff --git a/reproduce/software/bibtex/galsim.tex b/reproduce/software/bibtex/galsim.tex
index 0efa048..b9d0b08 100644
--- a/reproduce/software/bibtex/galsim.tex
+++ b/reproduce/software/bibtex/galsim.tex
@@ -12,7 +12,7 @@
{Dietrich}, J.~P. and {Armstrong}, R. and {Melchior}, P. and
{Gill}, M.~S.~S.},
title = "{GALSIM: The modular galaxy image simulation toolkit}",
- journal = {Astronomy and Computing},
+ journal = {Astron.Comput.},
keywords = {Methods: data analysis, Techniques: image processing, Gravitational lensing, Cosmology: observations, Astrophysics - Instrumentation and Methods for Astrophysics, Astrophysics - Cosmology and Nongalactic Astrophysics, 85-04},
year = "2015",
month = "Apr",
diff --git a/reproduce/software/bibtex/healpix.tex b/reproduce/software/bibtex/healpix.tex
index b9089be..bae1acb 100644
--- a/reproduce/software/bibtex/healpix.tex
+++ b/reproduce/software/bibtex/healpix.tex
@@ -1,3 +1,10 @@
+%% Copyright (C) 2019-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
+%%
+%% Copying and distribution of this file, with or without modification,
+%% are permitted in any medium without royalty provided the copyright
+%% notice and this notice are preserved. This file is offered as-is,
+%% without any warranty.
+
@ARTICLE{healpix,
author = {{G{\'o}rski}, K.~M. and {Hivon}, E. and {Banday}, A.~J. and {Wand
elt}, B.~D. and {Hansen}, F.~K. and {Reinecke}, M. and {Bartelmann}, M.},
diff --git a/reproduce/software/bibtex/matplotlib.tex b/reproduce/software/bibtex/matplotlib.tex
index 9ad7f1a..a76a41f 100644
--- a/reproduce/software/bibtex/matplotlib.tex
+++ b/reproduce/software/bibtex/matplotlib.tex
@@ -12,10 +12,6 @@
Volume = {9},
Number = {3},
Pages = {90},
- abstract = {Matplotlib is a 2D graphics package used for Python
- for application development, interactive scripting, and
- publication-quality image generation across user
- interfaces and operating systems.},
publisher = {IEEE COMPUTER SOC},
doi = {10.1109/MCSE.2007.55},
year = 2007
diff --git a/reproduce/software/bibtex/missfits.tex b/reproduce/software/bibtex/missfits.tex
index 85a1645..bdb2879 100644
--- a/reproduce/software/bibtex/missfits.tex
+++ b/reproduce/software/bibtex/missfits.tex
@@ -8,11 +8,11 @@
@ARTICLE{missfits,
author = {{Marmo}, C. and {Bertin}, E.},
title = "{MissFITS and WeightWatcher: Two Optimised Tools for Managing FITS Data.}",
- journal = {Astronomical Data Analysis Software and Systems XVII},
+ journal = {ASPC},
year = 2008,
volume = {394},
series = {Astronomical Society of the Pacific Conference Series},
pages = {619},
adsurl = {https://ui.adsabs.harvard.edu/abs/2008ASPC..394..619M},
adsnote = {Provided by the SAO/NASA Astrophysics Data System}
-} \ No newline at end of file
+}
diff --git a/reproduce/software/bibtex/mpi4py.tex b/reproduce/software/bibtex/mpi4py.tex
index dde77f0..a72d529 100644
--- a/reproduce/software/bibtex/mpi4py.tex
+++ b/reproduce/software/bibtex/mpi4py.tex
@@ -9,7 +9,7 @@
author = {{Dalcin}, L.~D. and {Paz}, R.~R. and {Kler}, P.~A. and {Cosimo}, A.
},
title = "{Parallel distributed computing using Python}",
- journal = {Advances in Water Resources},
+ journal = {AdvWatRes},
year = 2011,
month = sep,
volume = 34,
diff --git a/reproduce/software/bibtex/sympy.tex b/reproduce/software/bibtex/sympy.tex
index e1a1e37..fd4da56 100644
--- a/reproduce/software/bibtex/sympy.tex
+++ b/reproduce/software/bibtex/sympy.tex
@@ -11,9 +11,6 @@
year = 2017,
month = jan,
keywords = {Python, Computer algebra system, Symbolics},
- abstract = {
- SymPy is an open source computer algebra system written in pure Python. It is built with a focus on extensibility and ease of use, through both interactive and programmatic applications. These characteristics have led SymPy to become a popular symbolic library for the scientific Python ecosystem. This paper presents the architecture of SymPy, a description of its features, and a discussion of select submodules. The supplementary material provide additional examples and further outline details of the architecture and features of SymPy.
- },
volume = 3,
pages = {103},
journal = {PeerJ CompSci},
diff --git a/reproduce/software/config/checksums.conf b/reproduce/software/config/checksums.conf
index b173589..e23df9f 100644
--- a/reproduce/software/config/checksums.conf
+++ b/reproduce/software/config/checksums.conf
@@ -1,16 +1,12 @@
# sha512 checksums of all the necessary software tarballs.
#
# 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.
-#
-# 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/>.
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice and
+# this notice are preserved. This file is offered as-is, without any
+# warranty.
@@ -24,23 +20,27 @@ bzip2-checksum = 00ace5438cfa0c577e5f578d8a808613187eff5217c35164ffe044fbafdfec9
cert-checksum = a81dfa59c70788126a395c576e54cb8f61c1ea34da69b5cd42e2d83ee6426c2a26941360c7302793774ea98ca16846deb6e683144cc7fb6da6ef87b70447e4c8
coreutils-checksum = ef8941dae845bbf5ae5838bc49e44554a766302930601aada6fa594e8088f0fbad74e481ee392ff89633e68b99e4da3f761fcb5d31ee3b233d540fe2a2d4e1af
curl-checksum = df8fc6b2cccf100f7479e25cad743964a84066b587da19585b36a788b0041925e33944986d636a451d6bb95a452d5ac6812b2d5fa6631a10e0ac82a2c7821c75
+dash-checksum = 9d55090115ac04f505d70e6790179331178950f96fe713b33fd698fa8bfa60d4eff1b68cb7b8a2f099d29c587d36034a17dccd6658ba1623ff0a625ac1fb9620
diffutils-checksum = 7b12cf8aea1b9844773748f72272d9c6a38adae9c3c3a8c62048f91fb56c60b76035fa5f51665dceaf2cfbf1d1f4a3efdcc24bf47a5a16ff4350543314b12c9c
file-checksum = 3ec5e51ffb7a82defa74845a90fbc983f6e169fc116606049bc01ff6e720d340c8abf6eb7a08b9ac1099162a5c02deac3633b07b039d486344c8abd9052ca751
findutils-checksum = 650a24507f8f4ebff83ad28dd27daa4785b4038dcaadc4fe00823b976e848527074cce3f9ec34065b7f037436d2aa6e9ec099bc05d7472c29864ac2c69de7f2e
-flock-checksum = 2fe663839b5fd03a08e8b3d0596ce1b4216d8f19a1c4da4fa3db8b409aa4aa292358cc671be857e0f308315458bb2e10288f9d2152dce9940085d33cb7e4a24b
+flock-checksum = ddb997174c0653bc3d29410a5a16b6290e737aa40fbf4b746e2d1db1e88e5acb08ec11a25c27c8a5a5fbf5a00fcac17abeaa245e7df27bd975ae86364d400b86
gawk-checksum = 3734740b7406ddfec9e04bb7774e76c6446cba76642a6180266e7b1822de20aab824c29c4e417256d877762ef04ef3f9df855cd4a3ca414a9225323b49d79195
gcc-checksum = a12dff52af876aee0fd89a8d09cdc455f35ec46845e154023202392adc164848faf8ee881b59b681b696e27c69fd143a214014db4214db62f9891a1c8365c040
-git-checksum = c0bb29b3689ec2e157f90df849599ca149a08fc0c69f6a68b1f3219b6335d521983e6ed58cd364b86398e4dcf9e84892fb9eded79a1c97b74150edca299cf671
+gettext-checksum = 08d20c659004a77e607af17df15f5ce9bd4fc0feca9436aa206b0cbd2516f9f0c98c7ee1faacf7ff429f9b0dd9de219947b300216887a60727602a688acabc82
+git-checksum = 5d92d07b171c5cd6e89a29c1211c73c1c900cd51c74d690aebfb4a3d0e93b541b09b42b6d6a1a82f5c3d953096771f9a8605c63be139f559f58698c1a0eabcfc
gmp-checksum = 8aea94f867174eacac44f395ceb9212530c208e8de69d0bb53056f52360317230fc84ac177fd3ffc9fdb19a07c7549305dcc34c83c34821ccfab9dc63a16e67e
grep-checksum = e4805dbddf7cd0f0faf412557d408509650c1ccf703bc450f10a3f727c690dbfaa1235aa81939a0e4b7ac6190f88c15ea1fcc562b343d4b4c7550f967aeb15db
-gzip-checksum = 7939043e74554ced0c1c05d354ab4eb36cd6dce89ad79d02ccdc5ed6b7ee390759689b2d47c07227b9b44a62851afe7c76c4cae9f92527d999f3f1b4df1cccff
+gzip-checksum = 753fbcf5eb104bfc8a8eb81b69b8701f757b5158e6333b17438574169a4662642a122e1fdbd920a536edbcb77253d65fa571e4f507dbe72a70fee5eb161d6324
isl-checksum = 85d0b40f4dbf14cb99d17aa07048cdcab2dc3eb527d2fbb1e84c41b2de5f351025370e57448b63b2b8a8cf8a0843a089c3263f9baee1542d5c2e1cb37ed39d94
libbsd-checksum = 435822b8f2495a5e2705e5ab5c834a4f0f3a177b3e5c46a7c6162924507ca984e957e94a512b5ebd0067ecb413bac458fade357709ef199e9b75edf0315de91c
libiconv-checksum = 365dac0b34b4255a0066e8033a8b3db4bdb94b9b57a9dca17ebf2d779139fe935caf51a465d17fd8ae229ec4b926f3f7025264f37243432075e5583925bb77b7
libtool-checksum = a6eef35f3cbccf2c9e2667f44a476ebc80ab888725eb768e91a3a6c33b8c931afc46eb23efaee76c8696d3e4eed74ab1c71157bcb924f38ee912c8a90a6521a4
-lzip-checksum= 0349b4c6c0b41e601b7ee381c3254d741397beb3ef9354c08162f346f131f4f48f6613ee0a610cdc6d827530df634f884ecfeee35215b10045a40fee76f8e938
+libunistring-checksum = 01dcab6e05ea4c33572bf96cc0558bcffbfc0e62fc86410cef06c1597a0073d5750525fe2dee4fdb39c9bd704557fcbab864f9645958108a2e07950bc539fe54
+libxml2-checksum = cb7784ba4e72e942614e12e4f83f4ceb275f3d738b30e3b5c1f25edf8e9fa6789e854685974eed95b362049dbf6c8e7357e0327d64c681ed390534ac154e6810
+lzip-checksum = e3331bbf0166541332182a9a28c2e08f522735ef668a06dfa26055251d5142a09227d97e6ae50b38c0b8805479a307a9e55c81b120d5befad2fde44676261843
m4-checksum = a92cad4441b3fd7c033837389ca3499494523d364a5fda043d92c517051510f1758b3b837f0477f42d2258a179ab79a4993e5d1694ef2673db6d96d1faff84fe
-make-checksum = 9a1185cc468368f4ec06478b1cfa343bf90b5cd7c92c0536567db0315b0ee909af53ecce3d44cfd93dd137dbca1ed13af5713e8663590c4fdd21ea635d78496b
+make-checksum = ddf0fdcb9ee1b182ef294c5da70c1275288c99bef60e63a25c0abed2ddd44aba1770be4aab1db8cac81e5f624576f2127c5d825a1824e1c7a49df4f16445526b
metastore-checksum = b2a5fdde9de5ddc1e6c368d5da1b2e97e4fdbaa138a7be281ccb40a81dd4a9bb1849d36b2d5d3f01205079bace60441f82a7002097ff3a7037340a35b0f1574a
mpc-checksum = 72d657958b07c7812dc9c7cbae093118ce0e454c68a585bfb0e2fa559f1bf7c5f49b93906f580ab3f1073e5b595d23c6494d4d76b765d16dde857a18dd239628
mpfr-checksum = d583555d08863bf36c89b289ae26bae353d9a31f08ee3894520992d2c26e5683c4c9c193d7ad139632f71c0a476d85ea76182702a98bf08dde7b6f65a54f8b88
@@ -54,6 +54,7 @@ sed-checksum = e0be5db4cdf8226b34aaa9071bc5ae0eafde1c52227cee3512eea7fe2520d6c5c
tar-checksum = 4be18afeac54aec4af074cf2358cfade5aaebe2041c5075c5764a81114df4d002e90b28f4444bd1430783e7d6bed82abd0440ef5cb244695f2e56a9a41b42fbc
texinfo-checksum = 96e0764d0808152d3662e65c3287fb0f86ed918912cdc036380637dbadaacd6a489b516543c07b08105686575e8d495a945f73e23ff0909d5a0f12026e4131e0
unzip-checksum = 0694e403ebc57b37218e00ec1a406cae5cc9c5b52b6798e0d4590840b6cdbf9ddc0d9471f67af783e960f8fa2e620394d51384257dca23d06bcd90224a80ce5d
+valgrind-checksum = 5695d1355226fb63b0c80809ed43bb077b6eed4d427792d9d7ed944c38b557a84fe3c783517b921e32f161228e10e4625bea0550faa4685872bb4454450cfa7f
wget-checksum = 95fb064f0d79b0a3178a83322f58a85a3a036fb300ed759eb67a538f0bbacdd552f6cbeb60d63b4f0113e8467d923a5ce7ac5570b7a4ce1733b3dfd559bb33b2
which-checksum = d2f04a5c5291f2d7d1226982da7cf999d36cfe24d3f7bda145508efcfb359511251d3c68b860c0ddcedd66b15a0587b648a35ab6d1f173707565305c506dfc61
xz-checksum = e5bf6eb88365d2dbdc774db49261fb9fae0544ed297891fc20f1ed223f4072cb0357cbd98146ac35b6d29410a12b6739bbd111cd57d4a225bef255ed46988578
@@ -106,12 +107,12 @@ libnsl-checksum = a3c8f674357674b7ed4b26c05adde607f39be8d6dc9ff715448e1fcc5fc23d
libpng-checksum = 59e8c1059013497ae616a14c3abbe239322d3873c6ded0912403fc62fb260561768230b6ab997e2cccc3b868c09f539fd13635616b9fa0dd6279a3f63ec7e074
libtiff-checksum = d213e5db09fd56b8977b187c5a756f60d6e3e998be172550c2892dbdb4b2a8e8c750202bc863fe27d0d1c577ab9de1710d15e9f6ed665aadbfd857525a81eea8
libtirpc-checksum = 392f391f9fc1bd68d81dc44e4058831a64b32790b5c8c37338b0ab416fad2ae4d16389e632596734dba09780347918cc65c6f134e0c1afd09e81ec250785ed23
-libxml2-checksum = cb7784ba4e72e942614e12e4f83f4ceb275f3d738b30e3b5c1f25edf8e9fa6789e854685974eed95b362049dbf6c8e7357e0327d64c681ed390534ac154e6810
missfits-checksum = 32727f5eb30573a1cedacb8900e2536867e4815059eee32e64e3db65be9291b8a91b9f45b2c9f3cf6fc2a8cc448012ea3d502bdd9dee516008e17d5086aee795
netpbm-checksum = 064720f8a9d0a502488e1af4daecdbf3936910996507ca6f311073a0ad842346692a148eb1ddf7b717f7b108f60500246cb4b83f4d3665f5fc285a84ae1d63d6
openblas-checksum = 91b3074eb922453bf843158b4281cde65db9e8bbdd7590e75e9e6cdcb486157f7973f2936f327bb3eb4f1702ce0ba51ae6729d8d4baf2d986c50771e8f696df0
openmpi-checksum = 760716974cb6b25ad820184622e1ee7926bc6fda87db6b574f76792bc1ca99522e52195866c14b7cb2df5a4981efdaf9f71d2c5533cc0e8e45c2c4b3b74cbacc
openssh-checksum = e280fa2d56f550efd37c5d2477670326261aa8b94d991f9eb17aad90e0c6c9c939efa90fe87d33260d0f709485cb05c379f0fd1bd44fc0d5190298b6398c9982
+patch-checksum = 75d4e1544484da12185418cd4a1571994398140a91ac606fa08dd067004187dad77d1413f0eb3319b3fe4df076714615c98b29df06af052bb65960fa8b0c86bf
pixman-checksum = 1b0205dbe9d9185c68813ce577a889f3c83e83fbd9955c3a72d411c3b476e6be93fc246b5b6ef4ee17e2bb8eb6fb5559e01dff7feb6a6c4c6314f980e960d690
python-checksum = c25a72ad792f7c1b4c2f79faebbe9608d04b04b2fe58ab804cb4732cdaa75ea93d175f5e52b38e91cb6ae0559ea6b645d802c8b6a869584e8bb9b5018367ce3d
R-checksum = 17513e9f4dd27c61c11f7aa45227aeeeefb375bf5d4e193b471724f379a1b2da33e127cbe91aa175cbbbb048b892047e2f610280585c8159242a6c94790b07f9
diff --git a/reproduce/software/config/servers-backup.conf b/reproduce/software/config/servers-backup.conf
new file mode 100644
index 0000000..c2ade5a
--- /dev/null
+++ b/reproduce/software/config/servers-backup.conf
@@ -0,0 +1,14 @@
+# Default 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). Note that this is not a to be read as a variable but will
+# be parsed as a list.
+#
+# Copyright (C) 2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice and
+# this notice are preserved. This file is offered as-is, without any
+# warranty.
+http://gitlab.com/maneage/tarballs-software/-/raw/master
+http://git.maneage.org/tarballs-software.git/plain
+http://akhlaghi.org/maneage-software
diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf
index d19f095..1a4172a 100644
--- a/reproduce/software/config/versions.conf
+++ b/reproduce/software/config/versions.conf
@@ -3,15 +3,10 @@
# 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.
-#
-# 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/>.
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice and
+# this notice are preserved. This file is offered as-is, without any
+# warranty.
@@ -23,12 +18,14 @@ bash-version = 5.0.11
binutils-version = 2.32
coreutils-version = 8.31
curl-version = 7.65.3
+dash-version = 0.5.10.2
diffutils-version = 3.7
file-version = 5.36
findutils-version = 4.7.0
gawk-version = 5.0.1
gcc-version = 9.2.0
-git-version = 2.23.0
+gettext-version = 0.20.2
+git-version = 2.26.2
gmp-version = 6.1.2
grep-version = 3.3
gzip-version = 1.10
@@ -36,7 +33,9 @@ isl-version = 0.18
libbsd-version = 0.9.1
libiconv-version = 1.16
libtool-version = 2.4.6
-lzip-version= 1.20
+libunistring-version = 0.9.10
+libxml2-version = 2.9.9
+lzip-version = 1.20
m4-version = 1.4.18
make-version = 4.3
metastore-version = 1.1.2-23-fa9170b
@@ -102,11 +101,11 @@ libnsl-version = 1.2.0-4a062cf
libpng-version = 1.6.37
libtiff-version = 4.0.10
libtirpc-version = 1.1.4
-libxml2-version = 2.9.9
missfits-version = 2.8.0
openblas-version = 0.3.5
openmpi-version = 4.0.1
openssh-version = 8.0p1
+patch-version = 2.7.6
pixman-version = 0.38.0
python-version = 3.7.4
R-version = 3.6.2
@@ -219,4 +218,8 @@ minizip-version = $(zlib-version)
# From version 1.2 OpenSSL may not need a manual addition, as described in
# its comments and `https://savannah.nongnu.org/bugs/?58263'. If it doesn't
# cause problems, put it back in the list of "Basic/low-level" tools.
-openssl-version = 1.1.1a \ No newline at end of file
+openssl-version = 1.1.1a
+
+# Version 3.15.0 needs two patches, please check if they are necessary on
+# any future release.
+valgrind-version = 3.15.0
diff --git a/reproduce/software/make/README.md b/reproduce/software/make/README.md
index d71a3d5..7376cdd 100644
--- a/reproduce/software/make/README.md
+++ b/reproduce/software/make/README.md
@@ -1,5 +1,8 @@
Software building instructions
-==============================
+------------------------------
+
+Copyright (C) 2019-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>\
+See the end of the file for license conditions.
This directory contains Makefiles that are called by the high-level
`reproduce/software/shell/configure.sh` script. The main target for the
@@ -13,8 +16,7 @@ Besides being directly used in the paper, these simple plain text files
also act as prerequisites for higher-level software that depend on
lower-level ones.
-Note on prerequisites
----------------------
+### Note on prerequisites
Tarballs are order-only prerequsites (after a `|`) because we already
check their contents with the checksums, so their date is irrelevant: a
@@ -30,4 +32,24 @@ higher-level program, then it shouldn't be order-only.
Libraries or Python modules that are used at compile time must be normal
prerequisites (not order-only), because they are used during the building
-of the program. \ No newline at end of file
+of the program.
+
+
+
+
+
+### Copyright information
+This file is part of Maneage (https://maneage.org).
+
+This file 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 file 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 file. If not, see <http://www.gnu.org/licenses/>. \ No newline at end of file
diff --git a/reproduce/software/make/atlas-multiple.mk b/reproduce/software/make/atlas-multiple.mk
index c98130d..9bd26b1 100755
--- a/reproduce/software/make/atlas-multiple.mk
+++ b/reproduce/software/make/atlas-multiple.mk
@@ -10,15 +10,18 @@
#
# Copyright (C) 2019-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
#
-# 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/>.
ORIGLDFLAGS := $(LDFLAGS)
diff --git a/reproduce/software/make/atlas-single.mk b/reproduce/software/make/atlas-single.mk
index 82eade9..29373e0 100755
--- a/reproduce/software/make/atlas-single.mk
+++ b/reproduce/software/make/atlas-single.mk
@@ -10,15 +10,18 @@
#
# Copyright (C) 2019-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
#
-# 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/>.
ORIGLDFLAGS := $(LDFLAGS)
diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk
index 0bec163..b4745e2 100644
--- a/reproduce/software/make/basic.mk
+++ b/reproduce/software/make/basic.mk
@@ -18,15 +18,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/>.
# Top level environment
@@ -49,6 +52,7 @@ syspath := $(PATH)
# As we build more programs, we want to use this project's built programs
# and libraries, not the host's.
+.ONESHELL:
export CCACHE_DISABLE := 1
export PATH := $(ibdir):$(PATH)
export PKG_CONFIG_PATH := $(ildir)/pkgconfig
@@ -56,6 +60,17 @@ export PKG_CONFIG_LIBDIR := $(ildir)/pkgconfig
export CPPFLAGS := -I$(idir)/include $(CPPFLAGS)
export LDFLAGS := $(rpath_command) -L$(ildir) $(LDFLAGS)
+# Note that we build GNU Bash here in 'basic.mk'. So we can't assume Bash
+# in this Makefile and use the DASH shell that was before calling this
+# Makefile: http://gondor.apana.org.au/~herbert/dash. Dash is a minimalist
+# POSIX shell, so it doesn't have startup options like '--noprofile
+# --norc'. But from its manual, to load startup files, Dash actually
+# requires that it be called with a '-' before it (for example '-dash'), so
+# it shouldn't be loading any startup files if it was interpretted
+# properly.
+.SHELLFLAGS := -e -c
+export SHELL := $(ibdir)/dash
+
# This is the "basic" tools where we are relying on the host operating
# system, but are slowly populating our basic software envirnoment. To run
# (system or template) programs, `LD_LIBRARY_PATH' is necessary, so here,
@@ -82,7 +97,10 @@ all: $(foreach p, $(top-level-programs), $(ibidir)/$(p))
# 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)
+
+
@@ -124,17 +142,18 @@ tarballs = $(foreach t, bash-$(bash-version).tar.lz \
findutils-$(findutils-version).tar.xz \
gawk-$(gawk-version).tar.lz \
gcc-$(gcc-version).tar.xz \
+ gettext-$(gettext-version).tar.xz \
git-$(git-version).tar.xz \
gmp-$(gmp-version).tar.lz \
grep-$(grep-version).tar.xz \
- gzip-$(gzip-version).tar.gz \
+ gzip-$(gzip-version).tar.lz \
isl-$(isl-version).tar.bz2 \
libbsd-$(libbsd-version).tar.xz \
libiconv-$(libiconv-version).tar.gz \
libtool-$(libtool-version).tar.xz \
- lzip-$(lzip-version).tar.gz \
+ libunistring-$(libunistring-version).tar.xz \
+ libxml2-$(libxml2-version).tar.gz \
m4-$(m4-version).tar.gz \
- make-$(make-version).tar.gz \
metastore-$(metastore-version).tar.gz \
mpfr-$(mpfr-version).tar.xz \
mpc-$(mpc-version).tar.gz \
@@ -161,102 +180,108 @@ $(tarballs): $(tdir)/%: | $(lockdir)
# the first character of the version to be a digit: packages such
# as `foo' and `foo-3' will not be distinguished, but `foo' and
# `foo2' will be distinguished.
- n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \
- | awk '{print $$1}' ); \
- \
+ @n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \
+ | awk '{print $$1}' )
+
mergenames=1; \
- if [ $$n = bash ]; then c=$(bash-checksum); w=http://akhlaghi.org/maneage-software; \
- elif [ $$n = binutils ]; then c=$(binutils-checksum); w=http://ftp.gnu.org/gnu/binutils; \
- elif [ $$n = bzip2 ]; then c=$(bzip2-checksum); w=http://akhlaghi.org/maneage-software; \
- elif [ $$n = cert ]; then c=$(cert-checksum); w=http://akhlaghi.org/maneage-software; \
- elif [ $$n = coreutils ]; then c=$(coreutils-checksum); w=http://ftp.gnu.org/gnu/coreutils;\
- elif [ $$n = curl ]; then c=$(curl-checksum); w=https://curl.haxx.se/download; \
- elif [ $$n = diffutils ]; then c=$(diffutils-checksum); w=http://ftp.gnu.org/gnu/diffutils;\
- elif [ $$n = file ]; then c=$(file-checksum); w=ftp://ftp.astron.com/pub/file; \
- elif [ $$n = findutils ]; then c=$(findutils-checksum); w=http://ftp.gnu.org/gnu/findutils; \
- elif [ $$n = gawk ]; then c=$(gawk-checksum); w=http://ftp.gnu.org/gnu/gawk; \
- elif [ $$n = gcc ]; then c=$(gcc-checksum); w=http://ftp.gnu.org/gnu/gcc/gcc-$(gcc-version); \
- elif [ $$n = git ]; then c=$(git-checksum); w=http://mirrors.edge.kernel.org/pub/software/scm/git; \
- elif [ $$n = gmp ]; then c=$(gmp-checksum); w=https://gmplib.org/download/gmp; \
- elif [ $$n = grep ]; then c=$(grep-checksum); w=http://ftp.gnu.org/gnu/grep; \
- elif [ $$n = gzip ]; then c=$(gzip-checksum); w=http://ftp.gnu.org/gnu/gzip; \
- elif [ $$n = isl ]; then c=$(isl-checksum); w=ftp://gcc.gnu.org/pub/gcc/infrastructure; \
- elif [ $$n = libbsd ]; then c=$(libbsd-checksum); w=http://libbsd.freedesktop.org/releases; \
- elif [ $$n = libiconv ]; then c=$(libiconv-checksum); w=https://ftp.gnu.org/pub/gnu/libiconv; \
- elif [ $$n = libtool ]; then c=$(libtool-checksum); w=http://ftp.gnu.org/gnu/libtool; \
- elif [ $$n = lzip ]; then c=$(lzip-checksum); w=http://download.savannah.gnu.org/releases/lzip; \
- elif [ $$n = m4 ]; then \
- mergenames=0; \
- c=$(m4-checksum); \
- w=http://akhlaghi.org/maneage-software/m4-1.4.18-patched.tar.gz; \
- elif [ $$n = make ]; then c=$(make-checksum); w=https://ftp.gnu.org/gnu/make; \
- elif [ $$n = metastore ]; then c=$(metastore-checksum); w=http://akhlaghi.org/maneage-software; \
- elif [ $$n = mpc ]; then c=$(mpc-checksum); w=http://ftp.gnu.org/gnu/mpc; \
- elif [ $$n = mpfr ]; then c=$(mpfr-checksum); w=http://www.mpfr.org/mpfr-current;\
- elif [ $$n = ncurses ]; then c=$(ncurses-checksum); w=http://ftp.gnu.org/gnu/ncurses; \
- elif [ $$n = openssl ]; then c=$(openssl-checksum); w=http://www.openssl.org/source; \
- elif [ $$n = patchelf ]; then c=$(patchelf-checksum); w=http://nixos.org/releases/patchelf/patchelf-$(patchelf-version); \
- elif [ $$n = perl ]; then \
- c=$(perl-checksum); \
- v=$$(echo $(perl-version) | sed -e's/\./ /g' | awk '{printf("%d.0", $$1)}'); \
- w=https://www.cpan.org/src/$$v; \
- elif [ $$n = pkg-config ]; then c=$(pkgconfig-checksum); w=http://pkg-config.freedesktop.org/releases; \
- elif [ $$n = readline ]; then c=$(readline-checksum); w=http://ftp.gnu.org/gnu/readline; \
- elif [ $$n = sed ]; then c=$(sed-checksum); w=http://ftp.gnu.org/gnu/sed; \
- elif [ $$n = tar ]; then c=$(tar-checksum); w=http://ftp.gnu.org/gnu/tar; \
- elif [ $$n = texinfo ]; then c=$(texinfo-checksum); w=http://ftp.gnu.org/gnu/texinfo; \
- elif [ $$n = unzip ]; then \
- c=$(unzip-checksum); \
- mergenames=0; v=$$(echo $(unzip-version) | sed -e's/\.//'); \
- w=ftp://ftp.info-zip.org/pub/infozip/src/unzip$$v.tgz; \
- elif [ $$n = wget ]; then c=$(wget-checksum); w=http://ftp.gnu.org/gnu/wget; \
- elif [ $$n = which ]; then c=$(which-checksum); w=http://ftp.gnu.org/gnu/which; \
- elif [ $$n = xz ]; then c=$(xz-checksum); w=http://tukaani.org/xz; \
- elif [ $$n = zip ]; then \
- c=$(zip-checksum); \
- mergenames=0; v=$$(echo $(zip-version) | sed -e's/\.//'); \
- w=ftp://ftp.info-zip.org/pub/infozip/src/zip$$v.tgz; \
- elif [ $$n = zlib ]; then c=$(zlib-checksum); w=http://www.zlib.net; \
- else \
- echo; echo; echo; \
- echo "'$$n' not recognized as a software tarball name to download."; \
- echo; echo; echo; \
- exit 1; \
- fi; \
- \
- \
- if [ -f $(DEPENDENCIES-DIR)/$* ]; then \
- cp $(DEPENDENCIES-DIR)/$* "$@.unchecked"; \
- else \
- if [ $$mergenames = 1 ]; then tarballurl=$$w/"$*"; \
- else tarballurl=$$w; \
- fi; \
- \
- echo "Downloading $$tarballurl"; \
- if [ -f $(ibdir)/wget ]; then \
- downloader="wget --no-use-server-timestamps -O"; \
- else \
- downloader="$(DOWNLOADER)"; \
- fi; \
- \
- touch $(lockdir)/download; \
+ if [ $$n = bash ]; then c=$(bash-checksum); w=http://akhlaghi.org/maneage-software
+ elif [ $$n = binutils ]; then c=$(binutils-checksum); w=http://ftp.gnu.org/gnu/binutils
+ elif [ $$n = bzip2 ]; then c=$(bzip2-checksum); w=http://akhlaghi.org/maneage-software
+ elif [ $$n = cert ]; then c=$(cert-checksum); w=http://akhlaghi.org/maneage-software
+ elif [ $$n = coreutils ]; then c=$(coreutils-checksum); w=http://ftp.gnu.org/gnu/coreutils
+ elif [ $$n = curl ]; then c=$(curl-checksum); w=https://curl.haxx.se/download
+ elif [ $$n = diffutils ]; then c=$(diffutils-checksum); w=http://ftp.gnu.org/gnu/diffutils
+ elif [ $$n = file ]; then c=$(file-checksum); w=ftp://ftp.astron.com/pub/file
+ elif [ $$n = findutils ]; then c=$(findutils-checksum); w=http://ftp.gnu.org/gnu/findutils
+ elif [ $$n = gawk ]; then c=$(gawk-checksum); w=http://ftp.gnu.org/gnu/gawk
+ elif [ $$n = gcc ]; then c=$(gcc-checksum); w=http://ftp.gnu.org/gnu/gcc/gcc-$(gcc-version)
+ elif [ $$n = gettext ]; then c=$(gettext-checksum); w=https://ftp.gnu.org/gnu/gettext
+ elif [ $$n = git ]; then c=$(git-checksum); w=http://mirrors.edge.kernel.org/pub/software/scm/git
+ elif [ $$n = gmp ]; then c=$(gmp-checksum); w=https://gmplib.org/download/gmp
+ elif [ $$n = grep ]; then c=$(grep-checksum); w=http://ftp.gnu.org/gnu/grep
+ elif [ $$n = gzip ]; then c=$(gzip-checksum); w=http://akhlaghi.org/src
+ elif [ $$n = isl ]; then c=$(isl-checksum); w=ftp://gcc.gnu.org/pub/gcc/infrastructure
+ elif [ $$n = libbsd ]; then c=$(libbsd-checksum); w=http://libbsd.freedesktop.org/releases
+ elif [ $$n = libiconv ]; then c=$(libiconv-checksum); w=https://ftp.gnu.org/pub/gnu/libiconv
+ elif [ $$n = libtool ]; then c=$(libtool-checksum); w=http://ftp.gnu.org/gnu/libtool
+ elif [ $$n = libunistring ]; then c=$(libunistring-checksum); w=http://ftp.gnu.org/gnu/libunistring
+ elif [ $$n = libxml2 ]; then c=$(libxml2-checksum); w=ftp://xmlsoft.org/libxml2
+ elif [ $$n = m4 ]; then
+ mergenames=0
+ c=$(m4-checksum)
+ w=http://akhlaghi.org/maneage-software/m4-1.4.18-patched.tar.gz
+ elif [ $$n = metastore ]; then c=$(metastore-checksum); w=http://akhlaghi.org/maneage-software
+ elif [ $$n = mpc ]; then c=$(mpc-checksum); w=http://ftp.gnu.org/gnu/mpc
+ elif [ $$n = mpfr ]; then c=$(mpfr-checksum); w=http://www.mpfr.org/mpfr-current
+ elif [ $$n = ncurses ]; then c=$(ncurses-checksum); w=http://ftp.gnu.org/gnu/ncurses
+ elif [ $$n = openssl ]; then c=$(openssl-checksum); w=http://www.openssl.org/source
+ elif [ $$n = patchelf ]; then c=$(patchelf-checksum); w=http://nixos.org/releases/patchelf/patchelf-$(patchelf-version)
+ elif [ $$n = perl ]; then
+ c=$(perl-checksum)
+ v=$$(echo $(perl-version) | sed -e's/\./ /g' | awk '{printf("%d.0", $$1)}')
+ w=https://www.cpan.org/src/$$v
+ elif [ $$n = pkg-config ]; then c=$(pkgconfig-checksum); w=http://pkg-config.freedesktop.org/releases
+ elif [ $$n = readline ]; then c=$(readline-checksum); w=http://ftp.gnu.org/gnu/readline
+ elif [ $$n = sed ]; then c=$(sed-checksum); w=http://ftp.gnu.org/gnu/sed
+ elif [ $$n = tar ]; then c=$(tar-checksum); w=http://ftp.gnu.org/gnu/tar
+ elif [ $$n = texinfo ]; then c=$(texinfo-checksum); w=http://ftp.gnu.org/gnu/texinfo
+ elif [ $$n = unzip ]; then
+ c=$(unzip-checksum)
+ mergenames=0; v=$$(echo $(unzip-version) | sed -e's/\.//')
+ w=ftp://ftp.info-zip.org/pub/infozip/src/unzip$$v.tgz
+ elif [ $$n = wget ]; then c=$(wget-checksum); w=http://ftp.gnu.org/gnu/wget
+ elif [ $$n = which ]; then c=$(which-checksum); w=http://ftp.gnu.org/gnu/which
+ elif [ $$n = xz ]; then c=$(xz-checksum); w=http://tukaani.org/xz
+ elif [ $$n = zip ]; then
+ c=$(zip-checksum)
+ mergenames=0; v=$$(echo $(zip-version) | sed -e's/\.//')
+ w=ftp://ftp.info-zip.org/pub/infozip/src/zip$$v.tgz
+ elif [ $$n = zlib ]; then c=$(zlib-checksum); w=http://www.zlib.net
+ else
+ echo; echo; echo
+ echo "'$$n' not recognized as a software tarball name to download."
+ echo; echo; echo
+ exit 1
+ fi
+
+ # Download the raw tarball, using an '.unchecked' suffix to specify
+ # that it is not yet fully checked and usable. But first, since the
+ # download may be interrupted in a previous build and an incomplete
+ # '.unchecked' file may remain, we'll remove any possibly existing
+ # uncheked file.
+ rm -f "$@.unchecked"
+ if [ -f $(DEPENDENCIES-DIR)/$* ]; then
+ cp $(DEPENDENCIES-DIR)/$* "$@.unchecked"
+ else
+ if [ $$mergenames = 1 ]; then tarballurl=$$w/"$*"
+ else tarballurl=$$w
+ fi
+
+ echo "Downloading $$tarballurl"
+ if [ -f $(ibdir)/wget ]; then
+ downloader="wget --no-use-server-timestamps -O"
+ else
+ downloader="$(DOWNLOADER)"
+ fi
+
+ touch $(lockdir)/download
$(downloadwrapper) "$$downloader" $(lockdir)/download \
- $$tarballurl "$@.unchecked" "$(backupservers)"; \
- fi; \
- \
- \
- if type sha512sum > /dev/null 2>/dev/null; then \
- checksum=$$(sha512sum "$@.unchecked" | awk '{print $$1}'); \
- if [ x"$$checksum" = x"$$c" ]; then \
- mv "$@.unchecked" "$@"; \
- else \
- echo "ERROR: Non-matching checksum for '$*'."; \
- echo "Checksum should be: $$c"; \
- echo "Checksum is: $$checksum"; \
- exit 1; \
- fi; \
- else mv "$@.unchecked" "$@"; \
- fi;
+ $$tarballurl "$@.unchecked" "$(backupservers)"
+ fi
+
+ # Make sure the file's Checksum is correct.
+ if type sha512sum > /dev/null 2>/dev/null; then
+ checksum=$$(sha512sum "$@.unchecked" | awk '{print $$1}')
+ if [ x"$$checksum" = x"$$c" ]; then
+ mv "$@.unchecked" "$@"
+ else
+ echo "ERROR: Non-matching checksum for '$*'."
+ echo "Checksum should be: $$c"
+ echo "Checksum is: $$checksum"
+ exit 1
+ fi
+ else mv "$@.unchecked" "$@"
+ fi
@@ -265,36 +290,39 @@ $(tarballs): $(tdir)/%: | $(lockdir)
# Low-level (not built) programs
# ------------------------------
#
-# For the time being, we aren't building a local C compiler, but we'll use
-# any C compiler that the system already has and just make a symbolic link
-# to it.
+# For the time being, some components of the project on some systems, so we
+# are simply making a symbolic link to the system's files here. We'll do
+# this after building GNU Coreutils to have trustable elements.
#
-# ccache: ccache acts like a wrapper over the C compiler and is made to
-# avoid/speed-up compiling of identical files in a system (it is commonly
-# used on large servers). It actually makes `gcc' or `g++' a symbolic link
-# to itself so it can control them internally. So, for our purpose here, it
-# is very annoying and can cause many complications. We thus remove any
-# part of PATH of that has `ccache' in it before making symbolic links to
-# the programs we are not building ourselves.
+# About ccache: ccache acts like a wrapper over the C compiler and is made
+# to avoid/speed-up compiling of identical files in a system (it is
+# commonly used on large servers). It actually makes `gcc' or `g++' a
+# symbolic link to itself so it can control them internally. So, for our
+# purpose here, it is very annoying and can cause many complications. We
+# thus remove any part of PATH of that has `ccache' in it before making
+# symbolic links to the programs we are not building ourselves.
makelink = origpath="$$PATH"; \
- export PATH=$$(echo $(syspath) \
- | tr : '\n' \
- | grep -v ccache \
- | tr '\n' :); \
- a=$$(which $(1) 2> /dev/null); \
- if [ -e $(ibdir)/$(1) ]; then rm $(ibdir)/$(1); fi; \
- if [ x$$a = x ]; then \
- if [ "x$(strip $(2))" = xmandatory ]; then \
- echo "'$(1)' is necessary for higher-level tools."; \
- echo "Please install it for the configuration to continue."; \
- exit 1; \
- fi; \
- else \
- ln -s $$a $(ibdir)/$(1); \
- fi; \
- export PATH="$$origpath"
+ export PATH=$$(echo $(syspath) \
+ | tr : '\n' \
+ | grep -v ccache \
+ | tr '\n' :); \
+ if type $(1) > /dev/null 2> /dev/null; then \
+ if [ x$(3) = x ]; then \
+ ln -sf $$(which $(1)) $(ibdir)/$(1); \
+ else \
+ ln -sf $$(which $(1)) $(ibdir)/$(3); \
+ fi; \
+ else \
+ if [ "x$(strip $(2))" = xmandatory ]; then \
+ echo "'$(1)' is necessary for higher-level tools."; \
+ echo "Please install it for the configuration to continue."; \
+ exit 1; \
+ fi; \
+ fi; \
+ export PATH="$$origpath"
+
$(ibdir) $(ildir):; mkdir $@
-$(ibidir)/low-level-links: | $(ibdir) $(ildir)
+$(ibidir)/low-level-links: $(ibidir)/coreutils | $(ibdir) $(ildir)
# Not-installed (but necessary in some cases) compilers.
# Clang is necessary for CMake.
@@ -302,6 +330,7 @@ $(ibidir)/low-level-links: | $(ibdir) $(ildir)
$(call makelink,clang++)
# Mac OS specific
+ $(call makelink,mig)
$(call makelink,sysctl)
$(call makelink,sw_vers)
$(call makelink,dsymutil)
@@ -312,17 +341,14 @@ $(ibidir)/low-level-links: | $(ibdir) $(ildir)
# executable name `glibtool'.
$(call makelink,libtool)
- # GNU Gettext (translate messages)
- $(call makelink,msgfmt)
-
# Necessary libraries:
# Libdl (for dynamic loading libraries at runtime)
# POSIX Threads library for multi-threaded programs.
- for l in dl pthread; do \
- rm -f $(ildir)/lib$$l*; \
- if [ -f /usr/lib/lib$$l.a ]; then \
- ln -s /usr/lib/lib$$l.* $(ildir)/; \
- fi; \
+ for l in dl pthread; do
+ rm -f $(ildir)/lib$$l*;
+ if [ -f /usr/lib/lib$$l.a ]; then
+ ln -s /usr/lib/lib$$l.* $(ildir)/
+ fi
done
# We want this to be empty (so it doesn't interefere with the other
@@ -342,59 +368,54 @@ $(ibidir)/low-level-links: | $(ibdir) $(ildir)
# ------------------------------------------
#
# The first set of programs to be built are those that we need to unpack
-# the source code tarballs of each program. First, we'll build the
-# necessary programs, then we'll build GNU Tar.
-$(ibidir)/gzip: | $(tdir)/gzip-$(gzip-version).tar.gz
+# the source code tarballs of each program. We have already installed Lzip
+# before calling 'basic.mk', so it is present and working. Hence we first
+# build the Lzipped tarball of Gzip, then use our own Gzip to unpack the
+# tarballs of the other compression programs. Once all the compression
+# programs/libraries are complete, we build our own GNU Tar and continue
+# with other software.
+$(ibidir)/gzip: $(tdir)/gzip-$(gzip-version).tar.lz
$(call gbuild, gzip-$(gzip-version), static, , V=1) \
&& echo "GNU Gzip $(gzip-version)" > $@
-# GNU Lzip: For a static build, the `-static' flag should be given to
-# LDFLAGS on the command-line (not from the environment).
-ifeq ($(static_build),yes)
-lzipconf="LDFLAGS=-static"
-else
-lzipconf=
-endif
-$(ibidir)/lzip: | $(tdir)/lzip-$(lzip-version).tar.gz
- $(call gbuild, lzip-$(lzip-version), , $(lzipconf)) \
- && echo "Lzip $(lzip-version)" > $@
-
-$(ibidir)/xz: | $(tdir)/xz-$(xz-version).tar.gz
+$(ibidir)/xz: $(ibidir)/gzip \
+ $(tdir)/xz-$(xz-version).tar.gz
$(call gbuild, xz-$(xz-version), static) \
&& echo "XZ Utils $(xz-version)" > $@
-$(ibidir)/bzip2: | $(tdir)/bzip2-$(bzip2-version).tar.gz
+$(ibidir)/bzip2: $(ibidir)/gzip \
+ $(tdir)/bzip2-$(bzip2-version).tar.gz
# Bzip2 doesn't have a `./configure' script, and its Makefile
# doesn't build a shared library. So we can't use the `gbuild'
# function here and we need to take some extra steps (inspired
- # from the "Linux from Scratch" guide for Bzip2):
+ # from the GNU/Linux from Scratch (LFS) guide for Bzip2):
# 1) The `sed' call is for relative installed symbolic links.
# 2) The special Makefile-libbz2_so builds shared libraries.
#
# NOTE: the major version number appears in the final symbolic
# link.
- tdir=bzip2-$(bzip2-version); \
- if [ $(static_build) = yes ]; then \
- makecommand="make LDFLAGS=-static"; \
- makeshared="echo no-shared"; \
- else \
- makecommand="make"; \
- if [ x$(on_mac_os) = xyes ]; then \
- makeshared="echo no-shared"; \
- else \
- makeshared="make -f Makefile-libbz2_so"; \
- fi; \
- fi; \
+ tdir=bzip2-$(bzip2-version)
+ if [ $(static_build) = yes ]; then
+ makecommand="make LDFLAGS=-static"
+ makeshared="echo no-shared"
+ else
+ makecommand="make"
+ if [ x$(on_mac_os) = xyes ]; then
+ makeshared="echo no-shared"
+ else
+ makeshared="make -f Makefile-libbz2_so"
+ fi
+ fi
cd $(ddir) && rm -rf $$tdir \
- && tar xf $(word 1,$(filter $(tdir)/%,$|)) \
+ && tar xf $(word 1,$(filter $(tdir)/%,$^)) \
&& cd $$tdir \
&& sed -e 's@\(ln -s -f \)$$(PREFIX)/bin/@\1@' Makefile \
> Makefile.sed \
&& mv Makefile.sed Makefile \
- && $$makeshared \
+ && $$makeshared CC=cc \
&& cp -a libbz2* $(ildir)/ \
&& make clean \
- && $$makecommand \
+ && $$makecommand CC=cc \
&& make install PREFIX=$(idir) \
&& cd .. \
&& rm -rf $$tdir \
@@ -402,21 +423,23 @@ $(ibidir)/bzip2: | $(tdir)/bzip2-$(bzip2-version).tar.gz
&& ln -fs libbz2.so.1.0 libbz2.so \
&& echo "Bzip2 $(bzip2-version)" > $@
-$(ibidir)/unzip: | $(tdir)/unzip-$(unzip-version).tar.gz
- v=$$(echo $(unzip-version) | sed -e's/\.//'); \
+$(ibidir)/unzip: $(ibidir)/gzip \
+ $(tdir)/unzip-$(unzip-version).tar.gz
+ v=$$(echo $(unzip-version) | sed -e's/\.//')
$(call gbuild, unzip$$v, static,, \
- -f unix/Makefile generic_gcc \
+ -f unix/Makefile generic \
CFLAGS="-DBIG_MEM -DMMAP",,pwd, \
- -f unix/Makefile \
+ -f unix/Makefile generic \
BINDIR=$(ibdir) MANDIR=$(idir)/man/man1 ) \
&& echo "Unzip $(unzip-version)" > $@
-$(ibidir)/zip: | $(tdir)/zip-$(zip-version).tar.gz
- v=$$(echo $(zip-version) | sed -e's/\.//'); \
+$(ibidir)/zip: $(ibidir)/gzip \
+ $(tdir)/zip-$(zip-version).tar.gz
+ v=$$(echo $(zip-version) | sed -e's/\.//')
$(call gbuild, zip$$v, static,, \
- -f unix/Makefile generic_gcc \
+ -f unix/Makefile generic \
CFLAGS="-DBIG_MEM -DMMAP",,pwd, \
- -f unix/Makefile \
+ -f unix/Makefile generic \
BINDIR=$(ibdir) MANDIR=$(idir)/man/man1 ) \
&& echo "Zip $(zip-version)" > $@
@@ -425,7 +448,8 @@ $(ibidir)/zip: | $(tdir)/zip-$(zip-version).tar.gz
#
# Note for a static-only build: Zlib's `./configure' doesn't use Autoconf's
# configure script, it just accepts a direct `--static' option.
-$(ibidir)/zlib: | $(tdir)/zlib-$(zlib-version).tar.gz
+$(ibidir)/zlib: $(ibidir)/gzip \
+ $(tdir)/zlib-$(zlib-version).tar.gz
$(call gbuild, zlib-$(zlib-version)) \
&& echo "Zlib $(zlib-version)" > $@
@@ -435,13 +459,12 @@ $(ibidir)/zlib: | $(tdir)/zlib-$(zlib-version).tar.gz
# Tar to be the last compression-related software (the first-set of
# software to be built).
$(ibidir)/tar: $(ibidir)/xz \
- $(ibidir)/zip \
- $(ibidir)/gzip \
- $(ibidir)/lzip \
+ $(ibidir)/zip \
+ $(ibidir)/gzip \
$(ibidir)/zlib \
$(ibidir)/bzip2 \
- $(ibidir)/unzip \
- | $(tdir)/tar-$(tar-version).tar.gz
+ $(ibidir)/unzip \
+ $(tdir)/tar-$(tar-version).tar.gz
# Since all later programs depend on Tar, the configuration will be
# stuck here, only making Tar. So its more efficient to built it on
# multiple threads (when the user's Make doesn't pass down the
@@ -469,14 +492,8 @@ $(ibidir)/tar: $(ibidir)/xz \
# function (for tilde expansion). The first can be disabled with
# `--disable-load', but unfortunately I don't know any way to fix the
# second. So, we'll have to build it dynamically for now.
-$(ibidir)/make: | $(ibidir)/tar \
- $(tdir)/make-$(make-version).tar.gz
- # See Tar's comments for the `-j' option.
- $(call gbuild, make-$(make-version), , , -j$(numthreads)) \
- && echo "GNU Make $(make-version)" > $@
-
-$(ibidir)/ncurses: | $(ibidir)/make \
- $(tdir)/ncurses-$(ncurses-version).tar.gz
+$(ibidir)/ncurses: $(ibidir)/tar \
+ $(tdir)/ncurses-$(ncurses-version).tar.gz
# Delete the library that will be installed (so we can make sure
# the build process completed afterwards and reset the links).
@@ -507,7 +524,7 @@ $(ibidir)/ncurses: | $(ibidir)/make \
# explicitly mentioning its name correctly (as a value to `-l' at
# link time in their configure scripts).
#
- # This part is taken from the Arch Linux build script[1], then
+ # This part is taken from the Arch GNU/Linux build script[1], then
# extended to Mac thanks to Homebrew's script [2].
#
# [1] https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/ncurses
@@ -533,43 +550,43 @@ $(ibidir)/ncurses: | $(ibidir)/make \
#
# 5. A link is made to also be able to include files from the
# `ncurses' headers.
- if [ x$(on_mac_os) = xyes ]; then so="dylib"; else so="so"; fi; \
- if [ -f $(ildir)/libncursesw.$$so ]; then \
- \
+ if [ x$(on_mac_os) = xyes ]; then so="dylib"; else so="so"; fi
+ if [ -f $(ildir)/libncursesw.$$so ]; then
+
sov=$$(ls -l $(ildir)/libncursesw* \
| awk '/^-/{print $$NF}' \
- | sed -e's|'$(ildir)/libncursesw.'||'); \
- \
- cd "$(ildir)"; \
- for lib in ncurses ncurses++ form panel menu; do \
- ln -fs lib$$lib"w".$$sov lib$$lib.$$so; \
- ln -fs $(ildir)/pkgconfig/"$$lib"w.pc pkgconfig/$$lib.pc; \
- done; \
- for lib in tic tinfo; do \
- ln -fs libncursesw.$$sov lib$$lib.$$so; \
- ln -fs libncursesw.$$sov lib$$lib.$$sov; \
- ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/$$lib.pc; \
- done; \
- ln -fs libncursesw.$$sov libcurses.$$so; \
- ln -fs libncursesw.$$sov libcursesw.$$sov; \
- ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/curses.pc; \
- ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/cursesw.pc; \
- \
- ln -fs $(idir)/include/ncursesw $(idir)/include/ncurses; \
- echo "GNU NCURSES $(ncurses-version)" > $@; \
- else \
- exit 1; \
+ | sed -e's|'$(ildir)/libncursesw.'||')
+
+ cd "$(ildir)"
+ for lib in ncurses ncurses++ form panel menu; do
+ ln -fs lib$$lib"w".$$sov lib$$lib.$$so
+ ln -fs $(ildir)/pkgconfig/"$$lib"w.pc pkgconfig/$$lib.pc
+ done
+ for lib in tic tinfo; do
+ ln -fs libncursesw.$$sov lib$$lib.$$so
+ ln -fs libncursesw.$$sov lib$$lib.$$sov
+ ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/$$lib.pc
+ done
+ ln -fs libncursesw.$$sov libcurses.$$so
+ ln -fs libncursesw.$$sov libcursesw.$$sov
+ ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/curses.pc
+ ln -fs $(ildir)/pkgconfig/ncursesw.pc pkgconfig/cursesw.pc
+
+ ln -fs $(idir)/include/ncursesw $(idir)/include/ncurses
+ echo "GNU NCURSES $(ncurses-version)" > $@
+ else
+ exit 1
fi
$(ibidir)/readline: $(ibidir)/ncurses \
- | $(tdir)/readline-$(readline-version).tar.gz
+ $(tdir)/readline-$(readline-version).tar.gz
$(call gbuild, readline-$(readline-version), static, \
--with-curses --disable-install-examples, \
SHLIB_LIBS="-lncursesw" -j$(numthreads)) \
&& echo "GNU Readline $(readline-version)" > $@
-$(ibidir)/patchelf: | $(ibidir)/make \
- $(tdir)/patchelf-$(patchelf-version).tar.gz
+$(ibidir)/patchelf: $(ibidir)/tar \
+ $(tdir)/patchelf-$(patchelf-version).tar.gz
$(call gbuild, patchelf-$(patchelf-version)) \
&& echo "PatchELF $(patchelf-version)" > $@
@@ -609,43 +626,38 @@ needpatchelf =
else
needpatchelf = $(ibidir)/patchelf
endif
-$(ibidir)/bash: $(ibidir)/readline \
- | $(needpatchelf) \
- $(tdir)/bash-$(bash-version).tar.lz
+$(ibidir)/bash: $(needpatchelf) \
+ $(ibidir)/gettext \
+ $(ibidir)/readline \
+ $(tdir)/bash-$(bash-version).tar.lz
- # Delete the (possibly) existing Bash executable.
+ # Delete the (possibly) existing Bash executable in the project,
+ # let it use the default shell of the host.
rm -f $(ibdir)/bash
- # Build Bash. Note that we aren't building Bash with
- # `--with-installed-readline'. This is because (as described above)
- # Bash needs the `LD_LIBRARY_PATH' set properly before it is
- # run. Within a recipe, things are fine (we do set
- # `LD_LIBRARY_PATH'). However, Make will also call the shell
- # outside of the recipe (for example in the `foreach' Make
- # function!). In such cases, our new `LD_LIBRARY_PATH' is not set.
- # This will cause a crash in the shell and thus the Makefile,
- # complaining that it can't find `libreadline'. Therefore, even
- # though we build readline below, we won't link Bash with an
- # external readline.
- #
# Bash has many `--enable' features which are already enabled by
# default. As described in the manual, they are mainly useful when
# you disable them all with `--enable-minimal-config' and enable a
# subset using the `--enable' options.
- if [ "x$(static_build)" = xyes ]; then stopt="--enable-static-link";\
- else stopt=""; \
- fi; \
- $(call gbuild, bash-$(bash-version),, \
- --with-installed-readline=$(ildir) $$stopt, \
- -j$(numthreads))
+ if [ "x$(static_build)" = xyes ]; then stopt="--enable-static-link"
+ else stopt=""
+ fi;
+ export CFLAGS="$$CFLAGS \
+ -DDEFAULT_PATH_VALUE='\"$(ibdir)\"' \
+ -DSTANDARD_UTILS_PATH='\"$(ibdir)\"' \
+ -DSYS_BASHRC='\"$(BASH_ENV)\"' "
+ $(call gbuild, bash-$(bash-version),, $$stopt \
+ --with-installed-readline=$(ildir) \
+ --with-curses=yes, \
+ -j$(numthreads))
# Atleast on GNU/Linux systems, Bash doesn't include RPATH by
# default. So, we have to manually include it, currently we are
# only doing this on GNU/Linux systems (using the `patchelf'
# program).
- if [ "x$(needpatchelf)" != x ]; then \
- if [ -f $(ibdir)/bash ]; then \
- $(ibdir)/patchelf --set-rpath $(ildir) $(ibdir)/bash; fi \
+ if [ "x$(needpatchelf)" != x ]; then
+ if [ -f $(ibdir)/bash ]; then
+ $(ibdir)/patchelf --set-rpath $(ildir) $(ibdir)/bash; fi
fi
# To be generic, some systems use the `sh' command to call the
@@ -656,10 +668,10 @@ $(ibidir)/bash: $(ibidir)/readline \
# Just to be sure that the installation step above went well,
# before making the link, we'll see if the file actually exists
# there.
- if [ -f $(ibdir)/bash ]; then \
- ln -fs $(ibdir)/bash $(ibdir)/sh; \
- echo "GNU Bash $(bash-version)" > $@; \
- else \
+ if [ -f $(ibdir)/bash ]; then
+ ln -fs $(ibdir)/bash $(ibdir)/sh
+ echo "GNU Bash $(bash-version)" > $@
+ else
echo "GNU Bash not built!"; exit 1; fi
@@ -676,25 +688,20 @@ perl-conflddlflags =
else
perl-conflddlflags = -Dlddlflags="-shared $$LDFLAGS"
endif
-$(ibidir)/perl: | $(ibidir)/bash \
- $(tdir)/perl-$(perl-version).tar.gz
+$(ibidir)/perl: $(ibidir)/tar \
+ $(tdir)/perl-$(perl-version).tar.gz
major_version=$$(echo $(perl-version) \
| sed -e's/\./ /g' \
- | awk '{printf("%d", $$1)}'); \
+ | awk '{printf("%d", $$1)}')
base_version=$$(echo $(perl-version) \
| sed -e's/\./ /g' \
- | awk '{printf("%d.%d", $$1, $$2)}'); \
+ | awk '{printf("%d.%d", $$1, $$2)}')
cd $(ddir) \
&& rm -rf perl-$(perl-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 perl-$(perl-version) \
- && sed -e's|\#\! /bin/sh|\#\! $(ibdir)/bash|' \
- -e's|\#\!/bin/sh|\#\! $(ibdir)/bash|' \
- Configure > Configure-tmp \
- && mv -f Configure-tmp Configure \
- && chmod +x Configure \
&& ./Configure -des \
-Dusethreads \
-Duseshrplib \
@@ -715,8 +722,8 @@ $(ibidir)/perl: | $(ibidir)/bash \
-Dcccdlflags='-fPIC' \
$(perl-conflddlflags) \
-Dldflags="$$LDFLAGS" \
- && make SHELL=$(ibdir)/bash -j$(numthreads) \
- && make SHELL=$(ibdir)/bash install \
+ && make -j$(numthreads) \
+ && make install \
&& cd .. \
&& rm -rf perl-$(perl-version) \
&& cd $$topdir \
@@ -747,12 +754,13 @@ $(ibidir)/perl: | $(ibidir)/bash \
# an error).
#
# Coreutils uses Perl to create man pages!
-$(ibidir)/coreutils: $(ibidir)/openssl \
- | $(ibidir)/perl \
- $(tdir)/coreutils-$(coreutils-version).tar.xz
+$(ibidir)/coreutils: $(ibidir)/bash \
+ $(ibidir)/perl \
+ $(ibidir)/openssl \
+ $(tdir)/coreutils-$(coreutils-version).tar.xz
cd $(ddir) \
&& rm -rf coreutils-$(coreutils-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 coreutils-$(coreutils-version) \
@@ -794,10 +802,13 @@ $(ibidir)/coreutils: $(ibidir)/openssl \
#openssl-static = no-dso no-dynamic-engine no-shared
#endif
$(idir)/etc:; mkdir $@
-$(ibidir)/openssl: $(tdir)/cert.pem \
- | $(idir)/etc \
- $(ibidir)/make \
- $(tdir)/openssl-$(openssl-version).tar.gz
+# Note: cert.pm has to be AFTER the tarball, otherwise the build script
+# will try to unpack cert.pm and crash (it unpacks the first dependency
+# under `tdir').
+$(ibidir)/openssl: $(ibidir)/tar \
+ $(tdir)/openssl-$(openssl-version).tar.gz \
+ $(tdir)/cert.pem \
+ | $(idir)/etc
# According to OpenSSL's Wiki (link bellow), it can't automatically
# detect Mac OS's structure. It will need some help. So we'll use
# the `on_mac_os' Make variable that we defined in the configure
@@ -853,8 +864,8 @@ $(ibidir)/openssl: $(tdir)/cert.pem \
# them. Note that if it does link with them, the configuration will crash
# when the library is updated/changed by the host, and the whole purpose of
# this project is avoid dependency on the host as much as possible.
-$(ibidir)/curl: | $(ibidir)/coreutils \
- $(tdir)/curl-$(curl-version).tar.gz
+$(ibidir)/curl: $(ibidir)/coreutils \
+ $(tdir)/curl-$(curl-version).tar.gz
$(call gbuild, curl-$(curl-version), , \
LIBS="-pthread" \
--with-zlib=$(ildir) \
@@ -892,8 +903,8 @@ $(ibidir)/curl: | $(ibidir)/coreutils \
# host system (especially a crash when these libraries are updated on the
# host), they are disabled here.
$(ibidir)/wget: $(ibidir)/libiconv \
- | $(ibidir)/coreutils \
- $(tdir)/wget-$(wget-version).tar.lz
+ $(ibidir)/coreutils \
+ $(tdir)/wget-$(wget-version).tar.lz
# We need to explicitly disable `libiconv', because of the
# `pkg-config' and `libiconv' problem.
libs="-pthread"; \
@@ -926,25 +937,25 @@ $(ibidir)/wget: $(ibidir)/libiconv \
# process of the higher-level programs and libraries. Note that during the
# building of those higher-level programs (after this Makefile finishes),
# there is no access to the system's PATH.
-$(ibidir)/diffutils: | $(ibidir)/coreutils \
- $(tdir)/diffutils-$(diffutils-version).tar.xz
+$(ibidir)/diffutils: $(ibidir)/coreutils \
+ $(tdir)/diffutils-$(diffutils-version).tar.xz
$(call gbuild, diffutils-$(diffutils-version), static,,V=1) \
&& echo "GNU Diffutils $(diffutils-version)" > $@
-$(ibidir)/file: | $(ibidir)/coreutils \
- $(tdir)/file-$(file-version).tar.gz
+$(ibidir)/file: $(ibidir)/coreutils \
+ $(tdir)/file-$(file-version).tar.gz
$(call gbuild, file-$(file-version), static,,V=1) \
&& echo "File $(file-version)" > $@
-$(ibidir)/findutils: | $(ibidir)/coreutils \
- $(tdir)/findutils-$(findutils-version).tar.xz
+$(ibidir)/findutils: $(ibidir)/coreutils \
+ $(tdir)/findutils-$(findutils-version).tar.xz
$(call gbuild, findutils-$(findutils-version), static,,V=1) \
&& echo "GNU Findutils $(findutils-version)" > $@
$(ibidir)/gawk: $(ibidir)/gmp \
$(ibidir)/mpfr \
- | $(ibidir)/coreutils \
- $(tdir)/gawk-$(gawk-version).tar.lz
+ $(ibidir)/coreutils \
+ $(tdir)/gawk-$(gawk-version).tar.lz
# AWK doesn't include RPATH by default, so we'll have to manually
# include it using the `patchelf' program (which was a dependency
# of Bash). Just note that AWK produces two executables (for
@@ -963,14 +974,41 @@ $(ibidir)/gawk: $(ibidir)/gmp \
fi \
&& echo "GNU AWK $(gawk-version)" > $@
-$(ibidir)/libiconv: | $(ibidir)/pkg-config \
- $(tdir)/libiconv-$(libiconv-version).tar.gz
+$(ibidir)/libiconv: $(ibidir)/pkg-config \
+ $(tdir)/libiconv-$(libiconv-version).tar.gz
$(call gbuild, libiconv-$(libiconv-version), static) \
&& echo "GNU libiconv $(libiconv-version)" > $@
+$(ibidir)/libunistring: $(ibidir)/libiconv \
+ $(tdir)/libunistring-$(libunistring-version).tar.xz
+ $(call gbuild, libunistring-$(libunistring-version), static,, \
+ -j$(numthreads)) \
+ && echo "GNU libunistring $(libunistring-version)" > $@
+
+$(ibidir)/libxml2: $(ibidir)/tar \
+ $(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, use `--with-python-install-dir=DIR' instead.
+ $(call gbuild, libxml2-$(libxml2-version), static, \
+ --without-python) \
+ && echo "Libxml2 $(libxml2-version)" > $@
+
+$(ibidir)/gettext: $(ibidir)/m4 \
+ $(ibidir)/libxml2 \
+ $(ibidir)/ncurses \
+ $(ibidir)/libiconv \
+ $(ibidir)/libunistring \
+ $(tdir)/gettext-$(gettext-version).tar.xz
+ $(call gbuild, gettext-$(gettext-version), static, V=1) \
+ && echo "GNU gettext $(gettext-version)" > $@
+
$(ibidir)/git: $(ibidir)/curl \
+ $(ibidir)/gettext \
$(ibidir)/libiconv \
- | $(tdir)/git-$(git-version).tar.xz
+ $(tdir)/git-$(git-version).tar.xz
if [ x$(on_mac_os) = xyes ]; then \
export LDFLAGS="$$LDFLAGS -lcharset"; \
fi; \
@@ -979,29 +1017,29 @@ $(ibidir)/git: $(ibidir)/curl \
--with-iconv=$(idir), V=1) \
&& echo "Git $(git-version)" > $@
-$(ibidir)/gmp: | $(ibidir)/m4 \
- $(ibidir)/coreutils \
- $(tdir)/gmp-$(gmp-version).tar.lz
+$(ibidir)/gmp: $(ibidir)/m4 \
+ $(ibidir)/coreutils \
+ $(tdir)/gmp-$(gmp-version).tar.lz
$(call gbuild, gmp-$(gmp-version), static, \
--enable-cxx --enable-fat, ,make check) \
&& echo "GNU Multiple Precision Arithmetic Library $(gmp-version)" > $@
# On Mac OS, libtool does different things, so to avoid confusion, we'll
# prefix GNU's libtool executables with `glibtool'.
-$(ibidir)/glibtool: | $(ibidir)/m4 \
- $(tdir)/libtool-$(libtool-version).tar.xz
+$(ibidir)/glibtool: $(ibidir)/m4 \
+ $(tdir)/libtool-$(libtool-version).tar.xz
$(call gbuild, libtool-$(libtool-version), static, \
--program-prefix=g, V=1) \
&& ln -s $(ibdir)/glibtoolize $(ibdir)/libtoolize \
&& echo "GNU Libtool $(libtool-version)" > $@
-$(ibidir)/grep: | $(ibidir)/coreutils \
- $(tdir)/grep-$(grep-version).tar.xz
+$(ibidir)/grep: $(ibidir)/coreutils \
+ $(tdir)/grep-$(grep-version).tar.xz
$(call gbuild, grep-$(grep-version), static,,V=1) \
&& echo "GNU Grep $(grep-version)" > $@
-$(ibidir)/libbsd: | $(ibidir)/coreutils \
- $(tdir)/libbsd-$(libbsd-version).tar.xz
+$(ibidir)/libbsd: $(ibidir)/coreutils \
+ $(tdir)/libbsd-$(libbsd-version).tar.xz
$(call gbuild, libbsd-$(libbsd-version), static,,V=1) \
&& echo "Libbsd $(libbsd-version)" > $@
@@ -1010,27 +1048,24 @@ $(ibidir)/libbsd: | $(ibidir)/coreutils \
#
# [1] https://raw.githubusercontent.com/macports/macports-ports/edf0ee1e2cf/devel/m4/files/secure_snprintf.patch
# [2] https://github.com/Homebrew/homebrew-core/blob/master/Formula/m4.rb
-$(ibidir)/m4: | $(ibidir)/sed \
- $(ibidir)/texinfo \
- $(ibidir)/coreutils \
- $(tdir)/m4-$(m4-version).tar.gz
+$(ibidir)/m4: $(ibidir)/texinfo \
+ $(tdir)/m4-$(m4-version).tar.gz
cd $(ddir); \
unpackdir=m4-$(m4-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 \
&& if [ x$(on_mac_os) = xyes ]; then \
- sed -i -e's|if !(((__GLIBC__ > 2|if !defined(__APPLE__) \&\& !(((__GLIBC__ > 2|' lib/vasnprintf.c; \
+ sed 's|if !(((__GLIBC__ > 2|if !defined(__APPLE__) \&\& !(((__GLIBC__ > 2|' \
+ lib/vasnprintf.c > lib/vasnprintf_edited.c; \
+ mv lib/vasnprintf_edited.c lib/vasnprintf.c; \
fi \
- && sed -i -e's|\#\! /bin/sh|\#\! $(ibdir)/bash|' \
- -e's|\#\!/bin/sh|\#\! $(ibdir)/bash|' \
- configure \
- && ./configure --prefix=$(idir) SHELL=$(ibdir)/bash \
- LDFLAGS="$(LDFLAGS)" CPPFLAGS="$(CPPFLAGS)" \
- && make SHELL=$(ibdir)/bash V=1 -j$(numthreads) \
- && make SHELL=$(ibdir)/bash V=1 install \
+ && ./configure --prefix=$(idir) LDFLAGS="$(LDFLAGS)" \
+ CPPFLAGS="$(CPPFLAGS)" \
+ && make V=1 -j$(numthreads) \
+ && make V=1 install \
&& cd .. \
&& rm -rf $$unpackdir \
&& echo "GNU M4 $(m4-version)" > $@
@@ -1058,11 +1093,11 @@ else
needlibbsd = $(ibidir)/libbsd
endif
$(ibidir)/metastore: $(needlibbsd) \
- | $(ibidir)/sed \
- $(ibidir)/git \
- $(ibidir)/gawk \
- $(ibidir)/coreutils \
- $(tdir)/metastore-$(metastore-version).tar.gz
+ $(ibidir)/sed \
+ $(ibidir)/git \
+ $(ibidir)/gawk \
+ $(ibidir)/coreutils \
+ $(tdir)/metastore-$(metastore-version).tar.gz
# Metastore doesn't have any `./configure' script. So we'll just
# call `pwd' as a place-holder for the `./configure' command.
@@ -1121,12 +1156,12 @@ $(ibidir)/metastore: $(needlibbsd) \
$(ibidir)/mpfr: $(ibidir)/gmp \
- | $(tdir)/mpfr-$(mpfr-version).tar.xz
+ $(tdir)/mpfr-$(mpfr-version).tar.xz
$(call gbuild, mpfr-$(mpfr-version), static, , , make check) \
&& echo "GNU Multiple Precision Floating-Point Reliably $(mpfr-version)" > $@
-$(ibidir)/pkg-config: | $(ibidir)/coreutils \
- $(tdir)/pkg-config-$(pkgconfig-version).tar.gz
+$(ibidir)/pkg-config: $(ibidir)/tar \
+ $(tdir)/pkg-config-$(pkgconfig-version).tar.gz
# An existing `libiconv' can cause a conflict with `pkg-config',
# this is why `libiconv' depends on `pkg-config'. On a clean build,
# `pkg-config' is built first. But when we don't have a clean build
@@ -1147,13 +1182,13 @@ $(ibidir)/pkg-config: | $(ibidir)/coreutils \
--with-pc-path=$(ildir)/pkgconfig, V=1) \
&& echo "pkg-config $(pkgconfig-version)" > $@
-$(ibidir)/sed: | $(ibidir)/coreutils \
- $(tdir)/sed-$(sed-version).tar.xz
+$(ibidir)/sed: $(ibidir)/coreutils \
+ $(tdir)/sed-$(sed-version).tar.xz
$(call gbuild, sed-$(sed-version), static,,V=1) \
&& echo "GNU Sed $(sed-version)" > $@
-$(ibidir)/texinfo: | $(ibidir)/perl \
- $(tdir)/texinfo-$(texinfo-version).tar.xz
+$(ibidir)/texinfo: $(ibidir)/perl \
+ $(tdir)/texinfo-$(texinfo-version).tar.xz
$(call gbuild, texinfo-$(texinfo-version), static) \
&& if [ "x$(needpatchelf)" != x ]; then \
$(ibdir)/patchelf --set-rpath $(ildir) $(ibdir)/info; \
@@ -1161,8 +1196,8 @@ $(ibidir)/texinfo: | $(ibidir)/perl \
fi \
&& echo "GNU Texinfo $(texinfo-version)" > $@
-$(ibidir)/which: | $(ibidir)/coreutils \
- $(tdir)/which-$(which-version).tar.gz
+$(ibidir)/which: $(ibidir)/coreutils \
+ $(tdir)/which-$(which-version).tar.gz
$(call gbuild, which-$(which-version), static) \
&& echo "GNU Which $(which-version)" > $@
@@ -1179,12 +1214,12 @@ $(ibidir)/which: | $(ibidir)/coreutils \
# -------------------------
$(ibidir)/isl: $(ibidir)/gmp \
- | $(tdir)/isl-$(isl-version).tar.bz2
+ $(tdir)/isl-$(isl-version).tar.bz2
$(call gbuild, isl-$(isl-version), static, , V=1) \
&& echo "GNU Integer Set Library $(isl-version)" > $@
$(ibidir)/mpc: $(ibidir)/mpfr \
- | $(tdir)/mpc-$(mpc-version).tar.gz
+ $(tdir)/mpc-$(mpc-version).tar.gz
$(call gbuild, mpc-$(mpc-version), static, , , make check) \
&& echo "GNU Multiple Precision Complex library" > $@
@@ -1218,19 +1253,19 @@ endif
# these necessary files in our local build directory. IMPORTANT NOTE:
# later, when we build the GNU C Library in the project, we should remove
# this step.
-$(ibidir)/binutils: | $(ibidir)/sed \
- $(ibidir)/wget \
- $(ibidir)/grep \
- $(ibidir)/file \
- $(ibidir)/gawk \
- $(ibidir)/which \
- $(ibidir)/glibtool \
- $(binutils-tarball) \
- $(ibidir)/metastore \
- $(ibidir)/findutils \
- $(ibidir)/diffutils \
- $(ibidir)/coreutils \
- $(gcc-prerequisites)
+$(ibidir)/binutils: $(ibidir)/sed \
+ $(ibidir)/wget \
+ $(ibidir)/grep \
+ $(ibidir)/file \
+ $(ibidir)/gawk \
+ $(ibidir)/which \
+ $(ibidir)/glibtool \
+ $(binutils-tarball) \
+ $(ibidir)/metastore \
+ $(ibidir)/findutils \
+ $(ibidir)/diffutils \
+ $(ibidir)/coreutils \
+ $(gcc-prerequisites)
if [ x$(on_mac_os) = xyes ]; then \
$(call makelink,as); \
@@ -1271,8 +1306,8 @@ gcc-tarball =
else
gcc-tarball = $(tdir)/gcc-$(gcc-version).tar.xz
endif
-$(ibidir)/gcc: | $(ibidir)/binutils \
- $(gcc-tarball)
+$(ibidir)/gcc: $(gcc-tarball) \
+ $(ibidir)/binutils
# GCC builds is own libraries in '$(idir)/lib64'. But all other
# libraries are in '$(idir)/lib'. Since this project is only for a
@@ -1280,11 +1315,11 @@ $(ibidir)/gcc: | $(ibidir)/binutils \
# in '$(idir)/lib' by defining the '$(idir)/lib64' as a symbolic
# link to '$(idir)/lib'.
if [ $(host_cc) = 1 ]; then \
- $(call makelink,gcc); \
- $(call makelink,g++,mandatory); \
- $(call makelink,gfortran,mandatory); \
+ $(call makelink,cc); \
+ $(call makelink,cc,,gcc); \
+ $(call makelink,c++,,g++); \
+ $(call makelink,gfortran); \
$(call makelink,strip,mandatory); \
- ln -sf $$(which gcc) $(ibdir)/cc; \
ccinfo=$$(gcc --version | awk 'NR==1'); \
echo "C compiler (""$$ccinfo"")" > $@; \
else \
@@ -1305,7 +1340,7 @@ $(ibidir)/gcc: | $(ibidir)/binutils \
fi; \
cd $$odir; \
rm -rf gcc-$(gcc-version); \
- tar xf $(word 1,$(filter $(tdir)/%,$|)); \
+ tar xf $(word 1,$(filter $(tdir)/%,$^)); \
if [ $$odir != $(ddir) ]; then \
ln -s $$odir/gcc-$(gcc-version) $(ddir)/gcc-$(gcc-version); \
fi; \
diff --git a/reproduce/software/make/build-rules.mk b/reproduce/software/make/build-rules.mk
index 8d78ce3..260ded8 100644
--- a/reproduce/software/make/build-rules.mk
+++ b/reproduce/software/make/build-rules.mk
@@ -5,15 +5,18 @@
#
# Copyright (C) 2018-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
#
-# 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/>.
@@ -31,6 +34,31 @@
+# Unpack a tarball in the current directory. The issue is that until we
+# install GNU Tar within Maneage, we have to use the host's Tar
+# implementation and in some cases, they don't recognize '.lz'.
+uncompress = csuffix=$$(echo $$tarball \
+ | sed -e's/\./ /g' \
+ | awk '{print $$NF}'); \
+ if [ x$$csuffix = xlz ]; then \
+ intarrm=1; \
+ intar=$$(echo $$tarball | sed -e's/.lz//'); \
+ lzip -c -d $$tarball > $$intar; \
+ else \
+ intarrm=0; \
+ intar=$$tarball; \
+ fi; \
+ if tar xf $$intar; then \
+ if [ x$$intarrm = x1 ]; then rm $$intar; fi; \
+ else \
+ echo; echo "Tar error"; exit 1; \
+ fi
+
+
+
+
+
+
# GNU Build system
# ----------------
#
@@ -55,13 +83,13 @@ gbuild = if [ x$(static_build) = xyes ] && [ "x$(2)" = xstatic ]; then \
fi; \
check="$(5)"; \
if [ x"$$check" = x ]; then check="echo Skipping-check"; fi; \
- cd $(ddir); rm -rf $(1); \
+ cd $(ddir); \
+ rm -rf $(1); \
if [ x"$$gbuild_tar" = x ]; then \
- tarball=$(word 1,$(filter $(tdir)/%,$|)); \
+ tarball=$(word 1,$(filter $(tdir)/%,$^)); \
else tarball=$$gbuild_tar; \
fi; \
- if ! tar xf $$tarball; then \
- echo; echo "Tar error"; exit 1; fi; \
+ $(call uncompress); \
cd $(1); \
\
if [ x"$(strip $(6))" = x ]; then confscript=./configure; \
@@ -111,10 +139,11 @@ cbuild = if [ x$(static_build) = xyes ] && [ $(2)x = staticx ]; then \
export LDFLAGS="$$LDFLAGS -static"; \
opts="-DBUILD_SHARED_LIBS=OFF"; \
fi; \
- cd $(ddir) \
- && rm -rf $(1) \
- && tar xf $(word 1,$(filter $(tdir)/%,$|)) \
- && cd $(1) \
+ tarball=$(word 1,$(filter $(tdir)/%,$^)); \
+ cd $(ddir); \
+ rm -rf $(1); \
+ $(call uncompress); \
+ cd $(1) \
&& rm -rf project-build \
&& mkdir project-build \
&& cd project-build \
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
diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk
index f378650..eef8279 100644
--- a/reproduce/software/make/python.mk
+++ b/reproduce/software/make/python.mk
@@ -11,15 +11,18 @@
# Copyright (C) 2019-2020 Raul Infante-Sainz <infantesainz@gmail.com>
# Copyright (C) 2019-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
#
-# 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/>.
@@ -247,6 +250,7 @@ $(pytarballs): $(tdir)/%:
# 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
@@ -283,7 +287,7 @@ $(pytarballs): $(tdir)/%:
#
# While this Makefile is for Python programs, in some cases, we need
# certain programs (like Python itself), or libraries for the modules.
-$(ibidir)/libffi: | $(tdir)/libffi-$(libffi-version).tar.gz
+$(ibidir)/libffi: $(tdir)/libffi-$(libffi-version).tar.gz
# On some Fedora systems, libffi installs in `lib64', not
# `lib'. This will cause problems when building setuptools
@@ -299,7 +303,7 @@ $(ibidir)/libffi: | $(tdir)/libffi-$(libffi-version).tar.gz
&& echo "Libffi $(libffi-version)" > $@
$(ibidir)/python: $(ibidir)/libffi \
- | $(tdir)/python-$(python-version).tar.gz
+ $(tdir)/python-$(python-version).tar.gz
# On Mac systems, the build complains about `clang' specific
# features, so we can't use our own GCC build here.
if [ x$(on_mac_os) = xyes ]; then \
@@ -339,7 +343,7 @@ $(ibidir)/python: $(ibidir)/libffi \
# pyhook_before: optional steps before running `python setup.py build'
# pyhook_after: optional steps after running `python setup.py install'
pybuild = cd $(ddir); rm -rf $(2); \
- if ! $(1) $(word 1,$(filter $(tdir)/%,$|)); then \
+ if ! $(1) $(word 1,$(filter $(tdir)/%,$^)); then \
echo; echo "Tar error"; exit 1; \
fi; \
cd $(2); \
@@ -365,19 +369,19 @@ pybuild = cd $(ddir); rm -rf $(2); \
#
# All the necessary Python modules go here.
$(ipydir)/asn1crypto: $(ipydir)/setuptools \
- | $(tdir)/asn1crypto-$(asn1crypto-version).tar.gz
+ $(tdir)/asn1crypto-$(asn1crypto-version).tar.gz
$(call pybuild, tar xf, asn1crypto-$(asn1crypto-version), , \
Asn1crypto $(asn1crypto-version))
$(ipydir)/asteval: $(ipydir)/numpy \
- | $(tdir)/asteval-$(asteval-version).tar.gz
+ $(tdir)/asteval-$(asteval-version).tar.gz
$(call pybuild, tar xf, asteval-$(asteval-version), , \
ASTEVAL $(asteval-version))
$(ipydir)/astroquery: $(ipydir)/astropy \
$(ipydir)/keyring \
$(ipydir)/requests \
- | $(tdir)/astroquery-$(astroquery-version).tar.gz
+ $(tdir)/astroquery-$(astroquery-version).tar.gz
$(call pybuild, tar xf, astroquery-$(astroquery-version), ,\
Astroquery $(astroquery-version))
@@ -388,7 +392,7 @@ $(ipydir)/astropy: $(ipydir)/h5py \
$(ipydir)/pyyaml \
$(ipydir)/html5lib \
$(ipydir)/beautifulsoup4 \
- | $(tdir)/astropy-$(astropy-version).tar.gz
+ $(tdir)/astropy-$(astropy-version).tar.gz
# Currently, when the Expat library is already built in a project
# (for example as a dependency of another program), Astropy's
# internal building of Expat will conflict with the project's. So
@@ -405,28 +409,28 @@ $(ipydir)/astropy: $(ipydir)/h5py \
&& echo "Astropy $(astropy-version) \citep{astropy2013,astropy2018}" > $@
$(ipydir)/beautifulsoup4: $(ipydir)/soupsieve \
- | $(tdir)/beautifulsoup4-$(beautifulsoup4-version).tar.gz
+ $(tdir)/beautifulsoup4-$(beautifulsoup4-version).tar.gz
$(call pybuild, tar xf, beautifulsoup4-$(beautifulsoup4-version), ,\
BeautifulSoup $(beautifulsoup4-version))
$(ipydir)/certifi: $(ipydir)/setuptools \
- | $(tdir)/certifi-$(certifi-version).tar.gz
+ $(tdir)/certifi-$(certifi-version).tar.gz
$(call pybuild, tar xf, certifi-$(certifi-version), ,\
Certifi $(certifi-version))
$(ipydir)/cffi: $(ibidir)/libffi \
$(ipydir)/pycparser \
- | $(tdir)/cffi-$(cffi-version).tar.gz
+ $(tdir)/cffi-$(cffi-version).tar.gz
$(call pybuild, tar xf, cffi-$(cffi-version), ,\
cffi $(cffi-version))
$(ipydir)/chardet: $(ipydir)/setuptools \
- | $(tdir)/chardet-$(chardet-version).tar.gz
+ $(tdir)/chardet-$(chardet-version).tar.gz
$(call pybuild, tar xf, chardet-$(chardet-version), ,\
Chardet $(chardet-version))
$(ipydir)/corner: $(ipydir)/matplotlib \
- | $(tdir)/corner-$(corner-version).tar.gz
+ $(tdir)/corner-$(corner-version).tar.gz
$(call pybuild, tar xf, corner-$(corner-version), ,\
Corner $(corner-version)) \
&& cp $(dtexdir)/corner.tex $(ictdir)/ \
@@ -434,50 +438,50 @@ $(ipydir)/corner: $(ipydir)/matplotlib \
$(ipydir)/cryptography: $(ipydir)/cffi \
$(ipydir)/asn1crypto \
- | $(tdir)/cryptography-$(cryptography-version).tar.gz
+ $(tdir)/cryptography-$(cryptography-version).tar.gz
$(call pybuild, tar xf, cryptography-$(cryptography-version), ,\
Cryptography $(cryptography-version))
$(ipydir)/cycler: $(ipydir)/six \
- | $(tdir)/cycler-$(cycler-version).tar.gz
+ $(tdir)/cycler-$(cycler-version).tar.gz
$(call pybuild, tar xf, cycler-$(cycler-version), ,\
Cycler $(cycler-version))
$(ipydir)/cython: $(ipydir)/setuptools \
- | $(tdir)/cython-$(cython-version).tar.gz
+ $(tdir)/cython-$(cython-version).tar.gz
$(call pybuild, tar xf, Cython-$(cython-version)) \
&& cp $(dtexdir)/cython.tex $(ictdir)/ \
&& echo "Cython $(cython-version) \citep{cython2011}" > $@
$(ipydir)/esutil: $(ipydir)/numpy \
- | $(tdir)/esutil-$(esutil-version).tar.gz
+ $(tdir)/esutil-$(esutil-version).tar.gz
$(call pybuild, tar xf, esutil-$(esutil-version), ,\
esutil $(esutil-version))
$(ipydir)/eigency: $(ibidir)/eigen \
- | $(tdir)/eigency-$(eigency-version).tar.gz
+ $(tdir)/eigency-$(eigency-version).tar.gz
$(call pybuild, tar xf, eigency-$(eigency-version), ,\
eigency $(eigency-version))
$(ipydir)/emcee: $(ipydir)/numpy \
$(ipydir)/setuptools_scm \
- | $(tdir)/emcee-$(emcee-version).tar.gz
+ $(tdir)/emcee-$(emcee-version).tar.gz
$(call pybuild, tar xf, emcee-$(emcee-version), ,\
emcee $(emcee-version))
$(ipydir)/entrypoints: $(ipydir)/setuptools \
- | $(tdir)/entrypoints-$(entrypoints-version).tar.gz
+ $(tdir)/entrypoints-$(entrypoints-version).tar.gz
$(call pybuild, tar xf, entrypoints-$(entrypoints-version), ,\
EntryPoints $(entrypoints-version))
$(ipydir)/flake8: $(ipydir)/pyflakes \
$(ipydir)/pycodestyle \
- | $(tdir)/flake8-$(flake8-version).tar.gz
+ $(tdir)/flake8-$(flake8-version).tar.gz
$(call pybuild, tar xf, flake8-$(flake8-version), ,\
Flake8 $(flake8-version))
$(ipydir)/future: $(ipydir)/setuptools \
- | $(tdir)/future-$(future-version).tar.gz
+ $(tdir)/future-$(future-version).tar.gz
$(call pybuild, tar xf, future-$(future-version), ,\
Future $(future-version))
@@ -486,7 +490,7 @@ $(ipydir)/galsim: $(ipydir)/future \
$(ipydir)/eigency \
$(ipydir)/pybind11 \
$(ipydir)/lsstdesccoord \
- | $(tdir)/galsim-$(galsim-version).tar.gz
+ $(tdir)/galsim-$(galsim-version).tar.gz
$(call pybuild, tar xf, GalSim-$(galsim-version)) \
&& cp $(dtexdir)/galsim.tex $(ictdir)/ \
&& echo "Galsim $(galsim-version) \citep{galsim}" > $@
@@ -497,7 +501,7 @@ $(ipydir)/h5py: $(ipydir)/six \
$(ipydir)/cython \
$(ipydir)/mpi4py \
$(ipydir)/pypkgconfig \
- | $(tdir)/h5py-$(h5py-version).tar.gz
+ $(tdir)/h5py-$(h5py-version).tar.gz
export HDF5_MPI=ON; \
export HDF5_DIR=$(ildir); \
$(call pybuild, tar xf, h5py-$(h5py-version), ,\
@@ -515,29 +519,29 @@ $(ipydir)/healpy: $(ibidir)/healpix
$(ipydir)/html5lib: $(ipydir)/six \
$(ipydir)/webencodings \
- | $(tdir)/html5lib-$(html5lib-version).tar.gz
+ $(tdir)/html5lib-$(html5lib-version).tar.gz
$(call pybuild, tar xf, html5lib-$(html5lib-version), ,\
HTML5lib $(html5lib-version))
$(ipydir)/idna: $(ipydir)/setuptools \
- | $(tdir)/idna-$(idna-version).tar.gz
+ $(tdir)/idna-$(idna-version).tar.gz
$(call pybuild, tar xf, idna-$(idna-version), ,\
idna $(idna-version))
$(ipydir)/jeepney: $(ipydir)/setuptools \
- | $(tdir)/jeepney-$(jeepney-version).tar.gz
+ $(tdir)/jeepney-$(jeepney-version).tar.gz
$(call pybuild, tar xf, jeepney-$(jeepney-version), ,\
Jeepney $(jeepney-version))
$(ipydir)/keyring: $(ipydir)/entrypoints \
$(ipydir)/secretstorage \
$(ipydir)/setuptools_scm \
- | $(tdir)/keyring-$(keyring-version).tar.gz
+ $(tdir)/keyring-$(keyring-version).tar.gz
$(call pybuild, tar xf, keyring-$(keyring-version), ,\
Keyring $(keyring-version))
$(ipydir)/kiwisolver: $(ipydir)/setuptools \
- | $(tdir)/kiwisolver-$(kiwisolver-version).tar.gz
+ $(tdir)/kiwisolver-$(kiwisolver-version).tar.gz
$(call pybuild, tar xf, kiwisolver-$(kiwisolver-version), ,\
Kiwisolver $(kiwisolver-version))
@@ -548,12 +552,12 @@ $(ipydir)/lmfit: $(ipydir)/six \
$(ipydir)/asteval \
$(ipydir)/matplotlib \
$(ipydir)/uncertainties \
- | $(tdir)/lmfit-$(lmfit-version).tar.gz
+ $(tdir)/lmfit-$(lmfit-version).tar.gz
$(call pybuild, tar xf, lmfit-$(lmfit-version), ,\
LMFIT $(lmfit-version))
$(ipydir)/lsstdesccoord: $(ipydir)/setuptools \
- | $(tdir)/lsstdesccoord-$(lsstdesccoord-version).tar.gz
+ $(tdir)/lsstdesccoord-$(lsstdesccoord-version).tar.gz
$(call pybuild, tar xf, LSSTDESC.Coord-$(lsstdesccoord-version), ,\
LSSTDESC.Coord $(lsstdesccoord-version))
@@ -566,7 +570,7 @@ $(ipydir)/matplotlib: $(ipydir)/numpy \
$(ibidir)/ghostscript \
$(ibidir)/imagemagick \
$(ipydir)/python-dateutil \
- | $(tdir)/matplotlib-$(matplotlib-version).tar.gz
+ $(tdir)/matplotlib-$(matplotlib-version).tar.gz
# On Mac systems, the build complains about `clang' specific
# features, so we can't use our own GCC build here.
if [ x$(on_mac_os) = xyes ]; then \
@@ -579,20 +583,20 @@ $(ipydir)/matplotlib: $(ipydir)/numpy \
$(ipydir)/mpi4py: $(ibidir)/openmpi \
$(ipydir)/setuptools \
- | $(tdir)/mpi4py-$(mpi4py-version).tar.gz
+ $(tdir)/mpi4py-$(mpi4py-version).tar.gz
$(call pybuild, tar xf, mpi4py-$(mpi4py-version)) \
&& cp $(dtexdir)/mpi4py.tex $(ictdir)/ \
&& echo "mpi4py $(mpi4py-version) \citep{mpi4py2011}" > $@
$(ipydir)/mpmath: $(ipydir)/setuptools \
- | $(tdir)/mpmath-$(mpmath-version).tar.gz
+ $(tdir)/mpmath-$(mpmath-version).tar.gz
$(call pybuild, tar xf, mpmath-$(mpmath-version), ,\
mpmath $(mpmath-version))
$(ipydir)/numpy: $(ibidir)/unzip \
$(ibidir)/openblas \
$(ipydir)/setuptools \
- | $(tdir)/numpy-$(numpy-version).zip
+ $(tdir)/numpy-$(numpy-version).zip
if [ x$(on_mac_os) = xyes ]; then \
export LDFLAGS="$(LDFLAGS) -undefined dynamic_lookup -bundle"; \
else \
@@ -606,24 +610,24 @@ $(ipydir)/numpy: $(ibidir)/unzip \
&& echo "Numpy $(numpy-version) \citep{numpy2011}" > $@
$(ipydir)/pexpect: $(ipydir)/setuptools \
- | $(tdir)/pexpect-$(pexpect-version).tar.gz
+ $(tdir)/pexpect-$(pexpect-version).tar.gz
$(call pybuild, tar xf, pexpect-$(pexpect-version), ,\
Pexpect $(pexpect-version))
$(ibidir)/pip3: $(ipydir)/setuptools \
- | $(tdir)/pip-$(pip-version).tar.gz
+ $(tdir)/pip-$(pip-version).tar.gz
$(call pybuild, tar xf, pip-$(pip-version), ,\
PiP $(pip-version))
$(ipydir)/pycodestyle: $(ipydir)/setuptools \
- | $(tdir)/pycodestyle-$(pycodestyle-version).tar.gz
+ $(tdir)/pycodestyle-$(pycodestyle-version).tar.gz
$(call pybuild, tar xf, pycodestyle-$(pycodestyle-version), ,\
pycodestyle $(pycodestyle-version))
$(ipydir)/pybind11: $(ibidir)/eigen \
$(ibidir)/boost \
$(ipydir)/setuptools \
- | $(tdir)/pybind11-$(pybind11-version).tar.gz
+ $(tdir)/pybind11-$(pybind11-version).tar.gz
pyhook_after() {
cp -r include/pybind11 $(iidir)/python$(python-major-version)m/
}
@@ -631,34 +635,34 @@ $(ipydir)/pybind11: $(ibidir)/eigen \
pybind11 $(pybind11-version))
$(ipydir)/pycparser: $(ipydir)/setuptools \
- | $(tdir)/pycparser-$(pycparser-version).tar.gz
+ $(tdir)/pycparser-$(pycparser-version).tar.gz
$(call pybuild, tar xf, pycparser-$(pycparser-version), ,\
pycparser $(pycparser-version))
$(ipydir)/pyflakes: $(ipydir)/setuptools \
- | $(tdir)/pyflakes-$(pyflakes-version).tar.gz
+ $(tdir)/pyflakes-$(pyflakes-version).tar.gz
$(call pybuild, tar xf, pyflakes-$(pyflakes-version), ,\
pyflakes $(pyflakes-version))
$(ipydir)/pyparsing: $(ipydir)/setuptools \
- | $(tdir)/pyparsing-$(pyparsing-version).tar.gz
+ $(tdir)/pyparsing-$(pyparsing-version).tar.gz
$(call pybuild, tar xf, pyparsing-$(pyparsing-version), ,\
PyParsing $(pyparsing-version))
$(ipydir)/pypkgconfig: $(ipydir)/setuptools \
- | $(tdir)/pkgconfig-$(pypkgconfig-version).tar.gz
+ $(tdir)/pkgconfig-$(pypkgconfig-version).tar.gz
$(call pybuild, tar xf, pkgconfig-$(pypkgconfig-version), ,
pkgconfig $(pypkgconfig-version))
$(ipydir)/python-dateutil: $(ipydir)/six \
$(ipydir)/setuptools_scm \
- | $(tdir)/python-dateutil-$(python-dateutil-version).tar.gz
+ $(tdir)/python-dateutil-$(python-dateutil-version).tar.gz
$(call pybuild, tar xf, python-dateutil-$(python-dateutil-version), ,\
python-dateutil $(python-dateutil-version))
$(ipydir)/pyyaml: $(ibidir)/yaml \
$(ipydir)/cython \
- | $(tdir)/pyyaml-$(pyyaml-version).tar.gz
+ $(tdir)/pyyaml-$(pyyaml-version).tar.gz
$(call pybuild, tar xf, PyYAML-$(pyyaml-version), ,\
PyYAML $(pyyaml-version))
@@ -667,12 +671,12 @@ $(ipydir)/requests: $(ipydir)/idna \
$(ipydir)/certifi \
$(ipydir)/chardet \
$(ipydir)/urllib3 \
- | $(tdir)/requests-$(requests-version).tar.gz
+ $(tdir)/requests-$(requests-version).tar.gz
$(call pybuild, tar xf, requests-$(requests-version), ,\
Requests $(requests-version))
$(ipydir)/scipy: $(ipydir)/numpy \
- | $(tdir)/scipy-$(scipy-version).tar.gz
+ $(tdir)/scipy-$(scipy-version).tar.gz
if [ x$(on_mac_os) = xyes ]; then \
export LDFLAGS="$(LDFLAGS) -undefined dynamic_lookup -bundle"; \
else \
@@ -685,56 +689,56 @@ $(ipydir)/scipy: $(ipydir)/numpy \
$(ipydir)/secretstorage: $(ipydir)/jeepney \
$(ipydir)/cryptography \
- | $(tdir)/secretstorage-$(secretstorage-version).tar.gz
+ $(tdir)/secretstorage-$(secretstorage-version).tar.gz
$(call pybuild, tar xf, SecretStorage-$(secretstorage-version), ,\
SecretStorage $(secretstorage-version))
$(ipydir)/setuptools: $(ibidir)/unzip \
$(ibidir)/python \
- | $(tdir)/setuptools-$(setuptools-version).zip
+ $(tdir)/setuptools-$(setuptools-version).zip
$(call pybuild, unzip, setuptools-$(setuptools-version), ,\
Setuptools $(setuptools-version))
$(ipydir)/setuptools_scm: $(ipydir)/setuptools \
- | $(tdir)/setuptools_scm-$(setuptools_scm-version).tar.gz
+ $(tdir)/setuptools_scm-$(setuptools_scm-version).tar.gz
$(call pybuild, tar xf, setuptools_scm-$(setuptools_scm-version), ,\
Setuptools-scm $(setuptools_scm-version))
$(ipydir)/sip_tpv: $(ipydir)/sympy \
$(ipydir)/astropy \
- | $(tdir)/sip_tpv-$(sip_tpv-version).tar.gz
+ $(tdir)/sip_tpv-$(sip_tpv-version).tar.gz
$(call pybuild, tar xf, sip_tpv-$(sip_tpv-version), ,) \
&& cp $(dtexdir)/sip_tpv.tex $(ictdir)/ \
- && echo "sip\_tpv $(sip_tpv-version) \citep{sip-tpv}" > $@
+ && echo "sip_tpv $(sip_tpv-version) \citep{sip-tpv}" > $@
$(ipydir)/six: $(ipydir)/setuptools \
- | $(tdir)/six-$(six-version).tar.gz
+ $(tdir)/six-$(six-version).tar.gz
$(call pybuild, tar xf, six-$(six-version), ,\
Six $(six-version))
$(ipydir)/soupsieve: $(ipydir)/setuptools \
- | $(tdir)/soupsieve-$(soupsieve-version).tar.gz
+ $(tdir)/soupsieve-$(soupsieve-version).tar.gz
$(call pybuild, tar xf, soupsieve-$(soupsieve-version), ,\
SoupSieve $(soupsieve-version))
$(ipydir)/sympy: $(ipydir)/mpmath \
- | $(tdir)/sympy-$(sympy-version).tar.gz
+ $(tdir)/sympy-$(sympy-version).tar.gz
$(call pybuild, tar xf, sympy-$(sympy-version), ,) \
&& cp $(dtexdir)/sympy.tex $(ictdir)/ \
&& echo "SymPy $(sympy-version) \citep{sympy}" > $@
$(ipydir)/uncertainties: $(ipydir)/numpy \
- | $(tdir)/uncertainties-$(uncertainties-version).tar.gz
+ $(tdir)/uncertainties-$(uncertainties-version).tar.gz
$(call pybuild, tar xf, uncertainties-$(uncertainties-version), ,\
uncertainties $(uncertainties-version))
$(ipydir)/urllib3: $(ipydir)/setuptools \
- | $(tdir)/urllib3-$(urllib3-version).tar.gz
+ $(tdir)/urllib3-$(urllib3-version).tar.gz
$(call pybuild, tar xf, urllib3-$(urllib3-version), ,\
Urllib3 $(urllib3-version))
$(ipydir)/webencodings: $(ipydir)/setuptools \
- | $(tdir)/webencodings-$(webencodings-version).tar.gz
+ $(tdir)/webencodings-$(webencodings-version).tar.gz
$(call pybuild, tar xf, webencodings-$(webencodings-version), ,\
Webencodings $(webencodings-version))
diff --git a/reproduce/software/patches/valgrind-3.15.0-mpi-fix1.patch b/reproduce/software/patches/valgrind-3.15.0-mpi-fix1.patch
new file mode 100644
index 0000000..94dcab5
--- /dev/null
+++ b/reproduce/software/patches/valgrind-3.15.0-mpi-fix1.patch
@@ -0,0 +1,37 @@
+---
+ mpi/libmpiwrap.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+ Patch by Samuel Thibault:
+ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=946329;msg=10
+ and hacked further by Boud Roukema 2020-05-10.
+--- a/mpi/libmpiwrap.c
++++ b/mpi/libmpiwrap.c
+@@ -278,8 +278,12 @@ static void showTy ( FILE* f, MPI_Dataty
+ else if (ty == MPI_LONG_INT) fprintf(f,"LONG_INT");
+ else if (ty == MPI_SHORT_INT) fprintf(f,"SHORT_INT");
+ else if (ty == MPI_2INT) fprintf(f,"2INT");
++# if defined(MPI_UB_ENABLED_IN_MPI1)
+ else if (ty == MPI_UB) fprintf(f,"UB");
++# endif
++# if defined(MPI_LB_ENABLED_IN_MPI1)
+ else if (ty == MPI_LB) fprintf(f,"LB");
++# endif
+ # if defined(MPI_WCHAR)
+ else if (ty == MPI_WCHAR) fprintf(f,"WCHAR");
+ # endif
+@@ -733,8 +737,14 @@ void walk_type ( void(*f)(void*,long), c
+ f(base + offsetof(Ty,loc), sizeof(int));
+ return;
+ }
+- if (ty == MPI_LB || ty == MPI_UB)
++#if defined(MPI_LB_ENABLED_IN_MPI1)
++ if (ty == MPI_LB)
++ return; /* have zero size, so nothing needs to be done */
++#endif
++#if defined(MPI_UB_ENABLED_IN_MPI1)
++ if (ty == MPI_UB)
+ return; /* have zero size, so nothing needs to be done */
++#endif
+ goto unhandled;
+ /*NOTREACHED*/
+ }
diff --git a/reproduce/software/patches/valgrind-3.15.0-mpi-fix2.patch b/reproduce/software/patches/valgrind-3.15.0-mpi-fix2.patch
new file mode 100644
index 0000000..12b50a2
--- /dev/null
+++ b/reproduce/software/patches/valgrind-3.15.0-mpi-fix2.patch
@@ -0,0 +1,23 @@
+Index: valgrind-3.15.0/mpi/Makefile.am
+===================================================================
+ Patch by Samuel Thibault:
+ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=946329;msg=22
+--- valgrind-3.15.0.orig/mpi/Makefile.am
++++ valgrind-3.15.0/mpi/Makefile.am
+@@ -42,14 +42,14 @@ libmpiwrap_@VGCONF_ARCH_PRI@_@VGCONF_OS@
+ libmpiwrap_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_CPPFLAGS = -I$(top_srcdir)/include
+ libmpiwrap_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_CFLAGS = \
+ $(CFLAGS_MPI) $(MPI_FLAG_M3264_PRI) -Wno-deprecated-declarations
+-libmpiwrap_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_LDFLAGS = $(LDFLAGS_MPI)
++libmpiwrap_@VGCONF_ARCH_PRI@_@VGCONF_OS@_so_LDADD = $(LDFLAGS_MPI)
+ endif
+ if BUILD_MPIWRAP_SEC
+ libmpiwrap_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_SOURCES = libmpiwrap.c
+ libmpiwrap_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_CPPFLAGS = -I$(top_srcdir)/include
+ libmpiwrap_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_CFLAGS = \
+ $(CFLAGS_MPI) $(MPI_FLAG_M3264_SEC) -Wno-deprecated-declarations
+-libmpiwrap_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_LDFLAGS = $(LDFLAGS_MPI)
++libmpiwrap_@VGCONF_ARCH_SEC@_@VGCONF_OS@_so_LDADD = $(LDFLAGS_MPI)
+ endif
+
+ #----------------------------------------------------------------------------
diff --git a/reproduce/software/shell/bashrc.sh b/reproduce/software/shell/bashrc.sh
index 69bbba6..e846d6a 100755
--- a/reproduce/software/shell/bashrc.sh
+++ b/reproduce/software/shell/bashrc.sh
@@ -31,12 +31,15 @@
#
# Copyright (C) 2019-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
#
-# This script 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.
-#
-# 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 script 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 script 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 script. If not, see <http://www.gnu.org/licenses/>.
diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh
index 71b07cc..882570e 100755
--- a/reproduce/software/shell/configure.sh
+++ b/reproduce/software/shell/configure.sh
@@ -1,18 +1,21 @@
-#! /bin/sh
+#!/bin/sh
#
# Necessary preparations/configurations for the reproducible project.
#
# Copyright (C) 2018-2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
#
-# This script 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 script 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 script 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 script. If not, see <http://www.gnu.org/licenses/>.
@@ -316,57 +319,27 @@ static_build=no
-# Check for GNU gettext
-# ---------------------
+# See if we are on a Linux-based system
+# --------------------------------------
#
-# Some of the basic sofware need GNU gettext which we don't yet install.
-has_gettext=0
-if type msgfmt > /dev/null 2>/dev/null; then has_gettext=1; fi
-if [ $has_gettext = 0 ]; then
- cat <<EOF
-______________________________________________________
-!!!!!!! GNU gettext NOT FOUND !!!!!!!
-
-Some of the core programs in Maneage require a running GNU gettext on the
-host. Unfortuantely we haven't had the time yet to include its installation
-in Maneage, but it is defined as task #15616 so we don't forget. Generally,
-GNU gettext is already available on many systems, so it hasn't been
-reported too commonly. But please consider helping in this if you have
-time and interest.
-
-Until we include gettext's installation in Maneage, please use your package
-manager to install GNU gettext, then re-run the configuration to
-continue. Here are the relevant commands on some common GNU/Linux
-distributions (you'll only need one of them, or a similar command, if you
-use another package manager):
-
- apt install gettext
- yum install gettext
- pacman -S gettext
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-EOF
- exit 1
+# Some features are tailored to GNU/Linux systems, while the BSD-based
+# behavior is different. Initially we only tested macOS (hence the name of
+# the variable), but as FreeBSD is also being inlucded in our tests. As
+# more systems get used, we need to tailor these kinds of things better.
+kernelname=$(uname -s)
+if [ x$kernelname = xLinux ]; then
+ on_mac_os=no
+else
+ host_cc=1
+ on_mac_os=yes
fi
-# If we are on a Mac OS system
-# ----------------------------
-#
-# For the time being, we'll use the existance of `otool' to see if we are
-# on a Mac OS system or not. Some tools (for example OpenSSL) need to know
-# this.
-#
-# On Mac OS, the building of GCC crashes sometimes while building libiberty
-# with CLang's `g++'. Until we find a solution, we'll just use the host's C
-# compiler.
-if type otool > /dev/null 2>/dev/null; then
- host_cc=1
- on_mac_os=yes
+# Print warning if the host CC is to be used.
+if [ x$host_cc = x1 ]; then
cat <<EOF
______________________________________________________
@@ -382,14 +355,11 @@ ______________________________________________________
EOF
sleep 5
-else
- on_mac_os=no
fi
-
# Necessary C library element positions
# -------------------------------------
#
@@ -984,7 +954,7 @@ version that this project was designed to use in '$depverfile'
($gversion). Please re-run after removing the former file:
$ rm $glconf
- $ ./project configure
+ $ ./project configure -e
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -1177,98 +1147,29 @@ fi
-# Number of threads for basic builds
-# ----------------------------------
+# Number of threads to build software
+# -----------------------------------
#
-# Since the system might not have GNU Make at this stage, and other Make
-# implementations can't deal with parallel build properly, we'll just
-# default to 1 thread. This is because some versions of Make complain about
-# not having enough 'pipe' (memory) on some systems. After some searching,
-# I found out its because of too many threads. GNU Make will be present on
-# GNU systems (that have `nproc', part of GNU Coreutils). So to simplify
-# the test for GNU Make, we'll just try running `nproc'.
-if which nproc &> /dev/null; then
- if [ $jobs = 0 ]; then
+# If the user hasn't manually specified the number of threads, see if we
+# can deduce it from the host:
+# - On systems with GNU Coreutils we have 'nproc'.
+# - On BSD-based systems (for example FreeBSD and macOS), we have a
+# 'hw.ncpu' in the output of 'sysctl'.
+# - When none of the above work, just set the number of threads to 1.
+if [ $jobs = 0 ]; then
+ if type nproc > /dev/null 2> /dev/null; then
numthreads=$(nproc --all);
else
- numthreads=$jobs
+ numthreads=$(sysctl -a | awk '/^hw\.ncpu/{print $2}')
+ if [ x"$numthreads" = x ]; then numthreads=1; fi
fi
else
- numthreads=1;
-fi
-
-
-
-
-
-# Build `flock' before other program
-# ----------------------------------
-#
-# Flock (or file-lock) is a unique program that is necessary to serialize
-# the (generally parallel) processing of make when necessary. GNU/Linux
-# machines have it as part of their `util-linux' programs. But to be
-# consistent in non-GNU/Linux systems, we will be using our own build.
-#
-# The reason that `flock' is sepecial is that we need it to serialize the
-# download process of the software tarballs.
-flockversion=$(awk '/flock-version/{print $3}' $depverfile)
-flockchecksum=$(awk '/flock-checksum/{print $3}' $depshafile)
-flocktar=flock-$flockversion.tar.gz
-flockurl=http://github.com/discoteq/flock/releases/download/v$flockversion/
-
-# Prepare/download the tarball.
-if ! [ -f $tardir/$flocktar ]; then
- flocktarname=$tardir/$flocktar
- ucname=$flocktarname.unchecked
- if [ -f $ddir/$flocktar ]; then
- cp $ddir/$flocktar $ucname
- else
- if ! $downloader $ucname $flockurl/$flocktar; then
- rm -f $ucname;
- echo
- echo "DOWNLOAD ERROR: Couldn't download the 'flock' tarball:"
- echo " $flockurl"
- echo
- echo "You can manually place it in '$ddir' to avoid downloading."
- exit 1
- fi
- fi
-
- # Make sure this is the correct tarball.
- if type sha512sum > /dev/null 2>/dev/null; then
- checksum=$(sha512sum "$ucname" | awk '{print $1}')
- if [ x$checksum = x$flockchecksum ]; then mv "$ucname" "$flocktarname"
- else echo "ERROR: Non-matching checksum for '$flocktar'."; exit 1
- fi;
- else mv "$ucname" "$flocktarname"
- fi
-fi
-
-# If the tarball is newer than the (possibly existing) program (the version
-# has changed), then delete the program.
-if [ -f .local/bin/flock ]; then
- if [ $tardir/$flocktar -nt $ibidir/flock ]; then
- rm $ibidir/flock
- fi
-fi
-
-# Build `flock' if necessary.
-if ! [ -f $ibidir/flock ]; then
- cd $tmpblddir
- tar xf $tardir/$flocktar
- cd flock-$flockversion
- ./configure --prefix=$instdir
- make
- make install
- cd $topdir
- rm -rf $tmpblddir/flock-$flockversion
- echo "Discoteq flock $flockversion" > $ibidir/flock
+ numthreads=$jobs
fi
-
# Paths needed by the host compiler (only for `basic.mk')
# -------------------------------------------------------
#
@@ -1295,14 +1196,28 @@ fi
-# Build basic software
-# --------------------
+# Build core tools for project
+# ----------------------------
+#
+# Here we build the core tools that 'basic.mk' depends on: Lzip
+# (compression program), GNU Make (that 'basic.mk' is written in), Dash
+# (minimal Bash-like shell) and Flock (to lock files and enable serial
+# download).
+./reproduce/software/shell/pre-make-build.sh \
+ "$bdir" "$ddir" "$downloader"
+
+
+
+
+
+# Build other basic tools our own GNU Make
+# ----------------------------------------
#
# When building these software we don't have our own un-packing software,
# Bash, Make, or AWK. In this step, we'll install such low-level basic
# tools, but we have to be very portable (and use minimal features in all).
echo; echo "Building necessary software (if necessary)..."
-make -k -f reproduce/software/make/basic.mk \
+.local/bin/make -k -f reproduce/software/make/basic.mk \
sys_library_path=$sys_library_path \
rpath_command=$rpath_command \
static_build=$static_build \
@@ -1374,11 +1289,10 @@ analysis, you can safely ignore this warning and continue.
If you later have internet access and would like to add TeX live to your
project, 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.
+below.
rm .local/version-info/tex/texlive-ready-tlmgr
- ./project configure
+ ./project configure -e
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diff --git a/reproduce/software/shell/pre-make-build.sh b/reproduce/software/shell/pre-make-build.sh
new file mode 100755
index 0000000..e2ac789
--- /dev/null
+++ b/reproduce/software/shell/pre-make-build.sh
@@ -0,0 +1,249 @@
+#!/bin/sh
+#
+# Very basic tools necessary to start Maneage's default building.
+#
+# Copyright (C) 2020 Mohammad Akhlaghi <mohammad@akhlaghi.org>
+#
+# This script 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 script 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 script. If not, see <http://www.gnu.org/licenses/>.
+
+
+
+
+
+# Script settings
+# ---------------
+# Stop the script if there are any errors.
+set -e
+
+
+
+
+
+# Input arguments.
+bdir=$1
+ddir=$2
+downloader="$3"
+
+
+
+
+
+# Basic directories/files
+topdir=$(pwd)
+sdir=$bdir/software
+tardir=$sdir/tarballs
+instdir=$sdir/installed
+tmpblddir=$sdir/build-tmp
+confdir=reproduce/software/config
+ibidir=$instdir/version-info/proglib
+downloadwrapper=reproduce/analysis/bash/download-multi-try
+
+# Derived directories
+bindir=$instdir/bin
+versionsfile=$confdir/versions.conf
+checksumsfile=$confdir/checksums.conf
+backupfile=$confdir/servers-backup.conf
+
+
+
+
+# Set the system to first look into our newly installed programs.
+export PATH="$bindir:$PATH"
+
+
+
+
+
+# Load the backup servers
+backupservers=$(awk '!/^#/{printf "%s ", $1}' $backupfile)
+
+
+
+
+
+# Download the necessary tarball.
+download_tarball() {
+ # Basic definitions
+ maneagetar=$tardir/$tarball
+
+ # See if the tarball already exists in Maneage.
+ if [ -f "$maneagetar" ]; then
+ just_a_place_holder=1
+ else
+ ucname=$tardir/$tarball.unchecked
+
+ # See if it is in the input software directory.
+ if [ -f "$ddir/$tarball" ]; then
+ cp $ddir/$tarball $ucname
+ else
+ $downloadwrapper "$downloader" nolock $url/$tarball $ucname \
+ "$backupservers"
+ fi
+
+ # Make sure this is the correct tarball.
+ if type sha512sum > /dev/null 2> /dev/null; then
+ checksum=$(sha512sum "$ucname" | awk '{print $1}')
+ expectedchecksum=$(awk '/^'$progname'-checksum/{print $3}' $checksumsfile)
+ if [ x$checksum = x$expectedchecksum ]; then mv "$ucname" "$maneagetar"
+ else
+ echo "ERROR: Non-matching checksum for '$tarball'."
+ echo "Checksum should be: $expectedchecksum"
+ echo "Checksum is: $checksum"
+ exit 1
+ fi;
+ else mv "$ucname" "$maneagetar"
+ fi
+ fi
+
+ # If the tarball is newer than the (possibly existing) program (the version
+ # has changed), then delete the program.
+ if [ -f $ibidir/$progname ]; then
+ if [ $maneagetar -nt $ibidir/$progname ]; then
+ rm $ibidir/$progname
+ fi
+ fi
+}
+
+
+
+
+
+# Build the program from the tarball
+build_program() {
+ if ! [ -f $ibidir/$progname ]; then
+
+ # Go into the temporary building directory.
+ cd $tmpblddir
+ unpackdir="$progname"-"$version"
+
+ # Some implementations of 'tar' don't recognize Lzip, so we need to
+ # manually call Lzip first, then call tar afterwards.
+ csuffix=$(echo $tarball | sed -e's/\./ /g' | awk '{print $NF}')
+ rm -rf $unpackdir
+ if [ x$csuffix = xlz ]; then
+ intarrm=1
+ intar=$(echo $tarball | sed -e's/.lz//')
+ lzip -c -d $tardir/$tarball > $intar
+ else
+ intarrm=0
+ intar=$tardir/$tarball
+ fi
+
+ # Unpack the tarball and build the program.
+ tar xf $intar
+ if [ x$intarrm = x1 ]; then rm $intar; fi
+ cd $unpackdir
+ ./configure --prefix=$instdir
+ make
+ make install
+ cd $topdir
+ rm -rf $tmpblddir/$unpackdir
+ echo "$progname_tex $version" > $ibidir/$progname
+ fi
+}
+
+
+
+
+
+# Lzip
+# ----
+#
+# Lzip is a compression program that is the first built program in Maneage
+# because the sources of all other programs (including other compression
+# softwaer) are compressed. Lzip has the advantage that it is very small
+# (without compression it is just ~400Kb). So we use its '.tar' file and
+# won't rely on the host's compression tools at all.
+progname="lzip"
+progname_tex="Lzip"
+url=http://akhlaghi.org/src
+version=$(awk '/^'$progname'-version/{print $3}' $versionsfile)
+tarball=$progname-$version.tar
+download_tarball
+build_program
+
+
+
+
+
+# GNU Make
+# --------
+#
+# The job orchestrator of Maneage is GNU Make. Although it is not
+# impossible to account for all the differences between various Make
+# implementations, its much easier (for reading the code and
+# writing/debugging it) if we can count on a special implementation. So
+# before going into the complex job orchestration in building high-level
+# software, we start by building GNU Make.
+progname="make"
+progname_tex="GNU Make"
+url=http://akhlaghi.org/src
+version=$(awk '/^'$progname'-version/{print $3}' $versionsfile)
+tarball=$progname-$version.tar.lz
+download_tarball
+build_program
+
+
+
+
+
+# Dash
+# ----
+#
+# Dash is a shell (http://gondor.apana.org.au/~herbert/dash). Having it in
+# this phase will allow us to have a fixed/identical shell for 'basic.mk'
+# (which builds GNU Bash).
+progname="dash"
+progname_tex="Dash"
+url=http://akhlaghi.org/src
+version=$(awk '/^'$progname'-version/{print $3}' $versionsfile)
+tarball=$progname-$version.tar.lz
+download_tarball
+build_program
+
+# If the 'sh' symbolic link isn't set yet, set it to point to Dash.
+if [ -f $bindir/sh ]; then just_a_place_holder=1
+else ln -sf $bindir/dash $bindir/sh;
+fi
+
+
+
+
+
+# Flock
+# -----
+#
+# Flock (or file-lock) is necessary to serialize operations when
+# necessary. GNU/Linux machines have it as part of their `util-linux'
+# programs. But to be consistent in non-GNU/Linux systems, we will be using
+# our own build.
+#
+# The reason that `flock' is built here is that generally the building of
+# software is done in parallel, but we need it to serialize the download
+# process of the software tarballs to avoid network complications when too
+# many simultaneous download commands are called.
+progname="flock"
+progname_tex="Discoteq flock"
+url=http://akhlaghi.org/src
+version=$(awk '/^'$progname'-version/{print $3}' $versionsfile)
+tarball=$progname-$version.tar.lz
+download_tarball
+build_program
+
+
+
+
+
+# Finish this script successfully
+exit 0