]>
Commit | Line | Data |
---|---|---|
cc7232b9 J |
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) 2018 Free Software Foundation, Inc. | |
6 | # Contributed by C-SKY Microsystems and Mentor Graphics. | |
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 | # > t-sysroot-suffix.h | |
34 | ||
35 | # The three options exactly correspond to the variables of the same | |
36 | # names defined in the tmake_file fragments. | |
37 | ||
38 | # Example: | |
39 | # sh ./gcc/config/print-sysroot-suffix.sh "a=A" "a b/c/d" "" | |
40 | # => | |
41 | # #undef SYSROOT_SUFFIX_SPEC | |
42 | # #define SYSROOT_SUFFIX_SPEC "" \ | |
43 | # "%{a:" \ | |
44 | # "%{b:A/b/;" \ | |
45 | # "c:A/c/;" \ | |
46 | # "d:A/d/;" \ | |
47 | # ":A/};" \ | |
48 | # ":}" | |
49 | ||
50 | # The script uses temporary subscripts in order to permit a recursive | |
51 | # algorithm without the use of functions. | |
52 | ||
53 | set -e | |
54 | ||
55 | dirnames="$1" | |
56 | options="$2" | |
57 | matches="$3" | |
58 | ||
59 | cat > print-sysroot-suffix3.sh <<\EOF | |
60 | #! /bin/sh | |
61 | # Print all the multilib matches for this option | |
62 | result="$1" | |
63 | EOF | |
64 | for x in $matches; do | |
65 | l=`echo $x | sed -e 's/=.*$//' -e 's/?/=/g'` | |
66 | r=`echo $x | sed -e 's/^.*=//' -e 's/?/=/g'` | |
67 | echo "[ \"\$1\" = \"$l\" ] && result=\"\$result|$r\"" >> print-sysroot-suffix3.sh | |
68 | done | |
69 | echo 'echo $result' >> print-sysroot-suffix3.sh | |
70 | chmod +x print-sysroot-suffix3.sh | |
71 | ||
72 | cat > print-sysroot-suffix2.sh <<\EOF | |
73 | #! /bin/sh | |
74 | # Recursive script to enumerate all multilib combinations, match against | |
75 | # multilib directories and output a spec string of the result. | |
76 | # Will fold identical trees. | |
77 | ||
78 | padding="$1" | |
79 | optstring="$2" | |
80 | shift 2 | |
81 | n="\" \\ | |
82 | $padding\"" | |
83 | if [ $# = 0 ]; then | |
84 | EOF | |
85 | ||
86 | pat= | |
87 | for x in $dirnames; do | |
88 | # p=`echo $x | sed -e 's,=!,/$=/,'` | |
89 | p=`echo $x | sed -e 's/=//g'` | |
90 | # pat="$pat -e 's=^//$p='" | |
91 | pat="$pat -e 's/$p/g'" | |
92 | done | |
93 | echo ' optstring=`echo "/$optstring" | sed '"$pat\`" >> print-sysroot-suffix2.sh | |
94 | cat >> print-sysroot-suffix2.sh <<\EOF | |
95 | case $optstring in | |
96 | //*) | |
97 | ;; | |
98 | *) | |
99 | echo "$optstring" | |
100 | ;; | |
101 | esac | |
102 | else | |
103 | thisopt="$1" | |
104 | shift | |
105 | bit= | |
106 | lastcond= | |
107 | result= | |
108 | for x in `echo "$thisopt" | sed -e 's,/, ,g'`; do | |
109 | case $x in | |
110 | EOF | |
111 | for x in `echo "$options" | sed -e 's,/, ,g'`; do | |
112 | match=`./print-sysroot-suffix3.sh "$x"` | |
113 | echo "$x) optmatch=\"$match\" ;;" >> print-sysroot-suffix2.sh | |
114 | done | |
115 | cat >> print-sysroot-suffix2.sh <<\EOF | |
116 | esac | |
117 | bit=`"$0" "$padding " "$optstring$x/" "$@"` | |
118 | if [ -z "$lastopt" ]; then | |
119 | lastopt="$optmatch" | |
120 | else | |
121 | if [ "$lastbit" = "$bit" ]; then | |
122 | lastopt="$lastopt|$optmatch" | |
123 | else | |
124 | result="$result$lastopt:$lastbit;$n" | |
125 | lastopt="$optmatch" | |
126 | fi | |
127 | fi | |
128 | lastbit="$bit" | |
129 | done | |
130 | bit=`"$0" "$padding " "$optstring" "$@"` | |
131 | if [ "$bit" = "$lastbit" ]; then | |
132 | if [ -z "$result" ]; then | |
133 | echo "$bit" | |
134 | else | |
135 | echo "$n%{$result:$bit}" | |
136 | fi | |
137 | else | |
138 | echo "$n%{$result$lastopt:$lastbit;$n:$bit}" | |
139 | fi | |
140 | fi | |
141 | EOF | |
142 | chmod +x ./print-sysroot-suffix2.sh | |
143 | result=`./print-sysroot-suffix2.sh \"\" \"\" $options` | |
144 | echo "#undef SYSROOT_SUFFIX_SPEC" | |
145 | echo "#define SYSROOT_SUFFIX_SPEC \"$result\"" | |
146 | rm print-sysroot-suffix2.sh | |
147 | rm print-sysroot-suffix3.sh |