blob: c8f4fb84d2ff95359af268a4fcdd70ab97466782 [file] [log] [blame]
#!/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);
}