986f377125cbbdae87274c3034477c8e8c986745
[scilab.git] / scilab / bin / scilab
1 #!/bin/sh
2 #
3 # Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 # Copyright (C) INRIA - 2006-2008 - Sylvestre Ledru
5 # Copyright (C) INRIA - 2008 - Simon Lipp
6 # Copyright (C) DIGITEO - 2009-2011 - Sylvestre Ledru
7 # Copyright (C) DIGITEO - 2010-2011 - Bruno JOFRET
8 # This file must be used under the terms of the CeCILL.
9 # This source file is licensed as described in the file COPYING, which
10 # you should have received as part of this distribution.  The terms
11 # are also available at
12 # http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
13
14 ####
15 #
16 # Scilab can be installed/used in different ways :
17 # * ./configure; make install
18 #    => will install Scilab into /usr/local/ and split files to
19 #    /usr/local/bin, /usr/local/share/scilab/, /usr/local/lib/scilab/,
20 #    /usr/local/include/scilab/
21 # * ./configure --prefix=/my/dir/; make install
22 #    => will install Scilab into /my/dir/ and split files to
23 #    /my/dir/bin/, /my/dir/share/scilab/, /my/dir/lib/scilab/
24 #    /my/dir/include/scilab/
25 #    Scilab official binary uses this arch
26 # * ./configure; make install prefix=$(DESTDIR)/usr \
27 #                   bindir=$(DESTDIR)/usr/bin \
28 #                   datadir=$(DESTDIR)/usr/share/scilab ...
29 #    Solution used mainly by Linux packagers
30 #
31 ## First, this script will look for scilab-bin in :
32 # * If specified, in the $SCI variable
33 # * Into the scilab/bin/ directory
34 # * Into the scilab/ directory (if the user is using a source version and
35 # scilab has been compiled in this directory)
36 # * if this file is a symlink to the real one. We browse symlink(s) until we
37 # find the real "scilab" script file and consider that it is the right
38 # directory
39 # * That is all. Don't hesitate to contact us if you see one missing.
40 #
41 ###
42
43 if test ! -z "$SCIVERBOSE"; then
44     SCIVERBOSE=1
45 else
46     SCIVERBOSE=0
47 fi
48
49 if test -n "$SCI"; then
50     if test ! -d "$SCI/modules"; then
51         echo "Cannot find directory $SCI/modules/ !"
52         echo "SCI should point to the root data directory of Scilab"
53         exit 255
54     fi
55 fi
56
57 DISABLE_JAVA_DETECTION=0
58 IS_SCILAB_BINARY=0
59
60 start_debug() {
61     if test -n "$DEVENV"; then
62         echo "Running debug of Scilab [gdb]  : " "$SCI"/libtool --mode=execute gdb $SCILAB_GDB_OPT --args "$SCILABBIN" "$@"
63         "$SCI"/libtool --mode=execute gdb $SCILAB_GDB_OPT --args "$SCILABBIN" "$@"
64     else
65         echo "Running debug of Scilab [gdb]  : " gdb $SCILAB_GDB_OPT --args "$SCILABBIN" "$@"
66         gdb $SCILAB_GDB_OPT --args "$SCILABBIN" "$@"
67     fi
68 }
69
70 start_debug_kdbg() {
71     if test -n "$DEVENV"; then
72         echo "Running debug of Scilab [kdbg]  : " "$SCI"/libtool --mode=execute kdbg "$SCILABBIN"
73         "$SCI"/libtool --mode=execute kdbg "$SCILABBIN"
74     else
75         echo "Running debug of Scilab [kdbg]  : " kdbg "$SCILABBIN"
76         kdbg "$SCILABBIN"
77     fi
78 }
79
80 start_profiling() {
81     VALGRIND_OPTIONS=" --show-below-main=yes --num-callers=16 --demangle=yes --leak-check=full --show-reachable=yes --smc-check=all --show-below-main=yes --track-origins=yes --suppressions=$SCI/tools/profiling/valgrind.supp $SCILAB_VALGRIND_OPT"
82     if test -n "$DEVENV"; then
83         echo "Running profiling of Scilab  : " "$SCI"/libtool --mode=execute valgrind $VALGRIND_OPTIONS "$SCILABBIN" "$@"
84         "$SCI"/libtool --mode=execute valgrind $VALGRIND_OPTIONS "$SCILABBIN" "$@"
85     else
86         echo "Running profiling of Scilab  : " valgrind $VALGRIND_OPTIONS "$SCILABBIN" "$@"
87         valgrind $VALGRIND_OPTIONS "$SCILABBIN" "$@"
88     fi
89
90 }
91
92 start_profiling_visu() {
93     VALGRIND_VISU_OPTIONS=" --tool=callgrind --trace-children=yes --smc-check=all --trace-jump=yes --dump-line=yes --separate-threads=yes $SCILAB_VALGRIND_OPT"
94 #--dump-instr=yes
95     if test -n "$DEVENV"; then
96         echo "Running profiling visualization of Scilab  : " "$SCI"/libtool --mode=execute valgrind $VALGRIND_VISU_OPTIONS "$SCILABBIN" "$@"
97         "$SCI"/libtool --mode=execute valgrind $VALGRIND_VISU_OPTIONS "$SCILABBIN" "$@"
98     else
99         echo "Running profiling visualization of Scilab  : " valgrind $VALGRIND_VISU_OPTIONS "$SCILABBIN" "$@"
100         valgrind $VALGRIND_VISU_OPTIONS "$SCILABBIN" "$@"
101     fi
102 }
103
104 find_docbook_path() {
105     if test -z "$DOCBOOK_ROOT"; then
106         for dir in $SCI/thirdparty/docbook /usr/share/sgml/docbook/stylesheet/xsl/nwalsh /usr/share/docbook2X/xslt/man/ /usr/share/xml/docbook/stylesheet/nwalsh/ /usr/share/xml/docbook/stylesheet/nwalsh/current/ /sw/share/xml/xsl/docbook-xsl /usr/share/xml/docbook/xsl-stylesheets-*/ /usr/share/sgml/docbook/xsl-stylesheets-*/ /usr/share/sgml/docbook/xsl-stylesheets /usr/share/sgml/docbook/xsl-ns-stylesheets-*/ /usr/share/xml/docbook/stylesheet/docbook-xsl /opt/local/share/xsl/docbook-xsl; do
107             if test -r "$dir/fo/docbook.xsl"; then
108                 if test -z "$DOCBOOK_ROOT"; then
109                     DOCBOOK_ROOT=$dir
110                     export DOCBOOK_ROOT
111                 fi
112             fi
113         done
114     fi
115     if test $SCIVERBOSE -ne 0; then
116         echo "DOCBOOK : $DOCBOOK_ROOT"
117     fi
118 }
119
120 detect_type_of_scilab(){
121
122     progname="$0"
123     SCILAB_MODE="gui"
124     SCILABBIN="scilab-bin"
125
126     if (echo "$progname"|grep "scilab-adv-cli$" 2>&1 > /dev/null;) || (echo "$@"|grep "\-nw" 2>&1 > /dev/null;) then
127         SCILAB_MODE="nw"
128         # We are using scilab-bin here because we are going to force the arg -nw
129         SCILABBIN="scilab-bin"
130     fi
131
132     if (echo "$progname"|grep "scilab-cli$" 2>&1 > /dev/null;) || (echo "$@"|grep "\-nwni" 2>&1 > /dev/null;) then
133         SCILAB_MODE="nwni"
134         SCILABBIN="scilab-cli-bin"
135         DISABLE_JAVA_DETECTION=1
136     fi
137
138     if (echo "$progname"|grep "scinotes$" 2>&1 > /dev/null;) then
139         SCILAB_MODE="scinotes"
140         SCILABBIN="scilab-bin"
141         extraarg=1
142     fi
143
144     if (echo "$progname"|grep "xcos$" 2>&1 > /dev/null;) then
145         SCILAB_MODE="xcos"
146         SCILABBIN="scilab-bin"
147         extraarg=1
148     fi
149
150     if test $SCIVERBOSE -ne 0; then
151         echo "SCILABBIN : $SCILABBIN"
152         echo "DISABLE_JAVA_DETECTION : $DISABLE_JAVA_DETECTION"
153         echo "SCILAB_MODE : $SCILAB_MODE"
154     fi
155 }
156
157 detect_os() {
158
159     if test "${OS}" = ""; then
160         OS=$(uname -s) # Retrieve the Operating System
161     fi
162     if test "${MODEL}" = ""; then
163         MODEL=$(uname -m) # Retrieve the model
164     fi
165
166     if test $SCIVERBOSE -ne 0; then
167         echo "OS : $OS"
168         echo "MODEL : $MODEL"
169     fi
170 }
171
172 detect_type_of_scilab $@
173
174 detect_os
175
176 detect_scilab_path() {
177
178     LOCALOLDPWD=$(pwd)
179
180     # If we are running Scilab binary, it is trivial to set paths.
181     curdir=$(dirname "$progname")
182
183     # If the script is a symlink, it might be a symlink to the Scilab binary
184     # We could run into the bug #9125
185     if test -h $progname; then
186         while test -h "$progname"; do
187             bn=$(basename "$progname")
188             cd $(dirname "$progname")
189
190             # Browse the symlink to the real one
191             progname=$(/bin/ls -l "$bn" | sed -e 's/^.* -> //' )
192
193             if test ! -x "$progname"; then
194                 break
195             fi
196         done
197         cd $(dirname "$progname")
198         curdir=$(pwd)
199     fi
200
201     if test -d $curdir/../thirdparty/ -a -d $curdir/../share/scilab; then
202         # We are in the Scilab binary
203         IS_SCILAB_BINARY=1
204         # export the bin directory to the PATH first (avoid to take the packaged version)
205         PATH="$curdir:$PATH"
206         cd "$curdir/../"
207         SCIBINARYBASE=$(pwd)
208         SCI=$SCIBINARYBASE/share/scilab
209         export SCI
210         return
211     fi
212
213     # Use scilab-bin in the current dir if it exists
214     # If not, then start resolving symlinks until we find scilab-bin
215     found=0
216     cd $(dirname "$progname")
217     curdir=$(pwd -P)
218     PATH="$curdir:$PATH"
219
220     progbase=$(basename "$progname")
221     run_sci="$curdir/$SCILABBIN"
222     if test -x "$run_sci"; then # scilab-bin is in the /bin/ directory
223         cd "$curdir/../"
224         SCI=$(pwd)
225         SCIBIN=$run_sci
226         found=1
227     else
228         run_sci="$curdir/../$SCILABBIN"
229         if test -x "$run_sci"; then # scilab-bin is in the / directory
230         # which is the case in a dev env
231             cd "$curdir/../"
232             SCI=$(pwd)
233             SCIBIN=$run_sci
234             found=1
235         else
236             here=$(/bin/pwd)
237             while test -h "$progname"; do
238                 bn=$(basename "$progname")
239                 cd $(dirname "$progname")
240             # Browse the symlink to the real one
241                 progname=$(/bin/ls -l "$bn" | sed -e 's/^.* -> //' )
242                 if test ! -x "$progname"; then
243                     break
244                 fi
245                 curdir=$(dirname "$progname")
246                 if test -x "$curdir"; then
247                     cd "$curdir/../"
248                     SCI=$(pwd)
249                     SCIBIN="$curdir/$SCILABBIN"
250                     found=1
251
252                     break
253                 fi
254             # The current file ($0), probably scilab is a symlink to the
255             # real one and here, it is the dev env
256                 run_sci="$curdir/../$SCILABBIN"
257                 if test -x "$run_sci"; then
258                     cd "$curdir/../"
259                     SCI=$(pwd)
260                     SCIBIN=$run_sci
261                     found=1
262                     break
263                 fi
264             done
265             cd "$here"
266         fi
267         if test $SCIVERBOSE -ne 0; then
268             echo "I think I found Scilab here : $SCI"
269         fi
270     fi
271
272
273     if test -x "$SCI/bin/$SCILABBIN"; then
274 # real env
275         SCILABBIN=$SCI/bin/$SCILABBIN
276         SCI=$SCI/share/scilab/
277     else
278         if test -x "$SCI/$SCILABBIN"; then
279         # dev env
280             SCILABBIN=$SCI/$SCILABBIN
281             DEVENV=1
282         # add modelica in the path
283             PATH="$PATH:$SCI/modules/scicos/"
284         else
285             echo "Cannot find $SCILABBIN ..."
286             exit 1
287         fi
288     fi
289
290     export SCI
291 }
292
293
294 set_macosx_java_vm () {
295     # For Mac OS X, Since path are different from the JVM normal tree,
296     # don't need to detect the CPU
297     JAVA_SHLIB="libjava.jnilib"
298     if test -z "$JAVA_HOME"; then
299       JAVA_HOME=$(/usr/libexec/java_home --arch x86_64 --failfast --version 1.8+)
300     fi
301     JAVA_JVM_VERSION=$JAVA_HOME
302     export JAVA_JVM_VERSION
303     DYLD_LIBRARY_PATH="$JAVA_HOME/../Libraries${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}"
304
305 }
306
307 set_embedded_java_vm () {
308
309        # Scilab binary => no Java detection since we are using the embeded JRE
310         # Here, we are handling 3 cases: GNU/Linux 32bit, GNU/Linux 64bit,
311         # Mac OS X
312         case $OS in
313             "Linux")
314                 case $MODEL in
315                     "x86_64")
316                         proc="amd64"
317                         ;;
318                     i?86)
319                         # We embed java/lib/i386 with Scilab Binary
320                         # force proc to i386 even if systems answer i686
321                         proc="i386"
322                         ;;
323                     *)
324                         echo "Could not find the Java configuration for the model <${MODEL}>. Please contact us on http://bugzilla.scilab.org"
325                         ;;
326                 esac
327                 ;;
328             *darwin* | *Darwin*) # MacOS X
329                 # JRE is now embedded in Mac OS X binary version
330                 #set_macosx_java_vm
331                 JAVA_HOME=$SCIBINARYBASE/thirdparty/java/Contents/Home/
332                 JAVA_JVM_VERSION=$JAVA_HOME
333                 export JAVA_JVM_VERSION
334                 DYLD_LIBRARY_PATH="$JAVA_HOME/lib/server:${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}"
335                 ;;
336             *)
337             echo "Could not find the Java configuration for the OS <${OS}>. Please contact us or submit a bug report with your detailed configuration http://bugzilla.scilab.org/"
338             echo "Fallback on the model <${MODEL}> found by uname -m"
339             proc=$MODEL
340             ;;
341     esac
342     JRE_HOME="$SCIBINARYBASE/thirdparty/java/"
343
344 }
345
346 # If enabled, disable se_linux
347 check_and_disable_selinux() {
348     if test -x /usr/sbin/selinuxenabled -a $IS_SCILAB_BINARY -eq 1; then
349         /usr/sbin/selinuxenabled
350         if test $? = 0; then
351             if test $SCIVERBOSE -ne 0; then
352                 echo "Disabling SELinux on Scilab"
353             fi
354
355             JVMLIB_32=$SCIBINARYBASE/java/lib/i386/server/libjvm.so
356             if test -f $JVMLIB_32; then
357                 /usr/bin/chcon -t textrel_shlib_t "$JVMLIB_32"
358                 if test $? != 0; then
359                     echo "Error: Cannot chcon $JVMLIB_32"
360                 fi
361             fi
362             JVMLIB_64=$SCIBINARYBASE/java/lib/amd64/server/libjvm.so
363             if test -f $JVMLIB_64; then
364                 /usr/bin/chcon -t textrel_shlib_t "$JVMLIB_64"
365                 if test $? != 0; then
366                     echo "Error: Cannot chcon $JVMLIB_64"
367                 fi
368             fi
369             /usr/bin/chcon -t execmem_exec_t "$SCIBINARYBASE/bin/scilab-bin"
370             if test $? != 0; then
371                 echo "Error: Cannot chcon 'scilab-bin'"
372             fi
373
374             /usr/bin/chcon -t execmem_exec_t "$SCIBINARYBASE/bin/scilab-cli-bin"
375             if test $? != 0; then
376                 echo "Error: Cannot chcon 'scilab-cli-bin'"
377             fi
378
379         fi
380     fi
381 }
382
383 detect_java_vm() {
384
385     JAVA_SHLIB="libjava.so"
386
387     if test $IS_SCILAB_BINARY -eq 1; then
388         set_embedded_java_vm
389     else  # NOT IS_SCILAB_BINARY
390
391 ############# JAVA DETECTION ##############
392 # Basic inspiration from Eclipse
393 #
394 # Scilab is looking for Java in various places with different ways :
395 # * if JAVA_HOME is specificed, use it
396 # * Check in 'standard' places we know Java could be installed
397 # if some are missing, please contact us
398 # * look in the PATH if there is a java binary
399 # if it is the case, resolve the symlink and set the JAVA_HOME from it
400 #
401 # Once we have JAVA_HOME, we check that native libraries (libjava.so and
402 # 2 others) are available
403 ###
404
405 # Get the proc name matching to the one of the JVM
406 # Inspiration and data are from http://www.google.com/codesearch?hl=en&q=+java+ppc+libjava.so+show:a78sz0SP41k:zxNozD-vc0A:FWiIy7Hinmg&sa=N&cd=2&ct=rc&cs_p=http://fresh.t-systems-sfr.com/unix/src/misc/tclBlendSrc1.2.5.tar.gz&cs_f=tclBlend1.2.5/configure.in#a0
407 # For Mac OS X, we will get stuff like that:
408 # uname -s Power Macintosh
409 # uname -m Darwin
410
411 # If the user has the variable JAVA_HOME in the ENV
412         if test -n "$JAVA_HOME" ; then
413                 if test $SCIVERBOSE -ne 0; then
414                     echo "Using specified vm: $JAVA_HOME"
415                 fi
416                 if test ! -x "$JAVA_HOME/bin/java" ; then
417                     echo "Cannot find $JAVA_HOME/bin/java"
418                     exit 1
419                 fi
420         else
421
422             case $OS in
423                 *darwin* | *Darwin*)
424                     set_macosx_java_vm
425                     if test $SCIVERBOSE -ne 0; then
426                         echo "Using default Mac OS X vm: $JAVA_HOME"
427                         echo "And LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
428                         echo "And DYLD_LIBRARY_PATH: $DYLD_LIBRARY_PATH"
429                     fi
430                     ;;
431                 *)
432                     ;;
433             esac
434
435 # Browse "default directory" (if it means anything under Unix/Linux) of Java
436 # to find where it could be !
437             if test -z "$JAVA_HOME"; then
438                 JAVA_DEFAULT_DIR="/usr/java/jdk1.8.*/ /usr/lib/jvm/java-1.8.0-*/ /etc/alternatives/java_sdk /etc/alternatives/jre /usr/java/jdk*/ /usr/lib/jvm/java-*/"
439                 for DIR in $JAVA_DEFAULT_DIR ; do
440                     if test $SCIVERBOSE -ne 0; then
441                         echo "Trying to find Java in $DIR "
442                     fi
443                     if test -x "${DIR}/bin/java" ; then
444                         # resolve symlinked dir
445                         cd $DIR
446                         JAVA_HOME=$(pwd -P)
447                         cd $OLDPWD
448
449                         export JAVA_HOME
450                         if test $SCIVERBOSE -ne 0; then
451                             echo "Java found in $JAVA_HOME"
452                         fi
453                         break
454                     fi
455                 done
456             fi
457
458 # if JAVA_HOME still haven't been found. Well, we can now try to find it in the path
459             if test ! -d "$JAVA_HOME"; then
460
461                 PATH_SEPARATOR=:
462                 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
463                 if test $SCIVERBOSE -ne 0; then
464                     echo "Look for the java binary in the PATH. If it is a symlink, try to resolve it"
465                 fi
466                 for DIR in $PATH; do
467                     if test -f $DIR/java; then
468
469                         _cur=$DIR/java
470                 # resolve symlink
471                 # Will probably bug if a file contains -> in the name
472                         while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
473                             _cur=$(ls -ld "$_cur" | sed 's/.* -> //')
474                         done
475                 # symlink resolved to the real file
476
477                 # Now, create JAVA_HOME
478                         TMP=$(dirname $_cur)
479                         JAVA_HOME=$(dirname $TMP)
480                         if test ! -z "$JAVA_HOME"; then
481                             break;
482                         fi
483                     fi
484                 done
485                 IFS=$as_save_IFS
486             fi
487         fi
488         if test ! -z "$JAVA_HOME"; then
489             if test $SCIVERBOSE -ne 0; then
490                 echo "JAVA_HOME : $JAVA_HOME"
491             fi
492 # Manage JRE & JDK because libjava.so and others are stored in the JRE
493             if test -d $JAVA_HOME/jre; then
494                 JRE_HOME=$JAVA_HOME/jre
495             else
496                 JRE_HOME=$JAVA_HOME
497             fi
498 # Configuring LD_LIBRARY_PATH for libjava.so libhpi.so and libxxxx.so
499
500             case $OS in
501                 "Linux")
502                     case $MODEL in
503                         "x86_64")
504                             proc="amd64"
505                             ;;
506                         i?86)
507
508                             if test -d ${JRE_HOME}/lib/$(uname -m) ; then
509                                 proc=$(uname -m)
510                             else
511                                 proc="i386"
512                             fi
513                             ;;
514                         "alpha")
515                             proc="alpha"
516                             ;;
517                         "sparc"|"sparc64")
518                             proc="sparc"
519                             ;;
520                         sh*)
521                             proc="sh"
522                             ;;
523                         "ia64")
524                             proc="ia64"
525                             ;;
526                         mips*) # under mipsel, uname -m is
527                     # usually returning mips or mips64...
528                     # but binary are in mipsel
529                             if test -d ${JRE_HOME}/lib/mipsel ; then
530                                 proc="mipsel"
531                             else
532                                 proc="mips"
533                             fi
534                             ;;
535                         "ppc"|"powerpc")
536                             proc="ppc"
537                             ;;
538                         "ppc64"|"ppc64el")
539                             proc="ppc64"
540                             ;;
541                         "s390")
542                             proc="s390"
543                             ;;
544                         "s390x")
545                             proc="s390x"
546                             ;;
547                         armv*)
548                             proc="arm"
549                             ;;
550                         aarch64)
551                             proc="aarch64"
552                             ;;
553                         *)
554                             echo "Could not find the Java configuration for the model <${MODEL}>. Please contact us on http://bugzilla.scilab.org"
555                             ;;
556                     esac
557                     ;;
558                 "HP-UX")
559                     JAVA_SHLIB="libjava.sl"
560                     proc="lib" # TODO : check if it is right or not ... seems not !
561                     ;;
562                 "IRIX")
563                     proc="lib32"
564                     ;;
565                 "SunOS")
566                     case $MODEL in
567                         "i86pc") # solaris x86
568                             proc="i386"
569                             ;;
570                 # check for the 64 bits syntax
571                         "sparc"|"sparc64")
572                             proc="sparc"
573                             ;;
574                         *)
575                             echo "Could not find the Java configuration for the model <${MODEL}>. Please contact us."
576                             ;;
577                     esac
578                     ;;
579
580                 *win32* | *WIN32* | *CYGWIN_NT*)
581                     proc="win32"
582                     JAVA_SHLIB="jvm.dll"
583                     ;;
584                 *darwin* | *Darwin*) # MacOS X
585                     set_macosx_java_vm
586                     ;;
587                 *FreeBSD*)
588                     proc=$MODEL
589                     ;;
590                 *)
591                     echo "Could not find the Java configuration for the OS <${OS}>. Please contact us or submit a bug report with your detailed configuration http://bugzilla.scilab.org/"
592                     echo "Fallback on the model <${MODEL}> found by uname -m"
593                     proc=$MODEL
594                     ;;
595             esac
596         fi # JAVA_HOME provided or found
597     fi # IS_SCILAB_BINARY
598
599     # Check if the lib exists
600     LIBJAVA="$JRE_HOME/lib/$proc/$JAVA_SHLIB"
601     if test ! -f $LIBJAVA; then
602         if test $SCIVERBOSE -ne 0; then
603             echo "Cannot find $LIBJAVA"
604         fi
605     else
606         CLASSPATH="${CLASSPATH:+:$CLASSPATH}$SCI/modules/core/jar/org.scilab.modules.core.jar"
607         # @TODO This is the default path of the official sun JVM.
608         # It is different for other implementation of the JVM....
609         LD_LIBRARY_PATH="$JRE_HOME/lib/$proc/:$JRE_HOME/lib/$proc/server/:$JRE_HOME/lib/$proc/native_threads/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
610     fi
611
612     # Bug http://bugzilla.scilab.org/show_bug.cgi?id=14290 -
613     # Never run headless on Mac (unless explicitly asked through
614     # the SCI_JAVA_ENABLE_HEADLESS option -- which will not work anyway)
615     case $OS in
616         *darwin* | *Darwin*) # MacOS X
617             export _JAVA_OPTIONS="-Djava.awt.headless=false"
618     ;;        
619     esac
620
621 ####### END OF JAVA ENV DETECTION/SETTING ######
622 }
623
624 detect_scilab_path
625 if test $SCIVERBOSE -ne 0; then
626     echo "IS_SCILAB_BINARY : $IS_SCILAB_BINARY"
627 fi
628
629
630 # If we are calling scilab-cli, no need to detect java.
631 if test $DISABLE_JAVA_DETECTION -ne 1; then
632     detect_java_vm
633 fi
634
635 if test $IS_SCILAB_BINARY -eq 1; then
636
637     if test ! -d "$SCIBINARYBASE/thirdparty/tcl8.5"; then
638         # New packaging path (similar to Windows one)
639         TCL_LIBRARY="$SCIBINARYBASE/share/scilab/modules/tclsci/tcl/tcl8.5"
640         TK_LIBRARY="$SCIBINARYBASE/share/scilab/modules/tclsci/tcl/tk8.5"
641     else
642         # Old packaging path
643         TCL_LIBRARY="$SCIBINARYBASE/thirdparty/tcl8.5"
644         TK_LIBRARY="$SCIBINARYBASE/thirdparty/tk8.5"
645     fi
646     LD_LIBRARY_PATH=$SCIBINARYBASE/lib/scilab:$SCIBINARYBASE/lib/thirdparty${LD_LIBRARY_PATH+:$LD_LIBRARY_PATH}:$SCIBINARYBASE/lib/thirdparty/redist
647     DOCBOOK_ROOT="$SCI/../../thirdparty/docbook"
648     PATH="$PATH:$SCI/modules/scicos/"
649
650     export DOCBOOK_ROOT
651     export PATH
652     export LD_LIBRARY_PATH
653     export TCL_LIBRARY
654     export TK_LIBRARY
655
656     case $OS in
657         *darwin* | *Darwin*)
658             DYLD_LIBRARY_PATH=$SCIBINARYBASE/lib/scilab:$SCIBINARYBASE/lib/thirdparty${DYLD_LIBRARY_PATH+:$DYLD_LIBRARY_PATH}
659             export DYLD_LIBRARY_PATH
660             PATH="/sw/bin:/sw64/bin:$PATH"
661             export PATH
662             ;;
663     esac
664
665 else
666     # Scilab compiled using prerequirements
667     if test -d $curdir/../usr; then
668         TCL_LIBRARY="$SCI/usr/lib/tcl8.5"
669         TK_LIBRARY="$SCI/usr/lib/tk8.5"
670         export TCL_LIBRARY
671         export TK_LIBRARY
672     fi
673     PATH="$SCI:$SCI/bin:$PATH"
674 fi
675
676
677 # See http://bugzilla.scilab.org/show_bug.cgi?id=3486
678 # Some Java stuff raises spurious SIGSEGV. The problem is that when bug-buddy
679 # is enabled, it catches the signal and terminate Scilab. We have to
680 # desactivate bug-buddy.
681 # See also https://bugzilla.novell.com/show_bug.cgi?id=331618
682 # and: http://bugzilla.gnome.org/show_bug.cgi?id=479929
683 GTK_MODULES=$(echo $GTK_MODULES | sed s/gnomebreakpad//g)
684 export GTK_MODULES
685
686 # libEGL may be partially supported by the closed-source NVIDIA driver.
687 # Until they release an EGL driver, we force the egl_glx driver.
688 # http://bugzilla.scilab.org/show_bug.cgi?id=12940
689 if test $SCILAB_MODE != "nwni" -a -x /usr/bin/glxinfo; then
690     NVIDIA_GLX_VENDOR=$(/usr/bin/glxinfo |grep "NVIDIA Corporation")
691     if test ! -z "$NVIDIA_GLX_VENDOR"; then
692         EGL_DRIVER=egl_glx
693         export EGL_DRIVER
694     fi
695 fi
696
697 if test $SCIVERBOSE -ne 0; then
698     echo "SCI : $SCI"
699     echo "SCIBIN : $SCIBIN"
700     echo "PATH : $PATH"
701     echo "CLASSPATH : $CLASSPATH"
702     echo "EGL_DRIVER : $EGL_DRIVER"
703 fi
704
705 # Returns to the original path
706 cd "$LOCALOLDPWD"
707
708 #if test "$DISPLAY" = ""; then
709 #  DISPLAY="unix:0.0"
710 #fi
711 #export DISPLAY
712
713
714 detect_macosx_version()
715 {
716     macosxVersion=`sw_vers | grep '^ProductVersion:' | grep -o '[0-9]*\.[0-9]*\.[0-9]*'`
717     if test "${macosxVersion}" = ""; then
718       macosxVersion=`sw_vers | grep '^ProductVersion:' | grep -o '[0-9]*\.[0-9]*'`
719     fi
720     macosxMajorVersion=`echo $macosxVersion | cut -d . -f 1`
721     macosxMinorVersion=`echo $macosxVersion | cut -d . -f 2`
722     macosxBuildVersion=`echo $macosxVersion | cut -d . -f 3`
723
724     if test $SCIVERBOSE -ne 0; then
725         echo "Found MacOSX Version: $macosxVersion"
726     fi
727
728 }
729
730 set_macox_specific_path()
731 {
732
733     PATH_TO_SPECIFIC_10_10=$SCIBINARYBASE/lib/thirdparty/10.10/
734     PATH_TO_SPECIFIC_10_6=$SCIBINARYBASE/lib/thirdparty/10.6/
735
736     case $macosxMajorVersion in
737         10)
738             case $macosxMinorVersion in
739                 10|11)
740                     # Specific libBLAS.dylib & libLAPACK.dylib version for 10.10
741                     # (not used in scilab 5.5.2 yet, though)
742                     LD_LIBRARY_PATH=$PATH_TO_SPECIFIC_10_10${LD_LIBRARY_PATH+:$LD_LIBRARY_PATH}
743                     DYLD_LIBRARY_PATH=$PATH_TO_SPECIFIC_10_10${DYLD_LIBRARY_PATH+:$DYLD_LIBRARY_PATH}
744                     ;;
745                 6)
746                     # the iconv lib fails under 10.7, just declare it for 10.6
747                     LD_LIBRARY_PATH=$PATH_TO_SPECIFIC_10_6${LD_LIBRARY_PATH+:$LD_LIBRARY_PATH}
748                     DYLD_LIBRARY_PATH=$PATH_TO_SPECIFIC_10_6${DYLD_LIBRARY_PATH+:$DYLD_LIBRARY_PATH}
749                     ;;
750             esac
751             ;;
752     esac
753
754 }
755
756 #
757 # Version checks for Mac
758 #
759 dialog_try_or_exit() 
760 {
761     osascript $BINPATH/checkmacosx.applescript "$1" || exit 128
762 }
763
764 fail_macosx_too_old()
765 {
766     # Version <= 10.6.4
767     dialog_try_or_exit "This version of Scilab will probably fail on this system ($macosxVersion): Scilab requires 10.6.5 (Snow Leopard) or newer system."
768 }
769 check_macosx_version()
770 {
771     case $macosxMajorVersion in
772         10)
773             case $macosxMinorVersion in
774                 7|8|9)
775                    # We force to install JRE on Lion and later...
776                    /usr/libexec/java_home --request > /dev/null
777                    ;;
778                 10|11)
779                    # ... but not on Yosemite or El Capitan:
780                    # there will be a (better) error at launch
781                    ;;
782                 6)
783                     if test $macosxBuildVersion -le 4; then
784                         fail_macosx_too_old
785                     fi
786                     ;;
787                 *)
788                     fail_macosx_too_old
789                     ;;
790             esac
791             ;;
792         *)
793             fail_macosx_too_old
794             ;;
795     esac
796 }
797
798 # . is used by the dynamic link. The build lib are copied into the PWD
799 SCILIB=$SCI/bin:$SCI/lib/scilab/:$SCI/lib64/scilab/:.
800 if test -d $SCI/lib/thirdparty; then
801     SCILIB=$SCI/lib/thirdparty:$SCILIB;
802 fi
803 LD_LIBRARY_PATH=$SCILIB${LD_LIBRARY_PATH+:$LD_LIBRARY_PATH}
804
805 case $OS in
806     *darwin* | *Darwin*) # MacOS X
807         # When using some packaging tools like fink which are storing the info in /sw/lib
808         LD_LIBRARY_PATH="/sw/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
809     # Export the path to the Scilab lib when Scilab has been install ...
810     # to a Mac os x specific variable used by the linker before LD_LIBRARY_PATH
811         DYLD_LIBRARY_PATH=$SCI/../../lib/scilab/${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}:
812         # Crappy workaround for the dynamic load of sundials under Mac OS X
813         # in the source tree version. This does not occur in the binary
814         # thanks to the previous declaration on ../../lib/scilab
815         # See bug #4949
816         if test -d "$SCI/modules/scicos_blocks/.libs/"; then
817             DYLD_LIBRARY_PATH=$SCI/modules/scicos_blocks/.libs/${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}
818         fi
819         if test -d "$SCI/modules/scicos/.libs/"; then
820             DYLD_LIBRARY_PATH=$SCI/modules/scicos/.libs/${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}
821         fi
822         export DYLD_LIBRARY_PATH
823
824         # Now, check that I can run Scilab on this version of Mac OS X and
825         # display a standard window
826         BINPATH=$(dirname $0)
827         # Do not perform the check with Scilab is started in CLI mode
828
829         detect_macosx_version
830         set_macox_specific_path
831
832         if test "$SCILAB_MODE" = "gui"; then
833             check_macosx_version
834         fi
835
836         # When started as an Application, the default path was "/"
837         # It is not really useful. Changing to HOME.
838         # See bugs 8339 and 10575 for rational
839         if test "$(pwd)" = "/"; then
840             cd $HOME
841         fi
842
843         ;;
844     *)
845 esac
846
847
848 if test $SCIVERBOSE -ne 0; then
849     echo "LD_LIBRARY_PATH : $LD_LIBRARY_PATH"
850     if test ! -z "$DYLD_LIBRARY_PATH"; then
851         echo "DYLD_LIBRARY_PATH: $DYLD_LIBRARY_PATH"
852     fi
853 fi
854 export LD_LIBRARY_PATH
855 export PATH
856
857 # Scilab does not support the LANGUAGE variable.
858 # Unset to avoid some weird issue. CF bug #10032
859 unset LANGUAGE
860
861 if test $IS_SCILAB_BINARY -ne 1; then
862 # We are not using the Scilab binary, find out where docbook is.
863     find_docbook_path
864 fi
865
866 # Check if SELINUX is enable. If it is the case, disable it for Scilab
867 check_and_disable_selinux
868
869 do_scinotes()
870 {
871     INDENT=""
872     if test $# -gt 0; then
873     # scinotes is called. We process the arguments
874     ARGS="["
875
876     for SCIARG in "$@"; do
877         if test "$SCIARG" = "-indent"; then
878             INDENT="['indent','trailing','quote']"
879         else
880             ARGS="$ARGS '$SCIARG', "
881         fi
882     done
883     ARGS="$ARGS]"
884     fi
885
886     if test -n "$INDENT"; then
887     # Call scinotes with the arguments
888         if test $SCIVERBOSE -ne 0; then
889             echo "Will start scinotes with: $SCILABBIN -nb -nw -e scinotes($ARGS, $INDENT);exit()"
890         fi
891         "$SCILABBIN" -nb -nw -e "scinotes($ARGS, $INDENT);exit()"
892     else
893         if test $SCIVERBOSE -ne 0; then
894             echo "Will start scinotes with: $SCILABBIN -e scinotes($ARGS)"
895         fi
896
897     # Call scinotes with no argument
898         "$SCILABBIN" -e "scinotes($ARGS)"
899         exit $?
900     fi
901 }
902
903 do_xcos()
904 {
905     SIMULATE=0
906     if test $# -gt 0; then
907     # xcos is called. We process the arguments
908         ARGS="["
909         for SCIARG in "$@"; do
910             if test "$SCIARG" = "-simulate"; then
911                 if test $# -ne 2; then
912                     echo "Wrong syntax: When -simulate is used, only one file must be provided."
913                     exit 43
914                 fi
915                 SIMULATE=1
916             else
917                 ARGS="$ARGS '$SCIARG', "
918             fi
919         done
920         ARGS="$ARGS ]"
921     fi
922
923     if test $SIMULATE -eq 1; then
924         if test $SCIVERBOSE -ne 0; then
925             echo "Will start Xcos with: $SCILABBIN -e 'importXcosDiagram($ARGS);xcos_simulate(scs_m, 4)'"
926         fi
927
928     # Call xcos with the arguments to simulate
929         "$SCILABBIN" -e "importXcosDiagram($ARGS);xcos_simulate(scs_m, 4)"
930     else
931         if test $SCIVERBOSE -ne 0; then
932             echo "Will start Xcos with: $SCILABBIN -e xcos($ARGS)"
933         fi
934
935     # Call xcos with the arguments
936         "$SCILABBIN" -e "xcos($ARGS)"
937         exit $?
938     fi
939
940 }
941
942 do_scilex()
943 {
944     if test "$SCILAB_MODE" = "xcos"; then
945         do_xcos "$@"
946     else
947         if test "$SCILAB_MODE" = "scinotes"; then
948             do_scinotes "$@"
949         else
950             "$SCILABBIN" "$@"
951             exit $?
952         fi
953     fi
954 }
955
956 do_help()
957 {
958     if test "$SCILAB_MODE" = "xcos"; then
959         echo "Start Xcos, the hybrid simulator"
960         echo "Usage:"
961         echo "xcos [ file1.xcos, [ file2.xcos ]]"
962         echo     " "
963         echo     "  Possible arguments are:"
964         echo     "  -simulate : Start the simulation. Only one file will be accepted."
965         exit
966     fi
967     if test "$SCILAB_MODE" = "scinotes"; then
968         echo "Start Scinotes, the Scilab text editor"
969         echo "Usage:"
970         echo     "scinotes [ file1.sci, [ file2.sce ]]"
971         echo     " "
972         echo     "  Possible arguments are:"
973         echo     "  -indent : format (indent, trailing spaces, quote mismatch) the files"
974         exit
975     fi
976
977     echo "Usage:"
978     echo     "scilab <arguments>"
979     echo     "scilab-cli <arguments>"
980     echo     "scilab-adv-cli <arguments>"
981     echo     " "
982     echo     "  Possible arguments are:"
983     echo     "  -display Display: for use under Xwindow systems to set a specific X server display."
984     echo     "  -d Display      : equivalent to -display Display."
985     echo     "  -e Instruction  : execute the scilab instruction given in Instruction argument."
986     echo     "                    -e and -f arguments are mutually exclusive."
987     echo     "  -f File         : execute the scilab script given in File argument."
988     echo     "                    -e and -f arguments are mutually exclusive."
989     echo     "  -quit           : force scilab exit after execution of script from -e or -f argument."
990     echo     "                    this flag is ignored if it is not used with -e or -f argument."
991     echo     "  -l Lang         : set the current language. Lang can be equal to fr or en."
992     echo     "  -nb             : do not display Scilab loading on start."
993     echo     "  -ns             : do not execute scilab.start startup file. This argument will disable many features in Scilab (Only use if you know what you are doing)."
994     echo     "  -nouserstartup  : do not execute the user startup files SCIHOME/.scilab or SCIHOME/scilab.ini."
995     echo     "  -noatomsautoload: do not load ATOMS installed module."
996     echo     "  -nw             : start Scilab without dedicated Scilab Window."
997     echo     "  -nwni           : start Scilab without the GUI, graphic and help features (batch mode). This argument disables the need of Java."
998     echo     "  -nogui          : See -nwni"
999     echo     "  -nocolor        : Remove the color in the cli and adv-cli modes"
1000     echo     "  -args           : accept all extra arguments and make them available through sciargs"
1001     echo     "  -version        : print product version and exit."
1002     echo     "  -h/--help       : display help about this command."
1003     echo     "  --texmacs       : reserved for TeXMacs."
1004     echo     " "
1005
1006     echo     "Developer arguments:"
1007     echo     "  -debug          : Start Scilab under gdb (Unix/linux only)."
1008     echo     "                    define the variable SCILAB_GDB_OPT to add custom arguments to gdb."
1009     echo     "  -debug-kdbg     : Start Scilab under kdbg (Unix/linux only)."
1010     echo     "  -profiling      : Start Scilab under valgrind (Unix/linux only)."
1011     echo     "                    define the variable SCILAB_VALGRIND_OPT to add custom arguments to"
1012     echo     "                    valgrind (and override the existing valgrind arguments)."
1013     echo     "  -profiling-visu : Start Scilab under callgrind (Unix/linux only)."
1014     echo     "                    define the variable SCILAB_VALGRIND_OPT to add custom arguments to"
1015     echo     "                    callgrind (and override the existing callgrind arguments)."
1016     echo     "  -disable-exception-catching : Disable Scilab exception catching system."
1017     echo     " "
1018     echo     "  --parse-file File : Only parse File argument without execution and exit."
1019     echo     "  --parse-trace     : Display bison state machine evolution."
1020     echo     "  --AST-trace       : Display ASCII-art AST to be human readable."
1021     echo     "  --pretty-print    : Display pretty-printed code, standard Scilab syntax."
1022     echo     " "
1023     echo     "Developer Timer arguments:"
1024     echo     "  --AST-timed      : Time each AST node."
1025     echo     "  --timed          : Time global execution."
1026     echo     " "
1027     echo     "Developer Debug arguments:"
1028     echo     "  --no-exec        : Only do Lexing/parsing do not execute instructions."
1029     echo     "  --context-dump   : Display context status."
1030     echo     "  --exec-verbose   : Display command before execute it."
1031     echo     " "
1032     echo     "      All these arguments can be retrieved by the Scilab function sciargs."
1033     echo     " "
1034
1035     echo     "  Several environment variables can be declared:"
1036     echo     "  SCIVERBOSE               Provides debugging information of the startup"
1037     echo     "  JAVA_HOME                Declares which Java Virtual Machine to use"
1038     echo     "  SCI_DISABLE_TK           Disables Tk (but not Tcl) features"
1039     echo     "  SCI_JAVA_ENABLE_HEADLESS Runs Java Headless VM (without GUI; Windows and Linux only)"
1040     echo     "  SCI_DISABLE_EXCEPTION_CATCHING Disable the catch by Scilab of exception (segfault, ...)"
1041
1042     exit
1043 }
1044
1045 MORE_OPT=""
1046 if test "$SCILAB_MODE" = "nw"; then
1047     MORE_OPT="-nw"
1048 fi
1049
1050 # calling Scilab with no argument or special cases of calling Scilab
1051 rest="no"
1052 case $# in
1053     0) # No arg, run Scilab
1054         do_scilex $MORE_OPT
1055         ;;
1056     *)
1057         case $1 in
1058             *)
1059                 rest="yes"
1060                 ;;
1061         esac
1062         ;;
1063 esac
1064
1065 # really calling Scilab with arguments
1066
1067 if test "$rest" = "yes"; then
1068     debug=
1069     debug_kdbg=
1070     profiling=
1071     profiling_visu=
1072     prevarg=
1073     for sciarg in "$@"
1074     do
1075
1076     # If the previous argument needs an argument, skip current one.
1077         if test -n "$prevarg"; then
1078             prevarg=
1079             continue
1080         fi
1081
1082         case $sciarg in
1083             -nogui|-version|-ns|-nb|-nouserstartup|-noatomsautoload|-nocolor|--texmacs)
1084                 ;;
1085             -nw)
1086                 if test "$SCILAB_MODE" = "nwni"; then
1087                     echo "Cannot use scilab-cli with option -nw"
1088                     exit 5
1089                 fi
1090                 ;;
1091             -nwni)
1092                 if test "$SCILAB_MODE" = "nw"; then
1093                     echo "Cannot use scilab-adv-cli with option -nwni"
1094                     exit 5
1095                 fi
1096                 ;;
1097             --parse-trace|--pretty-print|--help|--AST-trace|--no-exec|--context-dump|--exec-verbose|--timed|--AST-timed|--serialize|-quit)
1098             #This are Scilab6 dedicated options.
1099                     ;;
1100             -psn_*)
1101             # Under Mac OS X, .app is adding the arg -psn_0_xxxx
1102             # (psn = ProcessSerialNumber). It is not used (but could be in the future)
1103                 ;;
1104             -display|-f|-l|-e|-d|--parse-file)
1105                 prevarg=1
1106                 ;;
1107             -args) # Accept extra arguments
1108                 extraarg=1
1109                 ;;
1110             -debug)
1111                 DEBUG="-debug"
1112                 ;;
1113             -debug-kdbg)
1114                 DEBUG_KDBG="-debug-kdbg"
1115                 ;;
1116             -profiling)
1117                 PROFILING="-profiling"
1118                 ;;
1119             -profiling-visu)
1120                 PROFILING_VISU="-profiling-visu"
1121                 ;;
1122             -disable-exception-catching)
1123                 SCI_DISABLE_EXCEPTION_CATCHING=1
1124                 export SCI_DISABLE_EXCEPTION_CATCHING
1125                 ;;
1126             -h|--help)
1127                 do_help
1128                 ;;
1129             *)
1130                 foundUnknownArg=1
1131                 wrongArg=$sciarg
1132                 # Do nothing. Gives unknown args to Scilab binaries if -args is provided
1133                 ;;
1134         esac
1135     done
1136
1137
1138 # If the argument -a is not provided (extraarg) and we found unknown args
1139 # fail and provide help
1140     if test -z "$extraarg" -a -n "$foundUnknownArg"; then
1141         echo "Unknown argument: $wrongArg"
1142         echo ""
1143         do_help
1144     fi
1145
1146     if test -n "$DEBUG"; then
1147         start_debug "$@" $MORE_OPT
1148     else
1149         if test -n "$DEBUG_KDBG"; then
1150             start_debug_kdbg "$@" $MORE_OPT
1151         else
1152             if test -n "$PROFILING"; then
1153                 start_profiling "$@" $MORE_OPT
1154             else
1155                 if test -n "$PROFILING_VISU"; then
1156                     start_profiling_visu "$@" $MORE_OPT
1157                 else
1158                     do_scilex "$@" $MORE_OPT
1159                 fi # not profiling visu
1160             fi # not profiling
1161         fi # not debug kdbg
1162     fi # not debug
1163 fi # if rest