1*b1cdbd2cSJim Jagielskieval 'exec perl -wS $0 ${1+\"$@\"}' 2*b1cdbd2cSJim Jagielski if 0; 3*b1cdbd2cSJim Jagielski 4*b1cdbd2cSJim Jagielski#************************************************************** 5*b1cdbd2cSJim Jagielski# 6*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 7*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 8*b1cdbd2cSJim Jagielski# distributed with this work for additional information 9*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 10*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 11*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 12*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 13*b1cdbd2cSJim Jagielski# 14*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 15*b1cdbd2cSJim Jagielski# 16*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 17*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 18*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 20*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 21*b1cdbd2cSJim Jagielski# under the License. 22*b1cdbd2cSJim Jagielski# 23*b1cdbd2cSJim Jagielski#************************************************************** 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski# This is a pre check, which checks if some extra software exists 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim JagielskiBEGIN 30*b1cdbd2cSJim Jagielski{ 31*b1cdbd2cSJim Jagielski # Adding the path of this script file to the include path in the hope 32*b1cdbd2cSJim Jagielski # that all used modules can be found in it. 33*b1cdbd2cSJim Jagielski $0 =~ /^(.*)[\/\\]/; 34*b1cdbd2cSJim Jagielski push @INC, $1; 35*b1cdbd2cSJim Jagielski} 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielskiuse strict; 38*b1cdbd2cSJim Jagielskiuse English; # $OSNAME, ... 39*b1cdbd2cSJim Jagielskiuse Getopt::Long; 40*b1cdbd2cSJim Jagielskiuse Cwd; 41*b1cdbd2cSJim Jagielskiuse Cwd 'chdir'; 42*b1cdbd2cSJim Jagielskimy $cwd = getcwd(); 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielskiour $help; # Help option flag 45*b1cdbd2cSJim Jagielskiour $version; # Version option flag 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski# flush STDOUT 48*b1cdbd2cSJim Jagielski# my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle 49*b1cdbd2cSJim Jagielski# $| = 1; # perform flush after each write to STDOUT 50*b1cdbd2cSJim Jagielski# select ($old_handle); # restore previously selected handle 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski$OUTPUT_AUTOFLUSH=1; # works only if use English is used. 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielskiour $sGlobalIniFile; 55*b1cdbd2cSJim Jagielskiour $verbose = 0; 56*b1cdbd2cSJim Jagielskiour $ghostscript; 57*b1cdbd2cSJim Jagielskiour $imagemagick; 58*b1cdbd2cSJim Jagielskiour $java6; 59*b1cdbd2cSJim Jagielskiour $printerdriver; 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielskiour $version_info = 'compare.pl'; 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim JagielskiGetOptions( 64*b1cdbd2cSJim Jagielski "ghostscript" => \$ghostscript, 65*b1cdbd2cSJim Jagielski "imagemagick" => \$imagemagick, 66*b1cdbd2cSJim Jagielski "java6" => \$java6, 67*b1cdbd2cSJim Jagielski "printerdriver" => \$printerdriver, 68*b1cdbd2cSJim Jagielski "verbose" => \$verbose, 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski "help" => \$help, 71*b1cdbd2cSJim Jagielski "version" => \$version 72*b1cdbd2cSJim Jagielski ); 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielskiif ($help) 75*b1cdbd2cSJim Jagielski{ 76*b1cdbd2cSJim Jagielski print_usage(*STDOUT); 77*b1cdbd2cSJim Jagielski exit(0); 78*b1cdbd2cSJim Jagielski} 79*b1cdbd2cSJim Jagielski# Check for version option 80*b1cdbd2cSJim Jagielskiif ($version) 81*b1cdbd2cSJim Jagielski{ 82*b1cdbd2cSJim Jagielski print STDERR "$version_info\n"; 83*b1cdbd2cSJim Jagielski exit(0); 84*b1cdbd2cSJim Jagielski} 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski# prepare the GlobalIniFile 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielskisub prepare() 89*b1cdbd2cSJim Jagielski{ 90*b1cdbd2cSJim Jagielski my $sEnv = "$ENV{PRJ}"; 91*b1cdbd2cSJim Jagielski if (! $sEnv) 92*b1cdbd2cSJim Jagielski { 93*b1cdbd2cSJim Jagielski print "Warning: Seems you are not in a makefile.mk environment.\n"; 94*b1cdbd2cSJim Jagielski $sEnv = ".."; 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski my $sPath = getcwd(); 97*b1cdbd2cSJim Jagielski $sPath .= "/" . $sEnv; 98*b1cdbd2cSJim Jagielski chdir ($sPath); 99*b1cdbd2cSJim Jagielski cwd(); 100*b1cdbd2cSJim Jagielski $sPath = getcwd(); 101*b1cdbd2cSJim Jagielski my $sInpath = $ENV{INPATH}; 102*b1cdbd2cSJim Jagielski $sPath .= "/" . $sInpath . "/misc"; 103*b1cdbd2cSJim Jagielski $sGlobalIniFile = "$sPath/pathes.ini"; 104*b1cdbd2cSJim Jagielski print "Global Path ini file is: $sGlobalIniFile\n" if ($verbose); 105*b1cdbd2cSJim Jagielski} 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielskisub unixpath($) 108*b1cdbd2cSJim Jagielski{ 109*b1cdbd2cSJim Jagielski my $path = shift; 110*b1cdbd2cSJim Jagielski $path =~ s/\\/\//g; # make out of '\' a '/' 111*b1cdbd2cSJim Jagielski return $path; 112*b1cdbd2cSJim Jagielski} 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski# search for file in a given path list. 115*b1cdbd2cSJim Jagielski# the path list should be separated as the path variable in the corresponding OS 116*b1cdbd2cSJim Jagielskisub searchForFileInPath($$) 117*b1cdbd2cSJim Jagielski{ 118*b1cdbd2cSJim Jagielski my $sFile = shift; 119*b1cdbd2cSJim Jagielski my $sPathList = shift; 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski my $sep = ':'; 122*b1cdbd2cSJim Jagielski if ($OSNAME eq "MSWin32") 123*b1cdbd2cSJim Jagielski { 124*b1cdbd2cSJim Jagielski $sep = ';'; 125*b1cdbd2cSJim Jagielski } 126*b1cdbd2cSJim Jagielski my @path = split($sep, $sPathList); 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski my $sPath; 129*b1cdbd2cSJim Jagielski my $startdir; 130*b1cdbd2cSJim Jagielski my $bFound = 0; 131*b1cdbd2cSJim Jagielski my $olddir = getcwd(); 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski my $sWindowsHomeDir = unixpath(lc($ENV{WINDIR})); 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski foreach $startdir (@path) 136*b1cdbd2cSJim Jagielski { 137*b1cdbd2cSJim Jagielski my $nCount = 0; 138*b1cdbd2cSJim Jagielski # 139*b1cdbd2cSJim Jagielski # IMPORTANT: leave out windir path. 140*b1cdbd2cSJim Jagielski # 141*b1cdbd2cSJim Jagielski if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") 142*b1cdbd2cSJim Jagielski { 143*b1cdbd2cSJim Jagielski my $sPath = unixpath(lc(convertCygwinPath($startdir))); 144*b1cdbd2cSJim Jagielski if ($sPath =~ /^$sWindowsHomeDir/ ) 145*b1cdbd2cSJim Jagielski { 146*b1cdbd2cSJim Jagielski print "path: $startdir is windows path leave out.\n" if ($verbose); 147*b1cdbd2cSJim Jagielski next; 148*b1cdbd2cSJim Jagielski } 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski local *DIR; 152*b1cdbd2cSJim Jagielski if (opendir (DIR, $startdir)) # open directory 153*b1cdbd2cSJim Jagielski { 154*b1cdbd2cSJim Jagielski print "path: $startdir" if ($verbose); 155*b1cdbd2cSJim Jagielski chdir ($startdir); 156*b1cdbd2cSJim Jagielski cwd(); 157*b1cdbd2cSJim Jagielski my $myfile; 158*b1cdbd2cSJim Jagielski while ($myfile = readdir(DIR)) # get filename 159*b1cdbd2cSJim Jagielski { 160*b1cdbd2cSJim Jagielski if (-f $myfile ) # is it a file? 161*b1cdbd2cSJim Jagielski { 162*b1cdbd2cSJim Jagielski $nCount ++; 163*b1cdbd2cSJim Jagielski if ($myfile eq $sFile) # is it the real file? 164*b1cdbd2cSJim Jagielski { 165*b1cdbd2cSJim Jagielski $sPath = $startdir; 166*b1cdbd2cSJim Jagielski $bFound = 1; 167*b1cdbd2cSJim Jagielski last; 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski } 170*b1cdbd2cSJim Jagielski } 171*b1cdbd2cSJim Jagielski closedir(DIR); 172*b1cdbd2cSJim Jagielski print " ($nCount)\n" if ($verbose); 173*b1cdbd2cSJim Jagielski } 174*b1cdbd2cSJim Jagielski if ($bFound == 1) 175*b1cdbd2cSJim Jagielski { 176*b1cdbd2cSJim Jagielski last; 177*b1cdbd2cSJim Jagielski } 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski chdir ($olddir); 180*b1cdbd2cSJim Jagielski cwd(); 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski return $sPath; 183*b1cdbd2cSJim Jagielski} 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielskiprepare(); 187*b1cdbd2cSJim Jagielski# don't remove the inifile, only build clean should do this. 188*b1cdbd2cSJim Jagielski# if ( -e "$sGlobalIniFile") 189*b1cdbd2cSJim Jagielski# { 190*b1cdbd2cSJim Jagielski# unlink($sGlobalIniFile); 191*b1cdbd2cSJim Jagielski# } 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski# small helper, which replaces the return code 195*b1cdbd2cSJim Jagielskisub errorAdaption($) 196*b1cdbd2cSJim Jagielski{ 197*b1cdbd2cSJim Jagielski my $error = shift; 198*b1cdbd2cSJim Jagielski if ($error != 0) 199*b1cdbd2cSJim Jagielski { 200*b1cdbd2cSJim Jagielski $error = $error / 256; 201*b1cdbd2cSJim Jagielski } 202*b1cdbd2cSJim Jagielski if ($error > 127) 203*b1cdbd2cSJim Jagielski { 204*b1cdbd2cSJim Jagielski $error = $error - 256; 205*b1cdbd2cSJim Jagielski } 206*b1cdbd2cSJim Jagielski return $error; 207*b1cdbd2cSJim Jagielski} 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski# for every error we increment this variable by 1 210*b1cdbd2cSJim Jagielskiour $nGlobalErrors = 0; 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielskisub handleError($$) 213*b1cdbd2cSJim Jagielski{ 214*b1cdbd2cSJim Jagielski my $error = shift; 215*b1cdbd2cSJim Jagielski my $sText = shift; 216*b1cdbd2cSJim Jagielski if ($error != 0) 217*b1cdbd2cSJim Jagielski { 218*b1cdbd2cSJim Jagielski print "ERROR: search for $sText has failed with Errornumber: $error\n"; 219*b1cdbd2cSJim Jagielski $nGlobalErrors ++; 220*b1cdbd2cSJim Jagielski } 221*b1cdbd2cSJim Jagielski} 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielskisub convertCygwinPath($) 224*b1cdbd2cSJim Jagielski{ 225*b1cdbd2cSJim Jagielski my $sPath = shift; 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski if ($OSNAME eq "cygwin") 228*b1cdbd2cSJim Jagielski { 229*b1cdbd2cSJim Jagielski # print "Cygwin Path Patch.\n" if ($verbose); 230*b1cdbd2cSJim Jagielski if ($sPath =~ /\/cygdrive\/(.)/) 231*b1cdbd2cSJim Jagielski { 232*b1cdbd2cSJim Jagielski my $Letter = $1; 233*b1cdbd2cSJim Jagielski $sPath =~ s/\/cygdrive\/${Letter}/${Letter}\:/; 234*b1cdbd2cSJim Jagielski # print "Cygwin Path Patch: '$sPath'\n" if ($verbose); 235*b1cdbd2cSJim Jagielski } 236*b1cdbd2cSJim Jagielski } 237*b1cdbd2cSJim Jagielski return $sPath; 238*b1cdbd2cSJim Jagielski} 239*b1cdbd2cSJim Jagielski 240*b1cdbd2cSJim Jagielski# append key=value to GlobalIniFile 241*b1cdbd2cSJim Jagielskisub insertPath($$) 242*b1cdbd2cSJim Jagielski{ 243*b1cdbd2cSJim Jagielski my $sKey = shift; 244*b1cdbd2cSJim Jagielski my $sValue = shift; 245*b1cdbd2cSJim Jagielski 246*b1cdbd2cSJim Jagielski $sValue = convertCygwinPath($sValue); 247*b1cdbd2cSJim Jagielski my $sIniFile = convertCygwinPath($sGlobalIniFile); 248*b1cdbd2cSJim Jagielski local *INIFILE; 249*b1cdbd2cSJim Jagielski if (open(INIFILE, ">>" . $sIniFile )) 250*b1cdbd2cSJim Jagielski { 251*b1cdbd2cSJim Jagielski print INIFILE "$sKey=$sValue\n"; 252*b1cdbd2cSJim Jagielski } 253*b1cdbd2cSJim Jagielski close(INIFILE); 254*b1cdbd2cSJim Jagielski} 255*b1cdbd2cSJim Jagielski 256*b1cdbd2cSJim Jagielskisub getFastPath($) 257*b1cdbd2cSJim Jagielski{ 258*b1cdbd2cSJim Jagielski my $sKey = shift; 259*b1cdbd2cSJim Jagielski my $sValue; 260*b1cdbd2cSJim Jagielski local *INIFILE; 261*b1cdbd2cSJim Jagielski my $sIniFile = convertCygwinPath($sGlobalIniFile); 262*b1cdbd2cSJim Jagielski if (open(INIFILE, $sIniFile)) 263*b1cdbd2cSJim Jagielski { 264*b1cdbd2cSJim Jagielski my $line; 265*b1cdbd2cSJim Jagielski while ($line = <INIFILE>) 266*b1cdbd2cSJim Jagielski { 267*b1cdbd2cSJim Jagielski chomp($line); 268*b1cdbd2cSJim Jagielski if ( $line =~ /^$sKey=(.*)$/ ) 269*b1cdbd2cSJim Jagielski { 270*b1cdbd2cSJim Jagielski $sValue = $1; 271*b1cdbd2cSJim Jagielski # print INIFILE "$sKey=$sValue\n"; 272*b1cdbd2cSJim Jagielski } 273*b1cdbd2cSJim Jagielski } 274*b1cdbd2cSJim Jagielski close(INIFILE); 275*b1cdbd2cSJim Jagielski } 276*b1cdbd2cSJim Jagielski return $sValue; 277*b1cdbd2cSJim Jagielski} 278*b1cdbd2cSJim Jagielski 279*b1cdbd2cSJim Jagielskisub checkForGhostscript() 280*b1cdbd2cSJim Jagielski{ 281*b1cdbd2cSJim Jagielski print "Search for Ghostscript\n" if ($verbose); 282*b1cdbd2cSJim Jagielski if ($OSNAME eq "linux" || 283*b1cdbd2cSJim Jagielski $OSNAME eq "solaris") 284*b1cdbd2cSJim Jagielski { 285*b1cdbd2cSJim Jagielski # search for ghostscript 286*b1cdbd2cSJim Jagielski local *GHOSTSCRIPT; 287*b1cdbd2cSJim Jagielski if (open(GHOSTSCRIPT, "which gs 2>&1 |")) 288*b1cdbd2cSJim Jagielski { 289*b1cdbd2cSJim Jagielski my $line; 290*b1cdbd2cSJim Jagielski while ($line = <GHOSTSCRIPT>) 291*b1cdbd2cSJim Jagielski { 292*b1cdbd2cSJim Jagielski chomp($line); 293*b1cdbd2cSJim Jagielski print "- $line\n" if ($verbose); 294*b1cdbd2cSJim Jagielski } 295*b1cdbd2cSJim Jagielski close(GHOSTSCRIPT); 296*b1cdbd2cSJim Jagielski } 297*b1cdbd2cSJim Jagielski my $error = errorAdaption($?); 298*b1cdbd2cSJim Jagielski handleError($error, "Ghostscript"); 299*b1cdbd2cSJim Jagielski } 300*b1cdbd2cSJim Jagielski elsif ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") 301*b1cdbd2cSJim Jagielski { 302*b1cdbd2cSJim Jagielski my $sGSExe = "gswin32c.exe"; 303*b1cdbd2cSJim Jagielski # my $sGSPath = "C:/gs/gs8.64/bin"; 304*b1cdbd2cSJim Jagielski my $sGSPath = getFastPath("gs.path"); 305*b1cdbd2cSJim Jagielski if (! $sGSPath) 306*b1cdbd2cSJim Jagielski { 307*b1cdbd2cSJim Jagielski $sGSPath = searchForFileInPath($sGSExe, $ENV{PATH}); 308*b1cdbd2cSJim Jagielski 309*b1cdbd2cSJim Jagielski if ( ! -e "$sGSPath/$sGSExe") 310*b1cdbd2cSJim Jagielski { 311*b1cdbd2cSJim Jagielski $nGlobalErrors ++; 312*b1cdbd2cSJim Jagielski print "ERROR: search for $sGSPath/$sGSExe failed.\n"; 313*b1cdbd2cSJim Jagielski print "Please install ghostscript from www.adobe.com to and make it available in \$PATH variable \n"; 314*b1cdbd2cSJim Jagielski } 315*b1cdbd2cSJim Jagielski else 316*b1cdbd2cSJim Jagielski { 317*b1cdbd2cSJim Jagielski insertPath("gs.path", $sGSPath); 318*b1cdbd2cSJim Jagielski insertPath("gs.exe", $sGSExe); 319*b1cdbd2cSJim Jagielski } 320*b1cdbd2cSJim Jagielski } 321*b1cdbd2cSJim Jagielski if ( -e "$sGSPath/$sGSExe" ) 322*b1cdbd2cSJim Jagielski { 323*b1cdbd2cSJim Jagielski print "Found Ghostscript: '$sGSPath'\n" if ($verbose); 324*b1cdbd2cSJim Jagielski } 325*b1cdbd2cSJim Jagielski } 326*b1cdbd2cSJim Jagielski else 327*b1cdbd2cSJim Jagielski { 328*b1cdbd2cSJim Jagielski print "ERROR: Check for Ghostscript failed, due to unsupported '$OSNAME' environment.\n"; 329*b1cdbd2cSJim Jagielski $nGlobalErrors ++; 330*b1cdbd2cSJim Jagielski } 331*b1cdbd2cSJim Jagielski} 332*b1cdbd2cSJim Jagielski 333*b1cdbd2cSJim Jagielski 334*b1cdbd2cSJim Jagielskisub checkForPSDriver() 335*b1cdbd2cSJim Jagielski{ 336*b1cdbd2cSJim Jagielski # we don't need to check for unix here, due to the fact, unix is per default be able to print in postscript 337*b1cdbd2cSJim Jagielski if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") 338*b1cdbd2cSJim Jagielski { 339*b1cdbd2cSJim Jagielski print "Check for postscript driver.\n" if ($verbose); 340*b1cdbd2cSJim Jagielski my $sWindowsRoot = $ENV{windir}; 341*b1cdbd2cSJim Jagielski if (! $sWindowsRoot) 342*b1cdbd2cSJim Jagielski { 343*b1cdbd2cSJim Jagielski $sWindowsRoot = $ENV{WINDIR}; 344*b1cdbd2cSJim Jagielski } 345*b1cdbd2cSJim Jagielski my $sCrossOfficeDriver = "${sWindowsRoot}/system32/crossoffice.ppd"; 346*b1cdbd2cSJim Jagielski if ( ! -e "$sCrossOfficeDriver") 347*b1cdbd2cSJim Jagielski { 348*b1cdbd2cSJim Jagielski print "ERROR: Don't found Postscript driver $sCrossOfficeDriver file\n"; 349*b1cdbd2cSJim Jagielski $nGlobalErrors ++; 350*b1cdbd2cSJim Jagielski print "Take a look on: http://so-gfxcmp.germany.sun.com/docs/further/convwatch/convwatch.html.\n"; 351*b1cdbd2cSJim Jagielski } 352*b1cdbd2cSJim Jagielski } 353*b1cdbd2cSJim Jagielski} 354*b1cdbd2cSJim Jagielski 355*b1cdbd2cSJim Jagielskisub checkForImageMagick() 356*b1cdbd2cSJim Jagielski{ 357*b1cdbd2cSJim Jagielski print "Search for Imagemagick\n" if ($verbose); 358*b1cdbd2cSJim Jagielski if ($OSNAME eq "linux" || 359*b1cdbd2cSJim Jagielski $OSNAME eq "solaris") 360*b1cdbd2cSJim Jagielski { 361*b1cdbd2cSJim Jagielski # search for imagemagick 362*b1cdbd2cSJim Jagielski local *IMAGEMAGICK; 363*b1cdbd2cSJim Jagielski if (open(IMAGEMAGICK, "which convert 2>&1 |")) 364*b1cdbd2cSJim Jagielski { 365*b1cdbd2cSJim Jagielski my $line; 366*b1cdbd2cSJim Jagielski while ($line = <IMAGEMAGICK>) 367*b1cdbd2cSJim Jagielski { 368*b1cdbd2cSJim Jagielski chomp($line); 369*b1cdbd2cSJim Jagielski print "- $line\n" if ($verbose); 370*b1cdbd2cSJim Jagielski } 371*b1cdbd2cSJim Jagielski close(IMAGEMAGICK); 372*b1cdbd2cSJim Jagielski } 373*b1cdbd2cSJim Jagielski my $error = errorAdaption($?); 374*b1cdbd2cSJim Jagielski handleError($error, "Imagemagick"); 375*b1cdbd2cSJim Jagielski } 376*b1cdbd2cSJim Jagielski elsif ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") 377*b1cdbd2cSJim Jagielski { 378*b1cdbd2cSJim Jagielski my $sImageMagickExe = "convert.exe"; 379*b1cdbd2cSJim Jagielski # my $sImageMagickPath = "C:/gs/gs8.64/bin"; 380*b1cdbd2cSJim Jagielski my $sImageMagickPath = getFastPath("imagemagick.path"); 381*b1cdbd2cSJim Jagielski if (! $sImageMagickPath) 382*b1cdbd2cSJim Jagielski { 383*b1cdbd2cSJim Jagielski $sImageMagickPath = searchForFileInPath($sImageMagickExe, $ENV{PATH}); 384*b1cdbd2cSJim Jagielski if ($sImageMagickPath) 385*b1cdbd2cSJim Jagielski { 386*b1cdbd2cSJim Jagielski if ( ! -e "$sImageMagickPath/$sImageMagickExe") 387*b1cdbd2cSJim Jagielski { 388*b1cdbd2cSJim Jagielski $nGlobalErrors ++; 389*b1cdbd2cSJim Jagielski print "ERROR: search for $sImageMagickPath/$sImageMagickExe failed.\n"; 390*b1cdbd2cSJim Jagielski print "Please install ImageMagick from www.imagemagick.org to and make it available in \$PATH variable \n"; 391*b1cdbd2cSJim Jagielski } 392*b1cdbd2cSJim Jagielski else 393*b1cdbd2cSJim Jagielski { 394*b1cdbd2cSJim Jagielski insertPath("imagemagick.path", $sImageMagickPath); 395*b1cdbd2cSJim Jagielski # insertPath("gs.exe", $sImageMagickExe); 396*b1cdbd2cSJim Jagielski } 397*b1cdbd2cSJim Jagielski } 398*b1cdbd2cSJim Jagielski else 399*b1cdbd2cSJim Jagielski { 400*b1cdbd2cSJim Jagielski # next try, search image magick in $PROGRAMFILES 401*b1cdbd2cSJim Jagielski my $sPrograms = unixpath($ENV{PROGRAMFILES}); 402*b1cdbd2cSJim Jagielski 403*b1cdbd2cSJim Jagielski if (! $sPrograms) 404*b1cdbd2cSJim Jagielski { 405*b1cdbd2cSJim Jagielski print "There exist no \$PROGRAMFILES path, wrong Windows version?\n"; 406*b1cdbd2cSJim Jagielski $nGlobalErrors++; 407*b1cdbd2cSJim Jagielski } 408*b1cdbd2cSJim Jagielski else 409*b1cdbd2cSJim Jagielski { 410*b1cdbd2cSJim Jagielski local *DIR; 411*b1cdbd2cSJim Jagielski if (opendir (DIR, $sPrograms)) # open program directory 412*b1cdbd2cSJim Jagielski { 413*b1cdbd2cSJim Jagielski my $myfile; 414*b1cdbd2cSJim Jagielski while ($myfile = readdir(DIR)) # get a filename 415*b1cdbd2cSJim Jagielski { 416*b1cdbd2cSJim Jagielski if ($myfile =~ /ImageMagick/) 417*b1cdbd2cSJim Jagielski { 418*b1cdbd2cSJim Jagielski $sImageMagickPath = $sPrograms . "/" . $myfile; 419*b1cdbd2cSJim Jagielski last; 420*b1cdbd2cSJim Jagielski } 421*b1cdbd2cSJim Jagielski } 422*b1cdbd2cSJim Jagielski closedir(DIR); 423*b1cdbd2cSJim Jagielski } 424*b1cdbd2cSJim Jagielski if (! -e $sImageMagickPath) 425*b1cdbd2cSJim Jagielski { 426*b1cdbd2cSJim Jagielski print "ImageMagick not found.\n"; 427*b1cdbd2cSJim Jagielski $nGlobalErrors ++; 428*b1cdbd2cSJim Jagielski } 429*b1cdbd2cSJim Jagielski else 430*b1cdbd2cSJim Jagielski { 431*b1cdbd2cSJim Jagielski insertPath("imagemagick.path", $sImageMagickPath); 432*b1cdbd2cSJim Jagielski } 433*b1cdbd2cSJim Jagielski } 434*b1cdbd2cSJim Jagielski } 435*b1cdbd2cSJim Jagielski 436*b1cdbd2cSJim Jagielski } 437*b1cdbd2cSJim Jagielski if ( -e "$sImageMagickPath/$sImageMagickExe" ) 438*b1cdbd2cSJim Jagielski { 439*b1cdbd2cSJim Jagielski print "Found ImageMagick: '$sImageMagickPath'\n" if ($verbose); 440*b1cdbd2cSJim Jagielski } 441*b1cdbd2cSJim Jagielski } 442*b1cdbd2cSJim Jagielski else 443*b1cdbd2cSJim Jagielski { 444*b1cdbd2cSJim Jagielski print "ERROR: not supported environment\n"; 445*b1cdbd2cSJim Jagielski } 446*b1cdbd2cSJim Jagielski} 447*b1cdbd2cSJim Jagielski 448*b1cdbd2cSJim Jagielskisub checkForJava6() 449*b1cdbd2cSJim Jagielski{ 450*b1cdbd2cSJim Jagielski print "Search for Java6\n" if ($verbose); 451*b1cdbd2cSJim Jagielski my $javaexe = "java"; 452*b1cdbd2cSJim Jagielski if ( $ENV{JAVA6} ) 453*b1cdbd2cSJim Jagielski { 454*b1cdbd2cSJim Jagielski $javaexe = $ENV{JAVA6}; 455*b1cdbd2cSJim Jagielski } 456*b1cdbd2cSJim Jagielski 457*b1cdbd2cSJim Jagielski if ($OSNAME eq "linux" || $OSNAME eq "cygwin") 458*b1cdbd2cSJim Jagielski { 459*b1cdbd2cSJim Jagielski # search for imagemagick 460*b1cdbd2cSJim Jagielski local *JAVA; 461*b1cdbd2cSJim Jagielski if (open(JAVA, "$javaexe -version 2>&1 |")) 462*b1cdbd2cSJim Jagielski { 463*b1cdbd2cSJim Jagielski my $line; 464*b1cdbd2cSJim Jagielski while ($line = <JAVA>) 465*b1cdbd2cSJim Jagielski { 466*b1cdbd2cSJim Jagielski chomp($line); 467*b1cdbd2cSJim Jagielski print "- $line\n" if ($verbose); 468*b1cdbd2cSJim Jagielski if ( $line =~ /java version "(.*)"/ ) 469*b1cdbd2cSJim Jagielski { 470*b1cdbd2cSJim Jagielski my $javaversion = $1; 471*b1cdbd2cSJim Jagielski my @version = split('\.', $javaversion); 472*b1cdbd2cSJim Jagielski print "Found Java version: $version[1] the complete version: $javaversion\n" if ($verbose); 473*b1cdbd2cSJim Jagielski if ( $version[1] < 6) 474*b1cdbd2cSJim Jagielski { 475*b1cdbd2cSJim Jagielski print "Wrong Java version, at least Java version 6 is need but found $javaversion.\n"; 476*b1cdbd2cSJim Jagielski $nGlobalErrors++; 477*b1cdbd2cSJim Jagielski print "It is possible to overwrite the java exe with environment variable JAVA6='path'.\n"; 478*b1cdbd2cSJim Jagielski } 479*b1cdbd2cSJim Jagielski else 480*b1cdbd2cSJim Jagielski { 481*b1cdbd2cSJim Jagielski insertPath("java.exe", $javaexe); 482*b1cdbd2cSJim Jagielski } 483*b1cdbd2cSJim Jagielski last; 484*b1cdbd2cSJim Jagielski } 485*b1cdbd2cSJim Jagielski } 486*b1cdbd2cSJim Jagielski close(JAVA); 487*b1cdbd2cSJim Jagielski } 488*b1cdbd2cSJim Jagielski my $error = errorAdaption($?); 489*b1cdbd2cSJim Jagielski handleError($error, "Java"); 490*b1cdbd2cSJim Jagielski } 491*b1cdbd2cSJim Jagielski elsif ($OSNAME eq "MSWin32") 492*b1cdbd2cSJim Jagielski { 493*b1cdbd2cSJim Jagielski my $javaexe = "java"; 494*b1cdbd2cSJim Jagielski if ( $ENV{JAVA6} ) 495*b1cdbd2cSJim Jagielski { 496*b1cdbd2cSJim Jagielski $javaexe = $ENV{JAVA6}; 497*b1cdbd2cSJim Jagielski } 498*b1cdbd2cSJim Jagielski 499*b1cdbd2cSJim Jagielski if (! -e $javaexe) 500*b1cdbd2cSJim Jagielski { 501*b1cdbd2cSJim Jagielski print "Java not found.\n"; 502*b1cdbd2cSJim Jagielski $nGlobalErrors ++; 503*b1cdbd2cSJim Jagielski } 504*b1cdbd2cSJim Jagielski else 505*b1cdbd2cSJim Jagielski { 506*b1cdbd2cSJim Jagielski print "Found Java: '$javaexe'\n" if ($verbose); 507*b1cdbd2cSJim Jagielski insertPath("java.exe", $javaexe); 508*b1cdbd2cSJim Jagielski } 509*b1cdbd2cSJim Jagielski } 510*b1cdbd2cSJim Jagielski else 511*b1cdbd2cSJim Jagielski { 512*b1cdbd2cSJim Jagielski print "ERROR: Java not found.\n"; 513*b1cdbd2cSJim Jagielski } 514*b1cdbd2cSJim Jagielski} 515*b1cdbd2cSJim Jagielski 516*b1cdbd2cSJim Jagielski# different checks 517*b1cdbd2cSJim Jagielskiprint "Environment '$OSNAME'\n" if ($verbose); 518*b1cdbd2cSJim Jagielski 519*b1cdbd2cSJim Jagielskiif ($printerdriver) 520*b1cdbd2cSJim Jagielski{ 521*b1cdbd2cSJim Jagielski checkForPSDriver(); 522*b1cdbd2cSJim Jagielski} 523*b1cdbd2cSJim Jagielskiif ($ghostscript) 524*b1cdbd2cSJim Jagielski{ 525*b1cdbd2cSJim Jagielski checkForGhostscript(); 526*b1cdbd2cSJim Jagielski} 527*b1cdbd2cSJim Jagielskiif ($imagemagick) 528*b1cdbd2cSJim Jagielski{ 529*b1cdbd2cSJim Jagielski checkForImageMagick(); 530*b1cdbd2cSJim Jagielski} 531*b1cdbd2cSJim Jagielskiif ($java6) 532*b1cdbd2cSJim Jagielski{ 533*b1cdbd2cSJim Jagielski checkForJava6(); 534*b1cdbd2cSJim Jagielski} 535*b1cdbd2cSJim Jagielski 536*b1cdbd2cSJim Jagielski# return with found errors 537*b1cdbd2cSJim Jagielskiexit($nGlobalErrors); 538*b1cdbd2cSJim Jagielski 539*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------ 540*b1cdbd2cSJim Jagielskisub print_usage(*) 541*b1cdbd2cSJim Jagielski{ 542*b1cdbd2cSJim Jagielski local *HANDLE = $_[0]; 543*b1cdbd2cSJim Jagielski my $tool_name = basename($0); 544*b1cdbd2cSJim Jagielski 545*b1cdbd2cSJim Jagielski print(HANDLE <<END_OF_USAGE); 546*b1cdbd2cSJim Jagielski 547*b1cdbd2cSJim JagielskiUsage: $tool_name [OPTIONS] 548*b1cdbd2cSJim Jagielski 549*b1cdbd2cSJim Jagielski -ghostscript Try to find ghostscript in your environment 550*b1cdbd2cSJim Jagielski -imagemagick Try to find imagemagick 551*b1cdbd2cSJim Jagielski -java6 Checks for java 1.6.x 552*b1cdbd2cSJim Jagielski -printerdriver Try to find printer driver, windows only 553*b1cdbd2cSJim Jagielski -verbose be verbose 554*b1cdbd2cSJim Jagielski 555*b1cdbd2cSJim Jagielski -h, --help Print this help, then exit 556*b1cdbd2cSJim Jagielski -v, --version Print version number, then exit 557*b1cdbd2cSJim Jagielski 558*b1cdbd2cSJim JagielskiEND_OF_USAGE 559*b1cdbd2cSJim Jagielski; 560*b1cdbd2cSJim Jagielski} 561