xref: /aoo42x/main/solenv/bin/langwrap (revision cdf0e10c)
1 *cdf0e10cSrcweir#!/usr/bin/perl -w
2 *cdf0e10cSrcweir#
3 *cdf0e10cSrcweir# langwrap - language wrapper for building resources
4 *cdf0e10cSrcweir#
5 *cdf0e10cSrcweir# $Id: langwrap,v 1.2 2008-08-18 13:10:41 vg Exp $
6 *cdf0e10cSrcweir
7 *cdf0e10cSrcweiruse Getopt::Std;
8 *cdf0e10cSrcweir
9 *cdf0e10cSrcweir###### globals ######
10 *cdf0e10cSrcweir
11 *cdf0e10cSrcweir$is_debug = 0;
12 *cdf0e10cSrcweir$nfield   = 0;
13 *cdf0e10cSrcweir@LoL 	  = ();
14 *cdf0e10cSrcweir@command  = ();
15 *cdf0e10cSrcweir
16 *cdf0e10cSrcweir###### main ######
17 *cdf0e10cSrcweir
18 *cdf0e10cSrcweir# Version
19 *cdf0e10cSrcweir$idStr = ' $Revision: 1.2 $ ';
20 *cdf0e10cSrcweir$idStr =~ /Revision:\s+(\S+)\s+\$/
21 *cdf0e10cSrcweir    ? ($langwrapRev = $1) : ($langwrapRev = "-");
22 *cdf0e10cSrcweir
23 *cdf0e10cSrcweirprint "langwrap -- Version: $langwrapRev\n";
24 *cdf0e10cSrcweir
25 *cdf0e10cSrcweir# Options
26 *cdf0e10cSrcweir&check_options();
27 *cdf0e10cSrcweir
28 *cdf0e10cSrcweir# parse command file
29 *cdf0e10cSrcweir&parse_commandfile($opt_c);
30 *cdf0e10cSrcweir
31 *cdf0e10cSrcweir# create list with command lines
32 *cdf0e10cSrcweir&create_commands();
33 *cdf0e10cSrcweir
34 *cdf0e10cSrcweir# finally execute commands
35 *cdf0e10cSrcweirforeach $cmd (@command) {
36 *cdf0e10cSrcweir    if ($is_debug) {
37 *cdf0e10cSrcweir	print $cmd . "\n";
38 *cdf0e10cSrcweir    } else {
39 *cdf0e10cSrcweir	system($cmd);
40 *cdf0e10cSrcweir	$res = $? >> 8;
41 *cdf0e10cSrcweir	if ($res) {
42 *cdf0e10cSrcweir	    print "langwrap: command execution failed with exitcode $res.\n";
43 *cdf0e10cSrcweir	    exit($res);
44 *cdf0e10cSrcweir	}
45 *cdf0e10cSrcweir    }
46 *cdf0e10cSrcweir}
47 *cdf0e10cSrcweir
48 *cdf0e10cSrcweirexit(0);
49 *cdf0e10cSrcweir
50 *cdf0e10cSrcweir###### routines ######
51 *cdf0e10cSrcweir
52 *cdf0e10cSrcweir### parse_commandfile()
53 *cdf0e10cSrcweirsub parse_commandfile {
54 *cdf0e10cSrcweir    my($file) = shift;
55 *cdf0e10cSrcweir    my(@field);
56 *cdf0e10cSrcweir
57 *cdf0e10cSrcweir    open(COMMAND, "<$file") or die "can�t open $file";
58 *cdf0e10cSrcweir
59 *cdf0e10cSrcweir    while (<COMMAND>) {
60 *cdf0e10cSrcweir	$line = $_;
61 *cdf0e10cSrcweir	chomp($line);
62 *cdf0e10cSrcweir	if ( ($line =~ //) || ($line =~ /^\r/) || ($line =~ /^#/) ) {
63 *cdf0e10cSrcweir	    next;
64 *cdf0e10cSrcweir	}
65 *cdf0e10cSrcweir
66 *cdf0e10cSrcweir	@field = split " ", $line;
67 *cdf0e10cSrcweir	push @LoL, [@field];
68 *cdf0e10cSrcweir	if (!$nfield) {
69 *cdf0e10cSrcweir	    $nfield = $#field + 1;
70 *cdf0e10cSrcweir	} else {
71 *cdf0e10cSrcweir	    if ( $nfield != ($#field + 1) ) {
72 *cdf0e10cSrcweir		print "langwrap: error in <cmdfile>: every row must ";
73 *cdf0e10cSrcweir		print "have the same # of columns.\n";
74 *cdf0e10cSrcweir		exit(3);
75 *cdf0e10cSrcweir	    }
76 *cdf0e10cSrcweir	}
77 *cdf0e10cSrcweir    }
78 *cdf0e10cSrcweir
79 *cdf0e10cSrcweir    close(COMMAND);
80 *cdf0e10cSrcweir}
81 *cdf0e10cSrcweir
82 *cdf0e10cSrcweir### create_command()
83 *cdf0e10cSrcweirsub create_commands() {
84 *cdf0e10cSrcweir    my($cmd, $cmdline, $arg_string, $ntempl);
85 *cdf0e10cSrcweir
86 *cdf0e10cSrcweir    $cmd = shift @ARGV;
87 *cdf0e10cSrcweir    $arg_string = join(" ", @ARGV);
88 *cdf0e10cSrcweir    # just count the number of templates
89 *cdf0e10cSrcweir    $ntempl = ($arg_string =~ s/@\d+@/$&/eg);
90 *cdf0e10cSrcweir    if ( $ntempl >= $nfield ) {
91 *cdf0e10cSrcweir	print "lnagwrap: # of templates > # of fields in <cmdfile>.\n";
92 *cdf0e10cSrcweir	exit(4);
93 *cdf0e10cSrcweir    }
94 *cdf0e10cSrcweir
95 *cdf0e10cSrcweir    # create command lines
96 *cdf0e10cSrcweir    for $i (0..$#LoL) {
97 *cdf0e10cSrcweir	$cmdline = $arg_string;
98 *cdf0e10cSrcweir	$cmdline =~ s/@(\d+)@/$LoL[$i][$1]/eg;
99 *cdf0e10cSrcweir	push @command, $cmd . " " . $cmdline;
100 *cdf0e10cSrcweir    }
101 *cdf0e10cSrcweir}
102 *cdf0e10cSrcweir
103 *cdf0e10cSrcweir### check_options()
104 *cdf0e10cSrcweirsub check_options {
105 *cdf0e10cSrcweir
106 *cdf0e10cSrcweir    if ( !getopts('c:') ) {
107 *cdf0e10cSrcweir	&usage();
108 *cdf0e10cSrcweir    }
109 *cdf0e10cSrcweir
110 *cdf0e10cSrcweir    if ( !$opt_c ) {
111 *cdf0e10cSrcweir	&usage();
112 *cdf0e10cSrcweir    }
113 *cdf0e10cSrcweir
114 *cdf0e10cSrcweir    if ( ! -r $opt_c ) {
115 *cdf0e10cSrcweir	print "langwrap: $opt_c is not a readable file.\n";
116 *cdf0e10cSrcweir	exit(2);
117 *cdf0e10cSrcweir    }
118 *cdf0e10cSrcweir
119 *cdf0e10cSrcweir    if ( $#ARGV < 1 ) {
120 *cdf0e10cSrcweir	print "langwrap: empty <template_string>.\n";
121 *cdf0e10cSrcweir	&usage();
122 *cdf0e10cSrcweir    }
123 *cdf0e10cSrcweir}
124 *cdf0e10cSrcweir
125 *cdf0e10cSrcweir### usage()
126 *cdf0e10cSrcweirsub usage {
127 *cdf0e10cSrcweir    print "Usage: langwrap -c cmdfile tool <template_string>\n";
128 *cdf0e10cSrcweir    print "<template_string> is of form: ...\@1\@ .... \@2\@...\n";
129 *cdf0e10cSrcweir    print "with \@<n>\@ template #n\n";
130 *cdf0e10cSrcweir    exit(1);
131 *cdf0e10cSrcweir}
132