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