Backport r30323/r30169 - perl use if/elsif/else so that it'll build with both new and old perl.

git-svn-id: svn://svn.rockbox.org/rockbox/branches/v3_9@30406 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Alex Parker 2011-09-01 14:25:05 +00:00
parent 7eef227154
commit 0f1b77dae8
2 changed files with 89 additions and 96 deletions

30
tools/multigcc.pl Executable file → Normal file
View file

@ -1,5 +1,4 @@
#!/usr/bin/perl #!/usr/bin/perl
use Switch;
use List::Util 'shuffle'; # standard from Perl 5.8 and later use List::Util 'shuffle'; # standard from Perl 5.8 and later
my $tempfile = "multigcc.out"; my $tempfile = "multigcc.out";
@ -26,23 +25,22 @@ my $command = join " ", @params;
# count number of cores # count number of cores
my $cores; my $cores;
switch($^O) { # Don't use given/when here - it's not compatible with old perl versions
case "darwin" { if ($^O eq 'darwin') {
chomp($cores = `sysctl -n hw.ncpu`); chomp($cores = `sysctl -n hw.ncpu`);
$cores = 1 if ($?); $cores = 1 if ($?);
} }
case "solaris" { elsif ($^O eq 'solaris') {
$cores = scalar grep /on-line/i, `psrinfo`; $cores = scalar grep /on-line/i, `psrinfo`;
$cores = 1 if ($?); $cores = 1 if ($?);
}
else {
if (open CPUINFO, "</proc/cpuinfo") {
$cores = scalar grep /^processor/i, <CPUINFO>;
close CPUINFO;
} }
else { else {
if (open CPUINFO, "</proc/cpuinfo") { $cores = 1;
$cores = scalar grep /^processor/i, <CPUINFO>;
close CPUINFO;
}
else {
$cores = 1;
}
} }
} }

155
tools/voice.pl Executable file → Normal file
View file

@ -19,7 +19,6 @@ use strict;
use warnings; use warnings;
use File::Basename; use File::Basename;
use File::Copy; use File::Copy;
use Switch;
use vars qw($V $C $t $l $e $E $s $S $i $v); use vars qw($V $C $t $l $e $E $s $S $i $v);
use IPC::Open2; use IPC::Open2;
use IPC::Open3; use IPC::Open3;
@ -74,36 +73,35 @@ sub init_tts {
our $verbose; our $verbose;
my ($tts_engine, $tts_engine_opts, $language) = @_; my ($tts_engine, $tts_engine_opts, $language) = @_;
my %ret = ("name" => $tts_engine); my %ret = ("name" => $tts_engine);
switch($tts_engine) { # Don't use given/when here - it's not compatible with old perl versions
case "festival" { if ($tts_engine eq 'festival') {
print("> festival $tts_engine_opts --server\n") if $verbose; print("> festival $tts_engine_opts --server\n") if $verbose;
my $pid = open(FESTIVAL_SERVER, "| festival $tts_engine_opts --server > /dev/null 2>&1"); my $pid = open(FESTIVAL_SERVER, "| festival $tts_engine_opts --server > /dev/null 2>&1");
my $dummy = *FESTIVAL_SERVER; #suppress warning my $dummy = *FESTIVAL_SERVER; #suppress warning
$SIG{INT} = sub { kill TERM => $pid; print("foo"); panic_cleanup(); }; $SIG{INT} = sub { kill TERM => $pid; print("foo"); panic_cleanup(); };
$SIG{KILL} = sub { kill TERM => $pid; print("boo"); panic_cleanup(); }; $SIG{KILL} = sub { kill TERM => $pid; print("boo"); panic_cleanup(); };
$ret{"pid"} = $pid; $ret{"pid"} = $pid;
} }
case "sapi" { elsif ($tts_engine eq 'sapi') {
my $toolsdir = dirname($0); my $toolsdir = dirname($0);
my $path = `cygpath $toolsdir -a -w`; my $path = `cygpath $toolsdir -a -w`;
chomp($path); chomp($path);
$path = $path . '\\'; $path = $path . '\\';
my $cmd = $path . "sapi_voice.vbs /language:$language $tts_engine_opts"; my $cmd = $path . "sapi_voice.vbs /language:$language $tts_engine_opts";
$cmd =~ s/\\/\\\\/g; $cmd =~ s/\\/\\\\/g;
print("> cscript //nologo $cmd\n") if $verbose; print("> cscript //nologo $cmd\n") if $verbose;
my $pid = open2(*CMD_OUT, *CMD_IN, "cscript //nologo $cmd"); my $pid = open2(*CMD_OUT, *CMD_IN, "cscript //nologo $cmd");
binmode(*CMD_IN, ':encoding(utf16le)'); binmode(*CMD_IN, ':encoding(utf16le)');
binmode(*CMD_OUT, ':encoding(utf16le)'); binmode(*CMD_OUT, ':encoding(utf16le)');
$SIG{INT} = sub { print(CMD_IN "QUIT\r\n"); panic_cleanup(); }; $SIG{INT} = sub { print(CMD_IN "QUIT\r\n"); panic_cleanup(); };
$SIG{KILL} = sub { print(CMD_IN "QUIT\r\n"); panic_cleanup(); }; $SIG{KILL} = sub { print(CMD_IN "QUIT\r\n"); panic_cleanup(); };
print(CMD_IN "QUERY\tVENDOR\r\n"); print(CMD_IN "QUERY\tVENDOR\r\n");
my $vendor = readline(*CMD_OUT); my $vendor = readline(*CMD_OUT);
$vendor =~ s/\r\n//; $vendor =~ s/\r\n//;
%ret = (%ret, %ret = (%ret,
"stdin" => *CMD_IN, "stdin" => *CMD_IN,
"stdout" => *CMD_OUT, "stdout" => *CMD_OUT,
"vendor" => $vendor); "vendor" => $vendor);
}
} }
return \%ret; return \%ret;
} }
@ -111,15 +109,13 @@ sub init_tts {
# Shutdown TTS engine if necessary. # Shutdown TTS engine if necessary.
sub shutdown_tts { sub shutdown_tts {
my ($tts_object) = @_; my ($tts_object) = @_;
switch($$tts_object{"name"}) { if ($$tts_object{'name'} eq 'festival') {
case "festival" { # Send SIGTERM to festival server
# Send SIGTERM to festival server kill TERM => $$tts_object{"pid"};
kill TERM => $$tts_object{"pid"}; }
} elsif ($$tts_object{'name'} eq 'sapi') {
case "sapi" { print({$$tts_object{"stdin"}} "QUIT\r\n");
print({$$tts_object{"stdin"}} "QUIT\r\n"); close($$tts_object{"stdin"});
close($$tts_object{"stdin"});
}
} }
} }
@ -146,48 +142,47 @@ sub voicestring {
our $verbose; our $verbose;
my ($string, $output, $tts_engine_opts, $tts_object) = @_; my ($string, $output, $tts_engine_opts, $tts_object) = @_;
my $cmd; my $cmd;
printf("Generate \"%s\" with %s in file %s\n", $string, $$tts_object{"name"}, $output) if $verbose; my $name = $$tts_object{'name'};
switch($$tts_object{"name"}) { printf("Generate \"%s\" with %s in file %s\n", $string, $name, $output) if $verbose;
case "festival" { if ($name eq 'festival') {
# festival_client lies to us, so we have to do awful soul-eating # festival_client lies to us, so we have to do awful soul-eating
# work with IPC::open3() # work with IPC::open3()
$cmd = "festival_client --server localhost --otype riff --ttw --output \"$output\""; $cmd = "festival_client --server localhost --otype riff --ttw --output \"$output\"";
# Use festival-prolog.scm if it's there (created by user of tools/configure) # Use festival-prolog.scm if it's there (created by user of tools/configure)
if (-f "festival-prolog.scm") { if (-f "festival-prolog.scm") {
$cmd .= " --prolog festival-prolog.scm"; $cmd .= " --prolog festival-prolog.scm";
}
print("> $cmd\n") if $verbose;
# Open command, and filehandles for STDIN, STDOUT, STDERR
my $pid = open3(*CMD_IN, *CMD_OUT, *CMD_ERR, $cmd);
# Put the string to speak into STDIN and close it
print(CMD_IN $string);
close(CMD_IN);
# Read all output from festival_client (because it LIES TO US)
while (<CMD_ERR>) {
}
close(CMD_OUT);
close(CMD_ERR);
} }
case "flite" { print("> $cmd\n") if $verbose;
$cmd = "flite $tts_engine_opts -t \"$string\" \"$output\""; # Open command, and filehandles for STDIN, STDOUT, STDERR
print("> $cmd\n") if $verbose; my $pid = open3(*CMD_IN, *CMD_OUT, *CMD_ERR, $cmd);
`$cmd`; # Put the string to speak into STDIN and close it
} print(CMD_IN $string);
case "espeak" { close(CMD_IN);
$cmd = "espeak $tts_engine_opts -w \"$output\""; # Read all output from festival_client (because it LIES TO US)
print("> $cmd\n") if $verbose; while (<CMD_ERR>) {
open(ESPEAK, "| $cmd");
print ESPEAK $string . "\n";
close(ESPEAK);
}
case "sapi" {
print({$$tts_object{"stdin"}} "SPEAK\t$output\t$string\r\n");
}
case "swift" {
$cmd = "swift $tts_engine_opts -o \"$output\" \"$string\"";
print("> $cmd\n") if $verbose;
system($cmd);
} }
close(CMD_OUT);
close(CMD_ERR);
}
elsif ($name eq 'flite') {
$cmd = "flite $tts_engine_opts -t \"$string\" \"$output\"";
print("> $cmd\n") if $verbose;
`$cmd`;
}
elsif ($name eq 'espeak') {
$cmd = "espeak $tts_engine_opts -w \"$output\"";
print("> $cmd\n") if $verbose;
open(ESPEAK, "| $cmd");
print ESPEAK $string . "\n";
close(ESPEAK);
}
elsif ($name eq 'sapi') {
print({$$tts_object{"stdin"}} "SPEAK\t$output\t$string\r\n");
}
elsif ($name eq 'swift') {
$cmd = "swift $tts_engine_opts -o \"$output\" \"$string\"";
print("> $cmd\n") if $verbose;
system($cmd);
} }
} }