Linux build : fix undefined pragma
[scilab.git] / scilab / m4 / java.m4
1 ## Macros "stolen" from jacl (http://tcljava.sourceforge.net/)
2 ## They made a great job on this part !
3
4 #------------------------------------------------------------------------
5 # AC_MSG_LOG( MSG, ?LOGONLY? )
6 #
7 #    Write the message out to the config.log file and the console.
8 #    If 1 is passed as the second argument, then write to the
9 #    config.log file only.
10 #
11 # Arguments:
12 #    1. The message to log
13 #    2. Optional boolean, if true then write to config.log only
14 #------------------------------------------------------------------------
15
16 AC_DEFUN([AC_MSG_LOG], [
17     echo $1 >&AS_MESSAGE_LOG_FD
18     m4_ifval([$2],,[echo $1])
19 ])
20
21 #------------------------------------------------------------------------
22 # AC_GREP_FILE( PATTERN, FILE, ACTION-IF-FOUND, [ACTION-IF-NOT-FOUND])
23 #
24 #    Use grep to search for a pattern in a file. If the pattern
25 #    is not found then return a non zero exit status. No information
26 #    will be echoed to the screen by this macro.
27 #
28 # Arguments:
29 #    1. The pattern to search for
30 #    2. The name of the file to be grep'ed
31 #    3. The script to execute if PATTERN is found in FILE
32 #    4. The script to execute if PATTERN is not found in FILE (optional)
33 #------------------------------------------------------------------------
34
35 AC_DEFUN([AC_GREP_FILE], [
36     AC_MSG_LOG([grep in $2 for pattern '"$1"'], 1)
37     if (grep "$1" $2 > /dev/null 2>&1) ; then
38         AC_MSG_LOG([grep result : yes], 1)
39         $3
40     else
41         AC_MSG_LOG([grep result : no], 1)
42         m4_ifval([$4], [
43             $4
44         ])dnl
45     fi
46 ])
47
48
49 #------------------------------------------------------------------------
50 # AC_PROG_JAVAC
51 #
52 #    If JAVAC is not already defined, then search for "javac" on
53 #    the path. If a java compiler is found, then test it to make
54 #    sure it actually works.
55 #
56 # Arguments:
57 #    NONE
58 #
59 # VARIABLES SET:
60 #    JAVAC can be set to the path name of the java compiler
61 #    JAVAC_FLAGS can be set to compiler specific flags
62 #    ac_java_jvm_dir can be set to the jvm's root directory
63 #------------------------------------------------------------------------
64
65 AC_DEFUN([AC_PROG_JAVAC], [
66 # Mac OS X
67     if test "x$JAVAC" = "x" ; then
68     case "$host_os" in
69          *darwin* )
70          # Don't follow the symlink since Java under MacOS is messy
71          # Uses the wrapper providing by Apple to retrieve the path
72          # See: http://developer.apple.com/mac/library/qa/qa2001/qa1170.html
73            JAVAC=$(/usr/libexec/java_home --arch x86_64 --failfast --version 1.8+)/bin/javac
74                DONT_FOLLOW_SYMLINK=yes
75          ;;
76     esac
77     fi
78     if test "x$JAVAC" = "x" ; then
79         AC_PATH_PROG(JAVAC, javac)
80         if test "x$JAVAC" = "x" ; then
81             AC_MSG_ERROR([javac not found on PATH ... did you try with --with-jdk=DIR])
82         fi
83     fi
84     if test ! -f "$JAVAC" ; then
85         AC_MSG_ERROR([javac '$JAVAC' does not exist.
86         Perhaps Java is not installed or you passed a bad dir to a --with option.])
87     fi
88
89     # Check for installs which uses a symlink. If it is the case, try to resolve JAVA_HOME from it
90     if test -h "$JAVAC" -a "x$DONT_FOLLOW_SYMLINK" != "xyes"; then
91         FOLLOW_SYMLINKS($JAVAC,"javac")
92         JAVAC=$SYMLINK_FOLLOWED_TO
93         TMP=`dirname $SYMLINK_FOLLOWED_TO`
94         TMP=`dirname $TMP`
95         ac_java_jvm_dir=$TMP
96         echo "Java base directory (probably) available here : $ac_java_jvm_dir"
97     fi
98
99
100
101     # If we were searching for javac, then set ac_java_jvm_dir
102     if test "x$ac_java_jvm_dir" = "x"; then
103         TMP=`dirname $JAVAC`
104         TMP=`dirname $TMP`
105         ac_java_jvm_dir=$TMP
106     fi
107
108     # Look for a setting for the CLASSPATH, we might need one to run JAVAC
109     AC_JAVA_CLASSPATH
110
111     # FIXME : add detection of command line arguments for JAVAC
112
113     JAVAC_FLAGS=-g
114     JAVAC_D_FLAG=-d
115
116     dnl Test out the Java compiler with an empty class
117     AC_MSG_CHECKING([to see if the java compiler works])
118     AC_JAVA_TRY_COMPILE(,,"no",works=yes)
119     if test "$works" = "yes" ; then
120         AC_MSG_RESULT($works)
121     else
122         AC_MSG_ERROR([Could not compile simple Java program with '$JAVAC'. Try with the Sun JDK (1.5 or 6).])
123     fi
124
125     AC_MSG_LOG([Using JAVAC=$JAVAC])
126 ])
127
128
129 #------------------------------------------------------------------------
130 # AC_JAVA_TRY_COMPILE(imports, main-body, try-to-run, action-if-worked, [action-if-failed])
131 #
132 #    Try to compile a Java program. This works a lot like AC_TRY_COMPILE
133 #    except is supports Java instead of C or C++. This macro will create
134 #    a file named Test.java and try to compile it.
135 #
136 # Arguments:
137 #    imports should contain Java import statements like [import java.util.*;]
138 #       main-body should contain the code to appear in the main() method
139 #    action-if-worked should contain the code to run if the compile worked
140 #    action-if-failed should contain the code to run if the compile failed (optional)
141 #------------------------------------------------------------------------
142
143 AC_DEFUN([AC_JAVA_TRY_COMPILE], [
144     cat << \EOF > conftest.java
145 // [#]line __oline__ "configure"
146 import java.util.regex.Pattern;
147
148 [$1]
149
150 public class conftest {
151     public static void main(String[[]] argv) {
152         [$2]
153     }
154
155     private static int compare(String v1, String v2) {
156         String s1 = normalisedVersion(v1);
157         String s2 = normalisedVersion(v2);
158         return s1.compareTo(s2);
159     }
160
161     private static String normalisedVersion(String version) {
162         return normalisedVersion(version, ".", 4);
163     }
164
165     private static String normalisedVersion(String version, String sep, int maxWidth) {
166         String[[]] split = Pattern.compile(sep, Pattern.LITERAL).split(version);
167         StringBuilder sb = new StringBuilder();
168         for (String s : split) {
169             sb.append(String.format("%" + maxWidth + 's', s));
170         }
171         return sb.toString();
172     }
173 }
174 EOF
175
176     CLASSPATH=$ac_java_classpath
177     export CLASSPATH
178     cmd="$JAVAC ${JAVAC_FLAGS} conftest.java"
179     if (echo $cmd >&AS_MESSAGE_LOG_FD ; eval $cmd >conftest.java.output 2>&AS_MESSAGE_LOG_FD) ; then
180        if test "$3" = "no"; then
181            echo "yes" >&AS_MESSAGE_LOG_FD
182               $4
183        else
184               cmd="$JAVA conftest"
185               if (echo $cmd >&AS_MESSAGE_LOG_FD ; eval $cmd >conftest.java.output 2>&AS_MESSAGE_LOG_FD); then
186                echo "yes" >&AS_MESSAGE_LOG_FD
187                   $4
188             else
189                 echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
190                 cat conftest.java >&AS_MESSAGE_LOG_FD
191                 if test -s conftest.java.output; then
192                    STDOUT=`cat conftest.java.output`
193                 fi
194                 echo "configure: CLASSPATH was $CLASSPATH" >&AS_MESSAGE_LOG_FD
195                 m4_ifval([$5],
196                 [  $5
197                 ])dnl
198             fi
199         fi
200         if test -f conftest.java.output; then
201            rm conftest.java.output
202         fi
203     else
204         echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
205         cat conftest.java >&AS_MESSAGE_LOG_FD
206         echo "configure: CLASSPATH was $CLASSPATH" >&AS_MESSAGE_LOG_FD
207         m4_ifval([$5],
208         [  $5
209         ])dnl
210     fi
211 ])
212
213
214 #------------------------------------------------------------------------
215 # AC_JAVA_DETECT_JVM
216 #
217 #    Figure out what JVM to build with. If no JVM was already defined
218 #    using a --with command line option then we search for one
219 #    by looking for the javac executable.
220 #
221 # Arguments:
222 #    NONE
223 #
224 # VARIABLES SET:
225 #    JAVAC
226 #    ac_java_jvm_version can be set to 1.4, 1.5, 1.6, 1.7, 1.8
227 #    ac_java_jvm_dir can be set to the jvm's root directory
228 #
229 # DEPENDS ON:
230 #    This macro can depend on the values set by the following macros:
231 #    AC_JAVA_WITH_JDK
232 #    AC_PROG_JAVAC
233 #------------------------------------------------------------------------
234
235 AC_DEFUN([AC_JAVA_DETECT_JVM], [
236     AC_MSG_CHECKING([JAVA_HOME variable])
237     # check if JAVA_HOME is set. If it is the case, try to use if first
238     if test ! -z "$JAVA_HOME" && test "x$ac_java_jvm_dir" = "x"; then
239         if test -x $JAVA_HOME/bin/javac${EXEEXT}; then
240             AC_MSG_RESULT([JAVA_HOME variable found, use it as JVM root directory])
241                 ac_java_jvm_dir=`cd $JAVA_HOME ; pwd`
242             JAVAC=$ac_java_jvm_dir/bin/javac${EXEEXT}
243         else
244             AC_MSG_RESULT([JAVA_HOME variable found, but unable to find javac
245 Maybe JAVA_HOME is pointing to a JRE (Java Runtime Environment) instead of a JDK (Java Developement Kit) ? )])
246         fi
247     else
248         AC_MSG_RESULT([not defined])
249     fi
250
251 # Mac OS default path
252     if test "x$JAVAC" = "x" && test "x$ac_java_jvm_dir" != "x"; then
253         case "$host_os" in
254              *darwin* )
255             AC_MSG_RESULT([Darwin (Mac OS X) found. Use the standard paths.])
256             # See: http://developer.apple.com/mac/library/qa/qa2001/qa1170.html
257             ac_java_jvm_dir=$(/usr/libexec/java_home --arch x86_64 --failfast --version 1.8+)
258             JAVAC=$ac_java_jvm_dir/bin/javac
259             ;;
260         esac
261     fi
262
263     # if we do not know the jvm dir, javac will be found on the PATH
264     if test "x$JAVAC" = "x" && test "x$ac_java_jvm_dir" != "x"; then
265         ac_java_jvm_dir=`cd $ac_java_jvm_dir ; pwd`
266         JAVAC=$ac_java_jvm_dir/bin/javac${EXEEXT}
267     fi
268
269     # Search for and test the javac compiler
270     AC_PROG_JAVAC
271
272     AC_MSG_LOG([Java found in $ac_java_jvm_dir])
273
274     # Try to detect non JDK JVMs. If we can't, then just assume a jdk
275
276     AC_MSG_CHECKING([type of jvm])
277
278     if test "x$ac_java_jvm_name" = "x" ; then
279         AC_JAVA_TRY_COMPILE([import gnu.java.io.EncodingManager;],,"no",ac_java_jvm_name=gcj)
280     fi
281
282     if test "x$ac_java_jvm_name" = "x" ; then
283        ac_java_jvm_name=jdk
284     fi
285
286     AC_MSG_RESULT([$ac_java_jvm_name])
287
288     case "$ac_java_jvm_name" in
289         gcj) DO=nothing ;;
290         jdk) DO=nothing ;;
291         *) AC_MSG_ERROR(['$ac_java_jvm_name' is not a supported JVM]) ;;
292     esac
293
294     # Try to detect the version of java that is installed
295
296     AC_MSG_CHECKING([java API version])
297
298     # The class java.nio.charset.Charset is new to 1.4
299     AC_JAVA_TRY_COMPILE([import java.nio.charset.Charset;], , "no", ac_java_jvm_version=1.4)
300
301     # The class java.lang.StringBuilder is new to 1.5
302     AC_JAVA_TRY_COMPILE([import java.lang.StringBuilder;], , "no", ac_java_jvm_version=1.5)
303
304     # The class java.util.ArrayDeque is new to 1.6
305     AC_JAVA_TRY_COMPILE([import java.util.ArrayDeque;], , "no", ac_java_jvm_version=1.6)
306
307     # The class java.nio.file.Path is new to 1.7
308     AC_JAVA_TRY_COMPILE([import java.nio.file.Path;], , "no", ac_java_jvm_version=1.7)
309
310     # The class java.util.stream.DoubleStream is new to 1.8
311     AC_JAVA_TRY_COMPILE([import java.util.stream.DoubleStream;], , "no", ac_java_jvm_version=1.8)
312
313     if test "x$ac_java_jvm_version" = "x" ; then
314         AC_MSG_ERROR([Could not detect Java version, 1.4 or newer is required])
315     fi
316
317     AC_MSG_RESULT([$ac_java_jvm_version])
318
319 ])
320
321
322 #------------------------------------------------------------------------
323 # AC_JAVA_CLASSPATH
324 #
325 #    Find out which .zip or .jar files need to be included on
326 #    the CLASSPATH if we are setting it via an env variable.
327 #
328 # Arguments:
329 #    NONE
330 #
331 # VARIABLES SET:
332 #    ac_java_classpath
333 #
334 # DEPENDS ON:
335 #    This macro is used by the AC_JAVA_DETECT_JVM macro.
336 #    It depends on the ac_java_jvm_dir variable.
337 #------------------------------------------------------------------------
338
339 AC_DEFUN([AC_JAVA_CLASSPATH], [
340     AC_MSG_CHECKING([for zip or jar files to include on CLASSPATH])
341
342     if test "x$ac_java_jvm_dir" = "x" ; then
343         AC_MSG_ERROR([jvm directory not set])
344     fi
345
346     # GNU gcj does not need to set the CLASSPATH.
347
348     # Assume that JDK 1.4 and newer systems will
349     # not need to explicitly set the CLASSPATH.
350
351     # Append CLASSPATH if env var is set. Avoid append
352     # under msys because CLASSPATH is in Win32 format
353     # and we can't combine it with a msys path.
354     if test "x$CLASSPATH" != "x" && test "$ac_cv_tcl_win32" != "yes" ; then
355         AC_MSG_LOG([Adding user supplied CLASSPATH env var])
356         ac_java_classpath="${ac_java_classpath}:${CLASSPATH}"
357     fi
358
359     AC_MSG_LOG([Using CLASSPATH=$ac_java_classpath],1)
360     AC_MSG_RESULT($ac_java_classpath)
361 ])
362
363
364 #------------------------------------------------------------------------
365 # AC_JAVA_JNI_INCLUDE
366 #
367 #    Figure out where jni.h and jni_md.h include files are installed.
368 #
369 # Arguments:
370 #    NONE
371 #
372 # VARIABLES SET:
373 #    ac_java_jvm_jni_include_flags : Flags that we pass to the compiler
374 #           so that it can locate JNI headers. (for example: -I/usr/jdk/include)
375 #
376 # DEPENDS ON:
377 #    This macro must be run after the AC_JAVA_DETECT_JVM macro as
378 #    it depends on the ac_java_jvm_dir variable.
379 #------------------------------------------------------------------------
380
381 AC_DEFUN([AC_JAVA_JNI_INCLUDE], [
382
383     # JAVA_HOME specificed, check if we can find jni.h in this path
384     if test !  -z "$JAVA_HOME"; then
385         ac_java_jvm_dir=$JAVA_HOME
386     fi
387     # Look for jni.h in the subdirectory $ac_java_jvm_dir/include
388
389     F=$ac_java_jvm_dir/include/jni.h
390     if test -f "$F" ; then
391          ac_java_jvm_jni_include_flags="-I`dirname $F`"
392     else
393          F=`ls $ac_java_jvm_dir/include/*/jni.h 2>/dev/null`
394          if test -f "$F" ; then
395              ac_java_jvm_jni_include_flags="-I`dirname $F`"
396          else
397         case "$host_os" in
398              *darwin* )
399                        ac_java_jvm_jni_include_flags="-I/Developer/SDKs/MacOSX${macosx_version}.sdk/System/Library/Frameworks/JavaVM.framework/Headers -I$(/usr/libexec/java_home --arch x86_64 --failfast --version 1.8+)/include/ -I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/"
400                   ;;
401               *)
402                        AC_MSG_ERROR([Could not locate Java's jni.h include file])
403                ;;
404                esac
405          fi
406     fi
407
408     # Look for jni_md.h in an arch specific subdirectory
409     # we assume that there is only one arch subdirectory,
410     # if that is not the case we would need to use $host
411
412     F=`ls $ac_java_jvm_dir/include/*/jni_md.h 2>/dev/null`
413     if test -f "$F" ; then
414         ac_java_jvm_jni_include_flags="$ac_java_jvm_jni_include_flags -I`dirname $F`"
415     fi
416
417     AC_MSG_LOG([Using the following JNI include flags $ac_java_jvm_jni_include_flags])
418
419     # Make sure a simple #include <jni.h> will compile.
420
421     AC_REQUIRE([AC_PROG_CC])
422
423     AC_CACHE_CHECK(if jni.h can be included,
424         ac_cv_java_jvm_jni_working,[
425         AC_LANG_PUSH(C)
426         ac_saved_cflags=$CFLAGS
427         CFLAGS="$CFLAGS $ac_java_jvm_jni_include_flags"
428         AC_TRY_COMPILE([
429             #include <jni.h>
430         ],[return 0;],
431         ac_cv_java_jvm_jni_working=yes,
432         AC_MSG_ERROR([could not compile file that includes jni.h. If you run Mac OS X please make sure you have 'Java developer package'. This is available on http://connect.apple.com/ ]))
433         AC_LANG_POP()
434         CFLAGS=$ac_saved_cflags
435     ])
436
437     # FIXME: should we look for or require a include/native_threads dir?
438 ])
439
440
441
442 #------------------------------------------------------------------------
443 # AC_JAVA_JNI_LIBS
444 #
445 #    Figure out where the native threads libraries for JNI live.
446 #
447 # Arguments:
448 #    NONE
449 #
450 # VARIABLES SET:
451 #    ac_java_jvm_ld_preload : list of libraries to include in LD_PRELOAD
452 #    ac_java_jvm_ld_bind_now : if set to 1, then use LD_BIND_NOW=1
453 #    ac_java_jvm_jni_lib_flags : library flags that we will pass to the compiler.
454 #        For instance, we might pass -L/usr/jdk/lib -ljava
455 #    ac_java_jvm_jni_lib_runtime_path : colon separated path of directories
456 #        that is typically passed to rld.
457 #
458 # DEPENDS ON:
459 #    This macro must be run after the AC_JAVA_DETECT_JVM macro as
460 #    it depends on the ac_java_jvm_dir variable.
461 #------------------------------------------------------------------------
462
463 AC_DEFUN([AC_JAVA_JNI_LIBS], [
464     machine=`uname -m`
465     case "$machine" in
466         i?86)
467           machine=i386
468           ;;
469         i86pc)
470         # Solaris 10 x86
471           machine=i386
472           ;;
473         sun*|sparc64)
474        # Sun
475           machine=sparc
476           ;;
477         powerpc)
478           machine=ppc
479           ;;
480         ppc64|ppc64le)
481           machine=ppc64
482           ;;
483         armv*)
484           machine=arm
485           ;;
486         sh*)
487             machine=sh
488           ;;
489         mips64)
490             machine=mips
491           ;;
492     esac
493
494     AC_MSG_LOG([Looking for JNI libs with $machine as machine hardware name])
495
496     # Check for known JDK installation layouts
497
498     # Gives the name of the symbol we want to look for.
499     # Mac OS X add a trailing _Impl
500     libSymbolToTest="JNI_GetCreatedJavaVMs"
501
502     if test "$ac_java_jvm_name" = "jdk"; then
503         # Sun/Blackdown 1.4 for Linux (client JVM)
504
505         F=jre/lib/$machine/libjava.so
506         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
507             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
508             if test -f $ac_java_jvm_dir/$F ; then
509                 AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
510                 D=`dirname $ac_java_jvm_dir/$F`
511                 ac_java_jvm_jni_lib_runtime_path=$D
512                 ac_java_jvm_jni_lib_flags="-L$D -ljava -lverify"
513                 D=$ac_java_jvm_dir/jre/lib/$machine/client
514         if test ! -f $D/libjvm.so; then # Check if it is in the client or server directory
515             # Try the server directory
516             D=$ac_java_jvm_dir/jre/lib/$machine/server
517             if test ! -f $D/libjvm.so; then
518                 AC_MSG_ERROR([Could not find libjvm.so in
519                 jre/lib/$machine/client/ or in jre/lib/$machine/server/.
520                 Please report to http://bugzilla.scilab.org/])
521             fi
522         fi
523                 ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
524                 ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljvm"
525                 D=$ac_java_jvm_dir/jre/lib/$machine/native_threads
526                 if test -d $D; then
527                   ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
528                   ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D"
529                 fi
530             fi
531         fi
532
533         # Sun JDK 1.5 for AMD64 Linux (server JVM)
534
535         F=jre/lib/amd64/libjava.so
536         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
537             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
538             if test -f $ac_java_jvm_dir/$F ; then
539                 AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
540
541                 D=`dirname $ac_java_jvm_dir/$F`
542                 ac_java_jvm_jni_lib_runtime_path=$D
543                 ac_java_jvm_jni_lib_flags="-L$D -ljava -lverify"
544
545                 D=$ac_java_jvm_dir/jre/lib/amd64/server
546                 ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
547                 ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljvm"
548             fi
549         fi
550
551         # Eclipse/IBM Java Compiler
552
553         F=jre/lib/i386/client/libjvm.so
554         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
555             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
556             if test -f $ac_java_jvm_dir/$F ; then
557                 AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
558
559                 D=`dirname $ac_java_jvm_dir/$F`
560                 ac_java_jvm_jni_lib_runtime_path=$D
561                 ac_java_jvm_jni_lib_flags="-L$D -ljvm"
562
563                 D=$ac_java_jvm_dir/jre/lib/i386/server
564                 ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
565                 ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljvm"
566             fi
567         fi
568
569         # IBM Java Compiler under Suse (and probably others)
570
571         F=jre/bin/classic/libjvm.so
572         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
573             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
574             if test -f $ac_java_jvm_dir/$F ; then
575                 AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
576
577                 D=`dirname $ac_java_jvm_dir/$F`
578                 ac_java_jvm_jni_lib_runtime_path=$D
579                 ac_java_jvm_jni_lib_flags="-L$D -ljvm"
580
581                 D=$ac_java_jvm_dir/bin/
582                 ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
583                 ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljava"
584             fi
585         fi
586
587         # Sun JDK 1.4 and 1.5 for Win32 (client JVM)
588
589         F=lib/jvm.lib
590         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
591             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
592             if test -f $ac_java_jvm_dir/$F ; then
593                 # jre/bin/client must contain jvm.dll
594                 # jre/bin/server directory could also contain jvm.dll,
595                 # just assume the user wants to use the client JVM.
596                 DLL=jre/bin/client/jvm.dll
597                 if test -f $ac_java_jvm_dir/$DLL ; then
598                     AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
599                     D1=$ac_java_jvm_dir/jre/bin
600                     D2=$ac_java_jvm_dir/jre/bin/client
601                     ac_java_jvm_jni_lib_runtime_path="${D1}:${D2}"
602                     ac_java_jvm_jni_lib_flags="$ac_java_jvm_dir/$F"
603                 fi
604             fi
605         fi
606     fi
607
608         # Under GNU/Debian on a mipsel CPU, uname -m is still returning mips
609         # causing a confusion with mips... Therefor, I have to hardcode this
610         # test
611         # Note that most of the code is duplicated from
612         # Sun/Blackdown 1.4 for Linux (client JVM) tests
613         F=jre/lib/mipsel/libjava.so
614         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
615             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
616             if test -f $ac_java_jvm_dir/$F ; then
617                 AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
618                 D=`dirname $ac_java_jvm_dir/$F`
619                 ac_java_jvm_jni_lib_runtime_path=$D
620                 ac_java_jvm_jni_lib_flags="-L$D -ljava -lverify"
621                 D=$ac_java_jvm_dir/jre/lib/mipsel/client
622         if test ! -f $D/libjvm.so; then # Check if it is in the client or server directory
623             # Try the server directory
624             D=$ac_java_jvm_dir/jre/lib/mipsel/server
625         fi
626                 ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
627                 ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljvm"
628                 D=$ac_java_jvm_dir/jre/lib/mipsel/native_threads
629                 if test -d $D; then
630                   ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
631                   ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D"
632                 fi
633             fi
634         fi
635
636     # Generate error for unsupported JVM layout
637
638     if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
639         AC_MSG_ERROR([Could not detect the location of the Java
640             shared library. You will need to update java.m4
641             to add support for this JVM configuration.])
642     fi
643
644     AC_MSG_LOG([Using the following JNI library flags $ac_java_jvm_jni_lib_flags])
645     AC_MSG_LOG([Using the following runtime library path $ac_java_jvm_jni_lib_runtime_path])
646
647     AC_MSG_LOG([Using LD_PRELOAD=$ac_java_jvm_ld_preload],1)
648     AC_MSG_LOG([Using LD_BIND_NOW=$ac_java_jvm_ld_bind_now],1)
649
650     # Make sure we can compile and link a trivial JNI program
651
652     AC_REQUIRE([AC_PROG_CC])
653
654     AC_CACHE_CHECK(to see if we can link a JNI application,
655         ac_cv_java_jvm_working_jni_link,[
656         AC_LANG_PUSH(C)
657         ac_saved_cflags=$CFLAGS
658         ac_saved_libs=$LIBS
659         CFLAGS="$CFLAGS $ac_java_jvm_jni_include_flags"
660         LIBS="$LIBS $ac_java_jvm_jni_lib_flags"
661         AC_TRY_LINK([
662             #include <jni.h>
663         ],[$libSymbolToTest(NULL,0,NULL);],
664             ac_cv_java_jvm_working_jni_link=yes,
665             ac_cv_java_jvm_working_jni_link=no)
666         AC_LANG_POP()
667         CFLAGS=$ac_saved_cflags
668         LIBS=$ac_saved_libs
669     ])
670
671     # gcc can't link with some JDK .lib files under Win32.
672     # Work around this problem by linking with win/libjvm.dll.a
673
674     if test "$ac_cv_java_jvm_working_jni_link" != "yes" &&
675       test "$ac_cv_tcl_win32" = "yes"; then
676         AC_LANG_PUSH(C)
677         ac_saved_cflags=$CFLAGS
678         ac_saved_libs=$LIBS
679         CFLAGS="$CFLAGS $ac_java_jvm_jni_include_flags"
680         LIBS="$LIBS -L$srcdir/win -ljvm"
681         AC_TRY_LINK([
682             #include <jni.h>
683         ],[$libSymbolToTest(NULL,0,NULL);],
684             ac_cv_java_jvm_working_jni_link=yes,
685             ac_cv_java_jvm_working_jni_link=no)
686         AC_LANG_POP()
687         CFLAGS=$ac_saved_cflags
688         LIBS=$ac_saved_libs
689
690         if test "$ac_cv_java_jvm_working_jni_link" = "yes"; then
691             AC_MSG_LOG([Using custom JNI link lib])
692             ac_java_jvm_jni_lib_flags="-L$srcdir/win -ljvm"
693         fi
694     fi
695
696     if test "$ac_cv_java_jvm_working_jni_link" != "yes"; then
697         AC_MSG_ERROR([could not link file that includes jni.h
698         Either the configure script does not know how to deal with
699         this JVM configuration or the JVM install is broken or corrupted.])
700     fi
701 ])
702
703
704 #------------------------------------------------------------------------
705 # AC_JAVA_WITH_JDK
706 #
707 #    Check to see if the --with-jdk command line option is given.
708 #    If it was, then set ac_java_with_jdk to the DIR argument.
709 #
710 # Arguments:
711 #    NONE
712 #
713 # VARIABLES SET:
714 #    ac_java_with_jdk can be set to the directory where the jdk lives
715 #    ac_java_jvm_name can be set to "jdk"
716 #------------------------------------------------------------------------
717
718 AC_DEFUN([AC_JAVA_WITH_JDK], [
719     AC_ARG_WITH(jdk,
720     AC_HELP_STRING([--with-jdk=DIR],[use JDK from DIR]))
721
722     if test "$with_jdk" = "no" -o -z "$with_jdk"; then
723         NO=op
724     elif test "$with_jdk" = "yes" -o \( ! -d "$with_jdk" \); then
725         AC_MSG_ERROR([--with-jdk=DIR option, must pass a valid DIR])
726     elif test "$with_jdk" != "no" ; then
727         AC_MSG_RESULT([Use JDK path specified ($with_jdk)])
728         ac_java_jvm_dir=$with_jdk
729         ac_java_jvm_name=jdk
730     fi
731 ])
732
733 #------------------------------------------------------------------------
734 # AC_JAVA_TOOLS
735 #
736 #    Figure out the paths of any Java tools we will need later on.
737 #
738 # Arguments:
739 #    NONE
740 #
741 # VARIABLES SET:
742 #    JAVA
743 #    JAVA_G
744 #    JAVAC
745 #    JAVAH
746 #    JAR
747 #    JDB
748 #    JAVADOC
749 #
750 # DEPENDS ON:
751 #    This macro must be run after the AC_JAVA_DETECT_JVM macro as
752 #    it depends on the ac_java_jvm_name, ac_java_jvm_version and
753 #    ac_java_jvm_dir variables
754 #------------------------------------------------------------------------
755
756 AC_DEFUN([AC_JAVA_TOOLS], [
757
758     ac_java_jvm_bin_dir=$ac_java_jvm_dir/bin
759
760     AC_JAVA_TOOLS_CHECK(JAVA, java, $ac_java_jvm_bin_dir)
761
762     # Don't error if java_g can not be found
763     AC_JAVA_TOOLS_CHECK(JAVA_G, java_g, $ac_java_jvm_bin_dir, 1)
764
765     if test "x$JAVA_G" = "x" ; then
766         JAVA_G=$JAVA
767     fi
768
769     TOOL=javah
770     AC_JAVA_TOOLS_CHECK(JAVAH, $TOOL, $ac_java_jvm_bin_dir)
771
772     AC_JAVA_TOOLS_CHECK(JAR, jar, $ac_java_jvm_bin_dir)
773
774     AC_JAVA_TOOLS_CHECK(JAVADOC, javadoc, $ac_java_jvm_bin_dir)
775
776     # Don't error if jdb can not be found
777     AC_JAVA_TOOLS_CHECK(JDB, jdb, $ac_java_jvm_bin_dir, 1)
778
779     case "$ac_java_jvm_version" in
780         *)
781             # JDK on Win32 does not allow connection with suspend=n
782             if test "$ac_cv_tcl_win32" = "yes"; then
783                 suspend="y"
784             else
785                 suspend="n"
786             fi
787             JDB_ATTACH_FLAGS="-attach 8757"
788             JAVA_G_FLAGS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8757,server=y,suspend=$suspend"
789             JDB_ATTACH_FLAGS="-attach 8757"
790             ;;
791     esac
792 ])
793
794
795
796 #------------------------------------------------------------------------
797 # AC_JAVA_ANT
798 #
799 #    Figure out if ant is available and where
800 #
801 # Arguments:
802 #    PATH
803 #
804 # VARIABLES SET:
805 #    ANT
806 #
807 #------------------------------------------------------------------------
808
809 AC_DEFUN([AC_JAVA_ANT], [
810     AC_ARG_WITH(ant,
811     AC_HELP_STRING([--with-ant=DIR],[Use ant from DIR]),
812     ANTPATH=$withval, ANTPATH=no)
813     if test "$ANTPATH" = "no" ; then
814         if test -d "$SCI_SRCDIR_FULL/java/ant"; then # Scilab thirdparties
815             ANTPATH=$SCI_SRCDIR_FULL/java/ant
816             AC_JAVA_TOOLS_CHECK(ANT, ant, $ANTPATH/bin $ANTPATH)
817         else
818             AC_JAVA_TOOLS_CHECK(ANT, ant)
819         fi
820     elif test ! -d "$ANTPATH"; then
821         AC_MSG_ERROR([--with-ant=DIR option, must pass a valid DIR])
822     else
823         AC_JAVA_TOOLS_CHECK(ANT, ant, $ANTPATH/bin $ANTPATH)
824     fi
825 ])
826
827 #------------------------------------------------------------------------
828 # AC_JAVA_CHECK_PACKAGE
829 #
830 # Check if the package (generally a jar file) is available and the class
831 # usable
832 #
833 # Arguments:
834 #    1. name of the package
835 #   2. name of the class to test
836 #   3. used by (Comment)
837 #   4. Do not stop on error
838 # VARIABLES SET:
839 #
840 #
841 #------------------------------------------------------------------------
842
843 AC_DEFUN([AC_JAVA_CHECK_PACKAGE], [
844     AC_MSG_CHECKING($1)
845     PACKAGE_JAR_FILE=
846     found_jar=no
847     saved_ac_java_classpath=$ac_java_classpath
848     DEFAULT_JAR_DIR="/usr/share/java /usr/lib/java /usr/share/java /usr/share/java/jar /opt/java/lib /usr/local/java /usr/local/java/jar /usr/local/share/java /usr/local/share/java/jar /usr/local/lib/java $(find /usr/share/java/ -maxdepth 1 -type d 2>/dev/null) $(find /usr/lib64/ -maxdepth 1 -type d 2>/dev/null) $(find  /usr/lib/ -maxdepth 1 -type d 2>/dev/null)  $(find /usr/share/*/lib -maxdepth 1 -type d 2>/dev/null)"
849     for jardir in "`pwd`/thirdparty" "`pwd`/jar" $DEFAULT_JAR_DIR; do
850       for jar in "$jardir/$1.jar" "$jardir/lib$1.jar" "$jardir/lib$1-java.jar" "$jardir/$1*.jar"; do
851
852 # TODO check the behaviour when spaces
853         jars_resolved=`ls $jar 2>/dev/null`
854         for jar_resolved in $jars_resolved; do # If several jars matches
855           if test -e "$jar_resolved"; then
856             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
857             AC_JAVA_TRY_COMPILE([import $2;], , "no", [
858               AC_MSG_RESULT([$jar_resolved])
859               found_jar=yes
860               PACKAGE_JAR_FILE=$jar_resolved
861               break 3
862             ], [
863             ac_java_classpath=$saved_ac_java_classpath
864
865             ])
866           fi
867         done
868       done
869     done
870     if test "$found_jar" = "no"; then
871       AC_MSG_RESULT([no])
872       if test "$4" = "yes"; then
873          AC_MSG_WARN([Could not find or use the Java package/jar $1 used by $3 (looking for package $2)])
874       else
875           AC_MSG_ERROR([Could not find or use the Java package/jar $1 used by $3 (looking for package $2)])
876       fi
877     fi
878 ])
879
880 #------------------------------------------------------------------------
881 # AC_JAVA_TOOLS_CHECK(VARIABLE, TOOL, PATH, NOERR)
882 #
883 #    Helper function that will look for the given tool on the
884 #    given PATH. If cross compiling and the tool can not
885 #    be found on the PATH, then search for the same tool
886 #    on the users PATH. If the tool still can not be found
887 #    then give up with an error unless NOERR is 1.
888 #
889 # Arguments:
890 #    1. The variable name we pass to AC_PATH_PROG
891 #    2. The name of the tool
892 #    3. The path to search on
893 #    4. Pass 1 if you do not want any error generated
894 #------------------------------------------------------------------------
895
896 AC_DEFUN([AC_JAVA_TOOLS_CHECK], [
897     if test "$cross_compiling" = "yes" ; then
898         AC_PATH_PROG($1, $2)
899     else
900         AC_PATH_PROG($1, $2, , $3)
901     fi
902
903     # Check to see if $1 could not be found
904
905     m4_ifval([$4],,[
906     if test "x[$]$1" = "x" ; then
907         AC_MSG_ERROR([Cannot find $2])
908     fi
909     ])
910 ])