source: roaraudio/compbins/ast2roar @ 3817:c8e8771a36c1

Last change on this file since 3817:c8e8771a36c1 was 3817:c8e8771a36c1, checked in by phi, 14 years ago

fixed quote handling a bit

  • Property exe set to *
File size: 5.0 KB
RevLine 
[2848]1#!/bin/sh
2
[3520]3DOS=false
4SECTIONC=0
5
6if [ "$1" = '--dos' ]
7then
8 DOS=true;
9 shift;
10fi
11
[2848]12OUT="$1"
13IN="$2"
14
[3754]15if tempfile --help > /dev/null 2> /dev/null
16then
17 HELPFILE=`tempfile -p $$- -s .help`
18else
19 HELPFILE=tempfile-$$.help
20 touch $HELPFILE
21fi
22
[3502]23HELPOPTS=''
24
[3499]25ARGS_END_OPTS_ON_NON_OPT=false
26
[3502]27ast2roar_help() {
28 HELPOPTS="$*"
29
30 cat > $HELPFILE
31}
[2848]32
[3520]33
[3502]34if [ -r $IN ]
35then
36 . ./$IN
37else
38 rm $HELPFILE
39 exit 1;
40fi
[2848]41
42{
[3520]43 $DOS && echo '@ECHO OFF'
44 $DOS || echo '#!/bin/sh'
[2848]45 echo
46
[3520]47 $DOS && echo "SET _ARGS=$ARGS_ADD_OPTS"
48 $DOS || echo "_args='$ARGS_ADD_OPTS';"
49
50 if $DOS
51 then
52  cat <<_E_O_F_
53
54:mloop
55IF "x%1" == "x" GOTO mloopend
56SET k=%1
57SHIFT
58
59IF "%k%" == "--" GOTO mloopend
60_E_O_F_
61 else
62  cat <<_E_O_F_
[2848]63
64while [ -n "\$1" ]
65do
[3497]66 k="\$1";
[2848]67 shift;
68
69 case "\$k" in
[3497]70  '--')
71   break;
72  ;;
[2848]73_E_O_F_
[3520]74 fi
[2848]75
[3502]76 if [ "$HELPOPTS" != '' ]
77 then
[3520]78  if $DOS
79  then
80   for o in $HELPOPTS
81   do
82    echo "IF \"%k%\" == \"$o\" GOTO help"
83   done
84  else
85   _opts=`echo "$HELPOPTS" | sed "s/^/\'/; s/$/\'/; s/ /\'\|\'/g"`
86   echo "  $_opts)";
87   echo '   cat <<__AST2ROAR__END_OF_HELP_TEXT__'
88   cat $HELPFILE
89   echo '__AST2ROAR__END_OF_HELP_TEXT__'
90   echo '   exit 0;'
91   echo '  ;;';
92  fi
[3502]93 fi
94
[2848]95 for o in $ARGS_IGNORE_OPTS
96 do
97  on=`echo $o | cut -d: -f1`
98  oa=`echo $o | cut -d: -f2`
[3520]99  if $DOS
[2848]100  then
[3520]101   if $oa
102   then
103    echo "IF \"%k%\" == \"$on\" GOTO nextshift"
104   else
105    echo "IF \"%k%\" == \"$on\" GOTO next"
106   fi
107  else
108   echo "  '$on')";
109   if $oa
110   then
111    echo '   shift;';
112   fi
113   echo '  ;;';
[2848]114  fi
115 done
116
117 for o in $ARGS_PASS_OPTS
118 do
119  on=`echo $o | cut -d: -f1`
120  oa=`echo $o | cut -d: -f2`
[3520]121  if $DOS
[2848]122  then
[3520]123   if $oa
124   then
125    echo 'IF "%k%" == "'"$on"'" GOTO passval';
126   else
127    echo 'IF "%k%" == "'"$on"'" GOTO pass';
128   fi
[2848]129  else
[3520]130   echo "  '$on')";
131   if $oa
132   then
133    echo '   _args="$_args '"$on"' $1";';
134    echo '   shift;';
135   else
136    echo '   _args="$_args '"$on"'";';
137   fi
138   echo '  ;;';
[2848]139  fi
140 done
141
[2855]142 for o in $ARGS_MAP_OPTS
143 do
144  on=`echo $o | cut -d: -f1`
145  oa=`echo $o | cut -d: -f2`
[3817]146  or=`echo $o | cut -d: -f3 | sed 's/""/ /g'`
[3520]147  if $DOS
[2855]148  then
[3520]149   sec=sec$SECTIONC
150   SECTIONC=`expr $SECTIONC + 1`
151   if $oa
152   then
153    cat <<_E_O_F_
154IF NOT "%k%" == "$on" GOTO ${sec}end
155SET _ARGV=%_ARGV% $or %1
156GOTO nextshift
157:${sec}end
158
159_E_O_F_
160   else
161    cat <<_E_O_F_
162IF NOT "%k%" == "$on" GOTO ${sec}end
163SET _ARGV=%_ARGV% $or
164GOTO next
165:${sec}end
166
167_E_O_F_
168   fi
[2855]169  else
[3520]170   echo "  '$on')";
171   if $oa
172   then
173    echo '   _args="$_args '"$or"' $1";';
174    echo '   shift;';
175   else
176    echo '   _args="$_args '"$or"'";';
177   fi
178   echo '  ;;';
[2855]179  fi
180 done
181
[3122]182 for o in $ARGS_DEEQ_OPTS
183 do
[3520]184  if $DOS
185  then
186   echo "REM IGNORED DEEQ: $o";
187   echo "Warning: can not compile DEEQ as target does not support DEEQ: $o" >&2
188  else
189   echo "  '$o='*)";
190   echo '   _para=`echo "$k" | cut -d= -f2`;';
191   echo '   _args="$_args '"$o"' $_para";';
192   echo '  ;;';
193  fi
[3122]194 done
195
[3498]196 for o in $ARGS_ENV_OPTS
197 do
198  on=`echo $o | cut -d: -f1`
199  or=`echo $o | cut -d: -f2`
[3520]200  if $DOS
201  then
202   sec=sec$SECTIONC
203   SECTIONC=`expr $SECTIONC + 1`
204   cat <<_E_O_F_
205IF NOT "%k%" == "$on" GOTO ${sec}end
206SET $or=%1
207GOTO nextshift
208:${sec}end
209_E_O_F_
210  else
211   echo "  '$on')";
212   echo "   export $or=\"\$1\"";
213   echo '   shift;';
214   echo '  ;;';
215   echo "  '$on='*)";
216   echo '   _para=`echo "$k" | cut -d= -f2`;';
217   echo "   export $or=\"\$_para\"";
218   echo '  ;;';
219  fi
[3498]220 done
221
[3520]222 if $DOS
223 then
224  : # we ignore this here and handle in the next section
225 else
226  cat <<_E_O_F_
[2848]227  '-'*)
228   echo "Unknown option" >&2;
229   exit 1;
230  ;;
231  *)
232_E_O_F_
[3520]233 fi
[2848]234
235 if $ARGS_PASS_NON_OPTS
236 then
[3520]237  if $DOS
[3499]238  then
[3520]239   echo "Warning: can not compile unknown options check in as target does not support it" >&2
240   echo "REM IGNORED UNKNOWN OPTION CHECK"
241   if $ARGS_END_OPTS_ON_NON_OPT
242   then
243    cat <<_E_O_F_
244SET _ARGV=%_ARGV% %k%
245GOTO mloopend
246_E_O_F_
247   else
248    echo 'GOTO addshift';
249   fi
250  else
251   echo '   _args="$_args $k";';
252   if $ARGS_END_OPTS_ON_NON_OPT
253   then
254    echo '   break;';
255   fi
[3499]256  fi
[2848]257 else
[3520]258  if $DOS
259  then
260   echo 'GOTO erruopt'
261  else
262   echo '   echo "Unknown option" >&2;';
263   echo '   exit 1;';
264  fi
[2848]265 fi
266
[3520]267 if $DOS
268 then
269  cat <<_E_O_F_
270
271GOTO next
272:pass
273SET _ARGV=%_ARGV% %k%
274GOTO next
275:passval
276SET _ARGV=%_ARGV% %k%
277:addshift
278SET _ARGV=%_ARGV% %1
279:nextshift
280SHIFT
281
282:next
283GOTO mloop
284:mloopend
285
286_E_O_F_
287 else
288  cat <<_E_O_F_
[2848]289  ;;
290 esac;
291done
292
[3497]293_E_O_F_
[3520]294 fi
[3497]295
296 if $ARGS_PASS_NON_OPTS
297 then
[3520]298  $DOS && echo "SET _ARGS=%_ARGS% %1 %2 %3 %4 %5 %6 %7 %8 %9"
299  $DOS || echo '_args="$_args $*";';
[3497]300 else
[3520]301  if $DOS
302  then
303   echo 'IF "%1%2%3%4%5%6%7%8%9" GOTO erruopt'
304  else
[3817]305   echo 'if [ "$*" != "" ]';
[3520]306   echo 'then';
307   echo ' echo "Unknown option" >&2;';
308   echo ' exit 1;';
309   echo 'fi';
310  fi
[3497]311 fi
312
[3520]313 if $DOS
314 then
315  cat <<_E_O_F_
316
317$RNAME %_ARGS%
318
319GOTO end
320
321:erruopt
322ECHO Unknown option
323EXIT 1
324GOTO end
325
326:help
327_E_O_F_
328  if [ "$HELPOPTS" != '' ]
329  then
330   sed 's/^$/./; s/^/echo /; s/</#/g; s/>/#/g;' $HELPFILE
331  fi
332  cat <<_E_O_F_
333GOTO end
334
335:end
336
337_E_O_F_
338 else
339  cat <<_E_O_F_
[3497]340
[2848]341exec $RNAME \$_args
[3520]342
[2848]343_E_O_F_
[3520]344 fi
[2848]345
346 echo
[3520]347 $DOS && echo 'REM ll'
348 $DOS || echo '#ll'
[2848]349} > $OUT
350
351chmod a+rx $OUT
352
[3502]353rm $HELPFILE
354
[2848]355exit 0;
356
357#ll
Note: See TracBrowser for help on using the repository browser.