Hello. When options like --program-suffix and --program-prefix are passed to configure script, they are normally converted to a sed program and then discarded, so when configure is called to subdirs, these options are not passed. This logic is implemented by the following code from configure.in: cat <<\EOF_SED > conftestsed s/ --no[[^ ]]* / / s/ --c[[a-z-]]*[[= ]][[^ ]]* / / s/ --sr[[a-z-]]*[[= ]][[^ ]]* / / s/ --ho[[a-z-]]*[[= ]][[^ ]]* / / s/ --bu[[a-z-]]*[[= ]][[^ ]]* / / s/ --t[[a-z-]]*[[= ]][[^ ]]* / / s/ --program-[[pst]][[a-z-]]*[[= ]][[^ ]]* / / s/ -cache-file[[= ]][[^ ]]* / / s/ -srcdir[[= ]][[^ ]]* / / s/ -host[[= ]][[^ ]]* / / s/ -build[[= ]][[^ ]]* / / s/ -target[[= ]][[^ ]]* / / s/ -program-prefix[[= ]][[^ ]]* / / s/ -program-suffix[[= ]][[^ ]]* / / s/ -program-transform-name[[= ]][[^ ]]* / / s/ [[^' -][^ ]*] / / s/^ *//;s/ *$// s,\$,$$,g EOF_SED sed -f conftestsed <<EOF_SED > conftestsed.out ${ac_configure_args} EOF_SED baseargs=`cat conftestsed.out` rm -f conftestsed conftestsed.out If both --program-prefix and --program-suffix will be given, the corresponding regilar expression ' --program-[[pst]][[a-z-]]*[[= ]][[^ ]]* ' will catch only first of two, not touching the second. Since not-discarded option is already converted to a sed program, lated this will result in either prefix of suffix (what happens to be second) added twice to program names. This could be fixed trivially - just add 'g' modifier to corresponding line of the above sed program: --- configure.in.orig 2004-02-06 10:03:08.000000000 +0300 +++ configure.in 2004-03-10 00:39:05.000000000 +0300 @@ -1778,7 +1778,7 @@ s/ --ho[[a-z-]]*[[= ]][[^ ]]* / / s/ --bu[[a-z-]]*[[= ]][[^ ]]* / / s/ --t[[a-z-]]*[[= ]][[^ ]]* / / -s/ --program-[[pst]][[a-z-]]*[[= ]][[^ ]]* / / +s/ --program-[[pst]][[a-z-]]*[[= ]][[^ ]]* / /g s/ -cache-file[[= ]][[^ ]]* / / s/ -srcdir[[= ]][[^ ]]* / / s/ -host[[= ]][[^ ]]* / / I faced this problem when I worked with Debian gcc-3.4 source package to make it build cross-compilers. So I am reporting this against 3.4. However, most likely the same buglet is also there in other gcc branches.
Confirmed, patches should be sent to gcc-patches@gcc.gnu.org ___after___ reading < http://gcc.gnu.org/contribute.html>.
Subject: Bug 14760 CVSROOT: /cvs/gcc Module name: gcc Changes by: neroden@gcc.gnu.org 2004-04-07 01:40:24 Modified files: . : configure configure.in ChangeLog Log message: PR bootstrap/14760 * configure.in: When computing baseargs, strip *all* copies of offending options. Also, don't match/substitute the trailing space, so that this actually works when two similar options are separated by only one space. * configure: Regenerate. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/configure.diff?cvsroot=gcc&r1=1.141&r2=1.142 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/configure.in.diff?cvsroot=gcc&r1=1.281&r2=1.282 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/ChangeLog.diff?cvsroot=gcc&r1=1.904&r2=1.905
I would like to add the same patch I added to mainline to 3.4 branch, after it reopens (the state of mainline and 3.4 branch was identical for this code). If this got in before 3.4, of course, that would be cool. This does not affect 3.3 branch.
Nathanael, this is fine for 3.4.1.
Nathanel, would you please apply this patch ASAP?
Subject: Bug 14760 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: mmitchel@gcc.gnu.org 2004-06-25 21:33:21 Modified files: . : ChangeLog configure.in configure Log message: PR bootstrap/14760 * configure.in: When computing baseargs, strip *all* copies of offending options. Also, don't match/substitute the trailing space, so that this actually works when two similar options are separated by only one space. * configure: Regenerate. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.856.2.14&r2=1.856.2.15 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/configure.in.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.266.4.2&r2=1.266.4.3 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/configure.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.126.4.2&r2=1.126.4.3
I applied this patch. Fixed in GCC 3.4.1.