| #!/usr/bin/perl -w |
| # ************************************************************* |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| # ************************************************************* |
| # |
| # langwrap - language wrapper for building resources |
| # |
| # $Id: langwrap,v 1.2 2008-08-18 13:10:41 vg Exp $ |
| |
| use Getopt::Std; |
| |
| ###### globals ###### |
| |
| $is_debug = 0; |
| $nfield = 0; |
| @LoL = (); |
| @command = (); |
| |
| ###### main ###### |
| |
| # Version |
| $idStr = ' $Revision: 1.2 $ '; |
| $idStr =~ /Revision:\s+(\S+)\s+\$/ |
| ? ($langwrapRev = $1) : ($langwrapRev = "-"); |
| |
| print "langwrap -- Version: $langwrapRev\n"; |
| |
| # Options |
| &check_options(); |
| |
| # parse command file |
| &parse_commandfile($opt_c); |
| |
| # create list with command lines |
| &create_commands(); |
| |
| # finally execute commands |
| foreach $cmd (@command) { |
| if ($is_debug) { |
| print $cmd . "\n"; |
| } else { |
| system($cmd); |
| $res = $? >> 8; |
| if ($res) { |
| print "langwrap: command execution failed with exitcode $res.\n"; |
| exit($res); |
| } |
| } |
| } |
| |
| exit(0); |
| |
| ###### routines ###### |
| |
| ### parse_commandfile() |
| sub parse_commandfile { |
| my($file) = shift; |
| my(@field); |
| |
| open(COMMAND, "<$file") or die "canĀ“t open $file"; |
| |
| while (<COMMAND>) { |
| $line = $_; |
| chomp($line); |
| if ( ($line =~ //) || ($line =~ /^\r/) || ($line =~ /^#/) ) { |
| next; |
| } |
| |
| @field = split " ", $line; |
| push @LoL, [@field]; |
| if (!$nfield) { |
| $nfield = $#field + 1; |
| } else { |
| if ( $nfield != ($#field + 1) ) { |
| print "langwrap: error in <cmdfile>: every row must "; |
| print "have the same # of columns.\n"; |
| exit(3); |
| } |
| } |
| } |
| |
| close(COMMAND); |
| } |
| |
| ### create_command() |
| sub create_commands() { |
| my($cmd, $cmdline, $arg_string, $ntempl); |
| |
| $cmd = shift @ARGV; |
| $arg_string = join(" ", @ARGV); |
| # just count the number of templates |
| $ntempl = ($arg_string =~ s/@\d+@/$&/eg); |
| if ( $ntempl >= $nfield ) { |
| print "lnagwrap: # of templates > # of fields in <cmdfile>.\n"; |
| exit(4); |
| } |
| |
| # create command lines |
| for $i (0..$#LoL) { |
| $cmdline = $arg_string; |
| $cmdline =~ s/@(\d+)@/$LoL[$i][$1]/eg; |
| push @command, $cmd . " " . $cmdline; |
| } |
| } |
| |
| ### check_options() |
| sub check_options { |
| |
| if ( !getopts('c:') ) { |
| &usage(); |
| } |
| |
| if ( !$opt_c ) { |
| &usage(); |
| } |
| |
| if ( ! -r $opt_c ) { |
| print "langwrap: $opt_c is not a readable file.\n"; |
| exit(2); |
| } |
| |
| if ( $#ARGV < 1 ) { |
| print "langwrap: empty <template_string>.\n"; |
| &usage(); |
| } |
| } |
| |
| ### usage() |
| sub usage { |
| print "Usage: langwrap -c cmdfile tool <template_string>\n"; |
| print "<template_string> is of form: ...\@1\@ .... \@2\@...\n"; |
| print "with \@<n>\@ template #n\n"; |
| exit(1); |
| } |