Bug 14760

Summary: [3.4 regression]A bug in configure{,.in} prevents using both --program-suffix and --program-prefix
Product: gcc Reporter: Nikita V. Youshchenko <yoush>
Component: bootstrapAssignee: Nathanael C. Nerode <neroden>
Status: RESOLVED FIXED    
Severity: normal CC: gcc-bugs, mark, neroden
Priority: P2    
Version: 3.4.0   
Target Milestone: 3.4.1   
Host: Target:
Build: Known to work: 4.0 3.3.3
Known to fail: 3.4.0 Last reconfirmed: 2004-04-04 06:09:35

Description Nikita V. Youshchenko 2004-03-28 14:57:59 UTC
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.
Comment 1 Andrew Pinski 2004-04-04 06:09:35 UTC
Confirmed, patches should be sent to gcc-patches@gcc.gnu.org ___after___ reading <
http://gcc.gnu.org/contribute.html>.
Comment 2 CVS Commits 2004-04-07 01:40:43 UTC
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

Comment 3 Nathanael C. Nerode 2004-04-07 01:50:07 UTC
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. 
 
Comment 4 Mark Mitchell 2004-06-12 22:54:53 UTC
Nathanael, this is fine for 3.4.1.
Comment 5 Mark Mitchell 2004-06-19 00:03:10 UTC
Nathanel, would you please apply this patch ASAP?
Comment 6 CVS Commits 2004-06-25 21:33:39 UTC
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

Comment 7 Mark Mitchell 2004-06-25 21:33:50 UTC
I applied this patch.

Fixed in GCC 3.4.1.