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