From be8481f3218b736efa8bdaa12a3a407984c2c62b Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Mon, 20 Apr 2020 01:07:49 +0100 Subject: Maneage instead of Template in README-hacking.md and copyright notices Until now, throughout Maneage we were using the old name of "Reproducible Paper Template". But we have finally decided to use Maneage, so to avoid confusion, the name has been corrected in `README-hacking.md' and also in the copyright notices. Note also that in `README-hacking.md', the main Maneage branch is now called `maneage', and the main Git remote has been changed to `https://gitlab.com/maneage/project' (this is a new GitLab Group that I have setup for all Maneage-related projects). In this repository there is only one `maneage' branch to avoid complications with the `master' branch of the projects using Maneage later. --- reproduce/software/config/checksums.conf | 19 ++++++++----------- reproduce/software/config/versions.conf | 19 ++++++++----------- reproduce/software/make/atlas-multiple.mk | 19 ++++++++----------- reproduce/software/make/atlas-single.mk | 19 ++++++++----------- reproduce/software/make/basic.mk | 19 ++++++++----------- reproduce/software/make/build-rules.mk | 19 ++++++++----------- reproduce/software/make/high-level.mk | 19 ++++++++----------- reproduce/software/make/python.mk | 19 ++++++++----------- reproduce/software/shell/bashrc.sh | 21 +++++++++------------ reproduce/software/shell/configure.sh | 22 +++++++++++----------- 10 files changed, 84 insertions(+), 111 deletions(-) (limited to 'reproduce/software') diff --git a/reproduce/software/config/checksums.conf b/reproduce/software/config/checksums.conf index 37fe64d..b173589 100644 --- a/reproduce/software/config/checksums.conf +++ b/reproduce/software/config/checksums.conf @@ -2,18 +2,15 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf index 0c2cd0b..1b6de7c 100644 --- a/reproduce/software/config/versions.conf +++ b/reproduce/software/config/versions.conf @@ -3,18 +3,15 @@ # Copyright (C) 2018-2020 Mohammad Akhlaghi # Copyright (C) 2019-2020 Raul Infante-Sainz # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/make/atlas-multiple.mk b/reproduce/software/make/atlas-multiple.mk index b05d3f8..c98130d 100755 --- a/reproduce/software/make/atlas-multiple.mk +++ b/reproduce/software/make/atlas-multiple.mk @@ -10,18 +10,15 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . ORIGLDFLAGS := $(LDFLAGS) diff --git a/reproduce/software/make/atlas-single.mk b/reproduce/software/make/atlas-single.mk index 61ae9a1..82eade9 100755 --- a/reproduce/software/make/atlas-single.mk +++ b/reproduce/software/make/atlas-single.mk @@ -10,18 +10,15 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . ORIGLDFLAGS := $(LDFLAGS) diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index d1fbc3f..138e07e 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -18,18 +18,15 @@ # Copyright (C) 2018-2020 Mohammad Akhlaghi # Copyright (C) 2019-2020 Raul Infante-Sainz # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . # Top level environment diff --git a/reproduce/software/make/build-rules.mk b/reproduce/software/make/build-rules.mk index f3ca7d2..8d78ce3 100644 --- a/reproduce/software/make/build-rules.mk +++ b/reproduce/software/make/build-rules.mk @@ -5,18 +5,15 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk index 06ac332..e567f0c 100644 --- a/reproduce/software/make/high-level.mk +++ b/reproduce/software/make/high-level.mk @@ -11,18 +11,15 @@ # Copyright (C) 2018-2020 Mohammad Akhlaghi # Copyright (C) 2019-2020 Raul Infante-Sainz # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk index 1ef1bf2..fc71113 100644 --- a/reproduce/software/make/python.mk +++ b/reproduce/software/make/python.mk @@ -11,18 +11,15 @@ # Copyright (C) 2019-2020 Raul Infante-Sainz # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This Makefile is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This Makefile is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This Makefile is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/shell/bashrc.sh b/reproduce/software/shell/bashrc.sh index b2a151f..69bbba6 100755 --- a/reproduce/software/shell/bashrc.sh +++ b/reproduce/software/shell/bashrc.sh @@ -31,15 +31,12 @@ # # Copyright (C) 2019-2020 Mohammad Akhlaghi # -# This script is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This script is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# This script is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index 9f6f3e6..7f837a5 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -4,18 +4,18 @@ # # Copyright (C) 2018-2020 Mohammad Akhlaghi # -# This script is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. +# This script is part of Maneage. Maneage is free software: you can +# redistribute it and/or modify it under the terms of the GNU General +# Public License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. # -# This script is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# A copy of the GNU General Public License is available at -# . +# Maneage is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. See . + + + # Script settings -- cgit v1.2.1 From ad84e266987a46d88336a23a14ea27100e4cd160 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Mon, 20 Apr 2020 20:33:39 +0100 Subject: Configuration: current directory printed properly in stdout Until now, the message that we printed just before starting to build software didn't actually print the current directory, but only `pwd'. With this commit, this is fixed (it uses the `currentdir' variable that is already found before). --- reproduce/software/shell/configure.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'reproduce/software') diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index 7f837a5..b4cf43b 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -610,6 +610,7 @@ fi # Build directory # --------------- +currentdir=$(pwd) if [ $rewritepconfig = yes ]; then cat < Date: Thu, 23 Apr 2020 17:34:33 +0430 Subject: Configure.sh: build directory checked for ability to modify permissions Until now we only checked for the existance and write-ability of the build directory. But we recently discovered that if the specified build-directory is in a non-POSIX compatible partition (for example NTFS), permissions can't be modified and this can cause crashs in some programs (in particular, while building Perl, see [1]). The thing that makes this problem hard to identify is that on such partitions, `chmod' will still return 0 (so it was hard to find). With this commit, a check has been added after the user specifies the build-directory. If the proposed build directory is not able to handle permissions as expected, the configure script will not continue and will let the user know and will ask them for another directory. Also, the two printed characters at the start of error messages were changed to `**' (instead of `--'). When everything is good, we'll use `--' to tell the user that their given directory will be used as the build directory. And since there are multiple checks now, the final message to specify a new build directory is now moved to the end and not repeated in every check. [1] https://savannah.nongnu.org/support/?110220 --- reproduce/software/shell/configure.sh | 92 ++++++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 11 deletions(-) (limited to 'reproduce/software') diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index b4cf43b..dd3b9bc 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -93,6 +93,64 @@ absolute_dir () +# Check file permission handling (POSIX-compatibility) +# ---------------------------------------------------- +# +# Check if a `given' directory handles permissions as expected. +# +# This is to prevent a known bug in the NTFS filesystem that prevents +# proper installation of Perl, and probably some other packages. This +# function receives the directory as an argument and then, creates a dummy +# file, and examines whether the given directory handles the file +# permissions as expected. +# +# Returns `0' if everything is fine, and `255' otherwise. Choosing `0' is +# to mimic the `$ echo $?' behavior, while choosing `255' is to prevent +# misunderstanding 0 and 1 as true and false. +# +# ===== CAUTION! ===== # +# +# Since there is a `set -e' before running this function, the whole script +# stops and exits IF the `check_permission' (or any other function) returns +# anything OTHER than `0'! So, only use this function as a test. Here's a +# minimal example: +# +# if $(check_permission $some_directory) ; then +# echo "yay"; else "nay"; +# fi ; +check_permission () +{ + # Make a `junk' file, activate its executable flag and record its + # permissions generally. + local junkfile=$1/check_permission_tmp_file + rm -f $junkfile + echo "Don't let my short life go to waste" > $junkfile + chmod +x $junkfile + local perm_before=$(ls -l $junkfile | awk '{print $1}') + + # Now, remove the executable flag and record the permissions. + chmod -x $junkfile + local perm_after=$(ls -l $junkfile | awk '{print $1}') + + # Clean up before leaving the function + rm -f $junkfile + + # If the permissions are equal, the filesystem doesn't allow + # permissions. + if [ $perm_before = $perm_after ]; then + # Setting permission FAILED + return 1 + else + # Setting permission SUCCESSFUL + return 0 + fi +} + + + + + + # Check for C/C++ compilers # ------------------------- # @@ -653,21 +711,20 @@ EOF bdir=$(absolute_dir $build_dir) rm -rf $build_dir/$junkname else - echo " -- Can't write in '$build_dir'"; echo + echo " ** Can't write in '$build_dir'"; echo fi else if mkdir $build_dir 2> /dev/null; then instring="the newly created" bdir=$(absolute_dir $build_dir) else - echo " -- Can't create '$build_dir'"; echo + echo " ** Can't create '$build_dir'"; echo fi fi # If its given, make sure it isn't a subdirectory of the source # directory. if ! [ x"$bdir" = x ]; then - echo "Given build directory: $bdir" if echo "$bdir/" \ | grep '^'$currentdir 2> /dev/null > /dev/null; then @@ -676,17 +733,30 @@ EOF # Inform the user that this is not acceptable and reset `bdir'. bdir= - echo " -- The build-directory cannot be under the source-directory." - echo " Please specify another build-directory that is outside of the source." - echo "" - else - echo " -- Build directory set to ($instring): '$bdir'" + echo " ** The build-directory cannot be under the source-directory." + fi + fi + + # If everything is fine until now, see if we're able to manipulate + # file permissions. + if ! [ x"$bdir" = x ]; then + if ! $(check_permission $bdir); then + bdir= + echo " ** File permissions can't be modified in this directory" fi fi - # Reset `build_dir' to blank, so it continues asking when the - # previous value wasn't usable. - build_dir= + # If the build directory was good, the loop will stop, if not, + # reset `build_dir' to blank, so it continues asking for another + # directory and let the user know that they must select a new + # directory. + if [ x$bdir = x ]; then + build_dir= + echo " ** Please select another directory." + echo "" + else + echo " -- Build directory set to ($instring): '$bdir'" + fi done fi -- cgit v1.2.1 From a21ea20c54628989b9737e9aa2ecd72806456307 Mon Sep 17 00:00:00 2001 From: Boud Roukema Date: Sun, 26 Apr 2020 16:20:37 +0200 Subject: Configuration: improved version separation from tarball name Until now, the sed script for determining URL download rules in the three software building Makefiles (`basic.mk', `high-level.mk' and `python.mk') considered package names such as `fftw-3...` and `fftw2-2.1...` to be identical. As the example above shows, this would make it hard to include some software that may hav conflicting non-number names. With this commit, the SED script that is used to separate the version from the tarball name only matches numbers that are after a dash (`-'). Therefore considers `fftw-3...` and `fftw-2...` to be identical, but `fftw-3-...` and `fftw2-2.1...` to be different. As a result of this change, the `elif' check for some of the other programs like `m4', or `help2man' was also corrected in all three Makefiles. While doing this check on all the software, we noticed that `zlib-version' is being repeated two times in `version.conf' so it was removed. It caused no complications, because both were the same number, but could lead to bugs later. --- reproduce/software/config/versions.conf | 4 ++-- reproduce/software/make/basic.mk | 12 ++++++++---- reproduce/software/make/high-level.mk | 19 +++++++++++-------- reproduce/software/make/python.mk | 28 +++++++++++++++------------- 4 files changed, 36 insertions(+), 27 deletions(-) (limited to 'reproduce/software') diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf index 1b6de7c..35ede19 100644 --- a/reproduce/software/config/versions.conf +++ b/reproduce/software/config/versions.conf @@ -213,6 +213,6 @@ libgit2-version = 0.28.2 netpbm-version = 10.86.99 wcslib-version = 6.4 -# Minizip is installed as a part of `zlib', and they have the same version. -zlib-version = 1.2.11 +# Minizip is installed with the same `zlib' tarball, and they have the same +# version. minizip-version = $(zlib-version) diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index 138e07e..ebcd9b1 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -156,14 +156,18 @@ tarballs = $(foreach t, bash-$(bash-version).tar.lz \ , $(tdir)/$(t) ) $(tarballs): $(tdir)/%: | $(lockdir) - n=$$(echo $* | sed -e's/[0-9\-]/ /g' \ - -e's/\./ /g' \ + # Remove the version numbers and suffix from the tarball name so we + # can search more easily only with the program name. This requires + # the first character of the version to be a digit: packages such + # as `foo' and `foo-3' will not be distinguished, but `foo' and + # `foo2' will be distinguished. + n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \ | awk '{print $$1}' ); \ \ mergenames=1; \ if [ $$n = bash ]; then c=$(bash-checksum); w=http://akhlaghi.org/maneage-software; \ elif [ $$n = binutils ]; then c=$(binutils-checksum); w=http://ftp.gnu.org/gnu/binutils; \ - elif [ $$n = bzip ]; then c=$(bzip2-checksum); w=http://akhlaghi.org/maneage-software; \ + elif [ $$n = bzip2 ]; then c=$(bzip2-checksum); w=http://akhlaghi.org/maneage-software; \ elif [ $$n = cert ]; then c=$(cert-checksum); w=http://akhlaghi.org/maneage-software; \ elif [ $$n = coreutils ]; then c=$(coreutils-checksum); w=http://ftp.gnu.org/gnu/coreutils;\ elif [ $$n = curl ]; then c=$(curl-checksum); w=https://curl.haxx.se/download; \ @@ -181,7 +185,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) elif [ $$n = libiconv ]; then c=$(libiconv-checksum); w=https://ftp.gnu.org/pub/gnu/libiconv; \ elif [ $$n = libtool ]; then c=$(libtool-checksum); w=http://ftp.gnu.org/gnu/libtool; \ elif [ $$n = lzip ]; then c=$(lzip-checksum); w=http://download.savannah.gnu.org/releases/lzip; \ - elif [ $$n = m ]; then \ + elif [ $$n = m4 ]; then \ mergenames=0; \ c=$(m4-checksum); \ w=http://akhlaghi.org/maneage-software/m4-1.4.18-patched.tar.gz; \ diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk index e567f0c..3e87d3b 100644 --- a/reproduce/software/make/high-level.mk +++ b/reproduce/software/make/high-level.mk @@ -203,14 +203,17 @@ tarballs = $(foreach t, apachelog4cxx-$(apachelog4cxx-version).tar.lz \ , $(tdir)/$(t) ) $(tarballs): $(tdir)/%: | $(lockdir) - # Remove all numbers, `-' and `.' from the tarball name so we can - # search more easily only with the program name. - @n=$$(echo $* | sed -e's/[0-9\-]/ /g' -e's/\./ /g' \ - | awk '{print $$1}' ) + # Remove the version numbers and suffix from the tarball name so we + # can search more easily only with the program name. This requires + # the first character of the version to be a digit: packages such + # as `foo' and `foo-3' will not be distinguished, but `foo' and + # `foo2' will be distinguished. + @n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \ + | awk '{print $$1}' ) # Set the top download link of the requested tarball. mergenames=1 - if [ $$n = apachelog ]; then c=$(apachelog4cxx-checksum); w=http://akhlaghi.org/maneage-software + if [ $$n = apachelog4cxx ]; then c=$(apachelog4cxx-checksum); w=http://akhlaghi.org/maneage-software elif [ $* = apr-util-$(apr-util-version).tar.gz ]; then c=$(apr-util-checksum); w=https://www-us.apache.org/dist/apr elif [ $$n = apr ]; then c=$(apr-checksum); w=https://www-us.apache.org/dist/apr @@ -262,7 +265,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) majorver=$$(echo $(hdf5-version) | sed -e 's/\./ /g' | awk '{printf("%d.%d", $$1, $$2)}') w=https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$$majorver/hdf5-$(hdf5-version)/src/$* elif [ $$n = healpix ]; then c=$(healpix-checksum); w=http://akhlaghi.org/maneage-software - elif [ $$n = help ]; then c=$(help2man-checksum); w=http://ftp.gnu.org/gnu/help2man + elif [ $$n = help2man ]; then c=$(help2man-checksum); w=http://ftp.gnu.org/gnu/help2man elif [ $$n = imagemagick ]; then c=$(imagemagick-checksum); w=http://akhlaghi.org/maneage-software elif [ $$n = imfit ]; then mergenames=0 @@ -273,12 +276,12 @@ $(tarballs): $(tdir)/%: | $(lockdir) elif [ $$n = lapack ]; then c=$(lapack-checksum); w=http://www.netlib.org/lapack elif [ $$n = libnsl ]; then c=$(libnsl-checksum); w=http://akhlaghi.org/maneage-software elif [ $$n = libpng ]; then c=$(libpng-checksum); w=https://download.sourceforge.net/libpng - elif [ $$n = libgit ]; then + elif [ $$n = libgit2 ]; then mergenames=0 c=$(libgit2-checksum) w=https://github.com/libgit2/libgit2/archive/v$(libgit2-version).tar.gz elif [ $$n = libtirpc ]; then c=$(libtirpc-checksum); w=https://downloads.sourceforge.net/libtirpc - elif [ $$n = libxml ]; then c=$(libxml2-checksum); w=ftp://xmlsoft.org/libxml2 + elif [ $$n = libxml2 ]; then c=$(libxml2-checksum); w=ftp://xmlsoft.org/libxml2 elif [ $$n = missfits ]; then c=$(missfits-checksum); w=https://www.astromatic.net/download/missfits elif [ $$n = netpbm ]; then c=$(netpbm-checksum); w=http://akhlaghi.org/maneage-software elif [ $$n = openblas ]; then diff --git a/reproduce/software/make/python.mk b/reproduce/software/make/python.mk index fc71113..f378650 100644 --- a/reproduce/software/make/python.mk +++ b/reproduce/software/make/python.mk @@ -131,16 +131,18 @@ $(pytarballs): $(tdir)/%: # first string. @if [ $* = python-dateutil-$(python-dateutil-version).tar.gz ]; then n=dateutil - elif [ $* = h5py-$(h5py-version).tar.gz ]; then - n=h5py # elif [ $* = strange-tarball5name-version.tar.gz ]; then # n=strange5-name else - # Remove all numbers, `-' and `.' from the tarball name so we can - # search more easily only with the program name. - n=$$(echo $* | sed -e's/[0-9\-]/ /g' -e's/\./ /g' \ - | awk '{print $$1}') + # Remove the version numbers and suffix from the tarball name so + # we can search more easily only with the program name. This + # requires the first character of the version to be a digit: + # packages such as `foo' and `foo-3' will not be distinguished, + # but `foo' and `foo2' will be distinguished. + n=$$(echo $* | sed -e's/-[0-9]/ /' -e's/\./ /g' \ + | awk '{print $$1}' ) + fi # Set the top download link of the requested tarball. The ones @@ -180,11 +182,11 @@ $(pytarballs): $(tdir)/%: c=$(secretstorage-checksum) hash=a6/89/df343dbc2957a317127e7ff2983230dc5336273be34f2e1911519d85aeb5 h=$(pytopurl)/$$hash/SecretStorage-$(secretstorage-version).tar.gz - elif [ $$n = asn ]; then h=fc/f1/8db7daa71f414ddabfa056c4ef792e1461ff655c2ae2928a2b675bfed6b4; c=$(asn1crypto-checksum) + elif [ $$n = asn1crypto ]; then h=fc/f1/8db7daa71f414ddabfa056c4ef792e1461ff655c2ae2928a2b675bfed6b4; c=$(asn1crypto-checksum) elif [ $$n = asteval ]; then h=50/3f/29b7935c6dc09ee96dc347edc66c57e8ef68d595dd35b763a36a117acc8c; c=$(asteval-checksum) elif [ $$n = astroquery ]; then h=e2/af/a3cd3b30745832a0e81f5f13327234099aaf5d03b7979ac947a888e68e91; c=$(astroquery-checksum) elif [ $$n = astropy ]; then h=de/96/7feaca4b9be134128838395a9d924ea0b389ed4381702dcd9d11ae31789f; c=$(astropy-checksum) - elif [ $$n = beautifulsoup ]; then h=80/f2/f6aca7f1b209bb9a7ef069d68813b091c8c3620642b568dac4eb0e507748; c=$(beautifulsoup4-checksum) + elif [ $$n = beautifulsoup4 ]; then h=80/f2/f6aca7f1b209bb9a7ef069d68813b091c8c3620642b568dac4eb0e507748; c=$(beautifulsoup4-checksum) elif [ $$n = certifi ]; then h=55/54/3ce77783acba5979ce16674fc98b1920d00b01d337cfaaf5db22543505ed; c=$(certifi-checksum) elif [ $$n = cffi ]; then h=64/7c/27367b38e6cc3e1f49f193deb761fe75cda9f95da37b67b422e62281fcac; c=$(cffi-checksum) elif [ $$n = chardet ]; then h=fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d; c=$(chardet-checksum) @@ -195,23 +197,23 @@ $(pytarballs): $(tdir)/%: elif [ $$n = emcee ]; then h=f0/c0/cd433f2aedeef9b1e5ed7d236c82564f7518fe7fe2238fa141ea9ce08e73; c=$(emcee-checksum) elif [ $$n = entrypoints ]; then h=b4/ef/063484f1f9ba3081e920ec9972c96664e2edb9fdc3d8669b0e3b8fc0ad7c; c=$(entrypoints-checksum) elif [ $$n = esutil ]; then h=5b/91/77e38282fd3d47b55e351544ab179eb209b309a8d2d40f8cdb6241beda00; c=$(esutil-checksum) - elif [ $$n = flake ]; then h=8d/a7/99222c9200af533c1ecb1120d99adbd1c033b57296ac5cb39d121db007a8; c=$(flake8-checksum) + elif [ $$n = flake8 ]; then h=8d/a7/99222c9200af533c1ecb1120d99adbd1c033b57296ac5cb39d121db007a8; c=$(flake8-checksum) elif [ $$n = future ]; then h=3f/bf/57733d44afd0cf67580658507bd11d3ec629612d5e0e432beb4b8f6fbb04; c=$(future-checksum) elif [ $$n = h5py ]; then h=43/27/a6e7dcb8ae20a4dbf3725321058923fec262b6f7835179d78ccc8d98deec; c=$(h5py-checksum) - elif [ $$n = html ]; then h=85/3e/cf449cf1b5004e87510b9368e7a5f1acd8831c2d6691edd3c62a0823f98f; c=$(html5lib-checksum) + elif [ $$n = html5lib ]; then h=85/3e/cf449cf1b5004e87510b9368e7a5f1acd8831c2d6691edd3c62a0823f98f; c=$(html5lib-checksum) elif [ $$n = idna ]; then h=ad/13/eb56951b6f7950cadb579ca166e448ba77f9d24efc03edd7e55fa57d04b7; c=$(idna-checksum) elif [ $$n = jeepney ]; then h=16/1d/74adf3b164a8d19a60d0fcf706a751ffa2a1eaa8e5bbb1b6705c92a05263; c=$(jeepney-checksum) elif [ $$n = keyring ]; then h=15/88/c6ce9509438bc02d54cf214923cfba814412f90c31c95028af852b19f9b2; c=$(keyring-checksum) elif [ $$n = kiwisolver ]; then h=31/60/494fcce70d60a598c32ee00e71542e52e27c978e5f8219fae0d4ac6e2864; c=$(kiwisolver-checksum) elif [ $$n = lmfit ]; then h=59/6e/117794cf85b7345361877e49245870490ae438f1981dea3c6af1316b30e7; c=$(lmfit-checksum) elif [ $$n = matplotlib ]; then h=12/d1/7b12cd79c791348cb0c78ce6e7d16bd72992f13c9f1e8e43d2725a6d8adf; c=$(matplotlib-checksum) - elif [ $$n = mpi ]; then h=04/f5/a615603ce4ab7f40b65dba63759455e3da610d9a155d4d4cece1d8fd6706; c=$(mpi4py-checksum) + elif [ $$n = mpi4py ]; then h=04/f5/a615603ce4ab7f40b65dba63759455e3da610d9a155d4d4cece1d8fd6706; c=$(mpi4py-checksum) elif [ $$n = mpmath ]; then h=ca/63/3384ebb3b51af9610086b23ea976e6d27d6d97bf140a76a365bd77a3eb32; c=$(mpmath-checksum) elif [ $$n = numpy ]; then h=ac/36/325b27ef698684c38b1fe2e546e2e7ef9cecd7037bcdb35c87efec4356af; c=$(numpy-checksum) elif [ $$n = pexpect ]; then h=1c/b1/362a0d4235496cb42c33d1d8732b5e2c607b0129ad5fdd76f5a583b9fcb3; c=$(pexpect-checksum) elif [ $$n = pip ]; then h=4c/4d/88bc9413da11702cbbace3ccc51350ae099bb351febae8acc85fec34f9af; c=$(pip-checksum) elif [ $$n = pkgconfig ]; then h=6e/a9/ff67ef67217dfdf2aca847685fe789f82b931a6957a3deac861297585db6; c=$(pypkgconfig-checksum) - elif [ $$n = pybind ]; then h=aa/91/deb6743e79e22ab01502296570b39b8404f10cc507a6692d612a7fee8d51; c=$(pybind11-checksum) + elif [ $$n = pybind11 ]; then h=aa/91/deb6743e79e22ab01502296570b39b8404f10cc507a6692d612a7fee8d51; c=$(pybind11-checksum) elif [ $$n = pycodestyle ]; then h=1c/d1/41294da5915f4cae7f4b388cea6c2cd0d6cd53039788635f6875dfe8c72f; c=$(pycodestyle-checksum) elif [ $$n = pycparser ]; then h=68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a; c=$(pycparser-checksum) elif [ $$n = pyflakes ]; then h=52/64/87303747635c2988fcaef18af54bfdec925b6ea3b80bcd28aaca5ba41c9e; c=$(pyflakes-checksum) @@ -227,7 +229,7 @@ $(pytarballs): $(tdir)/%: elif [ $$n = soupsieve ]; then h=0c/52/e9088bb9b96e2d39fc3b33fcda5b4fde9d71473536ac660a1ca9a0958a2f; c=$(soupsieve-checksum) elif [ $$n = sympy ]; then h=54/2e/6adb11fe599d4cfb7e8833753350ac51aa2c0603c226b36f9051cc9d2425; c=$(sympy-checksum) elif [ $$n = uncertainties ]; then h=2a/c2/babbe5b16141859dd799ed31c03987100a7b6d0ca7c0ed4429c96ce60fdf; c=$(uncertainties-checksum) - elif [ $$n = urllib ]; then h=b1/53/37d82ab391393565f2f831b8eedbffd57db5a718216f82f1a8b4d381a1c1; c=$(urllib3-checksum) + elif [ $$n = urllib3 ]; then h=b1/53/37d82ab391393565f2f831b8eedbffd57db5a718216f82f1a8b4d381a1c1; c=$(urllib3-checksum) elif [ $$n = virtualenv ]; then h=51/aa/c395a6e6eaaedfa5a04723b6446a1df783b16cca6fec66e671cede514688; c=$(virtualenv-checksum) elif [ $$n = webencodings ]; then h=0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47; c=$(webencodings-checksum) # elif [ $$n = strange5-name ]; then h=XXXXX; c=$(XXXXX-checksum) -- cgit v1.2.1 From d474d4c8e1f67743b84a6ad852d5d80a31a9103d Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Mon, 27 Apr 2020 02:55:01 +0100 Subject: Aborting with informative error when GNU gettext not found Until now, we wouldn't explicity check for GNU gettext. If it was present on the system, we would just add a link to it in Maneage's installation directory. However, in bug #58248, Boud noticed that Git (a basic software) actually needs it to complete its installation. Unfortunately we haven't had the tiem to include a build of Gettext in Maneage. Because it is mostly available on many systems, it hasn't been reported too commonly, it also has many dependencies which make it a little time consuming to install. So with this commit, we actually check for GNU gettext right after checking the compiler and if its not available an informative error message is written to inform the user of the problem, along with suggestions on fixing it (how to install GNU gettext from their package manager). --- reproduce/software/shell/configure.sh | 40 ++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'reproduce/software') diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index dd3b9bc..6f3ed7f 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -299,7 +299,7 @@ rm -f $testprog $testsource # See if the C compiler can build static libraries # ------------------------------------------------ - +# # We are manually only working with shared libraries: because some # high-level programs like Wget and cURL need dynamic linking and if we # build the libraries statically, our own builds will be ignored and these @@ -316,6 +316,44 @@ static_build=no +# Check for GNU gettext +# --------------------- +# +# Some of the basic sofware need GNU gettext which we don't yet install. +has_gettext=0 +if type msgfmt > /dev/null 2>/dev/null; then has_gettext=1; fi +if [ $has_gettext = 0 ]; then + cat < Date: Mon, 27 Apr 2020 17:08:36 +0200 Subject: Configration bug fixed: identify pkg-config from its tarball name Until Commit 3409a54 (from yesterday), pkg-config was found correctly in `reproduce/software/make/basic.mk` by searching for `pkg`. However, commit a21ea20 made an improvement in the regular expression for relating package names and download filenames, and the string `pkg-config` with the new regex no longer simplifies to `pkg`. The result of this was that the basic.mk could not find `pkg-config` in the list of packages, since it was still listed as `pkg`. This blocked downloading for a system without pkg-config preloaded. With this commit (of just a few bytes), the bug is fixed. --- reproduce/software/make/basic.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'reproduce/software') diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index ebcd9b1..79411d2 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -200,7 +200,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) c=$(perl-checksum); \ v=$$(echo $(perl-version) | sed -e's/\./ /g' | awk '{printf("%d.0", $$1)}'); \ w=https://www.cpan.org/src/$$v; \ - elif [ $$n = pkg ]; then c=$(pkgconfig-checksum); w=http://pkg-config.freedesktop.org/releases; \ + elif [ $$n = pkg-config ]; then c=$(pkgconfig-checksum); w=http://pkg-config.freedesktop.org/releases; \ elif [ $$n = readline ]; then c=$(readline-checksum); w=http://ftp.gnu.org/gnu/readline; \ elif [ $$n = sed ]; then c=$(sed-checksum); w=http://ftp.gnu.org/gnu/sed; \ elif [ $$n = tar ]; then c=$(tar-checksum); w=http://ftp.gnu.org/gnu/tar; \ -- cgit v1.2.1 From 2fb0b2a92b034f6ea869eec8ebea8614145759de Mon Sep 17 00:00:00 2001 From: Boud Roukema Date: Mon, 27 Apr 2020 23:49:33 +0200 Subject: Configration bug fixed: other problematic software names from tarball Similar to the previous commit (e43e3291483699), following a change made yesterday in the identification of software names from their tarballs, a few other problematic names are corrected with this commit: `apr-util', HDF5, TeX Live's installation tarball and `rpcsvc-proto'. Even though we have visually checked the list of software, other unidentified similar cases may remain and will be fixed when found in practice. --- reproduce/software/make/high-level.mk | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'reproduce/software') diff --git a/reproduce/software/make/high-level.mk b/reproduce/software/make/high-level.mk index 3e87d3b..eccc073 100644 --- a/reproduce/software/make/high-level.mk +++ b/reproduce/software/make/high-level.mk @@ -214,9 +214,8 @@ $(tarballs): $(tdir)/%: | $(lockdir) # Set the top download link of the requested tarball. mergenames=1 if [ $$n = apachelog4cxx ]; then c=$(apachelog4cxx-checksum); w=http://akhlaghi.org/maneage-software - elif [ $* = apr-util-$(apr-util-version).tar.gz ]; then - c=$(apr-util-checksum); w=https://www-us.apache.org/dist/apr elif [ $$n = apr ]; then c=$(apr-checksum); w=https://www-us.apache.org/dist/apr + elif [ $$n = apr-util ]; then c=$(apr-util-checksum); w=https://www-us.apache.org/dist/apr elif [ $$n = astrometry ]; then c=$(astrometrynet-checksum); w=http://astrometry.net/downloads elif [ $$n = atlas ]; then mergenames=0 @@ -259,7 +258,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) w=https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs$$v elif [ $$n = gnuastro ]; then c=$(gnuastro-checksum); w=http://ftp.gnu.org/gnu/gnuastro elif [ $$n = gsl ]; then c=$(gsl-checksum); w=http://ftp.gnu.org/gnu/gsl - elif [ $$n = hdf ]; then + elif [ $$n = hdf5 ]; then mergenames=0 c=$(hdf5-checksum) majorver=$$(echo $(hdf5-version) | sed -e 's/\./ /g' | awk '{printf("%d.%d", $$1, $$2)}') @@ -271,7 +270,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) mergenames=0 c=$(imfit-checksum) w=http://www.mpe.mpg.de/~erwin/resources/imfit/imfit-$(imfit-version)-source.tar.gz - elif [ $$n = install ]; then c=NO-CHECK-SUM; w=http://mirror.ctan.org/systems/texlive/tlnet + elif [ $$n = install-tl-unx ]; then c=NO-CHECK-SUM; w=http://mirror.ctan.org/systems/texlive/tlnet elif [ $$n = jpegsrc ]; then c=$(libjpeg-checksum); w=http://ijg.org/files elif [ $$n = lapack ]; then c=$(lapack-checksum); w=http://www.netlib.org/lapack elif [ $$n = libnsl ]; then c=$(libnsl-checksum); w=http://akhlaghi.org/maneage-software @@ -298,7 +297,7 @@ $(tarballs): $(tdir)/%: | $(lockdir) elif [ $$n = R ]; then c=$(R-checksum); majver=$$(echo $(R-version) | sed -e's/\./ /g' | awk '{print $$1}') w=https://cran.r-project.org/src/base/R-$$majver - elif [ $$n = rpcsvc ]; then c=$(rpcsvc-proto-checksum); w=https://github.com/thkukuk/rpcsvc-proto/releases/download/v$(rpcsvc-proto-version) + elif [ $$n = rpcsvc-proto ]; then c=$(rpcsvc-proto-checksum); w=https://github.com/thkukuk/rpcsvc-proto/releases/download/v$(rpcsvc-proto-version) elif [ $$n = scamp ]; then c=$(scamp-checksum); w=http://akhlaghi.org/maneage-software elif [ $$n = scons ]; then mergenames=0 -- cgit v1.2.1 From 4a53bd5ebd43414e5f21ac8cad6017f026921f56 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Tue, 28 Apr 2020 02:30:26 +0100 Subject: Astropy will no longer be installed by default Until now Gnuastro and Astropy where installed by default in any clean build of Maneage. Gnuastro is used to do the demonstration analysis that is reported in the paper and Astropy was just there to help in testing the building of the MANY tools it depends on! It (and its dependencies) also had several papers that helped show software citation. However, as Boud suggested in task #15619, the burden of installing them for a new user may be too much and any future changes will cause merge conflicts. It may also give the impression that Maneage is only/mainly written for astronomers. So with this commit, I am removing Astropy as a default target. But we can only remove Gnuastro after we include an alternative analysis in the demonstration `delete-me' files. Following Boud's suggestion in that task, `TARGETS.conf' was also added to the files to be ignored in any future merge (in the checklist of `README-hacking.mk'). The solution was already described there, but mainly focused on the deleted `delete-me' files. So with this commit, I brought out this item as a more prominent item in the list. Maybe we can later add the analysis done in the Maneage paper (not yet published). In terms of testing the software builds, we already have task #15272 (Single target to build all high-level software, for testing) that aims to have a single configure option to install ALL high-level software and we can ask people to try if they like and report errors. --- reproduce/software/config/TARGETS.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'reproduce/software') diff --git a/reproduce/software/config/TARGETS.conf b/reproduce/software/config/TARGETS.conf index 84962f7..8d3bdb0 100644 --- a/reproduce/software/config/TARGETS.conf +++ b/reproduce/software/config/TARGETS.conf @@ -39,4 +39,4 @@ top-level-programs = gnuastro # Python libraries/modules. -top-level-python = astropy +top-level-python = -- cgit v1.2.1 From c778a69df31901be9a7726c51a7ab784aa3414d8 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Tue, 28 Apr 2020 03:18:52 +0100 Subject: Better explanation at the end of the configuration Until now, at the end of the configuration step, we would tell the user this: "To change the configuration later, please re-run './project configure', DO NOT manually edit the relevant files". However, as Boud suggested in Bug #58243, this is against our principle to encourage users to modify Maneage. With this commit, that explanation has been expanded by a few sentences to tell the users what to change and warn them in case they decide to change the build-directory. --- reproduce/software/shell/configure.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'reproduce/software') diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index 6f3ed7f..5837642 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -1514,12 +1514,16 @@ cat < Date: Wed, 29 Apr 2020 03:45:21 +0100 Subject: Reactivated --host-cc config option to use host C compiler Until now, if GCC couldn't be built for any reason, Maneage would crash and the user had no way forward. Since GCC is complicated, it may happen and is frustrating to wait until the bug is fixed. Also, while debugging Maneage, when we know GCC has no problem, because it takes so long, it discourages testing. With this commit, we have re-activated the `--host-cc' option. It was already defined in the options of `./project', but its affect was nullified by hard-coding it to zero in the configure script on GNU/Linux systems. So with this commit that has been removed and the user can use their own C compiler on a GNU/Linux operating system also. Furthermore, to inform the user about this option and its usefulness, when GCC fails to build, a clear warning message is printed, instructing the user to post the problem as a bug and telling them how to continue building the project with the `--host-cc' option. --- reproduce/software/make/basic.mk | 27 +++++++++++++++++++++++---- reproduce/software/shell/configure.sh | 1 - 2 files changed, 23 insertions(+), 5 deletions(-) (limited to 'reproduce/software') diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index 79411d2..779320f 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -1297,8 +1297,8 @@ $(ibidir)/gcc: | $(ibidir)/binutils \ tar xf $(word 1,$(filter $(tdir)/%,$|)); \ if [ $$odir != $(ddir) ]; then \ ln -s $$odir/gcc-$(gcc-version) $(ddir)/gcc-$(gcc-version); \ - fi \ - && cd gcc-$(gcc-version) \ + fi; \ + if cd gcc-$(gcc-version) \ && mkdir build \ && cd build \ && ../configure SHELL=$(ibdir)/bash \ @@ -1347,6 +1347,25 @@ $(ibidir)/gcc: | $(ibidir)/binutils \ rm -rf $$odir; \ rm $(ddir)/gcc-$(gcc-version); \ fi \ - && ln -sf $(ibdir)/gcc $(ibdir)/cc \ - && echo "GNU Compiler Collection (GCC) $(gcc-version)" > $@; \ + && ln -sf $(ibdir)/gcc $(ibdir)/cc; \ + then \ + echo "GNU Compiler Collection (GCC) $(gcc-version)" > $@; \ + else echo; echo; echo; \ + echo "_________________________________________________"; \ + echo "!!!!!!!! Warning from Maneage !!!!!!!!"; \ + echo; \ + echo "Unfortunately building of GCC failed on this system!"; \ + echo "Can you please copy the last ~500 lines above and post it"; \ + echo "as a bug here (as an attached file):"; \ + echo " https://sv.nongnu.org/support/?func=additem&group=reproduce"; \ + echo; \ + echo "In the meantime, please re-configure Maneage with '--host-cc'"; \ + echo "like below so it uses your own C compiler for building the"; \ + echo "high-level software ('-e' is to use the existing configuration):"; \ + echo; \ + echo " ./project configure -e --host-cc"; \ + echo; \ + echo "__________ SEE NOTE FROM MANEAGE ABOVE __________"; \ + echo; exit 1; \ + fi; \ fi diff --git a/reproduce/software/shell/configure.sh b/reproduce/software/shell/configure.sh index 5837642..cce6e62 100755 --- a/reproduce/software/shell/configure.sh +++ b/reproduce/software/shell/configure.sh @@ -383,7 +383,6 @@ ______________________________________________________ EOF sleep 5 else - host_cc=0 on_mac_os=no fi -- cgit v1.2.1 From 82666074e0c921e53c21b9e2c444e9a2d407d092 Mon Sep 17 00:00:00 2001 From: Boud Roukema Date: Wed, 29 Apr 2020 18:45:33 +0200 Subject: Fixed OpenSSL deprecation bug on some OSs, causing problems in libgit2 Until this commit, the configure step would fail with an error when compiling libgit2 on a test system. The origin of this bug, on the OS that was tested, appears to be that in OpenSSL Version 1.1.1a, openssl/ec.h fails to include openssl/openconf.h. The bug is described in more detail at https://savannah.nongnu.org/bugs/index.php?58263 With this commit, this is fixed by manually inserting a necessary components. In particular, `sed` is used to insert a preprocessor instruction into `openssl/openconf.h`, defining `DEPRECATED_1_2_0(f)`, for an arbitrary section of code `f`, to include that code rather than exclude it or warn about it. This commit is valid provided that openssl remains at a version earlier than 1.2.0. Starting at version 1.2.0, deprecation warnings should be run normally. We have thus moved the version of OpenSSL in `versions.conf' to the section for programs that need to be manually checked for version updates with a note to remind the user when reaching that version. Other packages that use OpenSSL may benefit from this commit, not just libgit2. --- reproduce/software/config/versions.conf | 6 +++++- reproduce/software/make/basic.mk | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'reproduce/software') diff --git a/reproduce/software/config/versions.conf b/reproduce/software/config/versions.conf index 35ede19..d19f095 100644 --- a/reproduce/software/config/versions.conf +++ b/reproduce/software/config/versions.conf @@ -43,7 +43,6 @@ metastore-version = 1.1.2-23-fa9170b mpc-version = 1.1.0 mpfr-version = 4.0.2 ncurses-version = 6.1 -openssl-version = 1.1.1a patchelf-version = 0.10 perl-version = 5.30.0 pkgconfig-version = 0.29.2 @@ -216,3 +215,8 @@ 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 \ No newline at end of file diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index 779320f..0bec163 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -805,6 +805,14 @@ $(ibidir)/openssl: $(tdir)/cert.pem \ # environment variable. # # https://wiki.openssl.org/index.php/Compilation_and_Installation + # + # Bug 58263 (https://savannah.nongnu.org/bugs/?58263): In OpenSSL + # Version 1.1.1a (also checked in 1.1.1g), `openssl/ec.h' fails to + # include `openssl/openconf.h' on some OSs. The SED hack below + # inserts a hardwired element of `openssl/openconf.h' that is + # needed to include sections of code `f` that are deprecated in + # 1.2.0, but not yet in 1.1.1. This problem may be solved in + # version 1.2.x, so please check again in that bug. if [ x$(on_mac_os) = xyes ]; then \ export KERNEL_BITS=64; \ copt="shared no-ssl2 no-ssl3 enable-ec_nistp_64_gcc_128"; \ @@ -817,6 +825,9 @@ $(ibidir)/openssl: $(tdir)/cert.pem \ --with-zlib-lib=$(ildir) \ --with-zlib-include=$(idir)/include, \ -j$(numthreads), , ./config ) \ + && mv -v $(idir)/include/openssl/ec.h $(idir)/include/openssl/ec.h.orig \ + && sed -e 's,\(# include .openssl/opensslconf\.h.\),\1\n#ifndef DEPRECATEDIN_1_2_0\n#define DEPRECATEDIN_1_2_0(f) f;\n#endif\n,' \ + $(idir)/include/openssl/ec.h.orig > $(idir)/include/openssl/ec.h \ && cp $(tdir)/cert.pem $(idir)/etc/ssl/cert.pem \ && if [ $$? = 0 ]; then \ if [ x$(on_mac_os) = xyes ]; then \ -- cgit v1.2.1