diff options
author | Mohammad Akhlaghi <mohammad@akhlaghi.org> | 2020-06-10 23:44:13 +0100 |
---|---|---|
committer | Mohammad Akhlaghi <mohammad@akhlaghi.org> | 2020-06-27 16:32:59 +0100 |
commit | c151eddbcc5f4208b40dc3037a8ae8adb0ff9173 (patch) | |
tree | 5a5eadb85053a0cf5852d9daa6992d5bdffba531 /reproduce/software/config/versions.conf | |
parent | 5c3f2c4e38bec20616e4cf6ac568298a614df040 (diff) |
IMPORTANT: many improvements to low-level software building phase
POSSIBLE EFFECT ON YOUR PROJECT: The changes in this commit may only cause
conflicts to your project if you have changed the software building
Makefiles in your project's branch (e.g., 'basic.mk', 'high-level.mk' and
'python.mk'). If your project has only added analysis, it shouldn't be
affected.
This is a large commit, involving a long series of corrections in a
differnt branch which is now finally being merged into the core Maneage
branch. All changes were related and came up naturally as the low-level
infrastructure was improved. So separating them in the end for the final
merge would have been very time consuming and we are merging them as one
commit.
In general, the software building Makefiles are now much more easier to
read, modify and use, along with several new features that have been
added. See below for the full list.
- Until now, Maneage needed the host to have a 'make' implementation
because Make was necessary to build Lzip. Lzip is then used to
uncompress the source of our own GNU Make. However, in the
minimalist/slim versions of operating systems (for example used to build
Docker images) Make isn't included by default. Since Lzip was the only
program before our own GNU Make was installed, we consulting Antonio
Diaz Diaz (creator of Lzip) and he kindly added the necessary
functionality to a new version of Lzip, which we are using now. Hence we
don't need to assume a Make implementation on the host any more. With
this commit, Lzip and GNU Make are built without Make, allowing
everything else to be safely built with our own custom version of GNU
Make and not using the host's 'make' at all.
- Until recently (Commit 3d8aa5953c4) GNU Make was built in
'basic.mk'. Therefore 'basic.mk' was written in a way that it can be
used with other 'make' implementations also (i.e., important shell
commands starting with '&&' and ending in '\' without any comments
between them!). Furthermore, to help in style uniformity, the rules in
'high-level.mk' and 'python.mk' also followed a similar structure. But
due to the point above, we can now guarantee that GNU Make is used from
the very first Makefile, so this hard-to-read structure has been removed
in the software build recipes and they are much more readable and
edit-friendly now.
- Until now, the default backup servers where at some fixed URLs, on our
own pages or on Gitlab. But recently we uploaded all the necessary
software to Zenodo (https://doi.org/10.5281/zenodo.3883409) which is
more suitable for this task (it promises longevity, has a fixed DOI,
while allowing us to add new content, or new software tarball
versions). With this commit, a small script has been written to extract
the most recent Zenodo upload link from the Zenodo DOI and use it for
downloading the software source codes.
- Until now, we primarily used the webpage of each software for
downloading its tarball. But this caused many problems: 1) Some of them
needed Javascript before the download, 2) Some URLs had a complex
dependency on the version number, 3) some servers would be randomly down
for maintenance and etc. So thanks to the point above, we now use the
Zenodo server as the primary download location. However, if a user wants
to use a custom software that is not (yet!) in Zenodo, the download
script gives priority to a custom URL that the users can give as Make
variables. If that variable is defined, then the script will use that
URL before going onto Zenodo. We now have a special place for such URLs:
'reproduce/software/config/urls.conf'. The old URLs (which are a good
documentation themselves) are preserved here, but are commented by
default.
- The software source code downloading and checksum verification step has
been moved into a Make function called 'import-source' (defined in the
'build-rules.mk' and loaded in all software Makefiles). Having taken all
the low-level steps there, I noticed that there is no more need for
having the tarball as a separate target! So with this commit, a single
rule is the only place that needs to be edited/added (greatly
simplifying the software building Makefiles).
- Following task #15272, A new option has been added to the './project'
script called '--all-highlevel'. When this option is given, the contents
of 'TARGETS.conf' are ignored and all the software in Maneage are built
(selected by parsing the 'versions.conf' file). This new option was
added to confirm the extensive changes made in all the software building
recipes and is great for development/testing purposes.
- Many of the software hadn't been tested for a long time! So after using
the newly added '--all-highlevel', we noticed that some need to be
updated. In general, with this commit, 'libpaper' and 'pcre' were added
as new software, and the versions of the following software was updated:
'boost', 'flex', 'libtirpc', 'openblas' and 'lzip'. A 'run-parts.in'
shell script was added in 'reproduce/software/shell/' which is installed
with 'libpaper'.
- Even though we intentionally add the necessary flags to add RPATH inside
the built executable at compilation time, some software don't do it
(different software on different operating systems!). Until now, for
historical reasons this check was done in different ways for different
software on GNU/Linux sytems. But now it is unified: if 'patchelf' is
present we apply it. Because of this, 'patchelf' has been put as a
top-level prerequisite, right after Tar and is installed before anything
else.
- In 'versions.conf', GNU Libtool is recognized as 'libtool', but in
'basic.mk', it was 'glibtool'! This caused many confusions and is
corrected with this commit (in 'basic.mk', it is also 'libtool').
- A new argument is added to the './project' script to allow easy loading
of the project's shell and environment for fast/temporary testing of
things in the same environment as the project. Before activating the
project's shell, we completely remove all host environment variables to
simulate the project's environment. It can be called with this command:
'./project shell'. A simple prompt has also been added to highlight that
the user is using the Maneage shell!
Diffstat (limited to 'reproduce/software/config/versions.conf')
-rw-r--r-- | reproduce/software/config/versions.conf | 93 |
1 files changed, 49 insertions, 44 deletions
diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf index 1a4172a..b395e0f 100644 --- a/reproduce/software/config/versions.conf +++ b/reproduce/software/config/versions.conf @@ -14,6 +14,8 @@ # Basic/low-level programs and libraires (installed in any case) # -------------------------------------------------------------- +# +# CLASS:BASIC (important identifier, don't modify this line) bash-version = 5.0.11 binutils-version = 2.32 coreutils-version = 8.31 @@ -22,6 +24,7 @@ dash-version = 0.5.10.2 diffutils-version = 3.7 file-version = 5.36 findutils-version = 4.7.0 +flock-version = 0.2.3 gawk-version = 5.0.1 gcc-version = 9.2.0 gettext-version = 0.20.2 @@ -35,8 +38,8 @@ libiconv-version = 1.16 libtool-version = 2.4.6 libunistring-version = 0.9.10 libxml2-version = 2.9.9 -lzip-version = 1.20 -m4-version = 1.4.18 +lzip-version = 1.22-rc2 +m4-version = 1.4.18-patched make-version = 4.3 metastore-version = 1.1.2-23-fa9170b mpc-version = 1.1.0 @@ -56,6 +59,14 @@ xz-version = 5.2.4 zip-version = 3.0 zlib-version = 1.2.11 +# Version-dependent build +# ----------------------- +# +# When updating the version of these programs/libraries, please look into +# the build rule first: In one way or another, the version string becomes +# necessary during their build and must be accounted for. +bzip2-version = 1.0.6 + @@ -67,6 +78,8 @@ zlib-version = 1.2.11 # `reproduce/software/config/TARGETS.conf' will be built as # part of a project. To specify a software there, just remove the # `-version' suffix from the list below. +# +# CLASS:HIGHLEVEL (important identifier, don't modify this line.) apachelog4cxx-version = 0.10.0-603-014954db apr-version = 1.7.0 apr-util-version = 1.6.1 @@ -75,7 +88,7 @@ atlas-version = 3.10.3 autoconf-version = 2.69.200-babc automake-version = 1.16.1 bison-version = 3.4.2 -boost-version = 1.71.0 +boost-version = 1.73.0 cairo-version = 1.16.0 cdsclient-version = 3.84 cfitsio-version = 3.47 @@ -83,8 +96,7 @@ cmake-version = 3.17.0 eigen-version = 3.3.7 expat-version = 2.2.9 fftw-version = 3.3.8 -flex-version = 2.6.4 -flock-version = 0.2.3 +flex-version = 2.6.4-91-ga631f5d freetype-version = 2.9 gdb-version = 8.3 ghostscript-version = 9.50 @@ -98,14 +110,16 @@ imfit-version = 1.6.1 libffi-version = 3.2.1 libjpeg-version = v9b libnsl-version = 1.2.0-4a062cf +libpaper-version = 1.1.28 libpng-version = 1.6.37 libtiff-version = 4.0.10 -libtirpc-version = 1.1.4 +libtirpc-version = 1.2.6 missfits-version = 2.8.0 -openblas-version = 0.3.5 +openblas-version = 0.3.10 openmpi-version = 4.0.1 openssh-version = 8.0p1 patch-version = 2.7.6 +pcre-version = 8.44 pixman-version = 0.38.0 python-version = 3.7.4 R-version = 3.6.2 @@ -119,6 +133,29 @@ tides-version = 2.0 xlsxio-version = 0.2.21 yaml-version = 0.2.2 +# Version-dependent build +# ----------------------- +lapack-version = 3.8.0 +libgit2-version = 0.28.2 +wcslib-version = 6.4 + +# Netpbm's questions in the configure steps maybe change with different or +# new versions. +netpbm-version = 10.86.99 + +# Minizip is installed with the same `zlib' tarball, and they have the same +# version. +minizip-version = $(zlib-version) + +# From version 1.2 OpenSSL may not need a manual addition, as described in +# its comments and `https://savannah.nongnu.org/bugs/?58263'. If it doesn't +# cause problems, put it back in the list of "Basic/low-level" tools. +openssl-version = 1.1.1a + +# Version 3.15.0 needs two patches, please check if they are necessary on +# any future release. +valgrind-version = 3.15.0 + @@ -131,6 +168,8 @@ yaml-version = 0.2.2 # IMPORTANT: If you intend to change the version of any of the Python # modules/libraries below, please fix the hash strings of the respective # URL in `reproduce/software/make/python.mk'. +# +# CLASS:PYTHON (important identifier, don't modify this line.) asn1crypto-version = 0.24.0 asteval-version = 0.9.16 astropy-version = 4.0 @@ -151,7 +190,6 @@ flake8-version = 3.7.8 future-version = 0.18.1 galsim-version = 2.2.1 h5py-version = 2.9.0 -healpy-version = installed-with-healpix html5lib-version = 1.0.1 idna-version = 2.8 jeepney-version = 0.4 @@ -184,42 +222,9 @@ soupsieve-version = 1.8 sympy-version = 1.4 uncertainties-version = 3.1.2 urllib3-version = 1.24.1 -virtualenv-version = 16.4.0 webencodings-version = 0.5.1 - - - - -# Special programs and libraries -# ------------------------------ -# -# When updating the version of these libraries, please look into the build -# rule first: In one way or another, the version string becomes necessary -# during their build and must be accounted for. +# Special Python modules: # -# Special notes: -# - `netpbm' questions in the configure steps maybe change with different -# or new versions. - -# Basic/low-level -bzip2-version = 1.0.6 - -# Optional/high-level -lapack-version = 3.8.0 -libgit2-version = 0.28.2 -netpbm-version = 10.86.99 -wcslib-version = 6.4 - -# Minizip is installed with the same `zlib' tarball, and they have the same -# version. -minizip-version = $(zlib-version) - -# From version 1.2 OpenSSL may not need a manual addition, as described in -# its comments and `https://savannah.nongnu.org/bugs/?58263'. If it doesn't -# cause problems, put it back in the list of "Basic/low-level" tools. -openssl-version = 1.1.1a - -# Version 3.15.0 needs two patches, please check if they are necessary on -# any future release. -valgrind-version = 3.15.0 +# Healpy: When any Python module is requested, healpix will also build its +# Python module Healpy. |