Patchwork [PR,libgcj/44341] introduce --with-target-{gmp,mpfr,...}

login
register
mail settings
Submitter Alexandre Oliva
Date Jan. 27, 2011, 3:50 a.m.
Message ID <or62tbqa26.fsf@livre.localdomain>
Download mbox | patch
Permalink /patch/80580/
State New
Headers show

Comments

Alexandre Oliva - Jan. 27, 2011, 3:50 a.m.
On Jan 25, 2011, "Joseph S. Myers" <joseph@codesourcery.com> wrote:

> Even there, the options may not really be general enough, in that if you 
> are building libgcj, linked against libgmp, for an x86_64-linux-gnu target 
> in a multilib configuration, you probably want both 32-bit and 64-bit 
> libgmp and so a single option may not suffice to say where they are for 
> all multilibs.

Ok, this is definitely a killer.  Thanks for bringing this up.  I've now
simplified the patch, dropping the --with-target* options, and changing
it so as to refrain from passing the host-specific options to configure
cross target libraries.

> What should be done in general is making it explicit (in install.texi) 
> that certain options are host options or target options.  Thus: 
> --with-gmp* and other library options are purely host options and do not 
> relate to the target at all.

*nod*

> --disable-shared is purely a target option and not relevant to the
> host

Erhm...  This may be so for GCC, but it definitely isn't so in other
packages that share the top level infrastructure with GCC.

Here's the simplified patch I've just smoke-tested.  Any objections?
Ralf Wildenhues - Jan. 27, 2011, 7:40 a.m.
* Alexandre Oliva wrote on Thu, Jan 27, 2011 at 04:50:41AM CET:
> Here's the simplified patch I've just smoke-tested.  Any objections?

This looks ok to me.

Thanks,
Ralf

> for  ChangeLog
> from  Alexandre Oliva  <aoliva@redhat.com>
> 
> 	PR libgcj/44341
> 	* configure.ac: Discard --with-* flags for host when configuring
> 	target libraries for cross build.
> 	* configure: Rebuilt.
> 
> for  gcc/ChangeLog
> from  Alexandre Oliva  <aoliva@redhat.com>
> 
> 	PR libgcj/44341
> 	* doc/install.texi: Document host options discarded when cross
> 	configuring target libraries.

Patch

for  ChangeLog
from  Alexandre Oliva  <aoliva@redhat.com>

	PR libgcj/44341
	* configure.ac: Discard --with-* flags for host when configuring
	target libraries for cross build.
	* configure: Rebuilt.

for  gcc/ChangeLog
from  Alexandre Oliva  <aoliva@redhat.com>

	PR libgcj/44341
	* doc/install.texi: Document host options discarded when cross
	configuring target libraries.

Index: configure.ac
===================================================================
--- configure.ac.orig	2011-01-26 03:58:32.016540988 -0200
+++ configure.ac	2011-01-27 01:12:01.250018077 -0200
@@ -2845,6 +2845,7 @@  AC_SUBST_FILE(serialization_dependencies
 # Also strip program-prefix, program-suffix, and program-transform-name,
 # so that we can pass down a consistent program-transform-name.
 baseargs=
+tbaseargs=
 keep_next=no
 skip_next=no
 eval "set -- $ac_configure_args"
@@ -2860,6 +2861,7 @@  do
 	ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     baseargs="$baseargs '$ac_arg'"
+    tbaseargs="$tbaseargs '$ac_arg'"
     keep_next=no
     continue
   fi
@@ -2881,11 +2883,45 @@  do
       ;;
   esac
 
+  skip_targ=no
+  case $ac_arg in
+changequote(,)
+  --with-* | --without-*)
+    libopt=`echo "$ac_arg" | sed -e 's,^--[^-_]*[-_],,' -e 's,=.*$,,'`
+
+    case $libopt in
+    *[-_]include)
+      lib=`echo "$libopt" | sed 's,[-_]include$,,'`
+      ;;
+    *[-_]lib)
+      lib=`echo "$libopt" | sed 's,[-_]lib$,,'`
+      ;;
+    *)
+      lib=$libopt
+      ;;
+    esac
+changequote([,])
+
+    case $lib in
+    mpc | mpfr | gmp | ppl | cloog)
+      # If we're processing --with-$lib, --with-$lib-include or
+      # --with-$lib-lib, for one of the libs above, and target is
+      # different from host, don't pass the current argument to any
+      # target library's configure.
+      if test x$is_cross_compiler = xyes; then
+        skip_targ=yes
+      fi
+      ;;
+    esac
+    ;;
+  esac
+
   case "$ac_arg" in
     --cache-file=/dev/null | \
     -cache-file=/dev/null )
       # Handled here to avoid the test to skip args below.
       baseargs="$baseargs '$ac_arg'"
+      tbaseargs="$tbaseargs '$ac_arg'"
       # Assert: $separate_arg should always be no.
       keep_next=$separate_arg
       ;;
@@ -2916,6 +2952,9 @@  do
 	  ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
       esac
       baseargs="$baseargs '$ac_arg'"
+      if test X"$skip_targ" = Xno; then
+        tbaseargs="$tbaseargs '$ac_arg'"
+      fi
       keep_next=$separate_arg
       ;;
     *)
@@ -2942,10 +2981,13 @@  EOF_SED
 gcc_transform_name=`cat conftestsed.out`
 rm -f conftestsed.out
 baseargs="$baseargs --program-transform-name='${gcc_transform_name}'"
+tbaseargs="$tbaseargs --program-transform-name='${gcc_transform_name}'"
 if test "$silent" = yes; then
   baseargs="$baseargs --silent"
+  tbaseargs="$tbaseargs --silent"
 fi
 baseargs="$baseargs --disable-option-checking"
+tbaseargs="$tbaseargs --disable-option-checking"
 
 # Record and document user additions to sub configure arguments.
 AC_ARG_VAR([build_configargs],
@@ -2974,7 +3016,7 @@  esac
 # This seems to be due to autoconf 2.5x stupidity.
 host_configargs="$host_configargs --cache-file=./config.cache ${extra_host_args} ${baseargs}"
 
-target_configargs="$target_configargs ${baseargs}"
+target_configargs="$target_configargs ${tbaseargs}"
 
 # Passing a --with-cross-host argument lets the target libraries know
 # whether they are being built with a cross-compiler or being built
Index: gcc/doc/install.texi
===================================================================
--- gcc/doc/install.texi.orig	2011-01-26 03:58:33.884491660 -0200
+++ gcc/doc/install.texi	2011-01-27 01:15:49.846404205 -0200
@@ -1584,6 +1584,9 @@  shared libraries can be found by the dyn
 using GCC, for example by setting the runtime shared library path
 variable (@env{LD_LIBRARY_PATH} on GNU/Linux and Solaris systems).
 
+These flags are applicable to the host platform only.  When building
+a cross compiler, they will not be used to configure target libraries.
+
 @item --with-ppl=@var{pathname}
 @itemx --with-ppl-include=@var{pathname}
 @itemx --with-ppl-lib=@var{pathname}
@@ -1604,6 +1607,9 @@  you can explicitly specify the directory
 shorthand assumptions are not correct, you can use the explicit
 include and lib options directly.
 
+These flags are applicable to the host platform only.  When building
+a cross compiler, they will not be used to configure target libraries.
+
 @item --with-host-libstdcxx=@var{linker-args}
 If you are linking with a static copy of PPL, you can use this option
 to specify how the linker should find the standard C++ library used
Index: configure
===================================================================
--- configure.orig	2011-01-27 01:12:06.797881999 -0200
+++ configure	2011-01-27 01:12:37.420130747 -0200
@@ -7330,6 +7330,7 @@  serialization_dependencies=serdep.tmp
 # Also strip program-prefix, program-suffix, and program-transform-name,
 # so that we can pass down a consistent program-transform-name.
 baseargs=
+tbaseargs=
 keep_next=no
 skip_next=no
 eval "set -- $ac_configure_args"
@@ -7345,6 +7346,7 @@  do
 	ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     baseargs="$baseargs '$ac_arg'"
+    tbaseargs="$tbaseargs '$ac_arg'"
     keep_next=no
     continue
   fi
@@ -7366,11 +7368,45 @@  do
       ;;
   esac
 
+  skip_targ=no
+  case $ac_arg in
+
+  --with-* | --without-*)
+    libopt=`echo "$ac_arg" | sed -e 's,^--[^-_]*[-_],,' -e 's,=.*$,,'`
+
+    case $libopt in
+    *[-_]include)
+      lib=`echo "$libopt" | sed 's,[-_]include$,,'`
+      ;;
+    *[-_]lib)
+      lib=`echo "$libopt" | sed 's,[-_]lib$,,'`
+      ;;
+    *)
+      lib=$libopt
+      ;;
+    esac
+
+
+    case $lib in
+    mpc | mpfr | gmp | ppl | cloog)
+      # If we're processing --with-$lib, --with-$lib-include or
+      # --with-$lib-lib, for one of the libs above, and target is
+      # different from host, don't pass the current argument to any
+      # target library's configure.
+      if test x$is_cross_compiler = xyes; then
+        skip_targ=yes
+      fi
+      ;;
+    esac
+    ;;
+  esac
+
   case "$ac_arg" in
     --cache-file=/dev/null | \
     -cache-file=/dev/null )
       # Handled here to avoid the test to skip args below.
       baseargs="$baseargs '$ac_arg'"
+      tbaseargs="$tbaseargs '$ac_arg'"
       # Assert: $separate_arg should always be no.
       keep_next=$separate_arg
       ;;
@@ -7401,6 +7437,9 @@  do
 	  ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
       esac
       baseargs="$baseargs '$ac_arg'"
+      if test X"$skip_targ" = Xno; then
+        tbaseargs="$tbaseargs '$ac_arg'"
+      fi
       keep_next=$separate_arg
       ;;
     *)
@@ -7427,10 +7466,13 @@  EOF_SED
 gcc_transform_name=`cat conftestsed.out`
 rm -f conftestsed.out
 baseargs="$baseargs --program-transform-name='${gcc_transform_name}'"
+tbaseargs="$tbaseargs --program-transform-name='${gcc_transform_name}'"
 if test "$silent" = yes; then
   baseargs="$baseargs --silent"
+  tbaseargs="$tbaseargs --silent"
 fi
 baseargs="$baseargs --disable-option-checking"
+tbaseargs="$tbaseargs --disable-option-checking"
 
 # Record and document user additions to sub configure arguments.
 
@@ -7456,7 +7498,7 @@  esac
 # This seems to be due to autoconf 2.5x stupidity.
 host_configargs="$host_configargs --cache-file=./config.cache ${extra_host_args} ${baseargs}"
 
-target_configargs="$target_configargs ${baseargs}"
+target_configargs="$target_configargs ${tbaseargs}"
 
 # Passing a --with-cross-host argument lets the target libraries know
 # whether they are being built with a cross-compiler or being built