OSDN Git Service

* id.po: Update.
[pf3gnuchains/gcc-fork.git] / gcc / genmultilib
index 097ecf9..270de2b 100644 (file)
@@ -1,12 +1,13 @@
 #!/bin/sh 
 # Generates multilib.h.
-#   Copyright (C) 1994, 1995, 1996, 1997, 1999, 2002 Free Software Foundation, Inc.
+#   Copyright (C) 1994, 1995, 1996, 1997, 1999, 2002, 2007
+#   Free Software Foundation, Inc.
 
 #This file is part of GCC.
 
 #GCC is free software; you can redistribute it and/or modify it under
 #the terms of the GNU General Public License as published by the Free
-#Software Foundation; either version 2, or (at your option) any later
+#Software Foundation; either version 3, or (at your option) any later
 #version.
 
 #GCC is distributed in the hope that it will be useful, but WITHOUT
@@ -15,9 +16,8 @@
 #for more details.
 
 #You should have received a copy of the GNU General Public License
-#along with GCC; see the file COPYING.  If not, write to the Free
-#Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-#02111-1307, USA.
+#along with GCC; see the file COPYING3.  If not see
+#<http://www.gnu.org/licenses/>.  
 
 # This shell script produces a header file which the gcc driver
 # program uses to pick which library to use based on the machine
 # for the rule to exclude a set. Options can be preceded with a '!' to
 # match a logical NOT.
 
-# The optional sevenths argument is a list of OS subdirectory names.
-# The format is the same as of the second argument.
-# The difference is that second argument describes multilib directories
-# in GCC conventions, while this one the OS multilib convention.
+# The optional seventh argument is a list of OS subdirectory names.
+# The format is either the same as of the second argument, or a set of
+# mappings. When it is the same as the second argument, it describes
+# the multilib directories using OS conventions, rather than GCC
+# conventions.  When it is a set of mappings of the form gccdir=osdir,
+# the left side gives the GCC convention and the right gives the
+# equivalent OS defined location.  If the osdir part begins with a !,
+# the os directory names are used exclusively.  Use the mapping when
+# there is no one-to-one equivalence between GCC levels and the OS.
 
 # The last option should be "yes" if multilibs are enabled.  If it is not
 # "yes", all GCC multilib dir names will be ".".
@@ -216,24 +221,44 @@ fi
 # Construct a sed pattern which will convert option names to OS directory
 # names.
 toosdirnames=
+defaultosdirname=
 if [ -n "${osdirnames}" ]; then
   set x ${osdirnames}
   shift
-  for set in ${options}; do
-    for opts in `echo ${set} | sed -e 's|/| |'g`; do
-      patt="/"
-      for opt in `echo ${opts} | sed -e 's_|_ _'g`; do
-        if [ "$1" != "${opt}" ]; then
-          toosdirnames="${toosdirnames} -e s|/${opt}/|/${1}/|g"
-         patt="${patt}${1}/"
-         if [ "${patt}" != "/${1}/" ]; then
-           toosdirnames="${toosdirnames} -e s|${patt}|/${1}/|g"
+  while [ $# != 0 ] ; do
+    case "$1" in
+      .=*)
+        defaultosdirname=`echo $1 | sed 's|^.=|:|'`
+       shift
+       ;;
+      *=*)
+       patt=`echo $1 | sed -e 's|=|/$=/|'`
+        toosdirnames="${toosdirnames} -e s=^/${patt}/="
+       shift
+        ;;
+      *)
+        break
+       ;;
+    esac
+  done
+  
+  if [ $# != 0 ]; then
+    for set in ${options}; do
+      for opts in `echo ${set} | sed -e 's|/| |'g`; do
+        patt="/"
+        for opt in `echo ${opts} | sed -e 's_|_ _'g`; do
+          if [ "$1" != "${opt}" ]; then
+            toosdirnames="${toosdirnames} -e s|/${opt}/|/${1}/|g"
+           patt="${patt}${1}/"
+           if [ "${patt}" != "/${1}/" ]; then
+             toosdirnames="${toosdirnames} -e s|${patt}|/${1}/|g"
+            fi
           fi
-        fi
+        done
+        shift
       done
-      shift
     done
-  done
+  fi
 fi
 
 # We need another recursive shell script to correctly handle positive
@@ -275,7 +300,7 @@ for set in ${options}; do
   done
 done
 optout=`echo ${optout} | sed -e 's/^ //'`
-echo "\". ${optout};\","
+echo "\".${defaultosdirname} ${optout};\","
 
 # Work over the list of combinations.  We have to translate each one
 # to use the directory names rather than the option names, we have to
@@ -286,7 +311,7 @@ for combo in ${combinations}; do
   if [ -n "${todirnames}" ]; then
     dirout=`echo ${combo} | sed ${todirnames}`
   else
-    dirout=${combo}
+    dirout=`echo ${combo} | sed -e 's/=/-/g'`
   fi
   # Remove the leading and trailing slashes.
   dirout=`echo ${dirout} | sed -e 's|^/||' -e 's|/$||g'`
@@ -298,8 +323,16 @@ for combo in ${combinations}; do
     osdirout=`echo ${osdirout} | sed -e 's|^/||' -e 's|/$||g'`
     if [ "x${enable_multilib}" != xyes ]; then
       dirout=".:${osdirout}"
+      disable_multilib=yes
     else
-      dirout="${dirout}:${osdirout}"
+      case "${osdirout}" in
+        !*)
+         dirout=`echo ${osdirout} | sed 's/^!//'`
+         ;;
+       *)
+         dirout="${dirout}:${osdirout}"
+         ;;
+      esac
     fi
   else
     if [ "x${enable_multilib}" != xyes ]; then
@@ -371,6 +404,12 @@ moptions=`echo ${options} | sed -e 's,[    ][      ]*, ,g'`
 echo ""
 echo "static const char *multilib_options = \"${moptions}\";"
 
+# Finally output the disable flag if specified
+if [ "x${disable_multilib}" = xyes ]; then
+  echo ""
+  echo "#define DISABLE_MULTILIB  1"
+fi
+
 cd ..
 rm -r tmpmultilib.$$