xref: /AOO41X/main/odk/configure.pl (revision d063cc0f145ada68a982c4449630cdb5f2669263)
1#**************************************************************
2#
3#  Licensed to the Apache Software Foundation (ASF) under one
4#  or more contributor license agreements.  See the NOTICE file
5#  distributed with this work for additional information
6#  regarding copyright ownership.  The ASF licenses this file
7#  to you under the Apache License, Version 2.0 (the
8#  "License"); you may not use this file except in compliance
9#  with the License.  You may obtain a copy of the License at
10#
11#    http://www.apache.org/licenses/LICENSE-2.0
12#
13#  Unless required by applicable law or agreed to in writing,
14#  software distributed under the License is distributed on an
15#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16#  KIND, either express or implied.  See the License for the
17#  specific language governing permissions and limitations
18#  under the License.
19#
20#**************************************************************
21
22#
23# configure.pl - a perl script to set a minimal environment for the SDK.
24#
25# Copyright 2000, 2010 Oracle and/or its affiliates.
26#
27
28use IO::File;
29use File::Basename;
30
31$main::hostname= $ARGV[0];
32$main::sdkpath= $ARGV[1];
33$main::OO_SDK_NAME= $ARGV[2];
34
35$main::OO_MAJORVERSION=$main::OO_SDK_NAME;
36$main::OO_MINORVERSION=$main::OO_SDK_NAME;
37$main::OO_MAJORVERSION =~ s#[^\d]+(\d).(\d).+#$1#go;
38$main::OO_MINORVERSION =~ s#[^\d]+(\d).(\d).+#$2#go;
39
40$main::OO_SDK_CONFIG_HOME= "$ENV{HOME}/$main::OO_SDK_NAME";
41
42$main::operatingSystem = `$main::sdkpath/config.guess | cut -d"-" -f3,4`;
43chomp ($main::operatingSystem);
44
45$main::OO_SDK_HOME = $main::sdkpath;
46$main::OO_SDK_HOME_SUGGESTION = $main::sdkpath;
47
48$main::OFFICE_HOME = "";
49
50#$main::OFFICE_BASE_HOME = substr($main::sdkpath, 0, rindex($main::sdkpath, "/sdk"));
51
52$main::OO_SDK_MAKE_HOME = "";
53$main::makeName = "make";
54if ( $main::operatingSystem =~ m/solaris/ ||
55     $main::operatingSystem =~ m/freebsd/ )
56{
57    $main::makeName = "gmake";
58}
59$main::OO_SDK_MAKE_HOME_SUGGESTION = searchprog($main::makeName);
60$main::makeVersion = "3.79.1";
61$main::correctVersion = 0;
62
63$main::OO_SDK_ZIP_HOME = "";
64$main::OO_SDK_ZIP_HOME_SUGGESTION = searchprog("zip");
65$main::zipVersion = "2.3";
66
67$main::OO_SDK_CAT_HOME = "";
68$main::OO_SDK_CAT_HOME_SUGGESTION = searchprog("cat");
69# TODO cat version
70# $main::catVersion = "";
71
72$main::OO_SDK_SED_HOME = "";
73$main::OO_SDK_SED_HOME_SUGGESTION = searchprog("sed");
74# TODO sed version
75# $main::sedVersion = "";
76
77$main::OO_SDK_CPP_HOME = "";
78$main::cppName = "gcc";
79$main::cppVersion = "4.0.1";
80if ( $main::operatingSystem =~ m/solaris/ )
81{
82    $main::cppName = "CC";
83    $main::cppVersion = "5.2";
84}
85if ( $main::operatingSystem =~ m/darwin/ )
86{
87    $main::cppName = "clang";
88    $main::cppVersion = "4.2";
89}
90$main::OO_SDK_CC_55_OR_HIGHER = "";
91if ( $main::operatingSystem =~ m/darwin/ )
92{
93    $clangpath = `xcrun -f clang++`;
94    $main::OO_SDK_CPP_HOME_SUGGESTION = substr($clangpath, 0, rindex($clangpath, "/"));
95} else {
96    $main::OO_SDK_CPP_HOME_SUGGESTION = searchprog($main::cppName);
97}
98
99$main::OO_SDK_JAVA_HOME = "";
100$main::OO_SDK_JAVA_BIN_DIR = "bin";
101if ( $main::operatingSystem =~ m/darwin/ )
102{
103    $main::OO_SDK_JAVA_BIN_DIR="Commands";
104}
105$main::OO_SDK_JAVA_HOME_SUGGESTION = searchprog("javac");
106$main::javaVersion = "1.5.0_01";
107
108$main::OO_SDK_BOOST_HOME_SUGGESTION = "";
109$main::boostVersion = "1.48.0";
110$main::skipBoostDir = 0;
111
112$main::SDK_AUTO_DEPLOYMENT = "";
113$main::SDK_AUTO_DEPLOYMENT_SUGGESTION = "YES";
114
115$main::OO_SDK_OUTPUT_DIR_SUGGESTION = "$ENV{HOME}";
116$main::OO_SDK_OUTPUT_DIR = "";
117$main::skipOutputDir = 0;
118
119$main::return = 0;
120
121if ( $main::operatingSystem =~ m/darwin/ )
122{
123# used for a SDK as part of the office installation
124#    $main::OFFICE_HOME = `cd $main::sdkpath/../../.. && pwd`;
125#    chomp($main::OFFICE_HOME);
126#    print " Used Office = $main::OFFICE_HOME\n";
127    print " Used SDK = $main::OO_SDK_HOME\n\n";
128
129    $main::OFFICE_HOME_SUGGESTION = searchMacOffice();
130    while ( (! -d "$main::OFFICE_HOME" ) ||
131        ((-d "$main::OFFICE_HOME") && (! -d "$main::OFFICE_HOME/Contents/MacOS")) )
132    {
133    print " Enter the Office installation directory [$main::OFFICE_HOME_SUGGESTION]: ";
134    $main::OFFICE_HOME = readStdIn();
135    chop($main::OFFICE_HOME);
136    if ( $main::OFFICE_HOME eq "" )
137    {
138        $main::OFFICE_HOME = $main::OFFICE_HOME_SUGGESTION;
139    }
140
141    if ( ! -d "$main::OFFICE_HOME" )
142    {
143        $main::OFFICE_HOME = "";
144        print " Error: An office installation is required, please specify the path to a valid installation.\n";
145    }
146
147#   $main::OFFICE_BASE_HOME = "$main::OFFICE_HOME/Contents";
148    }
149} else
150{
151    $main::OFFICE_HOME_SUGGESTION = searchoffice();
152
153    if ( $main::OFFICE_HOME_SUGGESTION eq "" ) {
154    # prepare Office path
155    $main::OFFICE_HOME_SUGGESTION = searchprog("soffice");
156    }
157
158    if ( ! $main::OFFICE_HOME_SUGGESTION eq "" )
159    {
160    my $tmpOffice = readlink "$main::OFFICE_HOME_SUGGESTION/soffice";
161
162    if ( $tmpOffice eq "" )
163    {
164        $tmpOffice = "$main::OFFICE_HOME_SUGGESTION/soffice";
165    }
166
167    my $offset = rindex($tmpOffice, "/program/soffice");
168    if ( $offset != -1 )
169    {
170        $main::OFFICE_HOME_SUGGESTION = substr($tmpOffice, 0, $offset);
171    } else
172    {
173        $offset = rindex($tmpOffice, "/soffice");
174        if ( $offset != -1 )
175        {
176        $main::OFFICE_HOME_SUGGESTION = substr($tmpOffice, 0, $offset);
177        } else
178        {
179        $main::OFFICE_HOME_SUGGESTION = "";
180        }
181    }
182    }
183
184    while ( (! -d "$main::OFFICE_HOME" ) ||
185        ((-d "$main::OFFICE_HOME") && (! -d "$main::OFFICE_HOME/program")) )
186    {
187    print " Enter the Office installation directory [$main::OFFICE_HOME_SUGGESTION]: ";
188    $main::OFFICE_HOME = readStdIn();
189    chop($main::OFFICE_HOME);
190    if ( $main::OFFICE_HOME eq "" )
191    {
192        $main::OFFICE_HOME = $main::OFFICE_HOME_SUGGESTION;
193    }
194
195    if ( ! -d "$main::OFFICE_HOME" )
196    {
197        $main::OFFICE_HOME = "";
198        print " Error: An office installation is required, please specify the path to a valid installation.\n";
199    } else
200    {
201        # special work for a network installation, no program directory but a link to the soffice binary
202        if ( (! -d "$main::OFFICE_HOME/program") && (-e "$main::OFFICE_HOME/soffice") )
203        {
204        my $soserver = `ls -l $OFFICE_HOME_SUGGESTION/soffice | sed -n 's/.* -> //p'`;
205        $soserver= substr($soserver, 0, rindex($soserver, "program") - 1);
206
207        if ( ! -d $soserver )
208        {
209            $main::OFFICE_HOME = "";
210            print " Error: An office installation is required, please specify the path to a valid installation.\n";
211        } else
212        {
213            $main::OFFICE_HOME = $soserver;
214        }
215        }
216    }
217    }
218}
219
220
221# prepare GNU make path
222while ( (!$main::correctVersion) &&
223        ((! -d "$main::OO_SDK_MAKE_HOME" ) ||
224         ((-d "$main::OO_SDK_MAKE_HOME") && (! -e "$main::OO_SDK_MAKE_HOME/$main::makeName"))) )
225{
226    print " Enter GNU make ($main::makeVersion or higher) tools directory [$main::OO_SDK_MAKE_HOME_SUGGESTION]: ";
227    $main::OO_SDK_MAKE_HOME = readStdIn();
228    chop($main::OO_SDK_MAKE_HOME);
229    if ( $main::OO_SDK_MAKE_HOME eq "" )
230    {
231        $main::OO_SDK_MAKE_HOME = $main::OO_SDK_MAKE_HOME_SUGGESTION;
232    }
233    if ( (! -d "$main::OO_SDK_MAKE_HOME") ||
234         ((-d "$main::OO_SDK_MAKE_HOME") && (! -e "$main::OO_SDK_MAKE_HOME/$main::makeName")) )
235    {
236        $main::OO_SDK_MAKE_HOME = "";
237        print " Error: GNU make is required, please specify a GNU make tools directory.\n";
238    } else
239    {
240        #check version
241        my $testVersion = `$OO_SDK_MAKE_HOME/$main::makeName --version`;
242        if ( $testVersion eq "")
243        {
244            print " Set the environment variable OO_SDK_MAKE_HOME to your GNU build tools directory.\n";
245            print " GNU make version $main::makeVersion can be obtained at ftp://ftp.gnu.org/gnu/make/\n";
246        } else
247        {
248            if ($testVersion =~ m#((\d+\.)+\d+)# )
249            {
250                $testVersion = $1;
251            }
252            $main::correctVersion = testVersion($main::makeVersion, $testVersion, "$main::OO_SDK_MAKE_HOME/$main::makeName", 1);
253            if ( !$main::correctVersion )
254            {
255                print " The '$main::makeName' command found at '$main::OO_SDK_MAKE_HOME' has a wrong version\n";
256                $main::OO_SDK_MAKE_HOME = "";
257            }
258        }
259    }
260}
261
262# prepare zip path
263$main::correctVersion = 0;
264while ( (!$main::correctVersion) &&
265        ((! -d "$main::OO_SDK_ZIP_HOME" ) ||
266         ((-d "$main::OO_SDK_ZIP_HOME") && (! -e "$main::OO_SDK_ZIP_HOME/zip"))) )
267{
268    print " Enter zip ($main::zipVersion or higher) tool directory [$main::OO_SDK_ZIP_HOME_SUGGESTION]: ";
269    $main::OO_SDK_ZIP_HOME = readStdIn();
270    chop($main::OO_SDK_ZIP_HOME);
271    if ( $main::OO_SDK_ZIP_HOME eq "" )
272    {
273        $main::OO_SDK_ZIP_HOME = $main::OO_SDK_ZIP_HOME_SUGGESTION;
274    }
275    if ( (! -d "$main::OO_SDK_ZIP_HOME") ||
276         ((-d "$main::OO_SDK_ZIP_HOME") && (! -e "$main::OO_SDK_ZIP_HOME/zip")) )
277    {
278        $main::OO_SDK_ZIP_HOME = "";
279        print " Error: zip tool is required, please specify a zip tool directory.\n";
280    } else
281    {
282        #check version
283        my $testVersion = `$OO_SDK_ZIP_HOME/zip -h 2>&1 | grep -E Zip | head -n 1`;
284        $testVersion =~ s#Zip ([\d.]+) .*#$1#go;
285        if ( $testVersion eq "")
286        {
287            print " Set the environment variable OO_SDK_ZIP_HOME to your zip tool directory.\n";
288            print " zip version $main::zipVersion can be obtained at ftp://www.info-zip.org/\n";
289        } else
290        {
291            if ($testVersion =~ m#((\d+\.)+\d+)# )
292            {
293                $testVersion = $1;
294            }
295            $main::correctVersion = testVersion($main::zipVersion, $testVersion, "$main::OO_SDK_MAKE_HOME/zip", 1);
296            if ( !$main::correctVersion )
297            {
298                print " The 'zip' command found at '$main::OO_SDK_ZIP_HOME' has a wrong version\n";
299                $main::OO_SDK_ZIP_HOME = "";
300            }
301        }
302    }
303}
304
305# prepare cat path
306$main::correctVersion = 0;
307while ( (!$main::correctVersion) &&
308        ((! -d "$main::OO_SDK_CAT_HOME" ) ||
309        ((-d "$main::OO_SDK_CAT_HOME") && (! -e "$main::OO_SDK_CAT_HOME/cat"))) )
310{
311    print " Enter cat tool directory [$main::OO_SDK_CAT_HOME_SUGGESTION]: ";
312    $main::OO_SDK_CAT_HOME = readStdIn();
313    chop($main::OO_SDK_CAT_HOME);
314    if ( $main::OO_SDK_CAT_HOME eq "" )
315    {
316        $main::OO_SDK_CAT_HOME = $main::OO_SDK_CAT_HOME_SUGGESTION;
317    }
318    if ( (! -d "$main::OO_SDK_CAT_HOME") ||
319        ((-d "$main::OO_SDK_CAT_HOME") && (! -e "$main::OO_SDK_CAT_HOME/cat")) )
320    {
321        $main::OO_SDK_CAT_HOME = "";
322        print " Error: cat tool is required, please specify a cat tool directory.\n";
323    }
324    # else ...
325    # TODO check version
326    # NOTE: only Linux cat understands --version
327}
328
329# prepare sed path
330$main::correctVersion = 0;
331while ( (!$main::correctVersion) &&
332        ((! -d "$main::OO_SDK_SED_HOME" ) ||
333        ((-d "$main::OO_SDK_SED_HOME") && (! -e "$main::OO_SDK_SED_HOME/sed"))) )
334{
335    print " Enter sed tool directory [$main::OO_SDK_SED_HOME_SUGGESTION]: ";
336    $main::OO_SDK_SED_HOME = readStdIn();
337    chop($main::OO_SDK_SED_HOME);
338    if ( $main::OO_SDK_SED_HOME eq "" )
339    {
340        $main::OO_SDK_SED_HOME = $main::OO_SDK_SED_HOME_SUGGESTION;
341    }
342    if ( (! -d "$main::OO_SDK_SED_HOME") ||
343        ((-d "$main::OO_SDK_SED_HOME") && (! -e "$main::OO_SDK_SED_HOME/sed")) )
344    {
345        $main::OO_SDK_SED_HOME = "";
346        print " Error: sed tool is required, please specify a sed tool directory.\n";
347    }
348    # else ...
349    # TODO check version
350    # NOTE: only Linux sed understands --version
351}
352
353# prepare C++ compiler path
354$main::correctVersion = 0;
355while ( (!$main::correctVersion) &&
356        ((! -d "$main::OO_SDK_CPP_HOME" ) ||
357         ((-d "$main::OO_SDK_CPP_HOME") && (! -e "$main::OO_SDK_CPP_HOME/$main::cpp"))) )
358{
359    print " C++ compilers where for example a language binding exist:\n";
360    print "  - Solaris, Sun WorkShop 6 update 1 C++ 5.2 2000/09/11 or higher\n";
361    print "  - Linux, GNU C++ compiler, gcc version 4.0.1 or higher\n";
362    print "  - MacOS 64bit, Apple LLVM version 4.2 (clang-425.0.28) or higher\n";
363    print "    on MacOS auto detected using xcrun -f clang'\n";
364
365    if ( $main::operatingSystem =~ m/darwin/ )
366    {
367        # xcrun is used to find the correct clang compiler, just print the result as information
368        $main::OO_SDK_CPP_HOME = $main::OO_SDK_CPP_HOME_SUGGESTION;
369        print " Used clang compiler: $main::OO_SDK_CPP_HOME\n";
370    } else
371    {
372        print " Enter the directory of the C++ compiler, the directory\n";
373        print " where the compiler is located (optional) [$main::OO_SDK_CPP_HOME_SUGGESTION]: ";
374
375        $main::OO_SDK_CPP_HOME = readStdIn();
376        chop($main::OO_SDK_CPP_HOME);
377        if ( $main::OO_SDK_CPP_HOME eq "" )
378        {
379            $main::OO_SDK_CPP_HOME = $main::OO_SDK_CPP_HOME_SUGGESTION;
380        }
381    }
382
383    if ( (!$main::operatingSystem =~ m/darwin/) && (! $main::OO_SDK_CPP_HOME eq "") )
384    {
385        if ( (! -d "$main::OO_SDK_CPP_HOME") ||
386             ((-d "$main::OO_SDK_CPP_HOME") && (! -e "$main::OO_SDK_CPP_HOME/$main::cppName")) )
387        {
388            print " Error: Could not find directory '$main::OO_SDK_CPP_HOME'.\n";
389            if ( skipChoice("C++ compiler") == 1 )
390            {
391                $main::correctVersion = 1;
392            }
393            $main::OO_SDK_CPP_HOME = "";
394        } else
395        {
396            #check version
397            if ( $main::cppName eq "gcc" )
398            {
399                my $testVersion = `$OO_SDK_CPP_HOME/$main::cppName -dumpversion`;
400                if ( $testVersion eq "")
401                {
402                    print " The '$main::cppName' command found at $main::OO_SDK_CPP_HOME/$main::cppName is not a ";
403                    print " GNU compiler.\nSet the environment variable OO_SDK_CPP_HOME to your GNU build tools ";
404                    print " directory.\nA GNU compiler version $main::cppVersion can be obtained at ";
405                    print " ftp://ftp.gnu.org/gnu/gcc/\n";
406                } else
407                {
408                    $main::correctVersion = testVersion($main::cppVersion, $testVersion, "$main::OO_SDK_CPP_HOME/$main::cppName", 1);
409                    if ( !$main::correctVersion )
410                    {
411                        print " The '$main::cppName' command found at '$main::OO_SDK_CPP_HOME' has a wrong version\n";
412                        if ( skipChoice("C++ compiler") == 1 )
413                        {
414                            $main::correctVersion = 1;
415                        }
416
417                        $main::OO_SDK_CPP_HOME = "";
418                    }
419                }
420            } else
421            {
422                # for Solaris we have to check the version too
423                open(FILE, "$OO_SDK_CPP_HOME/$main::cppName -V 2>&1 |");
424                my @lines = <FILE>;
425                my $testVersion = $lines[0];
426                if ( $testVersion eq "")
427                {
428                    print " The '$main::cppName' command found at $main::OO_SDK_CPP_HOME/$main::cppName is not a ";
429                    print " Solaris C++ compiler.\nSet the environment variable OO_SDK_CPP_HOME to your Solaris C++ compiler directory.\n";
430                } else
431                {
432                    if ($testVersion =~ m#((\d+\.)+\d+)# )
433                    {
434                        $testVersion = $1;
435                    }
436                    $main::correctVersion = testVersion($main::cppVersion, $testVersion, "$main::OO_SDK_CPP_HOME/$main::cppName", 1);
437                    if ( !$main::correctVersion )
438                    {
439                        print " The '$main::cppName' command found at '$main::OO_SDK_CPP_HOME' has a wrong version\n";
440                        if ( skipChoice("C++ compiler") == 1 )
441                        {
442                            $main::correctVersion = 1;
443                        }
444
445                        $main::OO_SDK_CPP_HOME = "";
446                    } else {
447                        $main::correctVersion = testVersion("5.5", $testVersion, "$main::OO_SDK_CPP_HOME/$main::cppName", 2);
448                        if ( $main::correctVersion ) {
449                            $main::OO_SDK_CC_55_OR_HIGHER = $testVersion;
450                        }
451                    }
452                }
453            }
454        }
455    } else
456    {
457        # the C++ compiler is optional
458        $main::correctVersion = 1;
459    }
460}
461
462
463# prepare Java path
464$main::correctVersion = 0;
465
466# prepare Java suggestion (cut bin or Commands directory to be in the root of the Java SDK)
467$main::offset = rindex($main::OO_SDK_JAVA_HOME_SUGGESTION, "/$main::OO_SDK_JAVA_BIN_DIR");
468if ( $main::offset != -1 )
469{
470    $main::OO_SDK_JAVA_HOME_SUGGESTION = substr($main::OO_SDK_JAVA_HOME_SUGGESTION, 0, $main::offset);
471}
472
473while ( (!$main::correctVersion) &&
474        ((! -d "$main::OO_SDK_JAVA_HOME" ) ||
475         ((-d "$main::OO_SDK_JAVA_HOME") && (! -e "$main::OO_SDK_JAVA_HOME/$main::OO_SDK_JAVA_BIN_DIR/javac"))) )
476{
477    print " Enter Java SDK (1.5, recommendation is 1.6 or higher) installation directory (optional) [$main::OO_SDK_JAVA_HOME_SUGGESTION]: ";
478    $main::OO_SDK_JAVA_HOME = readStdIn();
479    chop($main::OO_SDK_JAVA_HOME);
480    if ( $main::OO_SDK_JAVA_HOME eq "" )
481    {
482        $main::OO_SDK_JAVA_HOME = $main::OO_SDK_JAVA_HOME_SUGGESTION;
483    }
484    if ( ! $main::OO_SDK_JAVA_HOME eq "" )
485    {
486        if ( (! -d "$main::OO_SDK_JAVA_HOME") ||
487             ((-d "$main::OO_SDK_JAVA_HOME") && (! -e "$main::OO_SDK_JAVA_HOME/$main::OO_SDK_JAVA_BIN_DIR/javac")) )
488        {
489            print " Error: Could not find directory '$main::OO_SDK_JAVA_HOME' or '$main::OO_SDK_JAVA_HOME/$main::OO_SDK_JAVA_BIN_DIR/javac'.\n";
490            if ( skipChoice("JAVA SDK") == 1 )
491            {
492                $main::correctVersion = 1;
493            }
494            $main::OO_SDK_JAVA_HOME = "";
495        } else
496        {
497            #check version
498            my $testVersion = `$main::OO_SDK_JAVA_HOME/$main::OO_SDK_JAVA_BIN_DIR/java -version 2>&1 | grep -E "java version" | head -n 1 | sed -e 's#.*version "##' | sed -e 's#".*##'`;
499            $testVersion =~ s#([^\n]+)\n#$1#go;
500
501            $main::correctVersion = testVersion($main::javaVersion, $testVersion, "$main::OO_SDK_JAVA_HOME/$main::OO_SDK_JAVA_BIN_DIR/java", 1);
502            if ( !$main::correctVersion )
503            {
504                if ( skipChoice("JAVA SDK") == 1 )
505                {
506                    $main::correctVersion = 1;
507                }
508                $main::OO_SDK_JAVA_HOME = "";
509            }
510        }
511    }else
512    {
513        # the Java SDK is optional
514        $main::correctVersion = 1;
515    }
516}
517
518# prepare boost directory (optional)
519while ( (!$main::skipBoostDir) &&
520        ((! -d "$main::OO_SDK_BOOST_HOME" ) ||
521        ((-d "$main::OO_SDK_BOOST_HOME") && (! -e "$main::OO_SDK_BOOST_HOME/boost/tr1/unordered_map.hpp"))) )
522{
523
524    print " Enter boost directory [$main::OO_SDK_BOOST_HOME_SUGGESTION]: ";
525    $main::OO_SDK_BOOST_HOME = readStdIn();
526    chop($main::OO_SDK_BOOST_HOME);
527    if ( $main::OO_SDK_BOOST_HOME eq "" )
528    {
529        $main::OO_SDK_BOOST_HOME = $main::OO_SDK_BOOST_HOME_SUGGESTION;
530    }
531    if ( (! -d "$main::OO_SDK_BOOST_HOME") ||
532        ((-d "$main::OO_SDK_BOOST_HOME") && (! -e "$main::OO_SDK_BOOST_HOME/boost/tr1/unordered_map.hpp")) )
533    {
534        print " Error: boost couldn't be find or verified, please specify a boost directory.\n";
535        if ( skipChoice("optional output directory") == 1 )
536        {
537            $main::skipBoostDir = 1;
538        }
539        $main::OO_SDK_BOOST_HOME = "";
540    } else
541    {
542        # the boost directory is optional
543        $main::skipBoostDir = 1;
544    }
545}
546
547# prepare output directory (optional)
548while ( (!$main::skipOutputDir) &&
549        (! -d "$main::OO_SDK_OUTPUT_DIR") )
550{
551    print " Default output directory is in your HOME directory.\n";
552    print " Enter an existent directory if you prefer a different output directory (optional) [$main::OO_SDK_OUTPUT_DIR_SUGGESTION]: ";
553
554    $main::OO_SDK_OUTPUT_DIR = readStdIn();
555
556    chop($main::OO_SDK_OUTPUT_DIR);
557    if ( $main::OO_SDK_OUTPUT_DIR eq "" )
558    {
559        $main::OO_SDK_OUTPUT_DIR = $main::OO_SDK_OUTPUT_DIR_SUGGESTION;
560    }
561    if ( ! $main::OO_SDK_OUTPUT_DIR eq "" )
562    {
563        if ( ! -d "$main::OO_SDK_OUTPUT_DIR" )
564        {
565            print " Error: Could not find directory '$main::OO_SDK_OUTPUT_DIR'.\n";
566            if ( skipChoice("optional output directory") == 1 )
567            {
568                $main::skipOutputDir = 1;
569            }
570            $main::OO_SDK_OUTPUT_DIR = "";
571        }
572    } else
573    {
574        # the output directory is optional
575        $main::skipOutputDir = 1;
576    }
577}
578
579# prepare auto deployment
580while ( $main::SDK_AUTO_DEPLOYMENT eq "" ||
581    ((! $main::SDK_AUTO_DEPLOYMENT eq "YES") &&
582     (! $main::SDK_AUTO_DEPLOYMENT eq "NO")) )
583{
584    print " Automatic deployment of UNO components (YES/NO) [$main::SDK_AUTO_DEPLOYMENT_SUGGESTION]: ";
585    $main::SDK_AUTO_DEPLOYMENT = uc <STDIN>;
586    chop($main::SDK_AUTO_DEPLOYMENT);
587    if ( $main::SDK_AUTO_DEPLOYMENT eq "" )
588    {
589    $main::SDK_AUTO_DEPLOYMENT = "YES";
590    }
591}
592
593prepareScriptFile("setsdkenv_unix.sh.in", "setsdkenv_unix.sh");
594chmod 0644, "$main::OO_SDK_CONFIG_HOME/$main::hostname/setsdkenv_unix.sh";
595
596print "\n";
597print " ************************************************************************\n";
598print " * ... your SDK environment has been prepared.\n";
599print " * For each time you want to use this configured SDK environment, you\n";
600print " * have to run the \"setsdkenv_unix\" script file!\n";
601print " * Alternatively can you source one of the scripts\n";
602print " *   \"$main::OO_SDK_CONFIG_HOME/$main::hostname/setsdkenv_unix.sh\"\n";
603print " * to get an environment without starting a new shell.\n";
604print " ************************************************************************\n\n";
605
606exit $return;
607
608sub skipChoice
609{
610    my $msg = shift;
611    my $skip = "";
612    while ( !( $skip eq "yes" || $skip eq "no") )
613    {
614        print " Do you want to skip the choice of the '$msg' (YES/NO): [YES] ";
615        $skip = lc <STDIN>;
616        chop($skip);
617        if ( $skip eq "" ) { $skip = "yes"; } # default
618        if ( $skip eq "yes" )
619        {
620            return 1;
621        }
622    }
623    return 0;
624}
625
626sub resolveLink
627{
628    my $base= shift;
629    my $link= shift;
630
631    my $resolvedpath = "$base/$link";
632    my $linktarget = readlink "$resolvedpath";
633    my $resolvedlink = "";
634
635    while ( $linktarget ne "") {
636
637    if ( $linktarget =~ m/^\/.*/ )
638    {
639        $resolvedpath = "$linktarget";
640    } else {
641        $resolvedpath = `cd $base/$linktarget; pwd`;
642        chop $resolvedpath;
643    }
644    $base = dirname("$resolvedpath");
645
646    $linktarget = readlink "$resolvedpath";
647    }
648
649    $resolvedlink = `cd $resolvedpath; pwd`;
650    chop $resolvedlink;
651    return $resolvedlink;
652}
653
654sub searchprog
655{
656    my $_search= shift;
657    my $tmpPath = `echo "\$PATH"`;
658    my @pathList = split(":" , $tmpPath);
659    my $progDir = "";
660
661    if ( $_search eq "javac" )
662    {
663        if ( $main::operatingSystem =~ m/darwin/ ) {
664            $progDir = resolveLink("/System/Library/Frameworks/JavaVM.Framework/Versions", "CurrentJDK");
665
666            if ( -e "$progDir/$main::OO_SDK_JAVA_BIN_DIR/javac" )
667            {
668                return "$progDir/$main::OO_SDK_JAVA_BIN_DIR";
669            }
670        }
671
672        if ( $main::operatingSystem =~ m/solaris/ ) {
673            $progDir = resolveLink("/usr/jdk", "latest");
674            if ( -e "$progDir/$main::OO_SDK_JAVA_BIN_DIR/javac" )
675            {
676                return "$progDir/$main::OO_SDK_JAVA_BIN_DIR";
677            }
678        }
679    }
680
681    if ( $_search eq "gmake" && $main::operatingSystem =~ m/solaris/ ) {
682        if ( -e "/usr/sfw/bin/gmake" )
683        {
684            return "/usr/sfw/bin";
685        }
686    }
687
688    foreach $i (@pathList)
689    {
690        chomp ($i);
691
692        if ( -e "$i/$_search" )
693        {
694
695            if ( index($i, "/") == 0 )
696            {
697                # # absolute path; leave unchanged
698                $progDir = $i;
699            } else
700            {
701                $progDir = `cd "$i"; pwd`;
702            }
703            return $progDir
704        }
705    }
706    return $progDir
707}
708
709sub searchMacOffice
710{
711    if (-d "/Applications/OpenOffice.app" ) {
712        return "/Applications/OpenOffice.app"
713    }
714    return "";
715}
716
717sub searchoffice
718{
719    my $offset = rindex($main::sdkpath, "/openoffice");
720    my $tmpOffice = substr($main::sdkpath, 0, $offset);
721    my $officepath = "$tmpOffice/openoffice$main::OO_MAJORVERSION";
722
723#   if ( $main::OO_MINORVERSION > 0) {
724#       $officepath = "$officepath$main::OO_MINORVERSION";
725#   }
726
727    # search corresponding office for this SDK
728    if (-d $officepath && -e "$officepath/program/soffice") {
729        return $officepath;
730    }
731    return "";
732}
733
734
735
736sub testVersion
737{
738    my $tmpMustBeVersion = shift;
739    my $tmpTestVersion = shift;
740    my $toolName = shift;
741    # 1=check + message 2=check only
742    my $checkOnly = shift;
743    my @mustBeVersion = split(/\.|_|-/,$tmpMustBeVersion);
744    my @testVersion = split(/\.|_|-/,$tmpTestVersion);
745    my $length = $#mustBeVersion;
746
747    if ($#testVersion < $#mustBeVersion) {
748        $length = $#testVersion;
749    }
750
751    for ($i=0; $i <= $length; $i++ )
752    {
753        if ( @testVersion[$i] > @mustBeVersion[$i] )
754        {
755            return 1; # 1 indicates a correct version
756        }
757
758        if ( @testVersion[$i] < @mustBeVersion[$i] )
759        {
760            if ( $#checkOnly == 1 ) {
761                print " The command '$toolName' has the version $tmpTestVersion.\n";
762                print " The SDK requires at least the version $tmpMustBeVersion.\n";
763            }
764            return 0;
765        }
766    }
767
768    return 1; # 1 indicates a correct version
769}
770
771sub readStdIn
772{
773    my $tmpstdin = <STDIN>;
774    if ( index($tmpstdin, "\$") != -1)
775    {
776        return `echo $tmpstdin`;
777    }
778
779    return $tmpstdin;
780}
781
782sub prepareScriptFile()
783{
784    my $inputFile = shift;
785    my $outputFile = shift;
786
787    if ( ! -d "$main::OO_SDK_CONFIG_HOME/$main::hostname" )
788    {
789        system("mkdir -p $main::OO_SDK_CONFIG_HOME/$main::hostname");
790    }
791
792    open ( FILEIN, "$main::sdkpath/$inputFile" ) || die "\nERROR: could not open '$main::sdkpath/$inputFile' for reading";
793    open ( FILEOUT, ">$main::OO_SDK_CONFIG_HOME/$main::hostname/$outputFile" ) || die "\nERROR: could not open '$main::OO_SDK_CONFIG_HOME/$main::hostname/$outputFile' for writing";
794
795    while ( <FILEIN> )
796    {
797        $_ =~ s#\@OO_SDK_NAME\@#$main::OO_SDK_NAME#go;
798        $_ =~ s#\@OO_SDK_HOME\@#$main::OO_SDK_HOME#go;
799        $_ =~ s#\@OFFICE_HOME\@#$main::OFFICE_HOME#go;
800        $_ =~ s#\@OO_SDK_MAKE_HOME\@#$main::OO_SDK_MAKE_HOME#go;
801        $_ =~ s#\@OO_SDK_ZIP_HOME\@#$main::OO_SDK_ZIP_HOME#go;
802        $_ =~ s#\@OO_SDK_CAT_HOME\@#$main::OO_SDK_CAT_HOME#go;
803        $_ =~ s#\@OO_SDK_SED_HOME\@#$main::OO_SDK_SED_HOME#go;
804        $_ =~ s#\@OO_SDK_CPP_HOME\@#$main::OO_SDK_CPP_HOME#go;
805        $_ =~ s#\@OO_SDK_CC_55_OR_HIGHER\@#$main::OO_SDK_CC_55_OR_HIGHER#go;
806        $_ =~ s#\@OO_SDK_JAVA_HOME\@#$main::OO_SDK_JAVA_HOME#go;
807        $_ =~ s#\@OO_SDK_BOOST_HOME\@#$main::OO_SDK_BOOST_HOME#go;
808        $_ =~ s#\@SDK_AUTO_DEPLOYMENT\@#$main::SDK_AUTO_DEPLOYMENT#go;
809        $_ =~ s#\@OO_SDK_OUTPUT_DIR\@#$main::OO_SDK_OUTPUT_DIR#go;
810
811        print FILEOUT $_;
812    }
813
814    close FILEIN;
815    close FILEOUT;
816}
817