diff options
Diffstat (limited to 'testgraphical/prechecks')
-rw-r--r-- | testgraphical/prechecks/makefile.mk | 56 | ||||
-rw-r--r-- | testgraphical/prechecks/softwaretests.pl | 564 |
2 files changed, 620 insertions, 0 deletions
diff --git a/testgraphical/prechecks/makefile.mk b/testgraphical/prechecks/makefile.mk new file mode 100644 index 000000000000..e86698fce8c6 --- /dev/null +++ b/testgraphical/prechecks/makefile.mk @@ -0,0 +1,56 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=.. + +PRJNAME=gfxcmp_prechecks +TARGET=notargetyet + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + +.IF "$(VERBOSE)"!="" + P_VERBOSE=-verbose +.ENDIF +.IF "$(SHOW)"!="" + P_JAVA6=-java6 +.ENDIF + +# PERLDEBUG=-d:ptkdb +ALLTAR: +.IF "$(GUI)"=="WNT" + $(PERL) $(PERLDEBUG) softwaretests.pl -printerdriver -imagemagick -ghostscript $(P_VERBOSE) $(P_JAVA6) +.ELSE + $(PERL) $(PERLDEBUG) softwaretests.pl -imagemagick -ghostscript $(P_VERBOSE) $(P_JAVA6) +.ENDIF + +.INCLUDE : $(PRJ)$/util$/makefile.pmk diff --git a/testgraphical/prechecks/softwaretests.pl b/testgraphical/prechecks/softwaretests.pl new file mode 100644 index 000000000000..f591fa139879 --- /dev/null +++ b/testgraphical/prechecks/softwaretests.pl @@ -0,0 +1,564 @@ +eval 'exec perl -wS $0 ${1+\"$@\"}' + if 0; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +# This is a pre check, which checks if some extra software exists + +BEGIN +{ + # Adding the path of this script file to the include path in the hope + # that all used modules can be found in it. + $0 =~ /^(.*)[\/\\]/; + push @INC, $1; +} + +use strict; +use English; # $OSNAME, ... +use Getopt::Long; +use Cwd; +use Cwd 'chdir'; +my $cwd = getcwd(); + +our $help; # Help option flag +our $version; # Version option flag + +# flush STDOUT +# my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle +# $| = 1; # perform flush after each write to STDOUT +# select ($old_handle); # restore previously selected handle + +$OUTPUT_AUTOFLUSH=1; # works only if use English is used. + +our $sGlobalIniFile; +our $verbose = 0; +our $ghostscript; +our $imagemagick; +our $java6; +our $printerdriver; + +our $version_info = 'compare.pl'; + +GetOptions( + "ghostscript" => \$ghostscript, + "imagemagick" => \$imagemagick, + "java6" => \$java6, + "printerdriver" => \$printerdriver, + "verbose" => \$verbose, + + "help" => \$help, + "version" => \$version + ); + +if ($help) +{ + print_usage(*STDOUT); + exit(0); +} +# Check for version option +if ($version) +{ + print STDERR "$version_info\n"; + exit(0); +} + +# prepare the GlobalIniFile + +sub prepare() +{ + my $sEnv = "$ENV{PRJ}"; + if (! $sEnv) + { + print "Warning: Seems you are not in a makefile.mk environment.\n"; + $sEnv = ".."; + } + my $sPath = getcwd(); + $sPath .= "/" . $sEnv; + chdir ($sPath); + cwd(); + $sPath = getcwd(); + my $sInpath = $ENV{INPATH}; + $sPath .= "/" . $sInpath . "/misc"; + $sGlobalIniFile = "$sPath/pathes.ini"; + print "Global Path ini file is: $sGlobalIniFile\n" if ($verbose); +} + +sub unixpath($) +{ + my $path = shift; + $path =~ s/\\/\//g; # make out of '\' a '/' + return $path; +} + +# search for file in a given path list. +# the path list should be separated as the path variable in the corresponding OS +sub searchForFileInPath($$) +{ + my $sFile = shift; + my $sPathList = shift; + + my $sep = ':'; + if ($OSNAME eq "MSWin32") + { + $sep = ';'; + } + my @path = split($sep, $sPathList); + + my $sPath; + my $startdir; + my $bFound = 0; + my $olddir = getcwd(); + + my $sWindowsHomeDir = unixpath(lc($ENV{WINDIR})); + + foreach $startdir (@path) + { + my $nCount = 0; + # + # IMPORTANT: leave out windir path. + # + if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + my $sPath = unixpath(lc(convertCygwinPath($startdir))); + if ($sPath =~ /^$sWindowsHomeDir/ ) + { + print "path: $startdir is windows path leave out.\n" if ($verbose); + next; + } + } + + local *DIR; + if (opendir (DIR, $startdir)) # open directory + { + print "path: $startdir" if ($verbose); + chdir ($startdir); + cwd(); + my $myfile; + while ($myfile = readdir(DIR)) # get filename + { + if (-f $myfile ) # is it a file? + { + $nCount ++; + if ($myfile eq $sFile) # is it the real file? + { + $sPath = $startdir; + $bFound = 1; + last; + } + } + } + closedir(DIR); + print " ($nCount)\n" if ($verbose); + } + if ($bFound == 1) + { + last; + } + } + chdir ($olddir); + cwd(); + + return $sPath; +} + + +prepare(); +# don't remove the inifile, only build clean should do this. +# if ( -e "$sGlobalIniFile") +# { +# unlink($sGlobalIniFile); +# } + + +# 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; +} + +# for every error we increment this variable by 1 +our $nGlobalErrors = 0; + +sub handleError($$) +{ + my $error = shift; + my $sText = shift; + if ($error != 0) + { + print "ERROR: search for $sText has failed with Errornumber: $error\n"; + $nGlobalErrors ++; + } +} + +sub convertCygwinPath($) +{ + my $sPath = shift; + + if ($OSNAME eq "cygwin") + { + # print "Cygwin Path Patch.\n" if ($verbose); + if ($sPath =~ /\/cygdrive\/(.)/) + { + my $Letter = $1; + $sPath =~ s/\/cygdrive\/${Letter}/${Letter}\:/; + # print "Cygwin Path Patch: '$sPath'\n" if ($verbose); + } + } + return $sPath; +} + +# append key=value to GlobalIniFile +sub insertPath($$) +{ + my $sKey = shift; + my $sValue = shift; + + $sValue = convertCygwinPath($sValue); + my $sIniFile = convertCygwinPath($sGlobalIniFile); + local *INIFILE; + if (open(INIFILE, ">>" . $sIniFile )) + { + print INIFILE "$sKey=$sValue\n"; + } + close(INIFILE); +} + +sub getFastPath($) +{ + my $sKey = shift; + my $sValue; + local *INIFILE; + my $sIniFile = convertCygwinPath($sGlobalIniFile); + if (open(INIFILE, $sIniFile)) + { + my $line; + while ($line = <INIFILE>) + { + chomp($line); + if ( $line =~ /^$sKey=(.*)$/ ) + { + $sValue = $1; + # print INIFILE "$sKey=$sValue\n"; + } + } + close(INIFILE); + } + return $sValue; +} + +sub checkForGhostscript() +{ + print "Search for Ghostscript\n" if ($verbose); + if ($OSNAME eq "linux" || + $OSNAME eq "solaris") + { + # search for ghostscript + local *GHOSTSCRIPT; + if (open(GHOSTSCRIPT, "which gs 2>&1 |")) + { + my $line; + while ($line = <GHOSTSCRIPT>) + { + chomp($line); + print "- $line\n" if ($verbose); + } + close(GHOSTSCRIPT); + } + my $error = errorAdaption($?); + handleError($error, "Ghostscript"); + } + elsif ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + my $sGSExe = "gswin32c.exe"; + # my $sGSPath = "C:/gs/gs8.64/bin"; + my $sGSPath = getFastPath("gs.path"); + if (! $sGSPath) + { + $sGSPath = searchForFileInPath($sGSExe, $ENV{PATH}); + + if ( ! -e "$sGSPath/$sGSExe") + { + $nGlobalErrors ++; + print "ERROR: search for $sGSPath/$sGSExe failed.\n"; + print "Please install ghostscript from www.adobe.com to and make it available in \$PATH variable \n"; + } + else + { + insertPath("gs.path", $sGSPath); + insertPath("gs.exe", $sGSExe); + } + } + if ( -e "$sGSPath/$sGSExe" ) + { + print "Found Ghostscript: '$sGSPath'\n" if ($verbose); + } + } + else + { + print "ERROR: Check for Ghostscript failed, due to unsupported '$OSNAME' environment.\n"; + $nGlobalErrors ++; + } +} + + +sub checkForPSDriver() +{ + # we don't need to check for unix here, due to the fact, unix is per default be able to print in postscript + if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + print "Check for postscript driver.\n" if ($verbose); + my $sWindowsRoot = $ENV{windir}; + if (! $sWindowsRoot) + { + $sWindowsRoot = $ENV{WINDIR}; + } + my $sCrossOfficeDriver = "${sWindowsRoot}/system32/crossoffice.ppd"; + if ( ! -e "$sCrossOfficeDriver") + { + print "ERROR: Don't found Postscript driver $sCrossOfficeDriver file\n"; + $nGlobalErrors ++; + print "Take a look on: http://so-gfxcmp.germany.sun.com/docs/further/convwatch/convwatch.html.\n"; + } + } +} + +sub checkForImageMagick() +{ + print "Search for Imagemagick\n" if ($verbose); + if ($OSNAME eq "linux" || + $OSNAME eq "solaris") + { + # search for imagemagick + local *IMAGEMAGICK; + if (open(IMAGEMAGICK, "which convert 2>&1 |")) + { + my $line; + while ($line = <IMAGEMAGICK>) + { + chomp($line); + print "- $line\n" if ($verbose); + } + close(IMAGEMAGICK); + } + my $error = errorAdaption($?); + handleError($error, "Imagemagick"); + } + elsif ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + my $sImageMagickExe = "convert.exe"; + # my $sImageMagickPath = "C:/gs/gs8.64/bin"; + my $sImageMagickPath = getFastPath("imagemagick.path"); + if (! $sImageMagickPath) + { + $sImageMagickPath = searchForFileInPath($sImageMagickExe, $ENV{PATH}); + if ($sImageMagickPath) + { + if ( ! -e "$sImageMagickPath/$sImageMagickExe") + { + $nGlobalErrors ++; + print "ERROR: search for $sImageMagickPath/$sImageMagickExe failed.\n"; + print "Please install ImageMagick from www.imagemagick.org to and make it available in \$PATH variable \n"; + } + else + { + insertPath("imagemagick.path", $sImageMagickPath); + # insertPath("gs.exe", $sImageMagickExe); + } + } + else + { + # next try, search image magick in $PROGRAMFILES + my $sPrograms = unixpath($ENV{PROGRAMFILES}); + + if (! $sPrograms) + { + print "There exist no \$PROGRAMFILES path, wrong Windows version?\n"; + $nGlobalErrors++; + } + else + { + local *DIR; + if (opendir (DIR, $sPrograms)) # open program directory + { + my $myfile; + while ($myfile = readdir(DIR)) # get a filename + { + if ($myfile =~ /ImageMagick/) + { + $sImageMagickPath = $sPrograms . "/" . $myfile; + last; + } + } + closedir(DIR); + } + if (! -e $sImageMagickPath) + { + print "ImageMagick not found.\n"; + $nGlobalErrors ++; + } + else + { + insertPath("imagemagick.path", $sImageMagickPath); + } + } + } + + } + if ( -e "$sImageMagickPath/$sImageMagickExe" ) + { + print "Found ImageMagick: '$sImageMagickPath'\n" if ($verbose); + } + } + else + { + print "ERROR: not supported environment\n"; + } +} + +sub checkForJava6() +{ + print "Search for Java6\n" if ($verbose); + my $javaexe = "java"; + if ( $ENV{JAVA6} ) + { + $javaexe = $ENV{JAVA6}; + } + + if ($OSNAME eq "linux" || $OSNAME eq "cygwin") + { + # search for imagemagick + local *JAVA; + if (open(JAVA, "$javaexe -version 2>&1 |")) + { + my $line; + while ($line = <JAVA>) + { + chomp($line); + print "- $line\n" if ($verbose); + if ( $line =~ /java version "(.*)"/ ) + { + my $javaversion = $1; + my @version = split('\.', $javaversion); + print "Found Java version: $version[1] the complete version: $javaversion\n" if ($verbose); + if ( $version[1] < 6) + { + print "Wrong Java version, at least Java version 6 is need but found $javaversion.\n"; + $nGlobalErrors++; + print "It is possible to overwrite the java exe with environment variable JAVA6='path'.\n"; + } + else + { + insertPath("java.exe", $javaexe); + } + last; + } + } + close(JAVA); + } + my $error = errorAdaption($?); + handleError($error, "Java"); + } + elsif ($OSNAME eq "MSWin32") + { + my $javaexe = "java"; + if ( $ENV{JAVA6} ) + { + $javaexe = $ENV{JAVA6}; + } + + if (! -e $javaexe) + { + print "Java not found.\n"; + $nGlobalErrors ++; + } + else + { + print "Found Java: '$javaexe'\n" if ($verbose); + insertPath("java.exe", $javaexe); + } + } + else + { + print "ERROR: Java not found.\n"; + } +} + +# different checks +print "Environment '$OSNAME'\n" if ($verbose); + +if ($printerdriver) +{ + checkForPSDriver(); +} +if ($ghostscript) +{ + checkForGhostscript(); +} +if ($imagemagick) +{ + checkForImageMagick(); +} +if ($java6) +{ + checkForJava6(); +} + +# return with found errors +exit($nGlobalErrors); + +# ------------------------------------------------------------------------------ +sub print_usage(*) +{ + local *HANDLE = $_[0]; + my $tool_name = basename($0); + + print(HANDLE <<END_OF_USAGE); + +Usage: $tool_name [OPTIONS] + + -ghostscript Try to find ghostscript in your environment + -imagemagick Try to find imagemagick + -java6 Checks for java 1.6.x + -printerdriver Try to find printer driver, windows only + -verbose be verbose + + -h, --help Print this help, then exit + -v, --version Print version number, then exit + +END_OF_USAGE +; +} |