path: root/reproduce
diff options
authorMohammad Akhlaghi <mohammad@akhlaghi.org>2023-05-22 23:44:20 +0100
committerMohammad Akhlaghi <mohammad@akhlaghi.org>2023-05-23 07:42:11 +0100
commit8161194d68665648b93389adb333e741ba230497 (patch)
tree8a3a8713ad207a8106bb93bbc58f60dbff6ce920 /reproduce
parent644a236b70fd64df6f1526c7e3ca3d148ad08044 (diff)
Configuration: portability fixes in Less and WCSLIBHEADmaneage
SUMMARY: no change is necessary in your project, unless you use the Fortran features of WCSLIB in your project. Until now, there were two compilation failures on recent macOS computers with an M1 CPU: Less would crash because it couldn't find the relevant PCRE (perl-compatible regular expression) libraries and WCSLIB would crash because the LLVM compiler's Fortran features could not be built. With this commit, both issues have been fixed by disabling the relevant feature. Extensive comments have been placed in both places in case your project needs these features, so please see the comments in the relevant part of 'reproduce/software/make/basic.mk' for Less and 'reproduce/software/make/high-level.mk' for WCSLIB. In fact the previous solution (where we would not have Fortran features in WCSLIB on macOS systems was problematic and non-reproducibile (the features of WCSLIB depended on the operating system!). Another minor change was that for macOS, we now directly use the version-string of WCSLIB to fix the internal linking issue there. As a result, WCSLIB is no longer a "Version-dependent build" software (in 'reproduce/software/config/versions.conf'). Recall that these are software that when changing the version, it is also necessary to inspect their build recipe. These two issues and their fix were discovered and fixed with the help of James Robinson.
Diffstat (limited to 'reproduce')
3 files changed, 31 insertions, 12 deletions
diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf
index 001667a..afb0535 100644
--- a/reproduce/software/config/versions.conf
+++ b/reproduce/software/config/versions.conf
@@ -161,6 +161,7 @@ tides-version = 2.0
util-linux-version = 2.38.1
valgrind-version = 3.18.1
vim-version = 9.0
+wcslib-version = 7.11
xlsxio-version = 0.2.21
yaml-version = 0.2.5
@@ -184,7 +185,6 @@ xtrans-version = 1.4.0
# -----------------------
lapack-version = 3.8.0
libgit2-version = 1.3.0
-wcslib-version = 7.11
# Netpbm's questions in the configure steps maybe change with different or
# new versions.
diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk
index f40dd6f..99e81d2 100644
--- a/reproduce/software/make/basic.mk
+++ b/reproduce/software/make/basic.mk
@@ -1039,7 +1039,19 @@ $(ibidir)/gmp-$(gmp-version): \
$(ibidir)/less-$(less-version): $(ibidir)/ncurses-$(ncurses-version)
$(call import-source, $(less-url), $(less-checksum))
- $(call gbuild, less-$(less-version), static,,-j$(numthreads))
+# Without the '--with-regex=posix' option, the build will depend on
+# PCRE (perl compatible regular expressions) which are not available
+# on some systems/compilers and can cause a crash. Maneage was
+# successfully built with the POSIX regular expression (regex), and
+# 'less' is generally, an interactive software, not a batch-mode
+# software (it is just added in 'basic.mk' because Git uses it to
+# display things. Again, this is an interactive meta-operation in
+# maneage (operations you only do when you are developing Maneage
+# within Maneage interactively, and will not affect into the actual
+# reproducible analysis!)
+ $(call gbuild, less-$(less-version), static, \
+ --with-regex=posix,-j$(numthreads))
if [ -f $(ibdir)/patchelf ]; then
$(ibdir)/patchelf --set-rpath $(ildir) $(ibdir)/less;
diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk
index 8f3b852..3f9c40c 100644
--- a/reproduce/software/make/high-level.mk
+++ b/reproduce/software/make/high-level.mk
@@ -916,20 +916,27 @@ $(ibidir)/wcslib-$(wcslib-version): $(ibidir)/cfitsio-$(cfitsio-version)
$(call import-source, $(wcslib-url), $(wcslib-checksum))
-# If Fortran isn't present, don't build WCSLIB with it.
- if type gfortran &> /dev/null; then fortranopt="";
- else fortranopt="--disable-fortran"
- fi
-# Build WCSLIB.
+# 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
+# you use the Fortran features of WCSLIB, feel free to remove
+# '--disable-fortran', but be careful with portability on other
+# 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'.
$(call gbuild, wcslib-$(wcslib-version), , \
LIBS="-pthread -lcurl -lm" \
+ --without-pgplot \
+ --disable-fortran \
--with-cfitsiolib=$(ildir) \
- --with-cfitsioinc=$(idir)/include \
- --without-pgplot $$fortranopt)
+ --with-cfitsioinc=$(idir)/include)
if [ x$(on_mac_os) = xyes ]; then
- install_name_tool -id $(ildir)/libwcs.7.11.dylib \
- $(ildir)/libwcs.7.11.dylib
+ install_name_tool -id $(ildir)/libwcs.$(wcslib-version).dylib \
+ $(ildir)/libwcs.$(wcslib-version).dylib
echo "WCSLIB $(wcslib-version)" > $@