| 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 = <IN_FILE>) |
| { |
| 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 = <IN_FILE>) |
| { |
| 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 = <IN_FILE>) |
| { |
| 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 occured.\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 = <IN_FILE>) |
| # { |
| # 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; |