]>
Commit | Line | Data |
---|---|---|
44509946 AS |
1 | #! /bin/sh |
2 | # Script to generate SYSROOT_SUFFIX_SPEC equivalent to MULTILIB_OSDIRNAMES | |
e918809c JB |
3 | # Arguments are MULTILIB_OSDIRNAMES, MULTILIB_OPTIONS, MULTILIB_MATCHES, |
4 | # and MULTILIB_REUSE. | |
44509946 | 5 | |
a945c346 | 6 | # Copyright (C) 2009-2024 Free Software Foundation, Inc. |
44509946 AS |
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 \ | |
e918809c | 33 | # MULTILIB_REUSE |
44509946 AS |
34 | # > t-sysroot-suffix.h |
35 | ||
e918809c JB |
36 | # The four options exactly correspond to the variables of the same |
37 | # names defined in the t-sysroot-suffix tmake_file fragment. | |
44509946 AS |
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" | |
e918809c | 59 | reuse="$4" |
44509946 AS |
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 | |
e918809c | 86 | case $optstring in |
44509946 | 87 | EOF |
e918809c JB |
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 | |
44509946 AS |
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 |