This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix ld --version parsing in gcc configury
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Richard Henderson <rth at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Wed, 22 May 2002 23:22:37 +0200
- Subject: [PATCH] Fix ld --version parsing in gcc configury
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
Hi!
ld --version in binutils 2.12.1 release prints:
GNU ld version 2.12.1
Copyright 2002 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License. This program has absolutely no warranty.
and as configury expects there a date, it thinks binutils 2.12.1 don't
support .hidden correctly (as opposed to e.g. H.J.'s binutils-2.12.90.0.7).
The following patch fixes this.
Bootstrapped on i386-redhat-linux and then run
DEFAULT_LINKER=foolinker ../configure
10 times where foolinker was a simple script which printed something for
--version and otherwise executed real ld, using various version texts I
could come up with (and checked whether .hidden support was detected or not).
Ok to commit?
To branch too?
2002-05-22 Jakub Jelinek <jakub@redhat.com>
* configure.in: Fix as version test for binutils 2.12.1 releases
(without dates).
* configure: Rebuilt.
--- gcc/configure.in.jj Thu May 9 12:14:57 2002
+++ gcc/configure.in Thu May 16 10:37:33 2002
@@ -1525,11 +1525,31 @@ elif test x$gcc_cv_as != x; then
ld_ver=`$gcc_cv_ld --version 2>/dev/null | head -1`
if echo "$ld_ver" | grep GNU > /dev/null; then
changequote(,)dnl
+ ld_vers=`echo $ld_ver | sed -n 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\(\|\.[0-9][0-9]*\)\)\([ ].*\|\)$,\1,p'`
ld_date=`echo $ld_ver | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
-changequote([,])dnl
if test 0"$ld_date" -lt 20020404; then
- gcc_cv_as_hidden="no"
+ if test -n "$ld_date"; then
+ # If there was date string, but was earlier than 2002-04-04, fail
+ gcc_cv_as_hidden="no"
+ elif test -z "$ld_vers"; then
+ # If there was no date string nor ld version number, something is wrong
+ gcc_cv_as_hidden="no"
+ else
+ ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
+ ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
+ ld_vers_patch=`expr "$ld_vers" : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
+ test -z "$ld_vers_patch" && ld_vers_patch=0
+ if test "$ld_vers_major" -lt 2; then
+ gcc_cv_as_hidden="no"
+ elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 12; then
+ gcc_cv_as_hidden="no"
+ elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 12 \
+ -a "$ld_vers_patch" -eq 0; then
+ gcc_cv_as_hidden="no"
+ fi
+ fi
fi
+changequote([,])dnl
fi
fi
--- gcc/configure.jj Thu May 9 12:14:57 2002
+++ gcc/configure Wed May 22 19:24:11 2002
@@ -7189,9 +7189,29 @@ elif test x$gcc_cv_as != x; then
# the date string after the version number.
ld_ver=`$gcc_cv_ld --version 2>/dev/null | head -1`
if echo "$ld_ver" | grep GNU > /dev/null; then
+ ld_vers=`echo $ld_ver | sed -n 's,^.*[ ]\([0-9][0-9]*\.[0-9][0-9]*\(\|\.[0-9][0-9]*\)\)\([ ].*\|\)$,\1,p'`
ld_date=`echo $ld_ver | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
if test 0"$ld_date" -lt 20020404; then
- gcc_cv_as_hidden="no"
+ if test -n "$ld_date"; then
+ # If there was date string, but was earlier than 2002-04-04, fail
+ gcc_cv_as_hidden="no"
+ elif test -z "$ld_vers"; then
+ # If there was no date string nor ld version number, something is wrong
+ gcc_cv_as_hidden="no"
+ else
+ ld_vers_major=`expr "$ld_vers" : '\([0-9]*\)'`
+ ld_vers_minor=`expr "$ld_vers" : '[0-9]*\.\([0-9]*\)'`
+ ld_vers_patch=`expr "$ld_vers" : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
+ test -z "$ld_vers_patch" && ld_vers_patch=0
+ if test "$ld_vers_major" -lt 2; then
+ gcc_cv_as_hidden="no"
+ elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -lt 12; then
+ gcc_cv_as_hidden="no"
+ elif test "$ld_vers_major" -eq 2 -a "$ld_vers_minor" -eq 12 \
+ -a "$ld_vers_patch" -eq 0; then
+ gcc_cv_as_hidden="no"
+ fi
+ fi
fi
fi
fi
Jakub