package CallExternals; #************************************************************** # # 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. # #************************************************************** use English; use warnings; use strict; use loghelper; BEGIN { use Exporter (); our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); $VERSION = 1.00; # if using RCS/CVS, this may be preferred $VERSION = do { my @r = (q$Revision: 1.29 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker @ISA = qw(Exporter); @EXPORT = qw(&callphp &getPHPExecutable &ExecSQL &callperl &getPerlExecutable &calljava &setJavaExecutable &getJavaExecutable &setToolsPath "e "eIfNeed &set_logfile &close_logfile ); %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], # your exported package globals go here, # as well as any optionally exported functions @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); } # ------------------------------------------------------------------------------ # small helper, which replaces the return code sub errorAdaption($) { my $error = shift; if ($error != 0) { $error = $error / 256; } if ($error > 127) { $error = $error - 256; } return $error; } # ------------------------------------------------------------------------------ # helper to call external php with popen sub callphp($$$) { local *IN_FILE; my $phpexe = shift; my $phpprogram = shift; my $sParams = shift; my $line; my $error; my @result; # print "Will send: $phpexe $sParams\n"; # log_print("CALLPHP: $phpexe $phpprogram $sParams\n"); # if (open(IN_FILE, "$phpexe $sParams 2>&1 |")) if (open(IN_FILE, "$phpexe $phpprogram $sParams |")) { while ($line = ) { chomp($line); # $line .= " "; push(@result, $line); # print "callphp output: $line\n"; } close(IN_FILE); $error = errorAdaption($?); } else { print "callphp(): Can't popen '$phpexe' with parameter: '$sParams'\n"; $error = 1; } return $error, @result; } # ------------------------------------------------------------------------------ sub getPHPExecutable() { my $phpexe; if ($OSNAME eq "solaris") { $phpexe = "php5"; } elsif ($OSNAME eq "linux") { if ( -e "/usr/bin/php5") # Suse :-( { $phpexe = "php5"; } elsif ( -e "/usr/bin/php") # Gentoo { $phpexe = "php"; } else { print "getPHPExecutable(): no php exec found.\n"; } } elsif ( $OSNAME eq "MSWin32" ) { $phpexe = "C:/programme/php/php.exe"; # add second try (xampp) if (! -e $phpexe) { $phpexe = "C:/xampp/php/php.exe"; } } elsif ( $OSNAME eq "cygwin" ) { $phpexe = "/cygdrive/c/programme/php/php"; } else { print "getPHPExecutable(): unknown environment. ($OSNAME)\n"; } if (! $phpexe) { print "getPHPExecutable(): ERROR: php executable not found.\n"; exit(1); } return $phpexe; } # ------------------------------------------------------------------------------ # helper to call external java with popen sub calljava($$$) { local *IN_FILE; my $javaexe = shift; my $sParams = shift; my $sDebug = shift; my $line; my $error = 1; if (! $javaexe) { log_print("ERROR: javaexe not set.\n"); return; } if (! $sDebug) { $sDebug = ""; } $javaexe = quoteIfNeed($javaexe); log_print ("CALLJAVA: $javaexe $sDebug $sParams\n"); if (open(IN_FILE, "$javaexe $sDebug $sParams 2>&1 |")) { while ($line = ) { chomp($line); log_print ("- $line\n"); } close(IN_FILE); $error = errorAdaption($?); } else { log_print ("calljava(): Can't popen '$javaexe' with parameter '$sParams'\n"); $error = 1; } return $error; } # ------------------------------------------------------------------------------ sub getPerlExecutable() { my $perlexe; if ( $ENV{PERL} ) { $perlexe = $ENV{PERL}; } elsif ( $ENV{PERLEXE} ) { $perlexe = $ENV{PERLEXE}; } else { if ($OSNAME eq "MSWin32") { $perlexe="C:/xampp/perl/bin/perl.exe"; if (! -e $perlexe) { $perlexe="r:/btw/perl/bin/perl"; } if (! -e $perlexe) { $perlexe="C:/Programme/Perl/bin/perl.exe"; } } elsif ($OSNAME eq "cygwin") { $perlexe = "perl"; } elsif ($OSNAME eq "solaris") { $perlexe="/so/env/bt_solaris_intel/bin/perl"; } elsif ($OSNAME eq "linux") { $perlexe="/so/env/bt_linux_libc2.32/DEV300/bin/perl"; } else { log_print "WARNING: Use only the fallback of perl executable.\n"; $perlexe = "perl"; # FALLBACK } } if ( ! -e $perlexe) { log_print "getPerlExecutable(): There exist no perl executable.\n"; exit(1); } return $perlexe; } # ------------------------------------------------------------------------------ # helper to call external perl with popen sub callperl($$$) { local *IN_FILE; my $perlexe = shift; my $perlprogram = shift; my $sParams = shift; my $line; my $error; log_print("CALLPERL: $perlexe $perlprogram $sParams\n"); # if (open(IN_FILE, "$perlexe $sParams 2>&1 |")) if (open(IN_FILE, "$perlexe $perlprogram $sParams |")) { while ($line = ) { chomp($line); log_print ("- $line\n"); } close(IN_FILE); $error = errorAdaption($?); } else { log_print ("Can't popen '$perlexe' with parameter: '$sParams'\n"); $error = 1; } return $error; } # ------------------------------------------------------------------------------ our $sJavaExecutable; sub setJavaExecutable($) { $sJavaExecutable = shift; } # sub getJava14() # { # my $sJava14; # if ($OSNAME eq "MSWin32") # { # if ($sJavaExecutable) # { # $sJava14 = $sJavaExecutable; # } # else # { # # HARDCODE! # $sJava14 = "C:\\Programme\\Java\\j2re1.4.2_10\\bin\\java.exe"; # } # } # else # { # if ($sJavaExecutable) # { # $sJava14 = $sJavaExecutable; # } # else # { # # HARDCODE! # $sJava14 = "/opt/java14/bin/java"; # } # } # if ( ! -e $sJava14 ) # { # log_print ("Java14 not found. Is searched in '$sJava14'\n"); # # exit(1); # return ""; # } # return $sJava14; # } # ------------------------------------------------------------------------------ sub getJava15() { my $sJava15; if ($sJavaExecutable) { $sJava15 = $sJavaExecutable; } else { if ($OSNAME eq "MSWin32") { # HARDCODE! $sJava15 = "C:\\Programme\\Java\\jre1.5.0_22\\bin\\java.exe"; if ( ! -e $sJava15) { $sJava15 = "C:\\Program Files\\Java\\jre6\\bin\\java.exe"; } if ( ! -e $sJava15) { $sJava15 = "C:\\Java\\jdk1.6\\bin\\java.exe"; } } elsif ($OSNAME eq "cygwin") { $sJava15 = "java"; } else { # HARDCODE! if ($OSNAME eq "solaris") { $sJava15 = "/usr/bin/java"; } else { $sJava15 = "/usr/bin/java"; if ( ! -e $sJava15 ) { $sJava15 = "/opt/java15/bin/java"; } } } if ( ! -e $sJava15 ) { log_print ("Java15 not found. Is searched in '$sJava15'\n"); # exit(1); return ""; } } return $sJava15; } # ------------------------------------------------------------------------------ sub getJava16() { my $sJava16; if ($sJavaExecutable) { $sJava16 = $sJavaExecutable; } else { if ($OSNAME eq "MSWin32") { # HARDCODE! $sJava16 = "C:\\Programme\\Java\\jre1.6.0_16\\bin\\java.exe"; if ( ! -e $sJava16) { $sJava16 = "C:\\Program Files\\Java\\jre6\\bin\\java.exe"; } if ( ! -e $sJava16) { $sJava16 = "C:\\Java\\jdk1.6\\bin\\java.exe"; } # } } elsif ($OSNAME eq "cygwin") { # $sJava16 = "java"; $sJava16 = "C:/Program Files/Java/jdk1.6.0_16/bin/java.exe"; } else { # HARDCODE! if ($OSNAME eq "solaris") { $sJava16 = "/usr/bin/java"; } else { $sJava16 = "/usr/bin/java"; if ( ! -e $sJava16 ) { $sJava16 = "/opt/java16/bin/java"; } } } if ( ! -e $sJava16 ) { log_print ("Java16 not found. Is searched in '$sJava16'\n"); # exit(1); return ""; } } return $sJava16; } # ------------------------------------------------------------------------------ sub getJavaExecutable() { return getJava16(); } # ------------------------------------------------------------------------------ # this function is a helper for parameters # if quotes the whole string with 'STR' or "STR" and replace quotes in it's content for the right. sub singleQuote($) { my $sStr = shift; if ( $OSNAME eq "MSWin32") { # we are MSWin32 (quote \" stronger) # $sStr =~ s/\'/\"/g; $sStr =~ s/\'/\\\"/g; return "\"" . $sStr . "\""; } else { if (index($sStr, "'") >= 0) { # replace all single quotes ("'") by "\"" $sStr =~ s/\'/\"/g; } } return "'" . $sStr . "'"; } sub quote($) { my $sName = shift; return "\"" . $sName . "\""; } sub quoteIfNeed($) { my $sName = shift; if (-1 != index($sName, " ")) { return quote($sName); } return $sName; } # ------------------------------------------------------------------------------ our $sToolsPath; sub setToolsPath($) { my $sNewPath = shift; $sToolsPath = $sNewPath; } sub ExecSQL($) { my $sSQL = shift; my $error; my @aResult; my $sSQLDirect; if ($sToolsPath) { $sSQLDirect = $sToolsPath; $sSQLDirect .= "/"; } $sSQLDirect .= "sql_direct.php"; # select(undef, undef, undef, 0.060); # log_print("ExecSQL: $sSQL\n"); # sleep (1); ($error, @aResult) = callphp(getPHPExecutable(), $sSQLDirect, singleQuote($sSQL)); if ($error) { log_print ("ExecSQL: An Error occurred.\n"); log_print ("PHP: " . getPHPExecutable() . "\n"); log_print ("SQL Statement: " . singleQuote($sSQL) . "\n"); # exit(1); } # select(undef, undef, undef, 0.125); # sleep (1); return @aResult; } # ------------------------------------------------------------------------------ # helper to call external php with popen # sub callexe($$$) # { # local *IN_FILE; # my $exe = shift; # my $program = shift; # my $sParams = shift; # my $line; # my $error; # my @result; # # $exe = quoteIfNeed($exe); # $program = quoteIfNeed($program); # # # print "Will send: $exe $sParams\n"; # # log_print("CALLEXE: $exe $program $sParams\n"); # if (open(IN_FILE, "$exe $program $sParams |")) # { # while ($line = ) # { # chomp($line); # # $line .= " "; # push(@result, $line); # # print "callphp output: $line\n"; # } # close(IN_FILE); # $error = errorAdaption($?); # } # else # { # print "Can't popen '$exe' with parameter: '$sParams'\n"; # $error = 1; # } # return $error, @result; # } 1;