aboutsummaryrefslogtreecommitdiff
path: root/reproduce
diff options
context:
space:
mode:
Diffstat (limited to 'reproduce')
-rw-r--r--reproduce/analysis/make/paper.mk60
-rw-r--r--reproduce/analysis/make/verify.mk41
-rw-r--r--reproduce/software/bibtex/parallel.tex15
-rw-r--r--reproduce/software/config/TARGETS.conf4
-rw-r--r--reproduce/software/config/checksums.conf66
-rw-r--r--reproduce/software/config/urls.conf11
-rw-r--r--reproduce/software/config/versions.conf170
-rw-r--r--reproduce/software/make/basic.mk214
-rw-r--r--reproduce/software/make/high-level.mk545
-rw-r--r--reproduce/software/make/python.mk383
-rw-r--r--reproduce/software/make/xorg.mk1
-rwxr-xr-xreproduce/software/shell/apptainer.sh13
-rwxr-xr-xreproduce/software/shell/configure.sh96
-rw-r--r--reproduce/software/shell/docker-README.md21
-rwxr-xr-xreproduce/software/shell/docker.sh33
-rwxr-xr-xreproduce/software/shell/prep-source.sh16
16 files changed, 1313 insertions, 376 deletions
diff --git a/reproduce/analysis/make/paper.mk b/reproduce/analysis/make/paper.mk
index d2db4d3..c218cdd 100644
--- a/reproduce/analysis/make/paper.mk
+++ b/reproduce/analysis/make/paper.mk
@@ -19,6 +19,21 @@
+# Software info in TeX
+# --------------------
+#
+# The information of the installed software is placed in the
+# '.build/software' directory (which the TeX build should not depend
+# on). Therefore, we should copy those macros here in the LaTeX build
+# directory, so the TeX directory is completely independent from each
+# other.
+$(mtexdir)/dependencies.tex: $(bsdir)/config/dependencies.tex
+ cp $(bsdir)/config/*.tex $(mtexdir)/
+
+
+
+
+
# LaTeX macros for paper
# ----------------------
#
@@ -40,19 +55,36 @@
# Note that if you don't want the final PDF and just want the processing
# and file outputs, you can give any value other than 'yes' to
# 'pdf-build-final' in 'reproduce/analysis/config/pdf-build.conf'.
-$(mtexdir)/project.tex: $(mtexdir)/verify.tex
+$(mtexdir)/project.tex: $(mtexdir)/verify.tex $(mtexdir)/dependencies.tex
# If no PDF is requested, or if LaTeX isn't available, don't continue
# to building the final PDF. Otherwise, merge all the TeX macros into
# one for building the PDF.
- @if [ -f .local/bin/pdflatex ] && [ x"$(pdf-build-final)" = xyes ]; then
+ @if [ -f .local/bin/pdflatex ] && [ x"$(pdf-build-final)" = xyes ];
+ then
# Put a LaTeX input command for all the necessary macro files.
-# 'hardware-parameters.tex' is created in 'configure.sh'.
+# Note that 'hardware-parameters.tex' is created in 'configure.sh'
+# (which is why it is first in the list).
projecttex=$(mtexdir)/project.tex
rm -f $$projecttex
- for t in $(subst paper,,$(makesrc)) hardware-parameters; do
- echo "\input{tex/build/macros/$$t.tex}" >> $$projecttex
+ for t in hardware-parameters $(subst paper,,$(makesrc)); do
+
+# Only add the macro file to 'project.tex' if the macro file is
+# not empty. Empty macro files are not a bug in Maneage alone: 1)
+# the processing of a sub-Makefile may not need to produce any
+# written macro for the PDF, and that is perfectly fine. 2) LaTeX
+# can also '\input' an empty file. However, it is important for
+# for publication servers (like arXiv) that do not allow
+# uploading empty files. Therefore, when 'project.tex' contains
+# empty files, such severs will not be able compile the PDF
+# because the file name is mentioned in 'project.tex', but cannot
+# be found in the uploaded files.
+ tfile=tex/build/macros/$$t.tex
+ if [ -s $$tfile ]; then
+ echo "\input{$$tfile}" >> $$projecttex
+ fi
+
done
# Possibly highlight the '\new' parts of the text.
@@ -110,21 +142,6 @@ tikzdir:=$(texbdir)/tikz
-# Software info in TeX
-# --------------------
-#
-# The information of the installed software is placed in the
-# '.build/software' directory (which the TeX build should not depend
-# on). Therefore, we should copy those macros here in the LaTeX build
-# directory, so the TeX directory is completely independent from each
-# other.
-$(mtexdir)/dependencies.tex: $(bsdir)/config/dependencies.tex
- cp $(bsdir)/config/*.tex $(mtexdir)/
-
-
-
-
-
# The bibliography
# ----------------
#
@@ -137,8 +154,7 @@ $(mtexdir)/dependencies.tex: $(bsdir)/config/dependencies.tex
# recipe and the 'paper.pdf' recipe. But if 'tex/src/references.tex' hasn't
# been modified, we don't want to re-build the bibliography, only the final
# PDF.
-$(texbdir)/paper.bbl: tex/src/references.tex $(mtexdir)/dependencies.tex \
- | $(mtexdir)/project.tex
+$(texbdir)/paper.bbl: tex/src/references.tex | $(mtexdir)/project.tex
# If '$(mtexdir)/project.tex' is empty, don't build PDF.
@macros=$$(cat $(mtexdir)/project.tex)
diff --git a/reproduce/analysis/make/verify.mk b/reproduce/analysis/make/verify.mk
index 4fedefd..91c4b77 100644
--- a/reproduce/analysis/make/verify.mk
+++ b/reproduce/analysis/make/verify.mk
@@ -138,11 +138,44 @@ $(mtexdir)/verify.tex: $(foreach s, $(verify-dep), $(mtexdir)/$(s).tex)
# Verify TeX macros (the values that go into the PDF text).
for m in $(verify-check); do
- file=$(mtexdir)/$$m.tex
- if [ $$m == delete-me ]; then s=711e2f7fa1f16ecbeeb3df6bcb4ec705
- else echo; echo "'$$m' not recognized."; exit 1
+
+# Set the macro file name, make sure it exists (the user may have
+# forgot to create it in the respective sub-Makefile).
+ tfile=$(mtexdir)/$$m.tex
+ if ! [ -f $$tfile ]; then
+ printf "$$tfile: ERROR: does not exist! If you do not "
+ printf "(currently) plan macros to be added to the final "
+ printf "PDF from that sub-Makefile, do the following to "
+ printf "avoid this error: put a 'touch \$$@' as the recipe "
+ printf "of the '\$$(mtexdir)/$$m.tex' target (at the bottom "
+ printf "of 'reproduce/analysis/make/$$m.mk'). If you later "
+ printf "decide to define macros there, simply replace the "
+ printf "temporary 'touch \$$@' command with the command(s) "
+ printf "to prepare/write the macro (see 'initialize.mk' "
+ printf "as an example)\n";
+ exit 1
fi
- $(call verify-txt-no-comments-no-space, $$file, $$s, $@.tmp)
+
+# Check the hash for this file and verify it.
+ case $$m in
+ delete-me) s=711e2f7fa1f16ecbeeb3df6bcb4ec705;;
+ *) # This file's hash is not in the list above.
+
+# If the file is empty, we can skip it (with the 'continue'
+# command). Otherwise, the user should be informed with an
+# error.
+ if [ -s $$tfile ]; then
+ printf "$$tfile: ERROR: please add the hash of this "
+ printf "macro file to the list of hashes above this "
+ printf "error message (in "
+ printf "'reproduce/analysis/make/verify.mk')\n"; exit 1
+ else
+ continue
+ fi
+ ;;
+ esac
+ $(call verify-txt-no-comments-no-space, $$tfile, $$s, $@.tmp)
+
done
# Move temporary file to final target.
diff --git a/reproduce/software/bibtex/parallel.tex b/reproduce/software/bibtex/parallel.tex
new file mode 100644
index 0000000..1ba1018
--- /dev/null
+++ b/reproduce/software/bibtex/parallel.tex
@@ -0,0 +1,15 @@
+%% Copyright (C) 2026-2026 Boud Roukema <boud@cosmo.torun.pl>
+%%
+%% 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{parallel,
+ author = {{Tange}, Ole},
+ title = "{GNU Parallel 20260322, https://doi.org/10.5281/zenodo.19321428}",
+ journal = {Zenodo.19321428},
+ year = 2026,
+ month = mar,
+ doi = {10.5281/zenodo.19321428},
+}
diff --git a/reproduce/software/config/TARGETS.conf b/reproduce/software/config/TARGETS.conf
index 4e76b13..51791a5 100644
--- a/reproduce/software/config/TARGETS.conf
+++ b/reproduce/software/config/TARGETS.conf
@@ -42,5 +42,7 @@ top-level-programs = gnuastro
top-level-python =
# R libraries/modules
-# [For developers 2022-01-02: 'r-cran-cowplot r-cran-gridExtra' for all]
+#
+# As of 2022-01-02: to have all of the R packages, select 'r-cran-cowplot
+# r-cran-gridExtra'.
top-level-r-cran =
diff --git a/reproduce/software/config/checksums.conf b/reproduce/software/config/checksums.conf
index 81f325f..9e1c437 100644
--- a/reproduce/software/config/checksums.conf
+++ b/reproduce/software/config/checksums.conf
@@ -19,7 +19,7 @@ bash-checksum = b905e107403ceb25ad92f26ab71d6a7f12b1cadbcb27de9f5fefa7da31e96de0
binutils-checksum = ad7bbebc0c4e537c15d7537027246e2c1c0d355efcd6a369c7ef91c6491ec6a6e9af24c60b7df7508213abeedbd2e53c41549889073ac1f629b0746b78ee894b
bzip2-checksum = 929cb1b2d0db8a505e2bafe3ce2c893c8f132dd617c0110e86e19f116b570a85de3c8a635483b530456fc8f8b6698c8190d21313e47607f442807b10489ac86e
certpem-checksum = d1198511bf1f61a624691c182ecdd57ff468030a4af8b0f0ef248a5ce1f42ed883c684fc5aafdd791d5d3aa24504fbfbab11043231594b1c4e21fdb7247e5a33
-coreutils-checksum = 1aa2775ef67ed9ddf30e527fd7b813ba83b43e921e1493d44c016bf2750ccb1478ea08a2cd000a619fb22f800f7f84bb03fff5acdcfad7a45d5aef833fdbf041
+coreutils-checksum = 6f761311e673ded32c0b8d29605630bc703920718b305937a057f992fb344106e57ea96b51bba5ac674a815acc592fb127eb38a4fba6c40f07ff6b123c432e87
curl-checksum = 5b0213eb1d1c2146c591a72ba0d763c40cf707c7fcc43f4807cccec12ddd3cc63127da0f18f96c2450efc8607812519dbccbc924b5b629712fbc7b02b4976aee
dash-checksum = f21a2ac71606a5ae8dbda5639d111f385cc44c357c580a83e453b33faa32c92fd83f8ca6c5d2cf720343f8ab1cfec247ca499596f78ee19f62d67cd1d7ae0c69
diffutils-checksum = 9d42c57a5ae4770b6d84b76f324c7c09c62792cac063048793037281972983dd4c409868545f2460c281f761adba6c49fab3fa227ab5231397809474cedbdfc1
@@ -28,7 +28,7 @@ findutils-checksum = 826c643e7f5c5d6976a47eabcd9807e51350d09ee8fc7dc931f2d9276f9
flock-checksum = f711815035e21b46572bf80e730a55822e5abf4cb29749e476ee6cf4d5027e9a7deeacf5f6b8c37f18f17a0cc7a6d98fb0be3936e97b122707f1cb2306d1e1d9
gawk-checksum = 9013f5cb4c08aa13029ecf0c6b5e02ac93a3b500683b07ae8d34d698f0451dd5146a0a5aef96a249112834e27b379869d8e541f6a1b99accf701ba6a48f58f33
gcc-checksum = f7386218e0993e19da1092bf625791cb9ec269667f7bdf378fef359a304aa08e4d79cb7b9f56d5d7028b53b29071005707a1cad0fd1b770884ab02310ed7b028
-gettext-checksum = ec0aaf00e5ccfd5c0c51be2239590cf9f7f9105b072081c8374caa75c08611e4c1ebfd6ac6a487f7b54f57c2d8b493fe6ab4ca8d62592dba4db5715e67855f3d
+gettext-checksum = dbdc5016a776f12feb7134c05e2568ba9134bfa66b824967b4cc81d2093328c0f3bbcf269ad5a60ff2257625c763ac96c071685ee2b1d397730b06a058f565aa
git-checksum = e2a3d2cf272554c0e9fa2abc4cf7b1eff17884911859f17567b76f170996802caa01675a42dbf29af7fc283a07e8dc4a11382ffbd2a03d7d62238e8c598f0b56
gmp-checksum = ad65de00ecb46cf454ed6c40d2a57ce2528f5fa64df1284dfa15036f1e8cf27760a09a4ecdfcc39048faffb71339bba30d99dd365c54173dbc2ba629bee2fad9
grep-checksum = 4e39935e26a0d742c0e854135940693166ea142673f50dfd589eedc96dded0e8dcad425e6519ee85d59fdf9d418381ba775a7c560cbeebcdf8a1848339243145
@@ -37,20 +37,19 @@ isl-checksum = 615827a86e809c9645e090786008f8b37d7efc7fee6501ff81e937a299a5a72e7
less-checksum = f02557d9b85d4144e530ef8f2e95329b7bd2eba1be2513558cd7359cf520e1e6723c4d62b6dd42082084003ac9cb23c3d1d9ad7ca73d58597f7fedf31e9d08fd
libiconv-checksum = 1f33fcf7f617990812a26e15092dbb2f9e81400cee117eefd40ade813f7ca17c0b9a50a7a9881b4ab0b9c0be8475528204c347d940cbc667a918570e0bde051a
libtool-checksum = 2aa6d535b4d644393d7ca5c8f174b09923dbdb50d947ba40917aad75c8cecf957fec7a54717bd3670c44130331b1f08fae3694e32c79c8e187c31e909b3d401b
-libunistring-checksum = 3e79a3f5a1c13ce9554071ffecafa24a95ba36e2c1087940aa1ba93957ed14290779d1603b401431eda20c3da5f345a0b8842191a3e65f03fb2667e2a1443e30
+libunistring-checksum = 6621b23b89e68f38a88bd0f0d017c1f20c0b81aa35901ce0e2620054de41a89194c71e55c27de5b9aa0dbbffdb9479c2411b9069cdad09ed67ecf4b1611af525
libxml2-checksum = aee3946beba88dba0a4ba573704da0c48de3233e5a1717ac6d8e647f3c8b65131c1b4d320604adedd8eff3364af11a3489a2c26b57b8151b59fca60da3f2a1c3
lzip-checksum = 513b7ecdee1d6f12298cbbb025286c887c5e6588e1268b489735955f822a8e305e7a8d4d06054a77b2f4c40f8d82e9e6d779cd73d4227ca3cdfe4002b9e42a98
-m4-checksum = f24f0a0f71bb5241f8bbf5cb75e260a546ee9206b80478544944053768fae77f322839e78d5524a2bc5cdc06fa921ca88b1d366ed3c67b745cf55df3a30de158
+m4-checksum = 3025f1bc2f645d0fb7ea3be4788d4670c8aa7901c8afcd90f3f04454b80fe855ce5bb036061ea3d6e800f58cb3721efd72cbf00a7598ecf931377c43e41d1508
make-checksum = 154a0247297a7b0131ff63fa8636d651b33aacc8f4a0dad1db176995b20c2039f4fd58eeb2ec27cc0ca7a95c1853199a4ee35a14afc5084995ecc1d694203412
mpc-checksum = 76e0720e6287d8b7a3eaa09dc5baa5a2b61dde88198c9e1bc9c458a268a44035d11fbab1c8019501a7ee2d5745c7eddfb0bb3c7297110a0fd9e027acb42d0fc3
mpfr-checksum = 40066bbbfb394ad4fc2efcbf633542c43fc6e31e3503d0f8f425649c95cfd6aeed78e889852bdfe23f783b5b13766ebdada9c92e6a921d84c6a8703123e9c165
-nano-checksum = baac691afb7e1c956fa0be16a4857cda9513180e5b5b08d55745f5c5f53ada954301e8ab0aa12c46aeed8f984ad3cb77ea3029ec8ede9dcc76d1c84a9e640a58
+nano-checksum = 964ffb246e186ed865898fa29c4d39e869092c84685312dc00feeb4bc72ad019053384a79d7155a6fc396fb5f8a5d16fb894d1dd35fbc71563d3a52e79351f27
ncurses-checksum = c94eccc1b23a9c6ca9b27881674b19802942802cf21084bd80e45e0b9e50a2d99e0e18a1ecd5cf3e686949982ca93132a7fe2f117a7c4307283db5012b11a2d5
openssl-checksum = 7cf3cfa3a190a8944366393942faab0813c8443dce5bdb8bdf11b7cae3627f9a3ed2698c6785ef4688c42df12983c2a9ce932e58f2e3691e752589dbae5ea363
patchelf-checksum = f74409c00e7e50a88590267fa0c173f71239f1471985792f7bcdab750d202a9a25383c015987608bbcd6ace5b3642645d46dba63199ba54fabbcb51ae7fca8f6
perl-checksum = d5c782948b97b706fe9650f6a9995591d9b90da3a98866d1db4d20025262d5606f4133222be4b96cc06578323db03759910e96012d8931033feaddca0e156e31
pkgconfig-checksum = c37ab9336ac15a73bf5a23101f3fd8a04810f39b0679634e420e5d7bbd60a80cfc919122694cf83965beb071d2780681efc8d954ce99d77eb235a4dc7497e250
-podlators-checksum = 2e1e8547b0c890101a9fb8d80807b164a0a708820617a6826127930f85115285a0e4d62ddf8ce2401df14c021521a1b3ce0cad0d308e08f7b3d0c49d1b0dd36f
readline-checksum = 349248d78cfc1deebdaaefc70a044835139cb8775d74bb33ae2a2600d9daef2b169608a8f706fc803a8d95fe9b309da1db0c6d19fa78eaa67430aff5b13feaa2
sed-checksum = e801dacce45a08671e65897f85be0a37a29d97f61e846ca17ff870d3ab9f5a639dba73457491087ff637df4a81099b864d2496d59acf17a07916b43bfe0ae480
tar-checksum = f8d0b543dc4a2a57d61d8a183d7a64d611d11f033c64683f022a7f1f956d352d364a959903a2549ab1256c1a068de51052960cf34a70f355b80e237f654bfac7
@@ -60,7 +59,6 @@ valgrind-checksum = a99e09e6d957ce435e64f4ce7b1a14e7e266282578171ce4e3bb3f405ce3
wget-checksum = 75ba60150baf673def8ff5f2688af57d89d699f1b5105cb1a6bc0ce88778be191c74757665d773ac84fdab975851ca9015b30f12f31877fd752500efb49e0034
which-checksum = cbda59450d35c2fa04f9072db43584ff745844cdb129bce1a382eb50bcd19815f0bbf12f2b03f748cb3f585acf0a16eb2e661b71f9066469236d28e9fa40f168
xz-checksum = d897a55ae5ee7d778c68edff83c53e6624619f233acd529439fade305681d07b7665ba1d370cf84abb38c7f3f8f88c3d127974c4f59667843814211802501080
-zip-checksum = 433eda6a27074746a960952fa3b08028d5ba43fe976a1306dbace9209be5f89aa0554b17bba5815cd00984c0f64559c5fa0b754b620f6d646a2b145a8b599acc
zlib-checksum = 8f0b28c7d0d5d1906c2c03586f4ad3188a7c7eb73d25295a7acaa88cdf87b7c82ac609282b9b12d2b4d5a368169e4bb5f88ba3b840b57e1cf32c78f2ee3ecd86
@@ -92,6 +90,7 @@ emacs-checksum = 91313dced8cd74f9e4a996eef42806aad00fb2576fc77b3694bb7b670624b6a
expat-checksum = c006dff4ee90ee3722df94ef227cfaab3ee4ebf7ee8193a65b904798b4d185e89c863c75a1e8eae9c120bfbf79336c1e31a8b6aa3042f4131b9a1eb0e97c6643
fftw-checksum = 28bd2f620399a415181027d30d7ea193aa487c7a277c9943d0051488908fd87e2731de0dfc3bebd22a6121d1deaa46037be8296a8a9cdb711f9fde4510c3d368
flex-checksum = a18e0dcdd21bd51779fd70e5efc2d77fa7b2a56d4d0e929d8abb437f86d7fcfa2cd09b8268185698200866dac8bec4444c5a7cff3140c515eaa49fc77c5aea66
+framel-checksum = f93203bc7cebb35f2ef356fef7190ae6874345643ec35ebe7db22228fb1f0182656fa03339c1f749381ff875e7955f9b98240bc5b55889f0d97cb5db48ac5456
freetype-checksum = fb2d89421633a56d4276b192106d930c9f29cf2b70c52d9e13ba0c6a2679b6f69c20ab9f14480522992c263b493f198f24593bdeddb5806a4d801ab7604a5926
gdb-checksum = 4afd6660d2bbc4c48ce726062fb42217bdaa5974774407358b2624036a2ace48ed853746e4d6b83b9a409cd8fefc622b0727c79da8826e28e3d1444fa3a9d148
ghostscript-checksum = 516f7f3bf8650ff5cf5a913ac1d69c196dbf62de97b77fba75fad7cfbace5c978a4aff7da0ede3590f56d68b240398ee17a1a504bd8e8ee76a4879b0b3b6a8df
@@ -101,11 +100,12 @@ gnuastro-checksum = f777f84d03cc106a12373416ec3617e4c598f7642f6ebf881fd59a3068c8
gperf-checksum = 854cdb24337f14b0d4199cc97c4a1d2ec7f953ad8125a47a932d93f79bdc067e2de231859ac0e842f14b1a8d80c5606fdc2c295a370df5e85ea15023b478805b
gsl-checksum = 9a46b431eed536182f31e1ecad781ade214ac8bd885ac88bbfd02b6e08482c294775a529e561d358c1f0211d8d20db4ec99b448b9006c3bf7599c076d3fbbcc3
hdf5-checksum = 58d6d9a1c201efa0863d9c31d189b4d40b1a9b1fb1ab9cb3fdeb4463f508c043e467aa4d44484c2af111d4e2fb775223286da69568774e6edef285208290c67b
-healpix-checksum = c11949e92aae9919fd41de91cbab72beffe2519c1203ab153ba217c6b6c81f2c10ceb07b683da0d04fb53ef5c80a9b208bdbb5379f379b7da9d0611d2430cc8e
+healpix-checksum = eae764ede6b540d661619f4a1eacfb3cb4c6e3115bf696fdf45734ffa5c78bac1469dba7ad960bc6f082952dce8bbad54bc630ee7674afee1647cab400a750fb
help2man-checksum = 83dca38c2020c85a66da882cd994b4e291eb6a0584149b7b3a74fec1444399ec5ecfc6296080fbc34071cd9f8ec5c931e249fde1f755c7f40930cecafb3efab0
icu-checksum = ab14b52a3fdf2dcde6b5160ab7218eac381b850d3c278324379741c49d71fa6040fbacca94c6937e6c9fc15843761121deff302ca6854da5ca1cd5b26a34e839
imagemagick-checksum = 2132614540b7422c9772fcebe7e8e358994efcfb53d8e48fa52992313b09b191847e395bad305322c377a4697014353bb8c15adc4edfd712e038504fc7f17c5e
imfit-checksum = 15edd2349232c1c8e611b31d3a46b0700112d274515f54d0a0085bb4bfa6d3d5f8a15cd926516e043a29ce841accf3534ae58dbfb952d858dc9445199c957096
+lalsuite-checksum = 330f2576698bd3107621d49596da66c7629d314e5744b3a267b3fa346e7926bb255979506627abaeeba62ff9a776c6091e9150ab5c471c3b4a43bec40a1a5de1
lapack-checksum = ff670e194a1d8c998f05e6143e01a09e6b43176c511217ea3c77742afd9f2566251c50fc23aeb916442401f7118c1d1fe21f0172382a7f4f2c516c1d7d873e24
libbsd-checksum = 5c7d98474000af1271a36ab769e54aba41578e0b0f06e47af2986d6821b6586ac430ec04cc51b7836823834dd9d0aec9f4ab3af088b94f963b89729fa2cc95d8
libffi-checksum = 027416da7066bd36ac0c9ed8228693e5eeeb5e11dc17afcd7ed7faa66a9e57f505e94dffaf18f8978e6b40964938d4289aa3b5fe8778abe8fb97a68138b8b120
@@ -118,15 +118,18 @@ libpaper-checksum = 8532e5e95b53e0dcb2b2c4c161d3840a34087b5870d449950a853dc312a4
libpng-checksum = c4eff9a427302c6f228b93a5a6b74d1e667439ce77f20c086d91ec6efa932a0e7f5752b976f4af5cd07574c5e4999c86e2b9cae3e82cc448ee61f3d0dde9253d
libtiff-checksum = 72ce12ce317ab2a5c188d3aeb575004eacf890dcb2729e9cb46f73c15cde2132624b4e229539af01626e59ea6a4a7380b4b5f90d5fecad787197b8b901615d20
libtirpc-checksum = bcb6b5c062c1301aa1246ec93ae0a5c1d221b8421126d020863517cb814b43ed038fb6c0c2faf4e68ff133b69abefe4f4d42bfc870671da6c27ca941a30b155a
+metaio-checksum = efc7f052c550d1566123a8842d5f6237b330d8fa7b012b276117bb2587e4df08a603cdbf22149cad70e7725bacef57f5f396ab3a2965446b940a0665c12763fa
metastore-checksum = ac1230686535a652e95024abaf6c5585bdab36f4e092bee5fa4deff2a913cd60f3a6bd8020c6887ccab97f0da3a284a0d4619fad5464a269e7b2040d6f7e6aaf
missfits-checksum = 32727f5eb30573a1cedacb8900e2536867e4815059eee32e64e3db65be9291b8a91b9f45b2c9f3cf6fc2a8cc448012ea3d502bdd9dee516008e17d5086aee795
netpbm-checksum = aef81d2e46850fae1fb34a38fa9f634be3c47c7c4e80f300c61aadd5532bcbccdec636e6c701e54caca67ac2d6ce3a7b6a9f090deb00cd4db718439986f89d8e
-ninjabuild-checksum = 3a6bfeef3ff1143d427a658d2d4119e4c9d85ebba37393760dd7a6dcce1c4a9e217009b6600b5a72338edb34680f0c45dc07b6b09afe1b0a9eb163993f2bc41a
+ninjabuild-checksum = 381f63e6b9d2b6863a35ceedc3d07b81a6b41d7539af9b4c3fae859c34a0f4b68340e5579193abfc221b0e4f413dc20c7caaf70480147d93ca7ade497bd01571
openblas-checksum = c87485bb2b74cee175a6e631c63cb52fab174a2275d375c00680c4cbcd8d12a116223fda0349fc677cc9fe49794ce7b0342740855840df491b6141c8f2f4784a
-openmpi-checksum = 88c73fd708dd5fe3a893d5517425a8a4c3e252fae4715df9a9b0f2311abe94cf5f71be92f153820fbaeb32c7d0ac0175d5165bdadcadc731427309102182c1bd
+openmpi-checksum = 8480402a75c27e73ef51ca8410c6b527fccd62029aa45f36468e0c4dc0e5281f161a8a56237a1cc7e107ba7561c47acd63630e7bf8560e87bfd357c83c614607
openssh-checksum = e280fa2d56f550efd37c5d2477670326261aa8b94d991f9eb17aad90e0c6c9c939efa90fe87d33260d0f709485cb05c379f0fd1bd44fc0d5190298b6398c9982
+parallel-checksum = 612adb4da6304eebf303d40f620c5ffcdea57c7e67ef9616efecdc4fce28041257c955a5d3a35135eeebfa0446514731716e729be865038d4eee7262179d56e8
patch-checksum = 75d4e1544484da12185418cd4a1571994398140a91ac606fa08dd067004187dad77d1413f0eb3319b3fe4df076714615c98b29df06af052bb65960fa8b0c86bf
pcre-checksum = abac4c4f9df9e61d7d7761a9c50843882611752e1df0842a54318f358c28f5953025eba2d78997d21ee690756b56cc9f1c04a5ed591dd60654cc78ba16d9ecfb
+pcre2-checksum = f6c7b59fe0195411eb25c63ed67b8921845ba5d9ce56fe538f654d8030132073f2ad8b166d3014d1c78951339c7553203e22c6aa1c92a0751a88c9757a208f52
pixman-checksum = 333732b99994f7ea636d647e0b6123075351b27601b5b6370c9bc821a1ab3921386ddb92b51e015f3fc35104ba09be1e0d7bef47f0b4f73036b01d1d70396dd9
plplot-checksum = 2c5a36d84ebd948402c924d304427b5702bc75bdd22753c9b3b910b382dfdcc26910382aae452f02d86b25c1c813bbe1f40c9305de1d2809d575975f610fdf10
python-checksum = de940d7eceee69b8a04f12c613753f61db53ddac1c5cde5388dd342e88a09bae8da1f56b71b96f20997f6203d169e92e9e2558c43b38dbc323221d7bb362abfc
@@ -135,14 +138,19 @@ rpcsvc-proto-checksum = c3011d7d7ef97a4a751f6921df1a23e1dd8ac50fb0690c759d37010e
scamp-checksum = c7a192f357c6808acd16d1c5d2657c5c8c2f61e4fecb8a4b18d39b07f4c444f85d5029c21571d41ec3ba9c8d075de8bd660b0e029bf5dd63e3819e963430a938
scons-checksum = 0477038b014674049f12899b64584d44a85283d521b2422561e42020a5ae296a5af005684087c3ff410ed3fcbdcc5ff61998bc429eb29513f2a864138ffc4945
sextractor-checksum = 4035710f9b8a20a0bb1a3913dab2dadd8444c179bf6dee425e0e8bb66a772944ea189bfce89fd791d316a790fc4b2cb15a62633b19d1d5331b1803dec2e70af7
+sqlite-checksum = f27d1fc39d3505ce85892bd9d5ef284c7f6235a1ad473a2fb0ab8c221a3a450aa572d1a9e37eeea66ad615a7957e3326400eff5f51854a389e0f008d33879276
swarp-checksum = 810af6ea0a2dfc7b78b0f6aaa486b80c29f517b90c29f5037d05f31f761e96a55c8b5dcc259e1b435b25f45f01dac45ddba61da84000a69676cce119880bb05d
-swig-checksum = ecb1d940f584c23df036a8f77288916003f861851dfdf836ddc5bc45b95312f9259150084191c1d9f086c006e64e12a4db22f7ea382fbb71667b811b8f99995d
+swig-checksum = 7db62945be0514e1196750f6e00f48edfbad1524501f72d646706a6b3149bceeb904ba28dce73f8a98a8d9b9a91814492482aa88b996366b411e8723a9f4bf4d
+tcl-checksum = e7e40a07d6c7d0a4c6a0055c36c12c1303167680768706f53f981aace063c802486d39a715dd393cdca0371757c34df2600642472ae36e7991d9bb70674da8d2
tides-checksum = c3360ff0d023b43749ba09a33302ca059f017a157b3ce7cdcf4f1a1578e90d3e7fa420077043adbee6b1ebf94bd698c8d6b279012f36d2a05b4de5351e30e108
+tk-checksum = 87d431e4d995e78839fc5cf23ab8bebdd783adcf0c8ee1169cd7166aaf4884185ca3e72dd7c7ba6c55a3018d3529b036fde4dbde1c076a767fa5eb2668db5283
+tzdb-checksum = 6c0f7f24f08dae63900499ff55dca5775fb687d76451bfdb82ec24aa4bd29263fed5e0cc3efc32ea54eb2dde80cc17e4becdeb3d70b1f63646dd52a5538dc632
util-linux-checksum = 3053377ca3e399a12ea86ba96ac38749ff15a42e76742ab4346eb2f96c8b24564077db44c5b173e8474c8770846dc355b1281a697ef5a168e239b1b6d693469c
vim-checksum = 85d083fcf3638f2c3a049b88da46d569d6a250ae132f3821d440c07c4792befffc09e4235241ca96d7b0307a1bb96cd2222ac8a63fb41c6add8c2bdc6c17aabb
wcslib-checksum = 68f40f268d4a4d6d052e444859070138f90f17fb1723cba2da88293b5f7a372885461a09da1ca0ba1686d08e7d731cae52e305b65a6f5edf13586f48a61dca55
xlsxio-checksum = 22870fda7bd4eefd5fea2a9ad7530c9049135129d9b69805091777e6b54b2fc6c3f0e69c6954f36bce54eebbfeccaf637cce9e271a593221a4296d6632470a6c
yaml-checksum = dadd7d8e0d88b5ebab005e5d521d56d541580198aa497370966b98c904586e642a1cd4f3881094eb57624f218d50db77417bbfd0ffdce50340f011e35e8c4c02
+zip-checksum = 74966fda50ea18b28a3bd03e91be3a75a9034cd923149a321e4cff3f233d696c4079181a996f81fa62ba121c4beb6588c31dea682e174b18b858121b72409ea4
# Xorg related packages
fontconfig-checksum = e71c684ffcc75015b1aa13918d6598a213b926630317e4babf876fc503e0444ed3211277080a08505cc26da033ee8e673bf5e246cb9d75d2fbe18a43160a0dad
@@ -172,7 +180,8 @@ xtrans-checksum = 84f1142994f93882c9c68a4a85a218290c1c979162dbd4c5ee6b6becf0f96b
# hash here.
asn1crypto-checksum = 44d442a6ddfa971e31e24712fe084368356deb5e1c4c3b3e813e0910931860215bc1c4f9eb2c4bd4fdef607c324086c096e9357068646efd28c97f2d4f85c62f
asteval-checksum = 4d64900b2f7dfdd098d6c8c102f9d9fd46f9ec265a54330e7d94479ba41f0ee0698855658e18b8b32b9c255159eb9a085af5f0306eb6508663d3fea7d2e00b4a
-astropy-checksum = a91e327784a6ce0bb55119639e52037db0d802305dafedd46f27d9de96db819b43e336a4d43558a57e57459c4d1b7d6d3fe290771006e061d3779034f089aa9b
+astropy-checksum = 9c32139b880934f6fd82c47cbdd201b2c934bcb93216136bf24d7d676f2acfbc81e08f35e7290fc1fb9c49ed2c0f4632f0b5182b86bffe6d26abe16b52f2783c
+astropy-healpix-checksum = 685ec136eff28fd25ce67403f932297a8297e2de84d527890a81ddaa9a6bbbc70922a204c08225840b03d3c6be8af7476e01d4f87285ffa71b6d7d19493fb332
astropy-iers-data-checksum = b8bb1aacf67fdab241e95952919a8691db09488493d0e4ea6eb7a65822c6e4bfb7fc55d4ee2f6a0e9e563fb671d16b06474d38f0ad4d3b0f41d6dc341dc7ec7a
astroquery-checksum = 43846791d8469a26cf6bb8819db58b830cfe50a34bc0091c2e843dd7dc78b1317530855d432a3a567a9f6a6f4d2682382a32edc91ea01716246b99b3625ec521
beautifulsoup4-checksum = bf8fd3e54da63a506f294f0e5f1201fd46bf2edcc2db23e99eda995313b8a8d24db3cd2d1903853c539a9320bfb9eb4b29e311772bfddc0d125f0b4aec71e384
@@ -180,7 +189,9 @@ beniget-checksum = 32a19d77323a0a21544ce7fbbb71cc5f4c66949dba280d81deb36f3836454
certifi-checksum = 6a6bf1ff98caefcdbf78a8c83e11e155368bacdd806f0ae0c6afa8f513667df6598e594b3584de61acdca3d6049f4a776937f2aa8672b602bd6db7b737f6074e
cffi-checksum = 50e2b8215ddedfa8f1d569680cc0023cf061c2c52b7b86b6b26ced56e5107b362aaf6dc10a77b9dbbbfca2e5611f7cfb42c59501f9ab7da29fb3ad3ccf418cb4
chardet-checksum = 61a03b23447a2bfe52ceed4dd1b9afdb5784da1933a623776883ee9f297e341f633e27f0ce0230bd5fdc5fdb5382105ab42736a74a417ddeb9f83af57455dba5
+colorama-checksum = 0cc6b4d622a2a7bae2903bd8773182674bb8d9a654f9105231418b28f585aab30e0ed8c35aa0494ee1a81c024381bf90654febeb3b16eb78b5e1fdc421d9773c
contourpy-checksum = dab72dc7b9c64b1c06674ac4c7ba4d1058bfa5922763087dbe9d30237fe38045201e3801423541cc65ef0cd6c92eb5f4ffb4b6ff8da21d79f2f23a36ddc4bcf3
+cosmodesi-mpytools-checksum = 0d25d990d405c7ab829ce27e274a158defa33d7c3fcabf6f15098903e0a51f6029271e167047427a529b01fd23ccdcffb060af53d6254f184fd2d0de365100af
corner-checksum = ebd625ab1e4591b4c21d25ec706c35d37f560b727e1e0d6a79948c4a112ee6f21d3ca30162901a27715074e1345f3bdee1a0345c63e5fec24113e495fb094127
cppy-checksum = 562b41f22d2819fa7be65ad7d05b18afa9646999277df8a5e6399c69d66320ed0119a5d2653de5711ccaf65360d55fadd85611bf2f7c42348e2f74fbf4eed45e
cryptography-checksum = 051b5007512521638981a8e975c7bbcb688b1a1c384babc81ba105c7bc2a7e776a8bf46af5939627528b2b57d99aaacf215a041018c47f6d3ae6d7a0e8eafccf
@@ -190,62 +201,87 @@ eigency-checksum = 1e7cdfc43071da5edba30a0d32cd655442b516f15c166b049a195d151dec8
emcee-checksum = dd60aace8879525fd3fe42b747d82170b24b2ed21f538f9186ba96b9d04c084812e3303f5d2e04119dabd2f9d3286d510b4d4a5324c71dd24b1c7e5f0a9a0ac6
entrypoints-checksum = aa1274362d3a4b00266103319ca51aa266605b4999c89a9d0673eb61bfae9e646cb0ec6b86c95544493f6fe048385a2c7641d64adca8f45815546fb1e663c858
esutil-checksum = 7f1f22b0a05855819e3bd9bc2eee14942c2f536fb99f4af03575eb41d3d3fd1d2e6091ad076bfab4d51a8f30e213b607af35ed00d063fb2895b58f7a57cde5ae
+exceptiongroup-checksum = 4ee3a8196deb7a3ef437a7d0e837313b89226ebadfd9fd294371f32b1bb35c8070236b30967b33fcfe0291728f4b9dc4b662c7eb2ac916253a2314dcf292d188
extension-helpers-checksum = 3a8d971e33542931754baf1626141b6407c11e98d58088f9898aaffcb2dcd9592adc094b236a7fdd74837b6aa4d38e7191763d7a414fb34d6e923985c7db3534
features-checksum = 91b88e02ebcccfaac9a9cf4b8f00e177880e119287514c781fd591c06231428f4f7aa479bb9ba74f59b2544f12ec08061486f75bf91aac8480d23bdc91e2c511
flake8-checksum = a25076bb7f978ca23af0f2016b30bf5fe4680371b4c0939361a6f8c496f3c846cf98ecadee35fc2dedd588116c8cd982529972dd2411ab139621912b69132a1e
flit-core-checksum = 59912228fbab70435a438c978c2cfdf7c1fd4e14f45ea223c9b1cb58a56b86ef932b42e1fcc69cadf3fd5c8ca52d407a99428aa874d58029fcaeb2b6acc6bbd5
+flit-scm-checksum = 5f5e9ee88b62bab18bafa842d91181d46addd8dc874e64e0dae7d9a99ac2c92ce00bf92ba9be1aedb0464272a682b9dc58ee7322118710259b3a88861112f57a
fonttools-checksum = 3bec5dbc51d93d439a9cfffdb45e1de4d1b79d6bd91c5510eaf4b21fed077648deb6c4858c95222f93bfe5da1f9c82cc57e8b3df67f214ee29425037f1261e22
future-checksum = c70565a660cf87c5e7e994bae0d4eb0b2b8b607ecb5ce65521c027bf0a39ce5699f0578413bd3c7edd5d01aeb1617de48dcea098a9e9021d8487a73007573030
galsim-checksum = 65393c4bcf52a3e723604a956aac5f58f490e41c7d5ddbd5d61660658738e2496aa30f632d4d83b765aaf1e46ac691fcd02fc827380e07c8f921c160a9f6a6fd
gast-checksum = 8311f48788daf060bee54ad8986eae054c2a426adcf97f1503cde37c4da2827cd0f664188e51f5c2f932a0a4ded78166a8466465595a640106060c8b6c7072a5
gpep517-checksum = e937f18c9593c76c15f8b2e77143aa11a0a822b1ff686860d5539f4418b02ca7764d71dbef817e8fe8453f9bf3c45fc2f97af1244cc30068701347f584ace91f
+hatchling-checksum = 863562fc9f74c7c3c48dd51c0d5e834c19bb9c65490affe0b9da057c8383fb9ec77f9db4e76034b828ae6405a80a15aac05ab545b8019be802e9ccfb7aee8410
+hatch-vcs-checksum = a9b1a1b445d6d997524023e987220be6dca2ef696f017987664a1900b67643d9685e32d9756a5a8efcad03fe98f7493cbd05bbf3f3527f46eeaf2855f047f2bd
h5py-checksum = c49b04f7dcddf03f36d4f063d79ecbe544e0b1daee432d4a76cfa83dac3a1f2cb144f40a74fb85ea17cb5b778f57f709969ea5d1a2afc5bdd5aecbc9d732898d
-healpy-checksum = installed-with-healpix
+healpy-checksum = 46b78a6aee45e726b6ecd636ed9283612990e8057bfc08d37c77cb460f7869551b11ad7268f0ca420352b650c9008478e17c7bcd1039da2825c1ff1609868733
html5lib-checksum = 35939b4450893864da04e735ee5e0addacf1dd34bae6a6909c76572abf6bfded446a78a713dfde91c1485ba45867d7abeb6a45cf0545c16ea968707be7de5dd2
idna-checksum = 8ca5cfe6350c51250bafdac7c6e4ddd54c4a5d6bf7acbcef896760a759868c8e9df1fdf550121d8512fa3eb316dcf031ec6058e03b4f66eadee21b63e2187d33
jeepney-checksum = 43083994a7c6af84a5a68d3ff8f6dc4d9129ce9fa55517838fb62d9f62bb78bdf52067649d0b95d08d689b7d7475cb9b2a956662e265a776ad42dcf4ccc0ab63
jinja2-checksum = db19498dbc9bd6419b474fbb465ce8c689b96f72d33ed1a31cee3c42e2c545dfd0fd5bfca610075e2e126fbdd27300a73efd76fb7ea449727ed61a6127806dcd
+joblib-checksum = 62f4dec7760395a18d52f7daccf99cd5cdc2545f8e7698c6224b35d13b24f7cd0e9505d80eb1a51362ae9eb8c0b31a81f9f3a1038164bbe2ff4fd99aea50f108
keyring-checksum = 3863f2cd89131d7e927e55691b4eb4b7c2599af189525293d0948aef5215efbbbd74d45db3cd4885ba5b18a79f0fa0b0edc3783a020a6702f6a6fb7ed86b2cf2
kiwisolver-checksum = baa1e6b8b31b8000e51cc9bdacd57be20c3030551782fd7989fd473b15d225f1cad6309fc846d2ba07d7a7abb729151260a873d6beafa46d881f4fdddcde0f3f
+igwn-segments-checksum = 4da828b5feb93f42f79d1f39faccf5fc70fa70890bebfae077e2c8b62af78f70776f0687bd17377b080f19139bcb4bcdc18c3c902ba9e1fb0cc2e135f3134bee
+iniconfig-checksum = 384fdffd648b07fe3623a26065d1dfaa763e121995dd14490acf845853b57b341cabb861355aff7d8c7c8ab5b21b69c2eb52ec203ea644564d4601f63d85326b
+ligo-skymap-checksum = 9fb6204b3eb2bb44d26b476d166770c86b15b4d62a2f024f7b8c13188d0a4b5a682426ad4838a8f90e2467a535b3a7f398d3da6039425fff7d8a1242f76c46a9
lmfit-checksum = 8435328fd8baf92b424299c341aafb995dc45245e17b1774e9eaabdd994dd6ec3b2e70f7506d67b587631cebd2dc584fcd1a9902286925a61e2135b7e11ece21
+lscsoft-glue-checksum = 6082f26f12c16188cd216abfea580e4b23cc93a31e50cb3e0ea4c3875c544658498e4adf4f9d6b7da66f19685a88d2533dacbc3fd5aa1fe6984a31b37dd18cc9
lsstdesccoord-checksum = a66b8b702cd8122f0c8aee05abe0fc0c6299f8bdb99b151f54bd7ad7430d6bc9f843f7294a7f08f3ce9f8606ea0ced0796a63b79cc8a53ae73068b691e2e6871
markupsafe-checksum = 4bc1171f1dc86516d6002d6dc3df2ccf78481480812025114b3a1511779b152a605904f0dc3aa0a6c8c282111a74564891a2b02650f90c44b667e5e0622c62c0
matplotlib-checksum = 2911fa5bc27d082aac00131f012503572f21228e0da49622b57d1d1a53eed942fa73a3457ae09efd03d09cb80172e2c344eacbb85234287be085a749622f9505
meson-checksum = 6ba8af3a835f24b12e105b90948177964930274fed7d134405b3852cf333a4cbfc11d955778b87994cd9ece57a0de424483b40cf6e43ffe3fd6d9d249257f04c
meson-python-checksum = 08ce6b89f4dd898ef4a92f9b358080aa8984047c3c8b1991347496a2e1283f357424d2d19a1cf5e03054e9dc0750773f2936f5eee2838523db2cedb783546477
-mpi4py-checksum = 68b1d4ffaab8425ed3eb6c4adf2c008a489d4086eba1dd042c29cba29c95f790d49db9c4bf2870c677f5d27e6e5103781a8113ade6e28fe6cea655487e5e07b5
+mpi4py-checksum = 14d8ebe9a97841d7af493c5d9ee8b5dfeef4639887904ff730d27c9f2650a9bf0bb182847ec3f089a20bf9ed32041dfa826780f3e21aaf24714138c505d13731
mpmath-checksum = 58c69a801f65d73cc0eeb0d2c79277ed638568c656e7213d06ab4709c218aac908b2752377139010bed0e91bbfff01d129c60835ff0a928ba1185aded6de7c0a
+networkx-checksum = cce23a1c8ebb00dc1ff260e62f3706ff74a471ff7524520cc50519ba45e08ce4793569328e02e2ad5439fcd73dd8709e8a37118bdad11c084b794204bc10c22e
numpy-checksum = 139ee0c38aa9acf4ddd6d5fd14b3c6c6ff3275b89cd3925ce5c528f58d9dd0e367edf77827685026fe10f686ff662bac95b367249891d4f2360fae8a60a8dec8
packaging-checksum = 0f0be603c444b20917c7a36e1356bf161a958d7326bc47198bb06d23283017e04f4b3be60eaec66a865bb9704c717342a2ef55c9069bd8ea48bd1810d1d424bb
+pandas-checksum = 6d3fd74c240cdfff4ec25f5f5309e91120fc6eac70bf16fd994ad3d6702f055a5fd2acf53d03784267bf843faea97f660a378760e88bd3b319585aa74ddcc85e
+pathspec-checksum = b9bb195a277a8e1138fb780f5b2c11c7355674a166d0074384dae0341c80547be4dc6e4db9a66e044c9fb1f4d6de878727283d768316957fbd4e6f82f6e8f3ee
pexpect-checksum = 4cea4229332c1f3de26dfcad596877665b3c02e91d51ca3c45c1f9b44462adb7c82abc7b76eb09a73822c2d1ccc9d812574cf79bf6bc8fb0b7d2f1093962cc3f
pillow-checksum = 5134db8c35fa66c559a16e7aa3f341e00c7d21e90d4906f5d95f3c912d804aa10fc8d8ca889677299d1f5431b421c4963d3420a614c7587bb43e2d7079278913
pip-checksum = c6e13da3a57462371d32982c80575c5181592f5c6a8e70d60ec879e689442f4ad468e7aef97eb58c9da50a5a770385aa35e701eefd713a8e9fafeb12e11d956b
+pluggy-checksum = 3b08f695c2a8197c07352c3398bab80e38eecb7a38f5a1d87fa96e48924137cf5412ca49b505cd259788a502cd89b90a436586e7cffd10f3ea61dcc4680274b4
ply-checksum = 29d3c4de42a74497083dc6780fbfccd319bd3be8098a2a59ea733988a159e760bdd0eead3482fda33a4e36d2b9b88916f9f9408db2fd3a6b7a0c51269b024485
pybind11-checksum = b877d8d66b2c47b076224bf8e8414fe889f4fc3281c440d6d097edfad0b7a8edd9fb15e04cc60932358232ebe6c14b89863f4736aa43edfd739f4605b6fa6f44
pycodestyle-checksum = 84e751a7d00048393b02ca743de5d71d1641e948ee1b4daebbdf2d07e0cd8f087ca4e81f826061114b40ef41920bbcd680c9f479e7cc1a159a70188425717208
pycparser-checksum = 7f830e1c9066ee2d297a55e2bf6db4bf6447b6d9da0145d11a88c3bb98505755fb7986eafa6e06ae0b7680838f5e5d6a6d188245ca5ad45c2a727587bac93ab5
pyerfa-checksum = 44a1d3d714a72b9aa66c9f72f692ff46b273b25d3af2b05ddced62305727f23891b6c63a2ff85fd99f2e2d1663da6da995fef0091c541523867100c72c6a18ca
+pyfftw-checksum = f6d23145e3f4a9a18b2f7a6a32480dadb53c2d5686fab9dfe4d7c44d6cd3f849ada6c8302593bdbee8cdce819577810d1fa6c79f8872314b0b4e3c94bf9b5d22
pyflakes-checksum = 7ebf5843b38146305c1063e070480fea8ec3b47fa1be546b1fafaeb242a688a5a001f978e7257fd71d5905b9a338b466ef17c7330725191587e9c40ba632c3f8
+pygments-checksum = 6092d2922c44889df158e08c2c7e9b755ae689689b45661bcc544e60265e93803b63cfc55cc348d7a826ad3535212f60fac1e6f000b276c114a25bca489d6923
pyparsing-checksum = 9d10454faaa0608eeb739a36a001f76d433c8f2ac9c7f40e9d1de5a9431b99e66a00fbd1618901d2e938ff36f752b77fc6782328ec08413f6d018bf6e5a420e7
pypkgconfig-checksum = 1fd9aa973bd20a8fab864722598f1d19b94c23c7f2b522556b3182b19fe016bda7aa2be5e48a1b8fefa70a069611007d6d790e24defcb462e4594a382de85b00
pyproject-metadata-checksum = ff36bf73b6d10331d0b58af473a6af4fb4c67b7d2f4d567c36dc75030b6765e4640261041497b7660ce538a5a5baf11cd24acad6752ff45179b50162987a4005
+pytest-checksum = bccaa8b8081cc4a1630c5683a6aed7b33a19184982e64dadf7a4fa4c626f56f78c5d4e71479087f3259e8fae8c44f0e705f8703cc948cd54069825a0c6b7d4cf
python-dateutil-checksum = a329abd60db1b3f2ab4cd516c1728c3596831ba7f7ba21003da7a39f7fe571ef38338125a210dc2931a0f1aae34b15f942be148095e0ec0d9a4c10389673c388
python-installer-checksum = df34826ffc192547e5c87ff03e33e6a431d98eb6b9af6d7783963795204318fb69dce8ff49b757379e88ae6163c4802e43f58213f33b19d1d257bcdebe1d5e27
+igwn-ligolw-checksum = 0f76be08be9e85588705d31d96418d74e581f2ff45dbcd57dddbb3326e6d33237596fa4aba4ff4e5c5e6371c3ca800e543e1de50947286ca6d82b9ffd1aff55b
+python3-fitsio-checksum = 36089e9cefca372f5e26172a598259591bece7a4a70e46c55902432e6ea2d425e0e383f637fcc2b5f58acff5a5b0153a322951b645db9f375749740fabca010b
pythran-checksum = 5d2d14480149b044ffc159990d2a9b02a236c54c348a899929f11637d0545fee7bb16806660aab6e096a22e1f2e220e344084e5d9c96b2318e51c16767b26c59
pyyaml-checksum = 3f19057713a73586fdc73d54a6bd96400bce4edb4939381cbbe4be9bb3294dbc124403f16d880a4d21442df14ea4354231489cc2e97103360407f3936d41781b
+pytz-checksum = 4b00a7651cbe21f7ae62b188cff0d401d045aa8f293783279aa16916f855327256b5594a5027ed74be9a6b1ad0369b805ccda0948b5a2bfd8cb4a4b5b37a8ca1
requests-checksum = 385e1d80993a21c09e7c4682500ca8c24155962ba41ecd8e73612722b2ff6618b736e827fc48ad1683b0d2bc7a420cfe680f5107860aca52656ef777f1d60104
scipy-checksum = fe7c3ac114190782ebf2b155182597a78f36fc24a5de841380957d8f78faf865f3cb6b4feff2f601547240a7d09cf7756b7f9f0eb87d40e3a805e4dbc0714bb4
secretstorage-checksum = 295e0f75c772edf153480730dc20051f06e60e040a18f169620cb4aaa37b8c1a254a496464d3794a38cf49fa884a7b561fe364816f0d12a5b2622c77259f03cf
semantic-version-checksum = c0a354ade9761168a7e3a22b5edb10fab21abe527996266b02e1dc4d631b7f80440fc58a04c71708c1dc24317cb880f9629bff926b55517f798b680c8eb207e1
-setuptools-checksum = 9c1f68e63fda8e65654f9b04423f35e20c1a854cc12d012a3cc9d48bf14aff0bfff37e038dc98675cc246997cfc33af6ee80bde36fd96b58c7cdf917c68a5c67
+setuptools-checksum = fa112ba12b2323c909fd381b3bc9580f71284c9cbeefe194d288b51b39f327dac464c09925ec1354af41146ee08f7942fb18a2b4adf5a658637aa8a4c9924843
setuptools-rust-checksum = fb440e1c619c1b50b67686cf8fc214c88beb01b189f06d43848a31dac910c9c6a8bf915a621299371d8a5148469665f6c2704c4853d218f5dc52fff2b014b6f2
setuptools-scm-checksum = c00990fd7ea58fc246874c8216e746c2914a6adac2780e7596382a771cfb48a65a0114e04eae0ec12f44dbfb79ccb29a35ebc3c46a03caaa7399b57cd79c5e64
+scikit-base-checksum = add6d52875c8faa3409f234b80a07fcc31366968c5b66e8b90e24df3041605958e1e61bca30cd5d7409b6ae03593b202127ba10a4aa08bff9d674b9ec2788252
+scikit-learn-checksum = c68f1680884920b71c5fe2129b8e044e7999ed01cf2f24d1f5b844f2226c4eb56f49945559e27840f0ed7000243ca086ff9a401b1fca192bde680c884edc2ef0
sip_tpv-checksum = 5e03279cb3650dd506332dfcb31aa4a20f23f55b8a29fd18da5c6d422d1b7dc49e12362ceae2ff7417c874401b5e87a73ca1ac0f3c8747c8984e4269cad56c3f
six-checksum = abc5da98a94fc20b8f4edbd881497ebdd5d86f30867d7838bfe388fc35ff415b8973884e24509ddda7de1b4eb8af6ac5fe22e6408826b9297b217d3c53a5a6bb
soupsieve-checksum = abdcbb6a13563e7afadd3056141587fdc3d7d644e346f789bca0a16242d860219e462491b0c624b287300af960fb8e3f85c79f5137580939a9fc8c3d6961478c
sympy-checksum = 6ae09be7260b1624b4f92d39c68d5cdf54e6e33010d9215f46d62d989c04cdbee6f9f9c8b11ebeda53257d154954fb926b3ab7335b738e33ad248764875b6ddb
uncertainties-checksum = 5f09e75db2e4b2838858f2640a8427cd01cf691a6bec66e58f75125cb80515e2a7c164ef6d414dab2cb175a2cc696f42259729d0ebe4b4603f98e3f3ef9e262d
urllib3-checksum = 4c12d08076b0f260727d5aac780f5e9a24e0164755ff05b02a1f5a697876741ff13ba278fdd6e46ef678e8e1146bc39de1fc49ee10ee839229a70540a9424a99
+threadpoolctl-checksum = f9c979bde7eb5a70e81f7e97797e2b2260e3b7fd72cf5e1f2de9eddbcd70b96a533404fdc9688011988d78c7066d2388a0367d2383c5c5a608902ff0d84add8a
+tqdm-checksum = 6a94ded7ea339e0308816626aaab80337718e7176d0e402aa91fbdd2e61f4310dbdf0bb79013b76c7681ff38bfce78746b8d812866176e2f56f56ea9027d9b60
+trove-classifiers-checksum = fa178e060a14e1df95400eecb1f430354b4809b96c214eb104de33c77d95ebabbe70ab30546e331a7fbc33a3db0931c3dc6cb4283ad33249ea2bd549cdd0a5a9
+versioneer-checksum = 17bcb8d9029dbdff18b07d10d14ce10ebfb220fb04fa7ea057f0ba1e3923b756f3752ceba3952673dabbc9d563e99cbd3455cf32a4db3f3240ba2a9a34259d7d
virtualenv-checksum = 3306f59bbcb48ceec225c07083e0b6831379b3e632e4a23c376849559449de1a04db66e0e7ceabb40ddcd3ae984a2a18dfdc4f1c38777d4bc04537f85a0137ac
webencodings-checksum = b727b01bac6ec79bca517960d27b4c0668b295f25559471b9641c2c33dab55db6dac9c990952177964c6418382c22831b14d57df5e632d51d7abf97b61f24326
wheel-checksum = df45f00e9eaeae2f27f813f31591590c961da2f6bff15bba6fb2a14d529c221f39b29894b8da408fe49cd4b760840a0e05c4baef377ccfacd9983c0bba83d6d8
diff --git a/reproduce/software/config/urls.conf b/reproduce/software/config/urls.conf
index 3566d3c..f976930 100644
--- a/reproduce/software/config/urls.conf
+++ b/reproduce/software/config/urls.conf
@@ -52,7 +52,6 @@
#patchelf-url = https://github.com/NixOS/patchelf/releases/download/$(patchelf-version)
#perl-url = $(shell echo https://www.cpan.org/src/$$(echo $(perl-version) | sed -e's/\./ /g' | awk '{printf("%d.0", $$1)}'))
#pkgconfig-url = http://pkg-config.freedesktop.org/releases
-#podlators-url = https://www.eyrie.org/~eagle/software/podlators/
#readline-url = http://ftp.gnu.org/gnu/readline
#sed-url = http://ftp.gnu.org/gnu/sed
#tar-url = http://ftp.gnu.org/gnu/tar
@@ -94,6 +93,9 @@
#expat-url = https://github.com/libexpat/libexpat/releases
#fftw-url = https://fftw.org
#flex-url = https://github.com/westes/flex/files/981163
+#framel: 2025-05-23 from https://software.igwn.org/lscsoft/source/framel-8.47.3.tar.xz;
+# see also https://git.ligo.org/virgo/virgoapp/Fr
+#framel-url = https://software.igwn.org/lscsoft/source
#freetype-url = https://download.savannah.gnu.org/releases/freetype
#gdb-url = http://ftp.gnu.org/gnu/gdb
#ghostscript-url = https://www.ghostscript.com/releases/gsdnld.html
@@ -140,9 +142,12 @@
#scamp-url = http://akhlaghi.org/maneage-software
#scons-url = https://sourceforge.net/projects/scons/files/scons/$(scons-version)/scons-$(scons-version).tar.gz/download
#sextractor-url = http://akhlaghi.org/maneage-software
+#sqlite-url - https://sqlite.org
#swarp-url = https://www.astromatic.net/download/swarp
#swig-url = https://sourceforge.net/projects/swig/files/swig/swig-$(swig-version)
+#tcltk-defaults - 2025-05-24 - repacked from Debian/testing https://packages.debian.org/source/testing/tcltk-defaults
#tides-url = http://akhlaghi.org/maneage-software
+#tzdb-url = https://www.iana.org/time-zones
#util-linux-url = https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.40
#valgrind-url = https://sourceware.org/pub/valgrind
#vim-url = ftp://ftp.vim.org/pub/vim/unix
@@ -195,8 +200,10 @@
# But be sure to send us a link to the tarball so we upload it to Maneage's
# backup servers.
#astropy-url = https://files.pythonhosted.org/packages/45/12/a1c582b3f9df5e2680eae0ed82c8057ae06d6130a1f7a5c0770fa899737e
+#astropy-healpix-url = https://files.pythonhosted.org/packages/5c/8a/dfd71e4db13706383ca2cea0b2831eb10da2c286d4494f183f80fc03cbc2
#astropy-iers-data-url = https://files.pythonhosted.org/packages/a1/4d/b9511aba29d4330437497166a7049ab9bac53e344c54e44a35390724ca37
#contourpy-url = https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866
+#cosmodesi-mpytools = https://github.com/cosmodesi/mpytools/archive
#cppy-url = https://files.pythonhosted.org/packages/45/ed/b35645a1b285bce356f30cc0fe77a042375c385660ccd61e0cdc4c1f7c44
#cycler-url = https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8
#cython-url = https://files.pythonhosted.org/packages/5a/25/886e197c97a4b8e254173002cdc141441e878ff29aaa7d9ba560cd6e4866
@@ -205,7 +212,9 @@
#flit-core-url = https://files.pythonhosted.org/packages/bc/18/b9b81cab2b8f63e6e7f72e1ba2766a0454fcd563e7a77b8299cb917ba805
#fonttools-url = https://files.pythonhosted.org/packages/1c/8c/9ffa2a555af0e5e5d0e2ed7fdd8c9bef474ed676995bb4c57c9cd0014248
#gpep517-url = https://files.pythonhosted.org/packages/1c/53/e6ad6aa7036d62ac009986e1e5180465353344afd958ddc8ac15e3b632bc
+#healpy-url = https://files.pythonhosted.org/packages/a4/db/4d1e7fcd429151edb1e2c6d10365f86de217097e276c0b44dbc197028d21
#kiwisolver-url = https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf
+#ligo-skymap-url = https://files.pythonhosted.org/packages/f5/f5/fa82a88c104a9d1fcf863e05a56b213b512db05bc72b5c4f1c7c7d3bc118
#matplotlib-url = https://files.pythonhosted.org/packages/68/dd/fa2e1a45fce2d09f4aea3cee169760e672c8262325aa5796c49d543dc7e6
#meson-url = https://files.pythonhosted.org/packages/02/98/bbcaf6caaaa0510a68834f119ac793a8abade6ff827fc2791eeb6f8b4a66
#meson-python-url = https://files.pythonhosted.org/packages/67/66/91d242ea8dd1729addd36069318ba2cd03874872764f316c3bb51b633ed2
diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf
index 7d4a3b5..3e4ec9a 100644
--- a/reproduce/software/config/versions.conf
+++ b/reproduce/software/config/versions.conf
@@ -20,17 +20,14 @@
bash-version = 5.3.9
binutils-version = 2.45.1
bison-version = 3.8.2
-coreutils-version = 9.9
+coreutils-version = 9.11
curl-version = 8.17.0
diffutils-version = 3.12
-file-version = 5.46
findutils-version = 4.10.0
flock-version = 0.4.0
gawk-version = 5.3.2
-gcc-version = 15.2.0
-gettext-version = 0.26
+gettext-version = 1.0
git-version = 2.52.0
-gmp-version = 6.3.0
grep-version = 3.12
gzip-version = 1.14
help2man-version = 1.49.3
@@ -38,17 +35,16 @@ isl-version = 0.27
less-version = 685
libiconv-version = 1.18
libtool-version = 2.5.4
-libunistring-version = 1.4.1
+libunistring-version = 1.4.2
libxml2-version = 2.15.1
lzip-version = 1.25
-m4-version = 1.4.20
+m4-version = 1.4.21
make-version = 4.4.1
mpc-version = 1.3.1
mpfr-version = 4.2.2
-nano-version = 8.7
+nano-version = 9.0
openssl-version = 3.6.0
perl-version = 5.42.0
-podlators-version = 6.0.2
readline-version = 8.3.3
sed-version = 4.9
tar-version = 1.35
@@ -57,7 +53,6 @@ unzip-version = 6.0
wget-version = 1.25.0
which-version = 2.23
xz-version = 5.6.3
-zip-version = 3.0
zlib-version = 1.3.1
# Version-dependent build
@@ -101,13 +96,23 @@ dash-version = 0.5.12
#
# As of GCC 15.1, the default C standard has been changed from C17 to C23
# and the following software cannot be built with C23. So we have added
-# '-std=c17' to the CFLAGS environment variable in their build rules. After
-# updating their version (and if you have GCC 15.1 or later) first remove
-# '-std=c17' and then try the build. If it works, move the software back up
-# to the main list before the commit.
+# '-std=$(GNU_STD_OLD)' to the CFLAGS environment variable in their build
+# rules. A test is done in 'configure.sh' to see if the host compiler has
+# 'gnu17' and if not, to use 'gnu99'. After updating a package's version
+# (and if you have GCC 15.1 or later) first remove '-std=$(GNU_STD_OLD)'
+# and then try the build. If it works, move the software package back up to
+# the main list before making a commit.
+gmp-version = 6.3.0
+file-version = 5.46
ncurses-version = 6.5
pkgconfig-version = 0.29.2
+# GCC
+# ---
+#
+# There is a version-specific 'sed -e' fix for a bug in this version of GCC
+# that should no longer be necessary in future versions.
+gcc-version = 15.2.0
@@ -138,6 +143,7 @@ emacs-version = 28.1
expat-version = 2.6.4
fftw-version = 3.3.10
flex-version = 2.6.4-410-74a89fd
+framel-version = 8.47.3
freetype-version = 2.13.3
gdb-version = 11.1
ghostscript-fonts-gnu-version = 6.0
@@ -146,6 +152,7 @@ ghostscript-version = 10.06.0
gnuastro-version = 0.24
gperf-version = 3.1
gsl-version = 2.8
+healpix-version = 3.83-2024Nov13
icu-version = 70.1
imagemagick-version = 7.1.0-13
imfit-version = 1.6.1
@@ -159,14 +166,17 @@ libpaper-version = 1.1.29
libpng-version = 1.6.46
libtiff-version = 4.7.0
libtirpc-version = 1.2.6
+metaio-version = 8.5.0-a5da19d
metastore-version = 1.1.2-23-fa9170b
missfits-version = 2.8.0
-ninjabuild-version = 1.12.1
+ninjabuild-version = 1.13.2
openblas-version = 0.3.29
-openmpi-version = 4.1.1
+openmpi-version = 5.0.10
openssh-version = 8.0p1
+parallel-version = 20260322
patch-version = 2.7.6
pcre-version = 8.44
+pcre2-version = 10.45
pixman-version = 0.40.0
plplot-version = 5.15.0
r-cran-version = 4.1.2
@@ -174,14 +184,19 @@ rpcsvc-proto-version = 1.4
scamp-version = 2.10.0
scons-version = 3.0.5
sextractor-version = 2.25.0
+sqlite-version = 3.53.0
swarp-version = 2.41.5
-swig-version = 4.0.2
+swig-version = 4.3.1
+tcl-version = 9.1a1
tides-version = 2.0
+tk-version = 9.1a1
+tzdb-version = 2026a
util-linux-version = 2.41.3
valgrind-version = 3.18.1
wcslib-version = 8.5
xlsxio-version = 0.2.21
yaml-version = 0.2.5
+zip-version = 3.0-15
# Xorg packages
fontconfig-version = 2.16.0
@@ -224,6 +239,17 @@ minizip-version = $(zlib-version)
# version 1.12.0.
hdf5-version = 1.13.1
+# The lalsuite tarball within Maneage is based on the upstream commit
+# 678514ed of 21 May 2025 of https://git.ligo.org/lscsoft/lalsuite. But
+# instead of being a 950 Mb '.tar.gz' file including the '.git/' directory
+# (or a 320 Mb '.tar.gz' file without the '.git/' directory), our tarball
+# is a 25 Mb '.tar.lz' file (a factor of 30 to 10 times smaller). The main
+# difference (apart from the extra compression provided by lzip) is that
+# this light tarball does not include the big test data files. A
+# description of how this tarball was made and what files have been removed
+# is in the 'README-Maneage-LightWeight.md' file that is within the
+# tarball.
+lalsuite-version = v7.26-15-g1e4c5e5080
@@ -238,74 +264,77 @@ hdf5-version = 1.13.1
# URL in 'reproduce/software/make/python.mk'.
#
# CLASS:PYTHON-START (important identifier for 'awk'; don't modify this line)
-asn1crypto-version = 0.24.0
-asteval-version = 0.9.16
-astropy-version = 7.0.1
+astropy-healpix-version = 1.1.2
astropy-iers-data-version = 0.2025.2.24.0.34.4
+astropy-version = 7.1.0
beautifulsoup4-version = 4.10.0
-beniget-version = 0.4.1
-certifi-version = 2018.11.29
cffi-version = 1.15.0
-chardet-version = 3.0.4
+colorama-version = 0.4.6
contourpy-version = 1.3.1
-corner-version = 2.0.1
+cosmodesi-mpytools-version = 1.0.0-04369fc9
cppy-version = 1.3.1
cycler-version = 0.12.1
cython-version = 3.0.12
-eigency-version = 1.77
-emcee-version = 3.0.1
-entrypoints-version = 0.3
-esutil-version = 0.6.9
+exceptiongroup-version = 1.3.0
extension-helpers-version = 1.2.0
features-version = 0.5.12
flake8-version = 3.7.8
flit-core-version = 3.11.0
+flit-scm-version = 1.7.0
fonttools-version = 4.56.0
-future-version = 0.18.1
galsim-version = 2.3.5
-gast-version = 0.5.3
gpep517-version = 16
h5py-version = 2.10.0
+hatch-vcs-version = 0.5.0
+hatchling-version = 1.27.0
+healpy-version = 1.18.1
html5lib-version = 1.0.1
-idna-version = 2.8
-jeepney-version = 0.4
+igwn-ligolw-version = 2.1.0
+igwn-segments-version = 2.1.0
+iniconfig-version = 2.1.0
jinja2-version = 3.0.3
+joblib-version = 1.5.0
kiwisolver-version = 1.4.8
+ligo-skymap-version = 2.4.0
lmfit-version = 0.9.14
+lscsoft-glue-version = 4.1.0
lsstdesccoord-version = 1.2.0
-markupsafe-version = 2.0.1
-meson-version = 1.7.0
meson-python-version = 0.17.1
-mpi4py-version = 3.1.3
-mpmath-version = 1.1.0
+meson-version = 1.7.0
+mpi4py-version = 4.0.3
+networkx-version = 3.5
numpy-version = 2.2.3
packaging-version = 24.2
-pexpect-version = 4.7.0
+pandas-version = 2.2.3
+pathspec-version = 0.12.1
pillow-version = 11.1.0
pip-version = 19.0.2
-ply-version = 3.11
+pluggy-version = 1.6.0
pybind11-version = 2.13.6
-pycodestyle-version = 2.5.0
-pycparser-version = 2.19
pyerfa-version = 2.0.1.5
-pyflakes-version = 2.1.1
-pyproject-metadata-version = 0.9.0
+pyfftw-version = 0.15.1
+pygments-version = 2.19.2
pyparsing-version = 3.2.1
-pypkgconfig-version = 1.5.1
+pyproject-metadata-version = 0.9.0
+pytest-version = 8.4.1
python-dateutil-version = 2.9.0.post0
python-installer-version = 0.7.0
+python3-fitsio-version = 1.3.0
pythran-version = 0.11.0
+pytz-version = 2025.2
pyyaml-version = 6.0.2
requests-version = 2.21.0
-setuptools-version = 75.8.0
+scikit-base-version = 0.12.2
+scikit-learn-version = 1.6.1
setuptools-scm-version = 8.2.0
+setuptools-version = 80.8.0
sip_tpv-version = 1.1
six-version = 1.17.0
-soupsieve-version = 1.8
sympy-version = 1.4
-uncertainties-version = 3.1.6
-urllib3-version = 1.24.1
-webencodings-version = 0.5.1
+threadpoolctl-version = 3.6.0
+tqdm-version = 4.67.1
+trove-classifiers-version = 2025.5.9.12
+versioneer-version = 0.29
wheel-version = 0.45.1
# Matplotlib and Scipy are big packages that may have difficulty resolving
@@ -315,26 +344,11 @@ scipy-version = 1.15.2
# CLASS:PYTHON-END (important identifier for 'awk'; don't modify this line)
-# Special Python modules:
-#
-# Healpy: When any Python module is requested, healpix will also build its
-# Python module Healpy.
-#
-# Bug: Healpix 3.50 doesn't yet support Python 3.10, so we are commenting
-# it here. When future versions fix the problem, we'll un-comment it again.
-#healpy-version = xxxxx
-
-# Problematic software that are currently ignored:
-
-# Healpix 3.80 has different installation scheme that is not yet
-# implemented here, and unfortunately healpix 3.50 has conflicts with
-# CFITSIO's new version macro and Python 3.10. So for now, we are ignoring
-# it.
-#healpix-version = 3.50
+# Problematic software that is currently ignored:
# Setuptools-rust crash (https://savannah.nongnu.org/bugs/index.php?61731),
# so it and its dependencies are being ignored: 'cryptography', and thus
@@ -346,6 +360,34 @@ semantic-version-version = 2.10.0
#keyring-version = 18.0.0
#astroquery-version = 0.4
+# Not yet adated to the GPEP517 build method:
+#asn1crypto-version = 0.24.0
+#asteval-version = 0.9.16
+#beniget-version = 0.4.1
+#certifi-version = 2018.11.29
+#chardet-version = 3.0.4
+#corner-version = 2.0.1
+#eigency-version = 1.77
+#emcee-version = 3.0.1
+#entrypoints-version = 0.3
+#esutil-version = 0.6.9
+#future-version = 0.18.1
+#gast-version = 0.5.3
+#idna-version = 2.8
+#jeepney-version = 0.4
+#markupsafe-version = 2.0.1
+#mpmath-version = 1.1.0
+#pexpect-version = 4.7.0
+#ply-version = 3.11
+#pycodestyle-version = 2.5.0
+#pycparser-version = 2.19
+#pyflakes-version = 2.1.1
+#pypkgconfig-version = 1.5.1
+#soupsieve-version = 1.8
+#uncertainties-version = 3.1.6
+#urllib3-version = 1.24.1
+#webencodings-version = 0.5.1
+
diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk
index 4e85807..92fa8f0 100644
--- a/reproduce/software/make/basic.mk
+++ b/reproduce/software/make/basic.mk
@@ -105,12 +105,13 @@ endif
export CPPFLAGS := -I$(idir)/include $(CPPFLAGS) $(noccwarnings)
# 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,
-# we'll first tell the programs to look into any possible pre-defined
-# 'LD_LIBRARY_PATH', then we'll add our own newly installed libraries. We
-# will also make sure that there is no "current directory" in it (by
-# removing a starting or trailing ':' and any occurance of '::'.
+# system, but are slowly populating our basic software envirnoment. So
+# here, we are also appending the host's 'LD_LIBRARY_PATH' to Maneage's
+# installed library path. It is just important to keep Maneage's library
+# directories first so when something has been built, the newly built
+# software use (link-with) Maneage's libraries, not the host's. We will
+# also make sure that there is no "current directory" in it (by removing a
+# starting or trailing ':' and any occurance of '::').
#
# But first: in case LD_LIBRARY_PATH is empty, give it the default value of
# $(sys_library_sh_path) (which was the location of the libraries needed by
@@ -120,7 +121,7 @@ export CPPFLAGS := -I$(idir)/include $(CPPFLAGS) $(noccwarnings)
ifeq ($(strip $(LD_LIBRARY_PATH)),)
export LD_LIBRARY_PATH=$(sys_library_sh_path)
endif
-export LD_LIBRARY_PATH := $(shell echo $(LD_LIBRARY_PATH):$(ildir) \
+export LD_LIBRARY_PATH := $(shell echo $(ildir):$(LD_LIBRARY_PATH) \
| sed -e's/::/:/g' -e's/^://' -e's/:$$//')
# RPATH is automatically written in macOS, so 'DYLD_LIBRARY_PATH' is
@@ -253,6 +254,23 @@ $(ibidir)/low-level-links: $(ibidir)/grep-$(grep-version) \
# systems)
$(call makelink,ldd)
+# zic: On some systems like Debian GNU/Linux, 'zic' may be in
+# '/usr/sbin' and is available to users. But it is not normally in
+# the 'PATH' of a non-root user. This is because the executables
+# there are normally system-level commands, and most are executable
+# only by the root user.
+ $(call makelink,zic)
+ if [ "x$$(command -v zic)" = x ]; then
+ zicfullpath=$$(PATH=$${PATH}:/usr/sbin command -v zic)
+ if [ "x$${zicfullpath}" = x ]; then
+ printf "Warning: 'zic' not found. You may need it for"
+ printf " higher-level packages such as 'tzdb'. Install"
+ printf " 'zic' if needed.\n"
+ else
+ ln -sf $$(realpath $${zicfullpath}) $(ibdir)/zic
+ fi
+ fi
+
# We want this to be empty (so it doesn't interefere with the other
# files in 'ibidir'.
touch $@
@@ -376,8 +394,8 @@ $(ibidir)/tar-$(tar-version): \
# Patchelf is necessary for some software on GNU/Linux systems, its job is
# to manually insert RPATH into the dynamically-linked executable. Since
# all the other software depend on Pathelf, to avoid manually repeating as
-# a prerequisite (and forgetting in others causing bugs), we'll put it as a
-# dependancy of 'tar'.
+# a prerequisite (and forgetting in others causing bugs), it is installed
+# in this phase (right after 'tar').
$(ibidir)/patchelf-$(patchelf-version): $(ibidir)/tar-$(tar-version)
tarball=patchelf-$(patchelf-version).tar.lz
$(call import-source, $(patchelf-url), $(patchelf-checksum))
@@ -388,7 +406,47 @@ $(ibidir)/patchelf-$(patchelf-version): $(ibidir)/tar-$(tar-version)
echo "PatchELF $(patchelf-version)" > $@
fi
+$(ibidir)/pkg-config-$(pkgconfig-version): $(ibidir)/tar-$(tar-version)
+# Download the tarball.
+ tarball=pkg-config-$(pkgconfig-version).tar.lz
+ $(call import-source, $(pkgconfig-url), $(pkgconfig-checksum))
+
+# 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
+# (and 'libiconv' exists) there will be a problem. So before
+# re-building 'pkg-config', we'll remove any installation of
+# 'libiconv'.
+ rm -f $(ildir)/libiconv* $(idir)/include/iconv.h
+
+# Some Mac OS systems may have a version of the GNU C Compiler (GCC)
+# installed that doesn't support some necessary features of building
+# Glib (as part of pkg-config), so we will disable pkg-config's
+# internal Glib for Mac systems, and to be further safe, we'll make
+# sure it will use LLVM's Clang.
+#
+# On macOS systems, to ensure that Clang can build pkg-config, take
+# the following steps:
+# 1. Install the latest Glib via Homebrew:
+# brew install glib
+# 2. Set these environment variables before configuring Maneage:
+# export GLIB_CFLAGS=$(pkg-config --cflags glib-2.0)
+# export GLIB_LIBS=$(pkg-config --libs glib-2.0)
+# 3. Ensure PKG_CONFIG_PATH includes Homebrew's pkgconfig:
+# export PKG_CONFIG_PATH=/opt/homebrew/lib/pkgconfig:$PKG_CONFIG_PATH
+ if [ x$(on_mac_os) = xyes ]; then
+ extra_pkgconf=""
+ export compiler="CC=clang"
+ else
+ export compiler=""
+ extra_pkgconf="--with-internal-glib"
+ fi
+ export CFLAGS="-std=$(std_c_old) $$CFLAGS"
+ $(call gbuild, pkg-config-$(pkgconfig-version), static, \
+ $$compiler $$extra_pkgconf \
+ --with-pc-path=$(ildir)/pkgconfig, V=1)
+ echo "pkg-config $(pkgconfig-version)" > $@
@@ -408,7 +466,10 @@ $(ibidir)/patchelf-$(patchelf-version): $(ibidir)/tar-$(tar-version)
# 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)/ncurses-$(ncurses-version): $(ibidir)/patchelf-$(patchelf-version)
+$(ibidir)/ncurses-$(ncurses-version): $(ibidir)/patchelf-$(patchelf-version) \
+ $(ibidir)/pkg-config-$(pkgconfig-version)
+
+# Prepare the input.
tarball=ncurses-$(ncurses-version).tar.lz
$(call import-source, $(ncurses-url), $(ncurses-checksum))
@@ -424,12 +485,18 @@ $(ibidir)/ncurses-$(ncurses-version): $(ibidir)/patchelf-$(patchelf-version)
rm -f $(ibdir)/bash* $(ibdir)/awk* $(ibdir)/gawk*
# Standard build process.
- export CFLAGS="-std=gnu17 $$CFLAGS"
+ export CFLAGS="-std=$(std_c_old) $$CFLAGS"
$(call gbuild, ncurses-$(ncurses-version), static, \
- --with-shared --enable-rpath --without-normal \
- --without-debug --with-cxx-binding \
- --with-cxx-shared --enable-widec --enable-pc-files \
- --with-pkg-config=$(ildir)/pkgconfig, -j$(numthreads))
+ --with-shared \
+ --enable-rpath \
+ --enable-widec \
+ --without-debug \
+ --without-normal \
+ --enable-pc-files \
+ --with-cxx-shared \
+ --with-cxx-binding \
+ --with-pkg-config=$(ildir)/pkgconfig, \
+ -j$(numthreads))
# Unfortunately there are many problems with 'ncurses' using "normal"
# (or 8-bit) characters. The standard way that will work is to build
@@ -567,7 +634,7 @@ $(ibidir)/bash-$(bash-version): \
export CFLAGS="$$CFLAGS \
-DDEFAULT_PATH_VALUE='\"$(ibdir)\"' \
-DSTANDARD_UTILS_PATH='\"$(ibdir)\"' \
- -DSYS_BASHRC='\"$(BASH_ENV)\"' "
+ -DSYS_BASHRC='\"$(BASH_ENV)\"'"
$(call gbuild, bash-$(bash-version),, $$stopt \
--with-installed-readline=$(ildir) \
--with-curses=yes, \
@@ -584,9 +651,6 @@ $(ibidir)/bash-$(bash-version): \
# shell. By convention, 'sh' is just a symbolic link to the preferred
# shell executable. So we'll define '$(ibdir)/sh' as a symbolic link
# to the Bash that we just built and installed.
-#
-# Just to be sure that the installation step above went well, before
-# making the link, we'll see if the file actually exists there.
ln -fs $(ibdir)/bash $(ibdir)/sh
echo "GNU Bash $(bash-version)" > $@
@@ -599,6 +663,7 @@ $(ibidir)/bash-$(bash-version): \
+
# Level 4: Most other programs
# ----------------------------
@@ -612,15 +677,21 @@ perl-conflddlflags =
else
perl-conflddlflags = -Dlddlflags="-shared $$LDFLAGS"
endif
-$(ibidir)/perl-$(perl-version): $(ibidir)/patchelf-$(patchelf-version)
+$(ibidir)/perl-$(perl-version): $(ibidir)/tar-$(tar-version)
+
+# Import tarball.
tarball=perl-$(perl-version).tar.lz
$(call import-source, $(perl-url), $(perl-checksum))
+
+# Extract the version strings.
major_version=$$(echo $(perl-version) \
| sed -e's/\./ /g' \
| awk '{printf("%d", $$1)}')
base_version=$$(echo $(perl-version) \
| sed -e's/\./ /g' \
| awk '{printf("%d.%d", $$1, $$2)}')
+
+# Unpack, build and install.
cd $(ddir)
rm -rf perl-$(perl-version)
tar -xf $(tdir)/$$tarball --no-same-owner --no-same-permissions
@@ -631,15 +702,15 @@ $(ibidir)/perl-$(perl-version): $(ibidir)/patchelf-$(patchelf-version)
-Duseshrplib \
-Dprefix=$(idir) \
-Dvendorprefix=$(idir) \
- -Dprivlib=$(idir)/share/perl$$major_version/core_perl \
- -Darchlib=$(idir)/lib/perl$$major_version/$$base_version/core_perl \
- -Dsitelib=$(idir)/share/perl$$major_version/site_perl \
- -Dsitearch=$(idir)/lib/perl$$major_version/$$base_version/site_perl \
- -Dvendorlib=$(idir)/share/perl$$major_version/vendor_perl \
- -Dvendorarch=$(idir)/lib/perl$$major_version/$$base_version/vendor_perl \
- -Dscriptdir=$(idir)/bin/core_perl \
- -Dsitescript=$(idir)/bin/site_perl \
- -Dvendorscript=$(idir)/bin/vendor_perl \
+ -Dprivlib=$(idir)/share/perl$$major_version/perl-core \
+ -Darchlib=$(idir)/lib/perl$$major_version/$$base_version/perl-core \
+ -Dsitelib=$(idir)/share/perl$$major_version/perl-site \
+ -Dsitearch=$(idir)/lib/perl$$major_version/$$base_version/perl-site \
+ -Dvendorlib=$(idir)/share/perl$$major_version/perl-vendor \
+ -Dvendorarch=$(idir)/lib/perl$$major_version/$$base_version/perl-vendor \
+ -Dscriptdir=$(idir)/bin/perl-core \
+ -Dsitescript=$(idir)/bin/perl-site \
+ -Dvendorscript=$(idir)/bin/perl-vendor \
-Dinc_version_list=none \
-Dman1ext=1perl \
-Dman3ext=3perl \
@@ -650,7 +721,14 @@ $(ibidir)/perl-$(perl-version): $(ibidir)/patchelf-$(patchelf-version)
make install
cd ..
rm -rf perl-$(perl-version)
- cd $$topdir
+
+# Symbolic links to necessary Perl programs (that Perl installs in
+# the 'perl-core' directory.
+ ln -sf $(ibdir)/perl-core/xsubpp $(ibdir)/xsubpp
+ ln -sf $(ibdir)/perl-core/pod2man $(ibdir)/pod2man
+ ln -sf $(ibdir)/perl-core/pod2text $(ibdir)/pod2text
+
+# Final target.
echo "Perl $(perl-version)" > $@
@@ -719,29 +797,6 @@ $(ibidir)/coreutils-$(coreutils-version): \
rm -rf coreutils-$(coreutils-version)
echo "GNU Coreutils $(coreutils-version)" > $@
-# Podlators
-#
-# POD is short for "Plain Old Documentation", that is the format used in
-# Perl's documentation. Podlators provies two executables pod2man and
-# pod2text convert this into the roff format (used in man pages) or pod2 It
-# is used by some software like OpenSSL to create their man pages.
-$(ibidir)/podlators-$(podlators-version): $(ibidir)/perl-$(perl-version)
- tarball=podlators-$(podlators-version).tar.lz
- $(call import-source, $(podlators-url), $(podlators-checksum))
- cd $(ddir)
- rm -rf podlators-$(podlators-version)
- tar -xf $(tdir)/$$tarball --no-same-owner --no-same-permissions
- cd podlators-$(podlators-version)
- $(shsrcdir)/prep-source.sh $(ibdir)
- perl Makefile.PL
- make
- make install
- ln -sf $(ibdir)/site_perl/pod2man $(ibdir)/pod2man
- ln -sf $(ibdir)/site_perl/pod2text $(ibdir)/pod2text
- cd ..
- rm -rf podlators-$(podlators-version)
- echo "podlators $(podlators-version)" > $@
-
# OpenSSL
#
# Until we find a nice and generic way to create an updated CA file in the
@@ -749,8 +804,9 @@ $(ibidir)/podlators-$(podlators-version): $(ibidir)/perl-$(perl-version)
# along with the other tarballs.
$(idir)/etc:; mkdir $@
$(idir)/etc/ssl: | $(idir)/etc; mkdir $@
-$(ibidir)/openssl-$(openssl-version): $(ibidir)/podlators-$(podlators-version) \
- | $(idir)/etc/ssl
+$(ibidir)/openssl-$(openssl-version): $(ibidir)/perl-$(perl-version) \
+ $(ibidir)/patchelf-$(patchelf-version) \
+ | $(idir)/etc/ssl
# First download the certificates and copy them into the
# installation directory.
@@ -906,7 +962,7 @@ $(ibidir)/diffutils-$(diffutils-version): \
echo "GNU Diffutils $(diffutils-version)" > $@
$(ibidir)/file-$(file-version): $(ibidir)/coreutils-$(coreutils-version)
- export CFLAGS="-std=c99 $$CFLAGS"
+ export CFLAGS="-std=$(std_c_old) $$CFLAGS"
tarball=file-$(file-version).tar.lz
$(call import-source, $(file-url), $(file-checksum))
$(call gbuild, file-$(file-version), static, \
@@ -958,6 +1014,8 @@ $(ibidir)/help2man-$(help2man-version): \
$(call gbuild, help2man-$(help2man-version), static, ,V=1)
echo "Help2man $(Help2man-version)" > $@
+# Even though libiconv does not use pkg-config, pkg-config conflicts with
+# it, see the comments in pkg-config for more.
$(ibidir)/libiconv-$(libiconv-version): \
$(ibidir)/pkg-config-$(pkgconfig-version)
tarball=libiconv-$(libiconv-version).tar.lz
@@ -973,12 +1031,14 @@ $(ibidir)/libunistring-$(libunistring-version): \
-j$(numthreads))
echo "GNU libunistring $(libunistring-version)" > $@
-$(ibidir)/libxml2-$(libxml2-version): $(ibidir)/patchelf-$(patchelf-version)
+$(ibidir)/libxml2-$(libxml2-version): $(ibidir)/tar-$(tar-version)
# 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.
+# its Python bindings:
+# 1. Add the Python dependency.
+# 2. Add the '--with-python-install-dir=DIR' configure option.
tarball=libxml2-$(libxml2-version).tar.lz
$(call import-source, $(libxml2-url), $(libxml2-checksum))
$(call gbuild, libxml2-$(libxml2-version), static, \
@@ -1017,7 +1077,7 @@ $(ibidir)/gmp-$(gmp-version): \
$(ibidir)/coreutils-$(coreutils-version)
tarball=gmp-$(gmp-version).tar.lz
$(call import-source, $(gmp-url), $(gmp-checksum))
- export CFLAGS="-std=gnu17 $$CFLAGS"
+ export CFLAGS="-std=$(std_c_old) $$CFLAGS"
$(call gbuild, gmp-$(gmp-version), static, \
--enable-cxx --enable-fat, \
-j$(numthreads))
@@ -1085,33 +1145,6 @@ $(ibidir)/mpfr-$(mpfr-version): $(ibidir)/gmp-$(gmp-version)
$(call gbuild, mpfr-$(mpfr-version), static)
echo "GNU Multiple Precision Floating-Point Reliably $(mpfr-version)" > $@
-$(ibidir)/pkg-config-$(pkgconfig-version): $(ibidir)/patchelf-$(patchelf-version)
-
-# Download the tarball.
- tarball=pkg-config-$(pkgconfig-version).tar.lz
- $(call import-source, $(pkgconfig-url), $(pkgconfig-checksum))
-
-# 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
-# (and 'libiconv' exists) there will be a problem. So before
-# re-building 'pkg-config', we'll remove any installation of
-# 'libiconv'.
- rm -f $(ildir)/libiconv* $(idir)/include/iconv.h
-
-# Some Mac OS systems may have a version of the GNU C Compiler (GCC)
-# installed that doesn't support some necessary features of building
-# Glib (as part of pkg-config). So to be safe, for Mac systems, we'll
-# make sure it will use LLVM's Clang.
- if [ x$(on_mac_os) = xyes ]; then export compiler="CC=clang"
- else export compiler=""
- fi
- export CFLAGS="-std=gnu17 $$CFLAGS"
- $(call gbuild, pkg-config-$(pkgconfig-version), static, \
- $$compiler --with-internal-glib \
- --with-pc-path=$(ildir)/pkgconfig, V=1)
- echo "pkg-config $(pkgconfig-version)" > $@
-
$(ibidir)/sed-$(sed-version): $(ibidir)/coreutils-$(coreutils-version)
tarball=sed-$(sed-version).tar.lz
$(call import-source, $(sed-url), $(sed-checksum))
@@ -1219,6 +1252,7 @@ $(ibidir)/binutils-$(binutils-version): \
$(call makelink,ld)
$(call makelink,nm)
$(call makelink,ps)
+ $(call makelink,lipo)
$(call makelink,strip)
$(call makelink,ranlib)
echo "" > $@
@@ -1442,6 +1476,14 @@ $(ibidir)/gcc-$(gcc-version): $(ibidir)/binutils-$(binutils-version)
-e"s|FS_IOC_SETVERSION;|_IOW('v', 2, long);|" \
-i libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
+# Bug in GCC 15.2.0 using glibc 2.43 (see [1]) as fixed in [2].
+# [1] https://patchwork.ozlabs.org/project/gcc/patch/e1679277-d7c9-49aa-8365-a8dca082d9bd@web.de
+# [2] https://github.com/johnny-mnemonic/toolchain-autobuilds/commit/9585fdfc
+ sed -e's|char \*q = strchr (p + 1,|const char \*q = strchr (p + 1,|' \
+ libgomp/affinity-fmt.c > affinity-fmt-tmp.c
+ mv affinity-fmt-tmp.c libgomp/affinity-fmt.c
+
+
# Set the build directory for the processing.
mkdir build
cd build
diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk
index 83486dc..d059544 100644
--- a/reproduce/software/make/high-level.mk
+++ b/reproduce/software/make/high-level.mk
@@ -438,6 +438,23 @@ $(ibidir)/cfitsio-$(cfitsio-version):
tar cf $$customtar cfitsio-$(cfitsio-version)
cd $$topdir
+# Add SSE2 optimization only when we are on a Linux kernel or using
+# macOS on an Intel CPU.
+ arch=$$(uname -m)
+ unames=$$(uname -s)
+ if [ "$$unames" = "Linux" ]; then
+ confopts="$$confopts --enable-sse2"
+ elif [ "$$unames" = "Darwin" ] && [ "$$arch" = "x86_64" ]; then
+ confopts="$$confopts --enable-sse2"
+ fi
+
+# On macOS, system libraries (e.g., libSystem) are inside the SDK,
+# not standard paths. 'xcrun' provides the correct SDK path; use $$
+# so it is evaluated by the shell (not Make).
+ if [ $(on_mac_os) = yes ]; then
+ export SDKROOT=$$(xcrun --show-sdk-path)
+ fi
+
# Continue the standard build on the customized tarball. Note that
# with the installation of CFITSIO, 'fpack' and 'funpack' are not
# installed by default. Because of that, they are added explicity.
@@ -446,7 +463,10 @@ $(ibidir)/cfitsio-$(cfitsio-version):
# specific 'shared' target for the building of the shared libraries.
export gbuild_tar=$(ddir)/$$customtar
$(call gbuild, cfitsio-$(cfitsio-version), , \
- --enable-sse2 --enable-reentrant \
+ $$confopts \
+ --disable-curl \
+ --disable-fortran \
+ --enable-reentrant \
--with-bzip2=$(idir), , \
make fpack funpack)
rm $$customtar
@@ -505,36 +525,62 @@ $(ibidir)/expat-$(expat-version):
$(call gbuild, expat-$(expat-version), static)
echo "Expat $(expat-version)" > $@
+# FFTW manual customizations:
+#
+# - To activate the OpenMPI features of FFTW, add OpenMPI as a dependency
+# of FFTW: the necessary flags are automatically added if OpenMPI was
+# installed before FFTW.
+#
+# - There are Intel-specific optimizations that can be enabled by adding
+# the following two options to 'opts'
+#
+# --enable-avx --enable-sse2
+#
+# However, they cause crashes on non-Intel processors (has been confirmed
+# in ARM's aarch64). So in the generic scenario they are
+# removed. Checking how these optimizations affect the numerical accuracy
+# of the result (and thus optionally adding them for Intel-based
+# processors) should be studied before they are optionally added for
+# Intel-based CPUs (and ignored for others).
$(ibidir)/fftw-$(fftw-version):
# Prepare the source tarball.
tarball=fftw-$(fftw-version).tar.lz
$(call import-source, $(fftw-url), $(fftw-checksum))
-# FFTW's single and double precision 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 the
-# default double-precision library.
-#
-# There are Intel-specific optimizations that can be enabled by
-# adding the following two options to 'confop'
-#
-# --enable-avx --enable-sse2
-#
-# However, they cause crashs on non-Intel processors (has been
-# confirmed in ARM's aarch64). So in the generic scenario they are
-# removed. Checking how these optimizations affect the numeric
-# accuracy of the result (and thus optionally adding them for
-# Intel-based processors) should be studied before they are
-# optionally added for Intel-based CPUs (and ignored for others).
- confop="--enable-shared --enable-threads"
- $(call gbuild, fftw-$(fftw-version), static, \
- $$confop --enable-float)
- $(call gbuild, fftw-$(fftw-version), static, \
- $$confop)
- cp $(dtexdir)/fftw.tex $(ictdir)/
+# Specific customizations: you can add the options mentioned above
+# after the 'if' statements, for example: "opts=$$opts EXTRA".
+ opts="--enable-shared --enable-threads"
+ if [ x$(on_mac_os) = xyes ]; then opts="$$opts --disable-fortran"
+ else
+ if [ -f $(ibidir)/openmpi-$(openmpi-version) ]; then
+ opts="$$opts --enable-openmp --enable-mpi"
+ fi
+ fi
+
+# FFTW's single, double and long-double precision libraries must be
+# built separately (fully independent builds and installs).
+ $(call gbuild, fftw-$(fftw-version), static, $$opts)
+ $(call gbuild, fftw-$(fftw-version), static, $$opts \
+ --enable-float)
+ $(call gbuild, fftw-$(fftw-version), static, $$opts \
+ --enable-long-double)
+ cp -pv $(dtexdir)/fftw.tex $(ictdir)/
echo "FFTW $(fftw-version) \citep{fftw}" > $@
+# 2026-02-20 'framel' is needed by the python package lalsuite, which is
+# needed by ligo-skymap; currently the compile of 'framel' 8.49.0 fails with
+#
+# error: initialization of 'void (*)(void)' from incompatible
+# pointer type 'void (*)(int, char *)' [-Wincompatible-pointer-types]
+#
+# Hints: try using gcc -std=gnu99 or -std=gnu11 (default is -std=gnu17).
+$(ibidir)/framel-$(framel-version): $(ibidir)/cmake-$(cmake-version)
+ tarball=framel-$(framel-version).tar.lz
+ $(call import-source, $(framel-url), $(framel-checksum))
+ $(call cbuild, framel-$(framel-version), static)
+ echo "Framel $(framel-version)" > $@
+
$(ibidir)/freetype-$(freetype-version): $(ibidir)/libpng-$(libpng-version)
# As of version 2.13.2, FreeType doesn't account for the 'SHELL'
# environment variable. The issue has been reported to the
@@ -571,64 +617,114 @@ $(ibidir)/hdf5-$(hdf5-version): $(ibidir)/openmpi-$(openmpi-version)
echo "HDF5 library $(hdf5-version)" > $@
# HEALPix includes the source of its C, C++, Python (and several other
-# languages) libraries within one tarball. We will include the Python
-# installation only when any other Python module is requested (in
-# 'TARGETS.conf').
+# languages) libraries within one tarball. However, we do not build the
+# python version here; instead we provide 'healpy' as a separate package;
+# see 'python.mk' for the build rule.
#
# Note that the default './configure' script is an interactive script which
# is hard to automate. So we need to go into the 'autotools' directory of
# the 'C' and 'cxx' directories and configure the GNU Build System (with
# 'autoreconf', which uses 'autoconf' and 'automake') to easily build the
# HEALPix C/C++ libraries in batch mode.
-ifeq ($(strip $(targets-python)),)
-healpix-python-dep =
-else
-healpix-python-dep = $(ipydir)/matplotlib-$(matplotlib-version) \
- $(ipydir)/astropy-$(astropy-version)
-endif
-$(ibidir)/healpix-$(healpix-version): $(healpix-python-dep) \
+$(ibidir)/healpix-$(healpix-version): \
$(ibidir)/cfitsio-$(cfitsio-version) \
$(ibidir)/autoconf-$(autoconf-version) \
$(ibidir)/automake-$(automake-version)
+
+# Import the tarball.
tarball=healpix-$(healpix-version).tar.lz
$(call import-source, $(healpix-url), $(healpix-checksum))
- if [ x"$(healpix-python-dep)" = x ]; then
- pycommand1="echo no-healpy-because-no-other-python"
- pycommand2="echo no-healpy-because-no-other-python"
- else
- pycommand1="python setup.py build"
- pycommand2="python setup.py install"
- fi
- rm -rf $(ddir)/Healpix_$(healpix-version)
+
+# Setup the build directory
+ rm -rf $(ddir)/healpix-$(healpix-version)
topdir=$(pwd); cd $(ddir);
tar -xf $(tdir)/$$tarball --no-same-owner --no-same-permissions
- cd Healpix_$(healpix-version)
+ cd healpix-$(healpix-version)
$(shsrcdir)/prep-source.sh $(ibdir)
- cd src/C/autotools
+
+# Compile and install libsharp:
+ cd src/common_libraries/libsharp
autoreconf --install
./configure --prefix=$(idir)
make V=1 -j$(numthreads) SHELL=$(ibdir)/bash
make install
- cd ../../cxx/autotools/
+
+# Compile and install the C version:
+ cd ../../C/autotools
+ printf "\n\nDEBUG ONLY\n\n"; /bin/pwd; printf "\nGUBED\n\n\n"
+ autoreconf --install
+ ./configure --prefix=$(idir)
+ make V=1 -j$(numthreads) SHELL=$(ibdir)/bash
+ make install
+
+# Compile and install the C++ version:
+ cd ../../cxx/
+ printf "\n\nDEBUG.BBBB ONLY\n\n"; /bin/pwd; printf "\nBBB.GUBED\n\n\n"
autoreconf --install
./configure --prefix=$(idir)
# With CFITSIO 4.0, the 'CFITSIO_VERSION' macro has three
-# components. But this version of Healpix doesn't yet account for
-# this.
+# components. But this (which?) version of Healpix doesn't yet
+# account for this.
sed -i -e's/CFITSIO_VERSION/fitsversion/' cxxsupport/fitshandle.cc
# Continue with the building.
make V=1 -j$(numthreads) SHELL=$(ibdir)/bash
make install
- cd ../../healpy
- $$pycommand1
- $$pycommand2
+
+# Finalize the build
cd $$topdir
- rm -rf $(ddir)/Healpix_$(healpix-version)
+ rm -rf $(ddir)/healpix-$(healpix-version)
cp $(dtexdir)/healpix.tex $(ictdir)/
echo "HEALPix $(healpix-version) \citep{healpix}" > $@
+# 2025-05-24 The build rules here for 'lalsuite' include git initialisation
+# with a dummy commit of all the source files since this is required for an
+# install unless the .git/ directory (currently 650 Mb) is included in the
+# tarball. Our lalsuite tarball also has many big data test files removed,
+# since these are unlikely to be needed in typically astronomy usage; this
+# brings the .tar.lz file down to 25 Mb from the default of about 950 Mb
+# (tar.gz) or 740 Mb (tar.lz).
+#
+# If you need to do full gravitational wave work with 'lalsuite', then you
+# should provide an alternative tarball and edit the three files
+# reproduce/software/config/{versions,checksums,urls}.conf in order to use
+# your preferred tarball.
+$(ipydir)/lalsuite-$(lalsuite-version): \
+ $(ibidir)/automake-$(automake-version) \
+ $(ibidir)/swig-$(swig-version) \
+ $(ibidir)/metaio-$(metaio-version) \
+ $(ibidir)/framel-$(framel-version) \
+ $(ipydir)/astropy-$(astropy-version) \
+ $(ipydir)/igwn-segments-$(igwn-segments-version) \
+ $(ipydir)/lscsoft-glue-$(lscsoft-glue-version) \
+ $(ipydir)/python-dateutil-$(python-dateutil-version)
+ tarball=lalsuite-$(lalsuite-version).tar.lz
+ $(call import-source, $(lalsuite-url), \
+ $(lalsuite-checksum))
+
+# First: build from source as if it's a C source only.
+ cd $(ddir)
+ unpackdir=lalsuite-$(lalsuite-version)
+ rm -rf $$unpackdir
+ tar -xf $(tdir)/$$tarball --no-same-owner --no-same-permissions
+ cd $$unpackdir
+ $(shsrcdir)/prep-source.sh $(ibdir)
+
+# A git commit is needed to generate version-control files; the
+# strings in these will be rather arbitrary and should be ignored.
+ git init && git add .
+ git commit -a --no-edit -m "Dummy commit" \
+ --author "Tarball <tar@ball.only>"
+ autoreconf
+ ./configure --prefix="$(idir)" --enable-swig-python
+ make
+ make install
+
+# Clean up and build final tarball
+ cd $(ddir); rm -fr $$unpackdir
+ echo "LALSuite $(lalsuite-version)" > $@
+
$(ibidir)/libbsd-$(libbsd-version): $(ibidir)/libmd-$(libmd-version)
tarball=libbsd-$(libbsd-version).tar.lz
$(call import-source, $(libbsd-url), $(libbsd-checksum))
@@ -840,9 +936,52 @@ $(ibidir)/ninjabuild-$(ninjabuild-version): $(ibidir)/cmake-$(cmake-version)
echo "Ninja build system $(ninjabuild-version)" > $@
$(ibidir)/openblas-$(openblas-version):
+
+# Import the tarball.
tarball=openblas-$(openblas-version).tar.lz
$(call import-source, $(openblas-url), $(openblas-checksum))
- if [ x$(on_mac_os) = xyes ]; then export CC=clang; fi
+
+# If 'gcc' is actually a symbolic link to 'clang', then print the
+# following message to guide the user on how to prepare their
+# environment.
+ if $$CC --version | grep clang &> /dev/null; then
+
+# Print message.
+ echo; echo
+ printf "*********************************************\n"
+ printf "OpenBlas could not be installed with Clang!\n\n"
+ printf "In order to install OpenBLAS, GCC and Gfortran are "
+ printf "needed. You can take the following steps to fix "
+ printf "this:\n\n"
+ printf "1. Install GCC with Homebrew.\n"
+ printf "2. Get the full path of 'gcc', 'g++', and 'gfortran' "
+ printf "(for example with 'which gcc').\n"
+ printf "3. Comment the 'exit 1' and un-comment (and edit) the "
+ printf "'export's that are below this message (in the "
+ printf "'openblas' rule of "
+ printf "'reproduce/software/make/high-level.mk', within the "
+ printf "'openblas' rule):\n\n"
+ printf " exit 1\n"
+ printf " #export CC=/opt/homebrew/bin/gcc-XX\n"
+ printf " #export CXX=/opt/homebrew/bin/g++-XX\n"
+ printf " #export FC=/opt/homebrew/bin/gfortran-XX\n\n"
+ printf " with the lines:\n\n"
+ printf " #exit 1\n"
+ printf " export CC=/opt/homebrew/bin/gcc-15\n"
+ printf " export CXX=/opt/homebrew/bin/g++-15\n"
+ printf " export FC=/opt/homebrew/bin/gfortran-15\n\n"
+ printf "5. Re-configure Maneage.\n"
+ printf "*********************************************\n"
+ echo; echo
+
+# Parts to modify when the message above is printed.
+ exit 1
+ #export CC=/opt/homebrew/bin/gcc-XX
+ #export CXX=/opt/homebrew/bin/g++-XX
+ #export FC=/opt/homebrew/bin/gfortran-XX
+ fi
+
+# Do the build.
cd $(ddir)
tar -xf $(tdir)/$$tarball --no-same-owner --no-same-permissions
cd openblas-$(openblas-version)
@@ -909,6 +1048,209 @@ $(ibidir)/tides-$(tides-version):
cp $(dtexdir)/tides.tex $(ictdir)/
echo "TIDES $(tides-version) \citep{tides}" > $@
+$(ibidir)/sqlite-$(sqlite-version): $(ibidir)/tcl-$(tcl-version)
+ tarball=sqlite-$(sqlite-version).tar.lz
+ $(call import-source, $(sqlite-url), $(sqlite-checksum))
+ $(call gbuild, sqlite-$(sqlite-version),, \
+ --enable-all --enable-static --enable-shared)
+ echo "Sqlite $(sqlite-version)" > $@
+
+$(ibidir)/tcl-$(tcl-version): $(ibidir)/zlib-$(zlib-version) \
+ $(ibidir)/tzdb-$(tzdb-version)
+
+# If both the tcl and tk packages are needed, then they must be built
+# together, with identical version numbers. Thus, for simplicity in
+# the build system, whether or not we build only tcl, or both tcl and
+# tk, we must check that the versions are identical.
+ if [ "x$(tcl-version)" != "x$(tk-version)" ]; then
+ printf "Error: This build system requires identical tcl and "
+ printf "tk versions to be selected **even if** tk is not "
+ printf "going to be built. However, tcl-version=$(tcl-version) "
+ printf "while tk-version=$(tk-version)\n"
+ exit 1
+ fi
+
+# Prepare the input tarball.
+ tarball=tcl-$(tcl-version).tar.lz
+ $(call import-source, $(tcl-url), $(tcl-checksum))
+
+# Setup the build directory
+ cd $(ddir)
+ unpackdir_tcl=tcl-$(tcl-version)
+ rm -rf $${unpackdir_tcl}
+
+# Install TCL
+ tar -xf $(tdir)/$$tarball --no-same-owner --no-same-permissions
+ cd - # return to the top maneage directory
+ cd $(ddir)/$${unpackdir_tcl}/unix
+ $(shsrcdir)/prep-source.sh $(ibdir)
+ ./configure --prefix="$(idir)"
+ make -j$(numthreads)
+ make install
+ cd - # return to the top maneage directory
+
+# Setup the 'tclsh' symbolic link.
+ maj_min_version=$$(printf $(tcl-version)| \
+ sed -e "s;^\([0-9]*\.[0-9]*\).*\';\1;")
+ printf "Will symlink tclsh$${maj_min_version} as tclsh ...\n"
+ cd $(ibdir)
+ rm -fv tclsh && ln -sv tclsh$${maj_min_version} tclsh
+ cd -
+ cd $(ddir)
+
+# Finalize.
+ if (printf "$$unpackdir_tcl" | grep "[a-z][a-z]"); then \
+ rm -fr $$unpackdir_tcl
+ fi
+ echo "Tcl $(tcl-version)" > $(ibidir)/tcl-$(tcl-version)
+
+
+# The tk library needs the X11 library for building GUIs, and should not
+# normally be needed for a non-interactive project. However, GUIs built
+# with tk might be convenient during development of a project, since visual
+# checks within the maneage shell may be useful.
+#
+# We need to rebuild tcl temporarily in the temporary build area in order
+# to build tk. However, we want the tk target to be dependent on tcl as a
+# prerequisite to avoid the possibility of parallel builds that risk
+# conflicting within the build area because of duplicate use of the same
+# tcl package directory after untarring the archive.
+$(ibidir)/tk-$(tk-version): $(ibidir)/zip-$(zip-version) \
+ $(ibidir)/tcl-$(tcl-version) \
+ $(ibidir)/libx11-$(libx11-version) \
+
+# Prepare the tarball.
+ tarball=tk-$(tk-version).tar.lz
+ $(call import-source, $(tk-url), $(tk-checksum))
+
+# If both the tcl and tk packages are needed, then they must be built
+# together, with identical version numbers. Thus, for simplicity in
+# the build system, whether or not we build only tcl, or both tcl and
+# tk, we must check that the versions are identical.
+ if [ "x$(tcl-version)" != "x$(tk-version)" ]; then
+ printf "Error: This build system requires identical tcl and "
+ printf "tk versions to be selected **even if** tk is not "
+ printf "going to be built. However, tcl-version=$(tcl-version) "
+ printf "while tk-version=$(tk-version)\n"
+ exit 1
+ fi
+
+# Make sure no temporary directory exists.
+ cd $(ddir)
+ unpackdir=tk-$(tk-version)
+ if (printf "$$unpackdir" | grep "[a-z][a-z]"); then
+ rm -rf $$unpackdir
+ fi
+
+# Install TK: zipfs is being disabled because of the problem with
+# installing zip (see the comments above zip).
+ cd $(ddir)
+ tar -xf $(tdir)/$$tarball --no-same-owner --no-same-permissions
+ cd $$unpackdir/unix
+ $(shsrcdir)/prep-source.sh $(ibdir)
+ ./configure --prefix="$(idir)" --with-tcl=$(ildir)
+ make -j$(numthreads)
+ make install
+
+# Finalize.
+ cd $(ddir)
+ if (printf "$$unpackdir" | grep "[a-z][a-z]"); then \
+ rm -fr $$unpackdir; fi
+ echo "Tk $(tk-version)" > $(ibidir)/tk-$(tk-version)
+
+
+
+# WARNING: Dependence on glibc: tzdb (time zone data base) uses the 'zic'
+# program from the GNU C library. Until Maneage builds its own glibc, it is
+# imported from the host operating system in the 'low-level-links' step of
+# 'basic.mk'.
+$(ibidir)/tzdb-$(tzdb-version):
+
+# Import the tarball
+ tarball=tzdb-$(tzdb-version).tar.lz
+ $(call import-source, $(tzdb-url), $(tzdb-checksum))
+
+# Unpack the tarball.
+ cd $(ddir)
+ unpackdir=tzdb-$(tzdb-version)
+ rm -rf $$unpackdir
+ tar -xf $(tdir)/$$tarball --no-same-owner --no-same-permissions
+ cd $$unpackdir
+
+# Make necessary corrections.
+ TZGEN=$(strip $(ddir))/$$unpackdir/tzgen
+ printf "\n\n\n_____TZGEN=$${TZGEN}_____\n\n\n"
+ make AWK=gawk BACKWARD="backward" PACKRATDATA=backzone \
+ PACKRATLIST=zone.tab VERSION_DEPS= tzdata.zi leapseconds
+
+# Build the timezone data
+#
+# The '-b fat' option was created in glibc by around 2020, when
+# '-b slim' became the default. Allowing the default of '-b slim'
+# could potentially lead to a #Y2038 bug [3].
+#
+# Some other hacks are also needed for older glibc.
+#
+# [1] https://mm.icann.org/pipermail/tz-announce/2020-October/000059.html
+# [2] https://github.com/stub42/pytz/issues/48
+# [3] https://en.wikipedia.org/wiki/Year_2038_problem
+ BFAT_OPTION=$$(if (zic -b fat 2>/dev/null); then \
+ printf "%sb fat" "-"; else printf ""; fi)
+ if [ "x$${BFAT_OPTION}" = "x" ]; then \
+ sed -e 's/Sa\([^a-zA-Z]\)/Sat\1/g' \
+ -e 's/Su\([^a-zA-Z]\)/Sun\1/g' \
+ -e 's/^\(.\|..\) Sat/\1 Sa/' \
+ -e "s/lastSu\'/lastSun/" tzdata.zi \
+ | grep -v "^L" \
+ > tzdata.zi.3letter.days
+ zic $${BFAT_OPTION} -d $${TZGEN} -L /dev/null \
+ tzdata.zi.3letter.days
+ zic $${BFAT_OPTION} -d $${TZGEN}/right -L leapseconds \
+ tzdata.zi.3letter.days
+ else
+ zic $${BFAT_OPTION} -d $${TZGEN} -L /dev/null tzdata.zi
+ zic $${BFAT_OPTION} -d $${TZGEN}/right -L leapseconds \
+ tzdata.zi
+ fi
+
+# Replace hardlinks by symlinks
+ if [ "x$${BFAT_OPTION}" = "x" ]; then
+
+# Older method of creating symbolic links:
+ grep '^L ' $(ddir)/$$unpackdir/tzdata.zi \
+ | while read L target name ; do
+ absolute_name="$${TZGEN}/$$name"
+ relative_target=$$(realpath -m -s \
+ --relative-to="$${absolute_name%/*}" \
+ "$${TZGEN}/$$target")
+ maybe_newdir=$$(printf $$name | sed -e "s;/[^/]*\';;")
+ mkdir -p $${TZGEN}/$${maybe_newdir}
+ mkdir -p $${TZGEN}/right/$${maybe_newdir}
+ ln -sf "$$relative_target" "$${TZGEN}/$$name"
+ ln -sf "$$relative_target" "$${TZGEN}/right/$$name"
+ done
+
+ else
+
+# More recent (2025-05-25) method of creating symbolic links:
+ grep '^L ' $(ddir)/$$unpackdir/tzdata.zi \
+ | while read L target name ; do
+ absolute_name="$${TZGEN}/$$name"
+ relative_target=$$(realpath -m -s \
+ --relative-to="$${absolute_name%/*}" \
+ "$${TZGEN}/$$target")
+ ln -sf "$$relative_target" "$${TZGEN}/$$name"
+ ln -sf "$$relative_target" "$${TZGEN}/right/$$name"
+ done
+ fi
+
+# Generate a posixrules file (with a UTC timezone) and install.
+ ln -s Etc/UTC $${TZGEN}/posixrules
+ mkdir -p $(idir)/share/zoneinfo
+ cp -rv $${TZGEN}/* $(idir)/share/zoneinfo/
+ cd $(ddir); rm -rf $$unpackdir
+ echo "IANA Time Zone Database (tzdb) $(tzdb-version)" > $@
+
$(ibidir)/valgrind-$(valgrind-version):
tarball=valgrind-$(valgrind-version).tar.lz
$(call import-source, $(valgrind-url), $(valgrind-checksum))
@@ -964,7 +1306,19 @@ $(ibidir)/wcslib-$(wcslib-version): $(ibidir)/cfitsio-$(cfitsio-version)
tarball=wcslib-$(wcslib-version).tar.lz
$(call import-source, $(wcslib-url), $(wcslib-checksum))
+# macOS arm64 fix: reserve extra space in binary headers so
+# install_name_tool (called bellow, after installation) can safely
+# update library paths. Without this, we get the following error:
+# "larger updated load commands do not fit". SDKROOT is also
+# necessary for system libraries.
+ if [ x$(on_mac_os) = xyes ]; then
+ sdk=$$(xcrun --show-sdk-path)
+ LDFLAGS="$$LDFLAGS -isysroot $$sdk"
+ export LDFLAGS="$$LDFLAGS -Wl,-headerpad_max_install_names"
+ fi
+
# Build WCSLIB while disabling some features:
+#
# - Fortran is disabled because as of May 2023, on macOS systems
# where we do not install GCC (and thus a standard 'gfortran'), the
# LLVM Fortran compiler is not complete and will cause a crash. If
@@ -973,11 +1327,18 @@ $(ibidir)/wcslib-$(wcslib-version): $(ibidir)/cfitsio-$(cfitsio-version)
# systems. Hopefully some time in the future, GCC will also be
# install-able on macOS within Maneage or LLVM's 'gfortran' will
# also be complete and will not cause a crash.
+#
# - PGPLOT is disabled because it has many manual steps in its
# installation. Therefore, we currently do not build PGPlots in
# Maneage. Once (if) it is added, we can remove '--without-pgplot'.
+#
+# - Flex is disabled because we have not made it a prerequisite for
+# the 'wcslib' target, and we don't want the behaviour to differ
+# between host OSes that may or may not have 'flex', or may have
+# different versions of 'flex'.
$(call gbuild, wcslib-$(wcslib-version), , \
LIBS="-pthread -lcurl -lm" \
+ --disable-flex \
--without-pgplot \
--disable-fortran \
--with-cfitsiolib=$(ildir) \
@@ -1190,9 +1551,8 @@ $(ibidir)/ghostscript-$(ghostscript-version): \
# On macOS we use the system compiler and linker. The system linker
# there doesn't support '--copy-dt-needed-entries', while the one on
# Linux crashes if we remove it. So we only activate it on macOS.
- ldflags=""
if [ x$(on_mac_os) = xno ]; then
- ldflags="LDFLAGS=-Wl,--copy-dt-needed-entries"
+ export LDFLAGS="$$LDFLAGS -Wl,--copy-dt-needed-entries"
fi
# Unpack it and configure Ghostscript. The option
@@ -1202,8 +1562,7 @@ $(ibidir)/ghostscript-$(ghostscript-version): \
tar -xf $(tdir)/$$tarball --no-same-owner --no-same-permissions
cd ghostscript-$(ghostscript-version)
$(shsrcdir)/prep-source.sh $(ibdir)
- ./configure $$ldflags \
- --disable-cups \
+ ./configure --disable-cups \
--prefix=$(idir) \
--enable-dynamic \
--disable-compile-inits \
@@ -1405,6 +1764,16 @@ $(ibidir)/imfit-$(imfit-version): \
rm -rf $$unpackdir
echo "Imfit $(imfit-version) \citep{imfit2015}" > $@
+# This is the LIGO lscsoft package 'metaio' [1] (to be distinguished from
+# some other packages with the same name).
+#
+# [1] https://git.ligo.org/lscsoft/metaio
+$(ibidir)/metaio-$(metaio-version):
+ tarball=metaio-$(metaio-version).tar.lz
+ $(call import-source, $(metaio-url), $(metaio-checksum))
+ $(call gbuild, metaio-$(metaio-version), static)
+ echo "Lscsoft Metaio $(metaio-version)" > $@
+
# Minizip 1.x is actually distributed within zlib. It doesn't have its own
# independent tarball. So we need a custom build, which include the GNU
# Autotools (Autoconf and Automake). Note that Minizip 2.x isn't like this
@@ -1511,6 +1880,25 @@ $(ibidir)/netpbm-$(netpbm-version): \
rm -rf $$unpackdir
echo "Netpbm $(netpbm-version)" > $@
+$(ibidir)/parallel-$(parallel-version):
+
+# Prepare the tarball and build it.
+ tarball=parallel-$(parallel-version).tar.lz
+ $(call import-source, $(parallel-url), $(parallel-checksum))
+ $(call gbuild, parallel-$(parallel-version), static)
+
+# GNU Parallel requires the users to acknowledge that they will cite
+# it. Otherwise, it prints a warning on every run: reminding the user
+# to cite it. In Maneage, we make sure that all software that request
+# citation are cited automatically, so there is no need for a
+# Maneager to get this warning and we can automatically ensure the
+# developer that it will be cited.
+ echo "will cite" | $(ibdir)/parallel --citation
+
+# Copy the BibTeX source of the citation and finish.
+ cp -pv $(dtexdir)/parallel.tex $(ictdir)/
+ echo "GNU Parallel $(parallel-version) \citep{parallel}" > $@
+
$(ibidir)/patch-$(patch-version):
tarball=patch-$(patch-version).tar.gz
$(call import-source, $(patch-url), $(patch-checksum))
@@ -1529,6 +1917,13 @@ $(ibidir)/pcre-$(pcre-version):
, V=1 -j$(numthreads))
echo "Perl Compatible Regular Expressions $(pcre-version)" > $@
+$(ibidir)/pcre2-$(pcre2-version):
+ tarball=pcre2-$(pcre2-version).tar.lz
+ $(call import-source, $(pcre2-url), $(pcre2-checksum))
+ $(call gbuild, pcre2-$(pcre2-version), static)
+ echo "Perl Compatible Regular Expressions 2 $(pcre2-version)" > $@
+
+
# On macOS 12.3 Monterey with AppleClang 13.1.6.13160021, Plplot 5.15.0
# needs the 'finite' function of 'math.h' which has been deprecated in
# macOS. By manually adding "#define finite isfinite" in 'math.h' like
@@ -1695,15 +2090,13 @@ $(ibidir)/swarp-$(swarp-version): $(ibidir)/fftw-$(fftw-version)
cp $(dtexdir)/swarp.tex $(ictdir)/
echo "SWarp $(swarp-version) \citep{swarp}" > $@
-$(ibidir)/swig-$(swig-version):
-
-# 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
+$(ibidir)/swig-$(swig-version): \
+ $(ibidir)/pcre2-$(pcre2-version)
+# Not disabling pcre, since PCRE is needed for lalsuite (python).
tarball=swig-$(swig-version).tar.lz
$(call import-source, $(swig-url), $(swig-checksum))
$(call gbuild, swig-$(swig-version), static, \
- --without-pcre --without-tcl)
+ --without-tcl)
echo "Swig $(swig-version)" > $@
# The disables:
@@ -1779,6 +2172,10 @@ $(ibidir)/util-linux-$(util-linux-version): \
sed -i '/flex/d' autogen.sh
./autogen.sh
+# The 'autogen.sh' call resets the 'SHELL' (that was corrected in
+# 'prep-source.sh') to '/bin/sh'. Therefore, we need to correct it.
+ sed -i -e's|SHELL = /bin/sh|SHELL = $(SHELL)|' po/Makefile.in.in
+
# Having updated 'configure.ac', we need to re-generate the
# './configure' script with 'autoreconf' (which is part of Autoconf
# and needs Automake; hence why they are dependencies.
@@ -1892,16 +2289,28 @@ $(ibidir)/unzip-$(unzip-version): $(ibidir)/gzip-$(gzip-version)
BINDIR=$(ibdir) MANDIR=$(idir)/man/man1 )
echo "Unzip $(unzip-version)" > $@
-$(ibidir)/zip-$(zip-version): $(ibidir)/gzip-$(gzip-version)
+$(ibidir)/zip-$(zip-version):
+
+# Prepare the tarball and build directory.
tarball=zip-$(zip-version).tar.lz
$(call import-source, $(zip-url), $(zip-checksum))
- $(call gbuild, zip-$(zip-version), static,, \
- -f unix/Makefile generic \
- CFLAGS="-DBIG_MEM -DMMAP",,pwd, \
- -f unix/Makefile generic \
- BINDIR=$(ibdir) MANDIR=$(idir)/man/man1 )
- echo "Zip $(zip-version)" > $@
+# Unpack and go into the directory.
+ export LDFLAGS="$$LDFLAGS -static"
+ cd $(ddir)
+ rm -fr zip-$(zip-version)/
+ tar -xf $(tdir)/$$tarball --no-same-owner --no-same-permissions
+ cd zip-$(zip-version)/
+
+# Build and install
+ make SHELL=$(ibdir)/bash -f unix/Makefile generic
+ make SHELL=$(ibdir)/bash install -f unix/Makefile \
+ generic BINDIR=$(ibdir) MANDIR=$(idir)/man/man1
+
+# Go back to the top build directory, clean up and finalize.
+ cd $(ddir)
+ rm -rf zip-$(zip-version)/
+ echo "Zip $(zip-version)" > $@
diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk
index c499996..6153f0a 100644
--- a/reproduce/software/make/python.mk
+++ b/reproduce/software/make/python.mk
@@ -83,7 +83,11 @@ $(ibidir)/libffi-$(libffi-version):
fi
echo "Libffi $(libffi-version)" > $@
-$(ibidir)/python-$(python-version): $(ibidir)/libffi-$(libffi-version)
+# 2025-05-26 '--with-system-ffi' seems to be obsolete
+# TODO: For a recommended list of dependencies, see
+# https://github.com/pyenv/pyenv/wiki#suggested-build-environment
+$(ibidir)/python-$(python-version): $(ibidir)/libffi-$(libffi-version) \
+ $(ibidir)/sqlite-$(sqlite-version)
# Download the source.
tarball=python-$(python-version).tar.lz
@@ -346,12 +350,27 @@ $(ipydir)/astropy-$(astropy-version): \
rm -fv $(idir)/bin/fits{diff,check,header,info,2bitmap}
rm -fv $(idir)/bin/{samp_hub,showtable,volint,wcslint}
+# Uncomment the 'export' command below only when building from a git
+# tarball, e.g. for testing if a bug still occurs:
+# export SETUPTOOLS_SCM_PRETEND_VERSION_FOR_ASTROPY=7.2.0.87
+
# Do the basic build.
$(call pybuild, tar -xf, astropy-$(astropy-version),,, \
GPEP517)
cp -pv $(dtexdir)/astropy.tex $(ictdir)/
echo "Astropy $(astropy-version) \citep{astropy2013,astropy2018}" > $@
+$(ipydir)/astropy-healpix-$(astropy-healpix-version): \
+ $(ipydir)/extension-helpers-$(extension-helpers-version) \
+ $(ipydir)/numpy-$(numpy-version)
+ tarball=astropy-healpix-$(astropy-healpix-version).tar.lz
+ $(call import-source, $(astropy-healpix-url), \
+ $(astropy-healpix-checksum))
+ $(call pybuild, tar -xf, \
+ astropy-healpix-$(astropy-healpix-version),,, \
+ GPEP517)
+ echo "Astropy-healpix $(astropy-healpix-version)" > $@
+
$(ipydir)/astropy-iers-data-$(astropy-iers-data-version): \
$(ipydir)/setuptools-$(setuptools-version)
tarball=astropy-iers-data-$(astropy-iers-data-version).tar.lz
@@ -360,7 +379,7 @@ $(ipydir)/astropy-iers-data-$(astropy-iers-data-version): \
$(call pybuild, tar -xf, \
astropy-iers-data-$(astropy-iers-data-version),,, \
GPEP517)
- echo "Astropy-Iers-Data $(astropy-iers-data-version)" > $@
+ echo "Astropy-IERS-data $(astropy-iers-data-version)" > $@
$(ipydir)/beautifulsoup4-$(beautifulsoup4-version): \
$(ipydir)/soupsieve-$(soupsieve-version)
@@ -400,6 +419,13 @@ $(ipydir)/chardet-$(chardet-version): \
$(call pybuild, tar -xf, chardet-$(chardet-version), , \
Chardet $(chardet-version))
+$(ipydir)/colorama-$(colorama-version): \
+ $(ipydir)/hatchling-$(hatchling-version)
+ tarball=colorama-$(colorama-version).tar.lz
+ $(call import-source, $(colorama-url), $(colorama-checksum))
+ $(call pybuild, tar -xf, \
+ colorama-$(colorama-version),,, GPEP517)
+
$(ipydir)/contourpy-$(contourpy-version): \
$(ipydir)/pybind11-$(pybind11-version) \
$(ipydir)/meson-python-$(meson-python-version)
@@ -417,6 +443,15 @@ $(ipydir)/corner-$(corner-version): $(ipydir)/matplotlib-$(matplotlib-version)
cp $(dtexdir)/corner.tex $(ictdir)/
echo "Corner $(corner-version) \citep{corner}" > $@
+$(ipydir)/cosmodesi-mpytools-$(cosmodesi-mpytools-version): \
+ $(ipydir)/numpy-$(numpy-version) \
+ $(ipydir)/scipy-$(scipy-version)
+ tarball=cosmodesi-mpytools-$(cosmodesi-mpytools-version).tar.lz
+ $(call import-source, $(cosmodesi-mpytools-url), $(cosmodesi-mpytools-checksum))
+ $(call pybuild, tar -xf, cosmodesi-mpytools-$(cosmodesi-mpytools-version), , \
+ Cosmodesi-mpytools $(cosmodesi-mpytools-version), GPEP517)
+ echo "Cosmodesi-mpytools $(cosmodesi-mpytools-version)" > $@
+
$(ipydir)/cppy-$(cppy-version): \
$(ipydir)/setuptools-scm-$(setuptools-scm-version)
tarball=cppy-$(cppy-version).tar.lz
@@ -482,6 +517,15 @@ $(ipydir)/entrypoints-$(entrypoints-version): \
$(call pybuild, tar -xf, entrypoints-$(entrypoints-version), , \
EntryPoints $(entrypoints-version))
+$(ipydir)/exceptiongroup-$(exceptiongroup-version): \
+ $(ipydir)/setuptools-$(setuptools-version) \
+ $(ipydir)/flit-scm-$(flit-scm-version)
+ tarball=exceptiongroup-$(exceptiongroup-version).tar.lz
+ $(call import-source, $(exceptiongroup-url), $(exceptiongroup-checksum))
+ $(call pybuild, tar -xf, exceptiongroup-$(exceptiongroup-version), , \
+ Exceptiongroup $(exceptiongroup-version), GPEP517)
+
+
$(ipydir)/extension-helpers-$(extension-helpers-version): \
$(ipydir)/setuptools-scm-$(setuptools-scm-version)
tarball=extension-helpers-$(extension-helpers-version).tar.lz
@@ -507,6 +551,16 @@ $(ipydir)/flit-core-$(flit-core-version): \
$(call pybuild, tar -xf, flit-core-$(flit-core-version), , \
Flit-core $(flit-core-version), GPEP517)
+
+$(ipydir)/flit-scm-$(flit-scm-version): \
+ $(ipydir)/flit-core-$(flit-core-version) \
+ $(ipydir)/setuptools-scm-$(setuptools-scm-version)
+ tarball=flit-scm-$(flit-scm-version).tar.lz
+ $(call import-source, $(flit-scm-url), $(flit-scm-checksum))
+ $(call pybuild, tar -xf, flit-scm-$(flit-scm-version), , \
+ flit-scm $(flit-scm-version), GPEP517)
+
+
# Although cython is not an obligatory prerequisite of fonttools, we force
# it as a prerequisite for reproducibility; otherwise build parallelism may
# lead to some builds with and some builds without cython, depending on how
@@ -558,6 +612,23 @@ $(ipydir)/gpep517-$(gpep517-version): \
BOOT_GPEP517)
echo "gpep517 $(gpep517-version)" > $@
+$(ipydir)/hatchling-$(hatchling-version): \
+ $(ipydir)/packaging-$(packaging-version) \
+ $(ipydir)/pathspec-$(pathspec-version) \
+ $(ipydir)/pluggy-$(pluggy-version) \
+ $(ipydir)/trove-classifiers-$(trove-classifiers-version)
+ tarball=hatchling-$(hatchling-version).tar.lz
+ $(call import-source, $(hatchling-url), $(hatchling-checksum))
+ $(call pybuild, tar -xf, \
+ hatchling-$(hatchling-version),,, GPEP517)
+
+$(ipydir)/hatch-vcs-$(hatch-vcs-version): \
+ $(ipydir)/hatchling-$(hatchling-version)
+ tarball=hatch-vcs-$(hatch-vcs-version).tar.lz
+ $(call import-source, $(hatch-vcs-url), $(hatch-vcs-checksum))
+ $(call pybuild, tar -xf, hatch-vcs-$(hatch-vcs-version), , \
+ Hatch-vcs $(hatch-vcs-version), GPEP517)
+
$(ipydir)/h5py-$(h5py-version): \
$(ipydir)/six-$(six-version) \
$(ibidir)/hdf5-$(hdf5-version) \
@@ -572,15 +643,38 @@ $(ipydir)/h5py-$(h5py-version): \
$(call pybuild, tar -xf, h5py-$(h5py-version), , \
h5py $(h5py-version))
-# 'healpy' is actually installed as part of the HEALPix package. It will be
-# installed with its C/C++ libraries if any other Python library is
-# requested with HEALPix. So actually calling for 'healpix' (when 'healpix'
-# is requested) is not necessary. But some users might not know about this
-# and just ask for 'healpy'. To avoid confusion in such cases, we'll just
-# set 'healpy' to be dependent on 'healpix' and not download any tarball
-# for it, or write anything in the final target.
-$(ipydir)/healpy-$(healpy-version): $(ibidir)/healpix-$(healpix-version)
- touch $@
+# As of 2025-05-20, there are at least three python healpix packages at
+# pypi.org, with versions:
+#
+# https://pypi.org/project/healpy 1.18.1
+# https://pypi.org/project/healpix 2024.2
+# https://pypi.org/project/astropy-healpix 1.1.2
+#
+# Maneage provides both 'healpy' and 'astropy-healpix', independently. We
+# ignore pypix 'healpix', whose name risks confusion with the C/C++/fortran
+# version of healpix.
+#
+# For simplicity and error tracing, you should best install either healpy
+# or astropy-healpix, not both. For example, astropy_healpix/healpy.py has
+# an interface to provide 'healpy' type function names. However, it may be
+# possible to use both if your python imports avoid namespace clashes. See
+# the documentation and source code of the respective packages to study how
+# they relate to one another.
+#
+# The 'healpy' package requires the C/C++ 'healpix' package to be built
+# in order to use the shared 'libsharp' library.
+$(ipydir)/healpy-$(healpy-version): \
+ $(ibidir)/healpix-$(healpix-version) \
+ $(ipydir)/matplotlib-$(matplotlib-version) \
+ $(ipydir)/scipy-$(scipy-version)
+ tarball=healpy-$(healpy-version).tar.lz
+ $(call import-source, $(healpy-url), \
+ $(healpy-checksum))
+ $(call pybuild, tar -xf, \
+ healpy-$(healpy-version),,, \
+ GPEP517)
+ echo "Healpy $(healpy-version)" > $@
+
$(ipydir)/html5lib-$(html5lib-version): \
$(ipydir)/six-$(six-version) \
@@ -612,6 +706,13 @@ $(ipydir)/jinja2-$(jinja2-version): $(ipydir)/markupsafe-$(markupsafe-version)
$(call pybuild, tar -xf, jinja2-$(jinja2-version), , \
Jinja2 $(jinja2-version))
+$(ipydir)/joblib-$(joblib-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=joblib-$(joblib-version).tar.lz
+ $(call import-source, $(joblib-url), $(joblib-checksum))
+ $(call pybuild, tar -xf, \
+ joblib-$(joblib-version),,, GPEP517)
+
$(ipydir)/keyring-$(keyring-version): \
$(ipydir)/entrypoints-$(entrypoints-version) \
$(ipydir)/secretstorage-$(secretstorage-version) \
@@ -631,6 +732,48 @@ $(ipydir)/kiwisolver-$(kiwisolver-version): \
cp -pv $(dtexdir)/kiwisolver.tex $(ictdir)/
echo "Kiwisolver $(kiwisolver-version) \citep{cassowary2001}" > $@
+# 2025-05-21: As of Feb 2025, it appears the lscsoft group is not maintaining
+# python-ligo-lw and ligo-segments; the LIGO Computing Group forked these
+# to igwn-ligolw and igwn-segments, respectively [1].
+# [1] https://github.com/ahnitz/ligo-segments/issues/1
+$(ipydir)/igwn-segments-$(igwn-segments-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=igwn-segments-$(igwn-segments-version).tar.lz
+ $(call import-source, $(igwn-segments-url), $(igwn-segments-checksum))
+ $(call pybuild, tar -xf, \
+ igwn-segments-$(igwn-segments-version),, \
+ Igwn-segments $(igwn-segments-version), GPEP517)
+
+
+$(ipydir)/iniconfig-$(iniconfig-version): \
+ $(ipydir)/hatch-vcs-$(hatch-vcs-version)
+ tarball=iniconfig-$(iniconfig-version).tar.lz
+ $(call import-source, $(iniconfig-url), $(iniconfig-checksum))
+ $(call pybuild, tar -xf, iniconfig-$(iniconfig-version), , \
+ Iniconfig $(iniconfig-version), GPEP517)
+
+# Upstream this is called ligo.skymap with a full stop '.'; we replace it
+# by a hyphen '-' to reduce the chance of regex errors.
+#
+# 2025-05-19 Warning: this might have some undetected dependencies.
+$(ipydir)/ligo-skymap-$(ligo-skymap-version): \
+ $(ibidir)/gsl-$(gsl-version) \
+ $(ipydir)/tqdm-$(tqdm-version) \
+ $(ibidir)/sqlite-$(sqlite3-version) \
+ $(ipydir)/astropy-$(astropy-version) \
+ $(ipydir)/lalsuite-$(lalsuite-version) \
+ $(ipydir)/igwn-ligolw-$(igwn-ligolw-version) \
+ $(ipydir)/igwn-segments-$(igwn-segments-version) \
+ $(ipydir)/astropy-healpix-$(astropy-healpix-version)
+ tarball=ligo-skymap-$(ligo-skymap-version).tar.lz
+ $(call import-source, $(ligo-skymap-url), \
+ $(ligo-skymap-checksum))
+ $(call pybuild, tar -xf, \
+ ligo-skymap-$(ligo-skymap-version),,, \
+ GPEP517)
+ echo "ligo-skymap $(ligo-skymap-version)" > $@
+
+
$(ipydir)/lmfit-$(lmfit-version): \
$(ipydir)/six-$(six-version) \
$(ipydir)/scipy-$(scipy-version) \
@@ -644,6 +787,14 @@ $(ipydir)/lmfit-$(lmfit-version): \
$(call pybuild, tar -xf, lmfit-$(lmfit-version), , \
LMFIT $(lmfit-version))
+$(ipydir)/lscsoft-glue-$(lscsoft-glue-version): \
+ $(ipydir)/gpep517-$(gpep517-version) \
+ $(ipydir)/python-installer-$(python-installer-version)
+ tarball=lscsoft-glue-$(lscsoft-glue-version).tar.lz
+ $(call import-source, $(lscsoft-glue-url), $(lscsoft-glue-checksum))
+ $(call pybuild, tar -xf, \
+ lscsoft-glue-$(lscsoft-glue-version),,, GPEP517)
+
$(ipydir)/lsstdesccoord-$(lsstdesccoord-version): \
$(ipydir)/cffi-$(cffi-version) \
$(ipydir)/numpy-$(numpy-version) \
@@ -661,11 +812,19 @@ $(ipydir)/markupsafe-$(markupsafe-version): \
$(call pybuild, tar -xf, markupsafe-$(markupsafe-version), , \
MarkupSafe $(markupsafe-version))
+# As of 2026-04-19: Matplotlib needs internet to download and build its
+# custom versions of 'freetype' and 'qhull'. The proposed option to 'python
+# -m pip instsall' in [1] for using system libraries was tested, but did
+# not work in this setup (our 'pybuild' uses 'python -m gpep517
+# install-from-source', not 'pip').
+#
+# [1] https://matplotlib.org/stable/install/dependencies.html
$(ipydir)/matplotlib-$(matplotlib-version): \
$(itidir)/texlive \
$(ipydir)/numpy-$(numpy-version) \
$(ipydir)/cycler-$(cycler-version) \
$(ipydir)/pillow-$(pillow-version) \
+ $(ibidir)/freetype-$(freetype-version) \
$(ipydir)/fonttools-$(fonttools-version) \
$(ipydir)/contourpy-$(contourpy-version) \
$(ipydir)/kiwisolver-$(kiwisolver-version) \
@@ -706,12 +865,11 @@ $(ipydir)/meson-python-$(meson-python-version): \
echo "Meson-Python $(meson-python-version)" > $@
$(ipydir)/mpi4py-$(mpi4py-version): \
- $(ipydir)/gpep517-$(gpep517-version) \
$(ibidir)/openmpi-$(openmpi-version) \
- $(ipydir)/python-installer-$(python-installer-version)
+ $(ipydir)/cython-$(cython-version)
tarball=mpi4py-$(mpi4py-version).tar.lz
$(call import-source, $(mpi4py-url), $(mpi4py-checksum))
- $(call pybuild, tar -xf, mpi4py-$(mpi4py-version))
+ $(call pybuild, tar -xf, mpi4py-$(mpi4py-version),,, GPEP517)
cp $(dtexdir)/mpi4py.tex $(ictdir)/
echo "mpi4py $(mpi4py-version) \citep{mpi4py2011}" > $@
@@ -723,8 +881,17 @@ $(ipydir)/mpmath-$(mpmath-version): \
$(call pybuild, tar -xf, mpmath-$(mpmath-version), , \
mpmath $(mpmath-version))
-# Until 2025-02-22: we had 'export CFLAGS="--std=c99 $$CFLAGS"' before
-# calling pybuild; but that doesn't seem to be necessary.
+$(ipydir)/networkx-$(networkx-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=networkx-$(networkx-version).tar.lz
+ $(call import-source, $(networkx-url), $(networkx-checksum))
+ $(call pybuild, tar -xf, \
+ networkx-$(networkx-version),,, \
+ GPEP517)
+ echo "networkx $(networkx-version)" > $@
+
+# Numpy's MacOS builds using Xcode prior to 26.3 needed the following flags
+# added to 'LDFLAGS': '-undefined dynamic_lookup -bundle'.
$(ipydir)/numpy-$(numpy-version): \
$(ipydir)/cython-$(cython-version) \
$(ibidir)/openblas-$(openblas-version) \
@@ -732,9 +899,6 @@ $(ipydir)/numpy-$(numpy-version): \
$(ipydir)/meson-python-$(meson-python-version)
tarball=numpy-$(numpy-version).tar.lz
$(call import-source, $(numpy-url), $(numpy-checksum))
- if [ x$(on_mac_os) = xyes ]; then
- export LDFLAGS="$(LDFLAGS) -undefined dynamic_lookup -bundle"
- fi
conf="$$(pwd)/reproduce/software/config/numpy-scipy.cfg"
$(call pybuild, tar -xf, numpy-$(numpy-version),$$conf, \
Numpy $(numpy-version), GPEP517)
@@ -748,6 +912,23 @@ $(ipydir)/packaging-$(packaging-version): \
$(call pybuild, tar -xf, packaging-$(packaging-version), , \
Packaging $(packaging-version), GPEP517)
+$(ipydir)/pandas-$(pandas-version): \
+ $(ipydir)/numpy-$(numpy-version) \
+ $(ipydir)/versioneer-$(versioneer-version) \
+ $(ipydir)/pytz-$(pytz-version)
+ tarball=pandas-$(pandas-version).tar.lz
+ $(call import-source, $(pandas-url), $(pandas-checksum))
+ $(call pybuild, tar -xf, pandas-$(pandas-version), , \
+ Pandas $(pandas-version), GPEP517)
+ echo "pandas $(pandas-version)" > $@
+
+$(ipydir)/pathspec-$(pathspec-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pathspec-$(pathspec-version).tar.lz
+ $(call import-source, $(pathspec-url), $(pathspec-checksum))
+ $(call pybuild, tar -xf, \
+ pathspec-$(pathspec-version),,, GPEP517)
+
$(ipydir)/pexpect-$(pexpect-version): \
$(ipydir)/gpep517-$(gpep517-version) \
$(ipydir)/python-installer-$(python-installer-version)
@@ -773,6 +954,13 @@ $(ipydir)/pillow-$(pillow-version): $(ibidir)/libjpeg-$(libjpeg-version) \
# $(call pybuild, tar -xf, pip-$(pip-version), , \
# PiP $(pip-version))
+$(ipydir)/pluggy-$(pluggy-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pluggy-$(pluggy-version).tar.lz
+ $(call import-source, $(pluggy-url), $(pluggy-checksum))
+ $(call pybuild, tar -xf, \
+ pluggy-$(pluggy-version),,, GPEP517)
+
$(ipydir)/ply-$(ply-version): \
$(ipydir)/gpep517-$(gpep517-version) \
$(ipydir)/python-installer-$(python-installer-version)
@@ -828,6 +1016,13 @@ $(ipydir)/pyflakes-$(pyflakes-version): \
$(call pybuild, tar -xf, pyflakes-$(pyflakes-version), , \
pyflakes $(pyflakes-version))
+$(ipydir)/pygments-$(pygments-version): \
+ $(ipydir)/hatchling-$(hatchling-version)
+ tarball=pygments-$(pygments-version).tar.lz
+ $(call import-source, $(pygments-url), $(pygments-checksum))
+ $(call pybuild, tar -xf, pygments-$(pygments-version), , \
+ Pygments $(pygments-version), GPEP517)
+
$(ipydir)/pyparsing-$(pyparsing-version): \
$(ipydir)/gpep517-$(gpep517-version) \
$(ipydir)/flit-core-$(flit-core-version) \
@@ -854,8 +1049,26 @@ $(ipydir)/pyproject-metadata-$(pyproject-metadata-version): \
$(call pybuild, tar -xf, \
pyproject-metadata-$(pyproject-metadata-version),,, GPEP517)
+
+$(ipydir)/pytest-$(pytest-version): \
+ $(ipydir)/setuptools-scm-$(setuptools-scm-version) \
+ $(ipydir)/colorama-$(colorama-version) \
+ $(ipydir)/exceptiongroup-$(exceptiongroup-version) \
+ $(ipydir)/iniconfig-$(iniconfig-version) \
+ $(ipydir)/packaging-$(packaging-version) \
+ $(ipydir)/pluggy-$(pluggy-version) \
+ $(ipydir)/pygments-$(pygments-version)
+ tarball=pytest-$(pytest-version).tar.lz
+ $(call import-source, $(pytest-url), $(pytest-checksum))
+ $(call pybuild, tar -xf, \
+ pytest-$(pytest-version),,, \
+ GPEP517)
+ echo "pytest $(pytest-version)" > $@
+
+
$(ipydir)/python-dateutil-$(python-dateutil-version): \
- $(ipydir)/setuptools-scm-$(setuptools-scm-version)
+ $(ipydir)/setuptools-scm-$(setuptools-scm-version) \
+ $(ipydir)/six-$(six-version)
tarball=python-dateutil-$(python-dateutil-version).tar.lz
$(call import-source, $(python-dateutil-url), $(python-dateutil-checksum))
$(call pybuild, tar -xf, python-dateutil-$(python-dateutil-version), , \
@@ -885,6 +1098,37 @@ $(ipydir)/python-installer-$(python-installer-version): \
BOOT_INSTALLER)
echo "Python-installer $(python-installer-version)" > $@
+# 2025-05-21: As of Feb 2025, it appears the lscsoft group is not maintaining
+# python-ligo-lw and ligo-segments; the LIGO Computing Group forked these
+# to igwn-ligolw and igwn-segments, respectively [1].
+# [1] https://github.com/ahnitz/ligo-segments/issues/1
+$(ipydir)/igwn-ligolw-$(igwn-ligolw-version): \
+ $(ipydir)/setuptools-scm-$(setuptools-scm-version)
+ tarball=igwn-ligolw-$(igwn-ligolw-version).tar.lz
+ $(call import-source, $(igwn-ligolw-url), \
+ $(igwn-ligolw-checksum))
+ $(call pybuild, tar -xf, \
+ igwn-ligolw-$(igwn-ligolw-version),,, \
+ GPEP517)
+ echo "igwn-ligolw $(igwn-ligolw-version)" > $@
+
+$(ipydir)/pyfftw-$(pyfftw-version): $(ipydir)/numpy-$(numpy-version) \
+ $(ibidir)/fftw-$(fftw-version)
+ tarball=pyfftw-$(pyfftw-version).tar.lz
+ $(call import-source, $(pyfftw-url), $(pyfftw-checksum))
+ $(call pybuild, tar -xf, pyfftw-$(pyfftw-version), , \
+ Pyfftw $(pyfftw-version), GPEP517)
+
+
+# Called 'fitsio' in pypi.org: https://pypi.org/project/fitsio
+$(ipydir)/python3-fitsio-$(python3-fitsio-version): \
+ $(ibidir)/patch-$(patch-version) \
+ $(ipydir)/numpy-$(numpy-version)
+ tarball=python3-fitsio-$(python3-fitsio-version).tar.lz
+ $(call import-source, $(python3-fitsio-url), $(python3-fitsio-checksum))
+ $(call pybuild, tar -xf, python3-fitsio-$(python3-fitsio-version), , \
+ Python3 Fitsio $(python3-fitsio-version), GPEP517)
+
$(ipydir)/pythran-$(pythran-version): \
$(ipydir)/ply-$(ply-version) \
$(ipydir)/gast-$(gast-version) \
@@ -904,6 +1148,13 @@ $(ipydir)/pyyaml-$(pyyaml-version): \
$(call pybuild, tar -xf, pyyaml-$(pyyaml-version), , \
PyYAML $(pyyaml-version), GPEP517)
+$(ipydir)/pytz-$(pytz-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=pytz-$(pytz-version).tar.lz
+ $(call import-source, $(pytz-url), $(pytz-checksum))
+ $(call pybuild, tar -xf, pytz-$(pytz-version), , \
+ Pytz $(pytz-version), GPEP517)
+
$(ipydir)/requests-$(requests-version): $(ipydir)/idna-$(idna-version) \
$(ipydir)/numpy-$(numpy-version) \
$(ipydir)/certifi-$(certifi-version) \
@@ -914,41 +1165,39 @@ $(ipydir)/requests-$(requests-version): $(ipydir)/idna-$(idna-version) \
$(call pybuild, tar -xf, requests-$(requests-version), , \
Requests $(requests-version))
-# 'pythran' is disabled in the build of Scipy because of complications it
-# caused on some systems. We explicitly disable it using a preprocessor
-# directive. 'Pythran' can in principle speed up compilation of scientific
-# software [1][2].
+# Scipy building notes:
+#
+# 1. 'pythran' is disabled in the build of Scipy because of complications
+# it caused on some systems. 'Pythran' can in principle speed up
+# compilation of scientific software [1][2]. We explicitly disable it by
+# modifying the source. Technically it should also be possible to pass
+# the following option to the gpep517 build recipes with correct
+# escaping of single and double quotes, but this has not tried as of
+# 2025-02-25.
+# --config-json='{"setup-args":"-Duse-pythran=false"}'
+#
+# 2. Scipy's MacOS builds using Xcode prior to 26.3 needed the following
+# flags added to 'LDFLAGS': '-undefined dynamic_lookup -bundle'.
+#
# [1] https://pythran.readthedocs.io/en/latest
-# [2] https://docs.scipy.org/doc/scipy-1.15.2/dev/roadmap-detailed.html
+# [2] https://docs.scipy.org/doc/scipy-1.15.2/dev/roadmap-detailed.html#use-of-pythran
$(ipydir)/scipy-$(scipy-version): \
$(ipydir)/numpy-$(numpy-version) \
$(ipydir)/pybind11-$(pybind11-version)
+
+# Import the tarball.
tarball=scipy-$(scipy-version).tar.lz
$(call import-source, $(scipy-url), $(scipy-checksum))
- if [ x$(on_mac_os) = xyes ]; then
- export LDFLAGS="$(LDFLAGS) -undefined dynamic_lookup -bundle"
- else
-# Same question as for 'numpy': why '-shared'? This obstructs
-# the meson build.
-# export LDFLAGS="$(LDFLAGS) -shared"
- :
- fi
- conf="$$(pwd)/reproduce/software/config/numpy-scipy.cfg"
-# Disable pythran: see
-# https://docs.scipy.org/doc/scipy-1.15.2/dev/roadmap-detailed.html#use-of-pythran
-# export SCIPY_USE_PYTHRAN=0 # deprecated(?)
-# Option 1: Hack the source:
+# Disable pythran (see above).
pyhook_before() {
mv -iv meson.options meson.options.orig; \
sed -e 's/\(use-pythran.*value: *\)true/\1false/' \
meson.options.orig > meson.options
}
-# Option 2: pass the string
-# --config-json='{"setup-args": "-Duse-pythran=false"}'
-# to gpep517 with correct escaping of single and double quotes.
-# Not tried as of 2025-02-25.
+# Build Scipy.
+ conf="$$(pwd)/reproduce/software/config/numpy-scipy.cfg"
$(call pybuild, tar -xf, scipy-$(scipy-version),$$conf,, GPEP517)
cp $(dtexdir)/scipy.tex $(ictdir)/
echo "Scipy $(scipy-version) \citep{scipy2020}" > $@
@@ -1003,6 +1252,26 @@ $(ipydir)/sip_tpv-$(sip_tpv-version): \
cp $(dtexdir)/sip_tpv.tex $(ictdir)/
echo "sip_tpv $(sip_tpv-version) \citep{sip-tpv}" > $@
+$(ipydir)/scikit-base-$(scikit-base-version): \
+ $(ipydir)/gpep517-$(gpep517-version) \
+ $(ipydir)/python-installer-$(python-installer-version)
+ tarball=scikit-base-$(scikit-base-version).tar.lz
+ $(call import-source, $(scikit-base-url), $(scikit-base-checksum))
+ $(call pybuild, tar -xf, scikit-base-$(scikit-base-version), , \
+ Scikit-base $(scikit-base-version), GPEP517)
+ echo "scikit-base $(scikit-base-version)" > $@
+
+$(ipydir)/scikit-learn-$(scikit-learn-version): \
+ $(ipydir)/joblib-$(joblib-version) \
+ $(ipydir)/threadpoolctl-$(threadpoolctl-version) \
+ $(ipydir)/numpy-$(numpy-version) \
+ $(ipydir)/scipy-$(scipy-version)
+ tarball=scikit-learn-$(scikit-learn-version).tar.lz
+ $(call import-source, $(scikit-learn-url), $(scikit-learn-checksum))
+ $(call pybuild, tar -xf, scikit-learn-$(scikit-learn-version), , \
+ Scikit-learn $(scikit-learn-version), GPEP517)
+ echo "scikit-learn $(scikit-learn-version)" > $@
+
$(ipydir)/six-$(six-version): \
$(ipydir)/setuptools-$(setuptools-version)
tarball=six-$(six-version).tar.lz
@@ -1026,6 +1295,29 @@ $(ipydir)/sympy-$(sympy-version): $(ipydir)/mpmath-$(mpmath-version)
cp $(dtexdir)/sympy.tex $(ictdir)/
echo "SymPy $(sympy-version) \citep{sympy}" > $@
+$(ipydir)/threadpoolctl-$(threadpoolctl-version): \
+ $(ipydir)/flit-core-$(flit-core-version)
+ tarball=threadpoolctl-$(threadpoolctl-version).tar.lz
+ $(call import-source, $(threadpoolctl-url), $(threadpoolctl-checksum))
+ $(call pybuild, tar -xf, threadpoolctl-$(threadpoolctl-version), , \
+ threadpoolctl $(threadpoolctl-version), GPEP517)
+ echo "threadpoolctl $(threadpoolctl-version)" > $@
+
+$(ipydir)/tqdm-$(tqdm-version): \
+ $(ipydir)/setuptools-scm-$(setuptools-scm-version)
+ tarball=tqdm-$(tqdm-version).tar.lz
+ $(call import-source, $(tqdm-url), $(tqdm-checksum))
+ $(call pybuild, tar -xf, \
+ tqdm-$(tqdm-version),, \
+ Tqdm $(tqdm-version), GPEP517)
+
+$(ipydir)/trove-classifiers-$(trove-classifiers-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=trove-classifiers-$(trove-classifiers-version).tar.lz
+ $(call import-source, $(trove-classifiers-url), $(trove-classifiers-checksum))
+ $(call pybuild, tar -xf, \
+ trove-classifiers-$(trove-classifiers-version),,, GPEP517)
+
$(ipydir)/uncertainties-$(uncertainties-version): $(ipydir)/numpy-$(numpy-version)
tarball=uncertainties-$(uncertainties-version).tar.lz
$(call import-source, $(uncertainties-url), $(uncertainties-checksum))
@@ -1040,6 +1332,13 @@ $(ipydir)/urllib3-$(urllib3-version): \
$(call pybuild, tar -xf, urllib3-$(urllib3-version), , \
Urllib3 $(urllib3-version))
+$(ipydir)/versioneer-$(versioneer-version): \
+ $(ipydir)/setuptools-$(setuptools-version)
+ tarball=versioneer-$(versioneer-version).tar.lz
+ $(call import-source, $(versioneer-url), $(versioneer-checksum))
+ $(call pybuild, tar -xf, versioneer-$(versioneer-version), , \
+ Versioneer $(versioneer-version), GPEP517)
+
$(ipydir)/webencodings-$(webencodings-version): \
$(ipydir)/setuptools-$(setuptools-version) \
$(ipydir)/setuptools-scm-$(setuptools-scm-version)
diff --git a/reproduce/software/make/xorg.mk b/reproduce/software/make/xorg.mk
index db42d70..33847f3 100644
--- a/reproduce/software/make/xorg.mk
+++ b/reproduce/software/make/xorg.mk
@@ -120,6 +120,7 @@ $(ibidir)/fontconfig-$(fontconfig-version): \
$(ibidir)/libxml2-$(libxml2-version) \
$(ibidir)/freetype-$(freetype-version) \
$(ibidir)/util-linux-$(util-linux-version)
+
# Import the source.
tarball=fontconfig-$(fontconfig-version).tar.lz
$(call import-source, $(fontconfig-url), $(fontconfig-checksum))
diff --git a/reproduce/software/shell/apptainer.sh b/reproduce/software/shell/apptainer.sh
index 1785977..8760db6 100755
--- a/reproduce/software/shell/apptainer.sh
+++ b/reproduce/software/shell/apptainer.sh
@@ -195,13 +195,14 @@ done
#
# Make sure that the build directory is given and that it exists.
if [ x$build_dir = x ]; then
- printf "$scriptname: '--build-dir' not provided, this is the location "
- printf "that all built analysis files will be kept on the host OS\n"
+ printf "$scriptname: '--build-dir' not provided, this is the "
+ printf "location that all built analysis files will be kept on "
+ printf "the host OS\n"
exit 1;
else
if ! [ -d $build_dir ]; then
- printf "$scriptname: '$build_dir' (value to '--build-dir') doesn't "
- printf "exist\n"
+ printf "$scriptname: '$build_dir' (value to '--build-dir') "
+ printf "doesn't exist\n"
exit 1;
fi
fi
@@ -364,7 +365,7 @@ From: $base_sif
else \\
printf "$scriptname: '\$maneage_apptainer_stat' (value "; \\
printf "to 'maneage_apptainer_stat' environment variable) "; \\
- printf "is not recognized: should be either 'shell' or 'run'"; \\
+ printf "is not recognized: should be either 'shell' or 'run'\n"; \\
exit 1; \\
fi; \\
else \\
@@ -399,7 +400,7 @@ fi
if ! [ x"$build_only" = x ]; then
if [ $quiet = 0 ]; then
printf "$scriptname: info: Maneaged project has been configured "
- printf "successfully in the '$sif' image"
+ printf "successfully in the '$sif' image\n"
fi
exit 0
fi
diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh
index ca3bf6e..3e0163e 100755
--- a/reproduce/software/shell/configure.sh
+++ b/reproduce/software/shell/configure.sh
@@ -228,7 +228,7 @@ empty_build_tmp() {
# accidentally delete the whole root partition (or a least the '/home'
# partition of the user).
if ! [ x"$( ls -A $tmpblddir )" = x ]; then
- rm -r "$tmpblddir"/*
+ rm -rf "$tmpblddir"/*
fi
rm -r "$tmpblddir"
}
@@ -378,7 +378,11 @@ if [ $built_container = 0 ]; then
# between Intel or Apple M1 CPUs. Here we disinguish between Apple
# M1 or others.
maccputype=$(sysctl -n machdep.cpu.brand_string)
- if [ x"$maccputype" = x"Apple M1" ]; then
+ if [ x"$maccputype" = x"Apple M1" ] \
+ || [ x"$maccputype" = x"Apple M2" ] \
+ || [ x"$maccputype" = x"Apple M3" ] \
+ || [ x"$maccputype" = x"Apple M4" ] \
+ || [ x"$maccputype" = x"Apple M5" ] ; then
address_size_physical=$(sysctl -n machdep.cpu.thread_count)
address_size_virtual=$(sysctl -n machdep.cpu.logical_per_package)
else
@@ -781,6 +785,25 @@ fi
+# Older C standard versions
+# -------------------------
+#
+# Some basic packages require an old standard of C compilation; for their
+# list, see the 'Not working with C23' list in '../config/versions.conf'.
+# Here, we first try 'gnu17', but if that fails on the host compiler, we
+# fall back to 'gnu99'.
+if [ $built_container = 0 ]; then
+ printf "int main(void){; return 0;}\n" > $testsource
+ if gcc -std=gnu17 $testsource -o $testprog 2> /dev/null; then
+ std_c_old="gnu17"
+ else std_c_old="gnu99"
+ fi
+ rm $testsource $testprog
+fi
+
+
+
+
# Fortran compiler
# ----------------
#
@@ -856,33 +879,6 @@ fi
-# See if the linker accepts -Wl,-rpath-link
-# -----------------------------------------
-#
-# '-rpath-link' is used to write the information of the linked shared
-# library into the shared object (library or program). But some versions of
-# LLVM's linker don't accept it an can cause problems.
-#
-# IMPORTANT NOTE: This test has to be done **AFTER** the definition of
-# 'instdir', otherwise, it is going to be used as an empty string.
-if [ $built_container = 0 ]; then
- cat > $testsource <<EOF
-#include <stdio.h>
-#include <stdlib.h>
-int main(void) {return EXIT_SUCCESS;}
-EOF
- if $CC $testsource -o$testprog -Wl,-rpath-link 2>/dev/null \
- > /dev/null; then
- export rpath_command="-Wl,-rpath-link=$instdir/lib"
- else
- export rpath_command=""
- fi
-
- # Delete the temporary directory for compiler checking.
- rm -f $testprog $testsource
- rm -r $compilertestdir
- elapsed_time_from_prev_step compiler-rpath
-fi
@@ -1426,9 +1422,9 @@ elapsed_time_from_prev_step downloader
# by the algorithm in 'configure.sh' when evaluating the variable
# 'sys_library_sh_path'. This leads to a fatal syntax error in (at least)
# 'ncurses', because the option using 'sys_library_sh_path' contains an
-# unquoted RAM address in parentheses. Even if the address were quoted, it
-# would still be incorrect. This 'grep command excludes candidate host path
-# strings that look like RAM addresses to address the problem.
+# unquoted RAM address in parentheses. Even if the address were quoted, it
+# would still be incorrect. This 'grep' command excludes candidate host
+# path strings that look like RAM addresses to address the problem.
#
# [1] https://savannah.nongnu.org/bugs/index.php?66847
# [2] https://stackoverflow.com/questions/34428037/how-to-interpret-the-output-of-the-ldd-program
@@ -1550,6 +1546,41 @@ fi
+# See if the linker accepts -Wl,-rpath-link
+# -----------------------------------------
+#
+# '-rpath-link' is used to write the information of the linked shared
+# library into the shared object (library or program). But some versions of
+# LLVM's linker don't accept it an can cause problems.
+#
+# IMPORTANT NOTE: This test has to be done **AFTER** the definition of
+# 'instdir'. Otherwise, the rpath-link value set within rpath_command in
+# the case of a successful test compile (if $CC ...) will be "/lib",
+# i.e. the host system root /lib directory, instead of the maneage library
+# directory.
+if [ $built_container = 0 ]; then
+ cat > $testsource <<EOF
+#include <stdio.h>
+#include <stdlib.h>
+int main(void) {return EXIT_SUCCESS;}
+EOF
+ if $CC $testsource -o$testprog -Wl,-rpath-link 2>/dev/null \
+ > /dev/null; then
+ export rpath_command="-Wl,-rpath-link=$instdir/lib"
+ else
+ export rpath_command=""
+ fi
+
+ # Delete the temporary directory for compiler checking.
+ rm -f $testprog $testsource
+ rm -r $compilertestdir
+ elapsed_time_from_prev_step compiler-rpath
+fi
+
+
+
+
+
# Software building directory (possibly in RAM)
# ---------------------------------------------
#
@@ -1833,6 +1864,7 @@ if [ $quiet = 0 ]; then echo "Building/validating software: basic"; fi
numthreads=$numthreads \
needs_ldl=$needs_ldl \
on_mac_os=$on_mac_os \
+ std_c_old=$std_c_old \
host_cc=$host_cc \
-j$numthreads
elapsed_time_from_prev_step make-software-basic
diff --git a/reproduce/software/shell/docker-README.md b/reproduce/software/shell/docker-README.md
index 9e09282..dd46f4f 100644
--- a/reproduce/software/shell/docker-README.md
+++ b/reproduce/software/shell/docker-README.md
@@ -35,28 +35,25 @@ software environment) to easily move it from one computer to another.
systemctl start docker
```
- 2. Using your favorite text editor, create a `run.sh` in your top Maneage
- directory (as described in the comments at the start of the `docker.sh`
- script in this directory). Just activate `--build-only` on the first
- run so it doesn't go onto doing the analysis and just sets up the
- software environment. Set the respective directory(s) based on your
- filesystem (the software directory is optional). The `run.sh` file name
- is already in `.gitignore` (because it contains local directories), so
- Git will ignore it and it won't be committed by mistake.
+ 2. At the start of the `docker.sh` script in this directory, you can see
+ the necessary command to run. Just activate `--build-only` on the first
+ run so it doesn't go onto doing the analysis (that can be done at any
+ later time). Set the respective directory(s) based on your filesystem
+ (the software directory is optional). You can put the command in a
+ `run.sh` at the top of the project (it is already in `.gitignore`:
+ because it contains local directories).
3. After the setup is complete, remove the `--build-only` and run the
command below to confirm that `maneage-base` (the OS of the container)
and `maneaged` (your project's full Maneage'd environment) images are
available. If you want different names for these images, add the
- `--project-name` and `--base-name` options to the `docker.sh` call.
+ `--project-name` and `--base-name` options to the `docker.sh` call. You
+ can see the list of available images with this command:
```shell
docker image list
```
- 4. You are now ready to do your analysis by removing the `--build-only`
- option.
-
diff --git a/reproduce/software/shell/docker.sh b/reproduce/software/shell/docker.sh
index ab454aa..5cd8f11 100755
--- a/reproduce/software/shell/docker.sh
+++ b/reproduce/software/shell/docker.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env bash
#
# Create a Docker container from an existing image of the built software
# environment, but with the source, data and build (analysis) directories
@@ -409,22 +409,25 @@ else
# that the user gave there.
mkdir $tmp_dir/$tsdir
cp -r "$software_dir"/* $tmp_dir/$tsdir/
- printf " --mount=type=bind,source=$tsdir,target=$dts \x5C\n" >> $df
+ printf " --mount=type=bind,source=$tsdir,target=$dts \x5C\n" \
+ >> $df
fi
# Construct the rest of the 'RUN' command.
printf " cp -r $dsr /home/maneager/source; \x5C\n" >> $df
printf " cd /home/maneager/source; \x5C\n" >> $df
- printf " ./project configure --jobs=$jobs \x5C\n" >> $df
+ printf " ./project configure \x5C\n" >> $df
+ printf " --no-pause \x5C\n" >> $df
+ printf " --jobs=$jobs \x5C\n" >> $df
printf " --build-dir=$intbuild \x5C\n" >> $df
printf " --input-dir=/home/maneager/input \x5C\n" >> $df
- printf " --software-dir=$dts; \x5C\n" >> $df
+ printf " --software-dir=$dts; \x5C\n" >> $df
- # We are deleting the '.build/software/tarballs' directory because this
- # directory is not relevant for the analysis of the project. But in
- # case any tarball was downloaded, it will consume space within the
- # container.
- printf " rm -rf .build/software/tarballs; \x5C\n" >> $df
+ # We are deleting the contents of the '.build/software/tarballs'
+ # directory (tarballs of the sources of the software) because they are
+ # not relevant to the execution of the project and will consume space
+ # within the container.
+ printf " rm -rf .build/software/tarballs/*; \x5C\n" >> $df
# We are deleting the source directory becaues later (at 'docker run'
# time), the 'source' will be mounted directly from the host operating
@@ -432,12 +435,9 @@ else
printf " cd /home/maneager; \x5C\n" >> $df
printf " rm -rf source\n" >> $df
- # Build the Maneage container and delete the temporary directory. The
- # '--progress plain' option is for Docker to print all the outputs
- # (otherwise, it will only print a very small part!).
+ # Build the Maneage container and delete the temporary directory.
cd $tmp_dir
docker build ./ -t $project_name \
- --progress=plain \
--shm-size=$shm_size \
--no-cache \
2>&1 | tee build.log
@@ -453,14 +453,15 @@ if ! [ x"$image_file" = x ] && ! [ -f "$image_file" ]; then
# Save the image into a tarball
tarname=$(echo $image_file | sed -e's|.gz$||')
if [ $quiet = 0 ]; then
- printf "$scriptname: info: saving docker image to '$tarname'"
+ printf "$scriptname: info: saving docker image to '$tarname'\n"
fi
docker save -o $tarname $project_name
# Compress the saved image
if [ $quiet = 0 ]; then
printf "$scriptname: info: compressing to '$image_file' (can "
- printf "take +10 minutes, but volume decreases by more than half!)"
+ printf "take +10 minutes, but volume decreases by more than "
+ printf "half!)\n"
fi
gzip --best $tarname
fi
@@ -470,7 +471,7 @@ fi
if ! [ x"$build_only" = x ]; then
if [ $quiet = 0 ]; then
printf "$scriptname: info: Maneaged project has been configured "
- printf "successfully in the '$project_name' image"
+ printf "successfully in the '$project_name' image\n"
fi
exit 0
fi
diff --git a/reproduce/software/shell/prep-source.sh b/reproduce/software/shell/prep-source.sh
index 861f3bf..2959255 100755
--- a/reproduce/software/shell/prep-source.sh
+++ b/reproduce/software/shell/prep-source.sh
@@ -47,17 +47,18 @@ fi
-# Find all the files that contain the '/bin/sh' string and correct them to
-# Maneage's own Bash. We are using 'while read' to read the file names line
-# by line. This is necessary to account file names that include the 'SPACE'
-# character (happens in CMake for example!).
+# Find all the files that contain the '/bin/sh' or '/bin/bash' strings and
+# correct them to Maneage's own shell (Dash or Bash). We are using 'while
+# read' to read the file names line by line. This is necessary to account
+# file names that include the 'SPACE' character (happens in CMake for
+# example!).
#
# Note that dates are important in the source directory (files depend on
# each other), so we should read the original date and after making. We are
# also not using GNU SED's '-i' ('--in-place') option because the host OS
# may not have GNU SED.
#
-# Actual situation which prompted the addition of this step: a Maneage'd
+# The situation which prompted the addition of this step: a Maneage'd
# project (with GNU Bash 5.1.8 and Readline 8.1.1) was being built on a
# system where '/bin/sh' was GNU Bash 5.2.26 and had Readline 8.2.010. The
# newer version of Bash needed the newer Readline library function(s) that
@@ -74,7 +75,8 @@ fi
# hard-coded in the source code of almost all programs (their build
# scripts); and in special programs like GNU Make, GNU M4 or CMake it is
# actually hardcoded in the source code (not just build scripts).
-if [ -f "$bindir/bash" ]; then shpath="$bindir"/bash
+bashpath="$bindir"/bash
+if [ -f "$bindir/bash" ]; then shpath="$bashpath"
else shpath="$bindir"/dash
fi
@@ -91,7 +93,7 @@ fi
# precision up to the seconds. We then use 'sed' to remove the information
# regarding the timezone, as the format is not accepted by 'touch'.
# LCTYPE and LANG are also required on macos systems by sed.
-grep -I -r -e'/bin/sh' $(pwd)/* \
+grep -I -r -e'/bin/sh' -e'/bin/bash' $(pwd)/* \
| sed -e's|:|\t|' \
| awk 'BEGIN{FS="\t"}{print $1}' \
| sort \