OSDN Git Service

2010-04-06 Kai Tietz <kai.tietz@onevision.com>
[pf3gnuchains/gcc-fork.git] / gcc / config / print-sysroot-suffix.sh
1 #! /bin/sh
2 # Script to generate SYSROOT_SUFFIX_SPEC equivalent to MULTILIB_OSDIRNAMES
3 # Arguments are MULTILIB_OSDIRNAMES, MULTILIB_OPTIONS and MULTILIB_MATCHES.
4
5 # Copyright (C) 2009 Free Software Foundation, Inc.
6
7 # This file is part of GCC.
8
9 # GCC is free software; you can redistribute it and/or modify it under
10 # the terms of the GNU General Public License as published by the Free
11 # Software Foundation; either version 3, or (at your option) any later
12 # version.
13
14 # GCC is distributed in the hope that it will be useful, but WITHOUT
15 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17 # for more details.
18
19 # You should have received a copy of the GNU General Public License
20 # along with GCC; see the file COPYING3.  If not see
21 # <http://www.gnu.org/licenses/>.  
22
23 # This shell script produces a header file fragment that defines
24 # SYSROOT_SUFFIX_SPEC.  It assumes that the sysroots will have the same
25 # structure and names used by the multilibs.
26
27 # Invocation:
28 #   print-sysroot-suffix.sh \
29 #          MULTILIB_OSDIRNAMES \
30 #          MULTILIB_OPTIONS \
31 #          MULTILIB_MATCHES \
32 #      > t-sysroot-suffix.h
33
34 # The three options exactly correspond to the variables of the same
35 # names defined in the tmake_file fragments.
36
37 # Example:
38 #   sh ./gcc/config/print-sysroot-suffix.sh "a=A" "a b/c/d" ""
39 # =>
40 #   #undef SYSROOT_SUFFIX_SPEC
41 #   #define SYSROOT_SUFFIX_SPEC "" \
42 #   "%{a:" \
43 #     "%{b:A/b/;" \
44 #     "c:A/c/;" \
45 #     "d:A/d/;" \
46 #     ":A/};" \
47 #   ":}"
48
49 # The script uses temporary subscripts in order to permit a recursive
50 # algorithm without the use of functions.
51
52 set -e
53
54 dirnames="$1"
55 options="$2"
56 matches="$3"
57
58 cat > print-sysroot-suffix3.sh <<\EOF
59 #! /bin/sh
60 # Print all the multilib matches for this option
61 result="$1"
62 EOF
63 for x in $matches; do
64   l=`echo $x | sed -e 's/=.*$//' -e 's/?/=/g'`
65   r=`echo $x | sed -e 's/^.*=//' -e 's/?/=/g'`
66   echo "[ \"\$1\" = \"$l\" ] && result=\"\$result|$r\"" >> print-sysroot-suffix3.sh
67 done
68 echo 'echo $result' >> print-sysroot-suffix3.sh
69 chmod +x print-sysroot-suffix3.sh
70
71 cat > print-sysroot-suffix2.sh <<\EOF
72 #! /bin/sh
73 # Recursive script to enumerate all multilib combinations, match against
74 # multilib directories and output a spec string of the result.
75 # Will fold identical trees.
76
77 padding="$1"
78 optstring="$2"
79 shift 2
80 n="\" \\
81 $padding\""
82 if [ $# = 0 ]; then
83 EOF
84
85 pat=
86 for x in $dirnames; do
87   p=`echo $x | sed -e 's,=!,/$=/,'`
88   pat="$pat -e 's=^//$p='"
89 done
90 echo '  optstring=`echo "/$optstring" | sed '"$pat\`" >> print-sysroot-suffix2.sh
91 cat >> print-sysroot-suffix2.sh <<\EOF
92   case $optstring in
93   //*)
94     ;;
95   *)
96     echo "$optstring"
97     ;;
98   esac
99 else
100   thisopt="$1"
101   shift
102   bit=
103   lastcond=
104   result=
105   for x in `echo "$thisopt" | sed -e 's,/, ,g'`; do
106     case $x in
107 EOF
108 for x in `echo "$options" | sed -e 's,/, ,g'`; do
109   match=`./print-sysroot-suffix3.sh "$x"`
110   echo "$x) optmatch=\"$match\" ;;" >> print-sysroot-suffix2.sh
111 done
112 cat >> print-sysroot-suffix2.sh <<\EOF
113     esac
114     bit=`"$0" "$padding  " "$optstring$x/" "$@"`
115     if [ -z "$lastopt" ]; then
116       lastopt="$optmatch"
117     else
118       if [ "$lastbit" = "$bit" ]; then
119         lastopt="$lastopt|$optmatch"
120       else
121         result="$result$lastopt:$lastbit;$n"
122         lastopt="$optmatch"
123       fi
124     fi
125     lastbit="$bit"
126   done
127   bit=`"$0" "$padding  " "$optstring" "$@"`
128   if [ "$bit" = "$lastbit" ]; then
129     if [ -z "$result" ]; then
130       echo "$bit"
131     else
132       echo "$n%{$result:$bit}"
133     fi
134   else
135     echo "$n%{$result$lastopt:$lastbit;$n:$bit}"
136   fi
137 fi
138 EOF
139
140 chmod +x ./print-sysroot-suffix2.sh
141 result=`./print-sysroot-suffix2.sh "" "/" $options`
142 echo "#undef SYSROOT_SUFFIX_SPEC"
143 echo "#define SYSROOT_SUFFIX_SPEC \"$result\""
144 rm print-sysroot-suffix2.sh
145 rm print-sysroot-suffix3.sh