Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [toplevel patch] Macroize build_subdir & target_subdir, newest version
@ 2003-03-17 14:45 Nathanael Nerode
  2003-05-31 21:58 ` Alexandre Oliva
  0 siblings, 1 reply; 2+ messages in thread
From: Nathanael Nerode @ 2003-03-17 14:45 UTC (permalink / raw)
  To: gcc-patches, binutils, gdb-patches, aoliva

This looks overengineered, I realize.  However,
* it works with the current autoconf2.13
* it is designed to be 'future-proof' against autoconf 2.5x
That's the source of the overengineering.

Tested on i686-pc-linux-gnu.

	* config/acx.m4: Introduce _GCC_TOPLEV_NONCANONICAL_BUILD,
	_GCC_TOPLEV_NONCANOICAL_HOST, _GCC_TOPLEV_NONCANONICAL_TARGET,
	GCC_TOPLEV_SUBDIRS.
	* configure.in: Use GCC_TOPLEV_SUBDIRS.

Index: config/acx.m4
===================================================================
RCS file: /cvs/gcc/gcc/config/acx.m4,v
retrieving revision 1.2
diff -u -r1.2 acx.m4
--- config/acx.m4	28 Dec 2002 17:57:00 -0000	1.2
+++ config/acx.m4	17 Mar 2003 14:40:52 -0000
@@ -1,6 +1,67 @@
 # Autoconf M4 include file defining utility macros for complex Canadian
 # cross builds.
 
+dnl ####
+dnl # _GCC_TOPLEV_NONCANONICAL_BUILD
+dnl # $build_alias or canonical $build if blank.
+dnl # Used when we would use $build_alias, but empty is not OK.
+AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_BUILD],
+[AC_REQUIRE([AC_CANONICAL_BUILD]) []dnl
+case ${build_alias} in
+  "") build_noncanonical=${build} ;;
+  *) build_noncanonical=${build_alias} ;;
+esac
+]) []dnl # _GCC_TOPLEV_NONCANONICAL_BUILD
+
+dnl ####
+dnl # _GCC_TOPLEV_NONCANONICAL_HOST
+dnl # $host_alias, or $build_noncanonical if blank.
+dnl # Used when we would use $host_alias, but empty is not OK.
+AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_HOST],
+[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
+case ${host_alias} in
+  "") host_noncanonical=${build_noncanonical} ;;
+  *) host_noncanonical=${host_alias} ;;
+esac
+]) []dnl # _GCC_TOPLEV_NONCANONICAL_HOST
+
+dnl ####
+dnl # _GCC_TOPLEV_NONCANONICAL_TARGET
+dnl # $target_alias or $host_noncanonical if blank.
+dnl # Used when we would use $target_alias, but empty is not OK.
+AC_DEFUN([_GCC_TOPLEV_NONCANONICAL_TARGET],
+[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_HOST]) []dnl
+case ${target_alias} in
+  "") target_noncanonical=${host_noncanonical} ;;
+  *) target_noncanonical=${target_alias} ;;
+esac
+]) []dnl # _GCC_TOPLEV_NONCANONICAL_TARGET
+
+dnl ####
+dnl # GCC_TOPLEV_SUBDIRS
+dnl # GCC & friends build 'build', 'host', and 'target' tools.  These must
+dnl # be separated into three well-known subdirectories of the build directory:
+dnl # build_subdir, host_subdir, and target_subdir.  The values are determined
+dnl # here so that they can (theoretically) be changed in the future.  They
+dnl # were previously reproduced across many different files.
+dnl #
+dnl # This logic really amounts to very little with autoconf 2.13; it will
+dnl # amount to a lot more with autoconf 2.5x.
+AC_DEFUN([GCC_TOPLEV_SUBDIRS],
+[AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_TARGET]) []dnl
+AC_REQUIRE([_GCC_TOPLEV_NONCANONICAL_BUILD]) []dnl
+# Prefix 'build-' so this never conflicts with target_subdir.
+build_subdir="build-${build_noncanonical}"
+# Not really a subdirectory, but here for completeness.
+host_subdir=.
+# No prefix.
+target_subir=${target_noncanonical}
+AC_SUBST([build_subdir]) []dnl
+AC_SUBST([host_subdir]) []dnl
+AC_SUBST([target_subdir]) []dnl
+]) []dnl # GCC_TOPLEV_SUBDIRS
+
+
 ####
 # _NCN_TOOL_PREFIXES:  Some stuff that oughtta be done in AC_CANONICAL_SYSTEM 
 # or AC_INIT.
Index: configure.in
===================================================================
RCS file: /cvs/gcc/gcc/configure.in,v
retrieving revision 1.228
diff -u -r1.228 configure.in
--- configure.in	12 Mar 2003 20:40:49 -0000	1.228
+++ configure.in	17 Mar 2003 14:41:03 -0000
@@ -179,9 +179,8 @@
   is_cross_compiler=yes
 fi	
 
-# We always want to use the same name for this directory, so that dejagnu
-# can reliably find it.
-target_subdir=${target_alias}
+# Find the build and target subdirs.
+GCC_TOPLEV_SUBDIRS
 
 if test ! -d ${target_subdir} ; then
   if mkdir ${target_subdir} ; then true
@@ -191,9 +190,6 @@
   fi
 fi
 
-build_prefix=build-
-build_subdir=${build_prefix}${build_alias}
-
 if test x"${build_alias}" != x"${host}" ; then
   if test ! -d ${build_subdir} ; then
     if mkdir ${build_subdir} ; then true
@@ -1981,7 +1977,6 @@
 AC_SUBST(libstdcxx_incdir)
 
 # Build module lists & subconfigure args.
-AC_SUBST(build_subdir)
 AC_SUBST(build_configargs)
 AC_SUBST(configure_build_modules)
 AC_SUBST(all_build_modules)
@@ -1996,7 +1991,6 @@
 AC_SUBST(install_host_modules_nogcc)
 
 # Target module lists & subconfigure args.
-AC_SUBST(target_subdir)
 AC_SUBST(target_configargs)
 AC_SUBST(target_configdirs)
 AC_SUBST(configure_target_modules)


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [toplevel patch] Macroize build_subdir & target_subdir, newest version
  2003-03-17 14:45 [toplevel patch] Macroize build_subdir & target_subdir, newest version Nathanael Nerode
@ 2003-05-31 21:58 ` Alexandre Oliva
  0 siblings, 0 replies; 2+ messages in thread
From: Alexandre Oliva @ 2003-05-31 21:58 UTC (permalink / raw)
  To: Nathanael Nerode; +Cc: gcc-patches, binutils, gdb-patches

On Mar 17, 2003, Nathanael Nerode <neroden@twcny.rr.com> wrote:

> 	* config/acx.m4: Introduce _GCC_TOPLEV_NONCANONICAL_BUILD,
> 	_GCC_TOPLEV_NONCANOICAL_HOST, _GCC_TOPLEV_NONCANONICAL_TARGET,
> 	GCC_TOPLEV_SUBDIRS.
> 	* configure.in: Use GCC_TOPLEV_SUBDIRS.

This is ok, if still appropriate.  Sorry that it took so long for me
to get to it.

We still have problems in deciding what options to pass down to
sub-configures, because autoconf 2.5x's behavior in deciding whether
we're cross compiling or not depends on the actual command-line flags,
not only on the implied defaults.  Still, your patch is a step in the
right direction.

As for solving the problem of not passing --build, --host or --target
to sub-configures when it's implied, to avoid crossification :-), one
idea that was floated in the GCC Summit (was it Zack?  I seem to
recall two people independently proposing it, but I don't remember who
else did it, sorry) was to set up two different _CONFIGARGS variable
per build, host and target, and grep the autoconf version number in
the configure script to tell which version to use.  This sounds like
the only sane (even if ugly) way to avoid having to convert the entire
tree (gcc, src and what not) to the new autoconf at the same time.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                 aoliva@{redhat.com, gcc.gnu.org}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist                Professional serial bug killer


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-05-31 21:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-03-17 14:45 [toplevel patch] Macroize build_subdir & target_subdir, newest version Nathanael Nerode
2003-05-31 21:58 ` Alexandre Oliva

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox