blob: ffd289b3aa6cdc915f8329f5ebd53013119f8c0b [file] [log] [blame]
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 &quote &quoteIfNeed &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;