#!/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 () { $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 : 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 .\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 .\n"; &usage(); } } ### usage() sub usage { print "Usage: langwrap -c cmdfile tool \n"; print " is of form: ...\@1\@ .... \@2\@...\n"; print "with \@\@ template #n\n"; exit(1); }