Scilab build: enable jdk8 build
[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.6+)/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.6+)
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.6+)/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|ppc64)
478           machine=ppc
479           ;;
480         armv*)
481           machine=arm
482           ;;
483         sh*)
484             machine=sh
485           ;;
486         mips64)
487             machine=mips
488           ;;
489     esac
490
491     AC_MSG_LOG([Looking for JNI libs with $machine as machine hardware name])
492
493     # Check for known JDK installation layouts
494
495     # Gives the name of the symbol we want to look for.
496     # Mac OS X add a trailing _Impl
497     libSymbolToTest="JNI_GetCreatedJavaVMs"
498
499     if test "$ac_java_jvm_name" = "jdk"; then
500         # Sun/Blackdown 1.4 for Linux (client JVM)
501
502         F=jre/lib/$machine/libjava.so
503         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
504             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
505             if test -f $ac_java_jvm_dir/$F ; then
506                 AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
507                 D=`dirname $ac_java_jvm_dir/$F`
508                 ac_java_jvm_jni_lib_runtime_path=$D
509                 ac_java_jvm_jni_lib_flags="-L$D -ljava -lverify"
510                 D=$ac_java_jvm_dir/jre/lib/$machine/client
511         if test ! -f $D/libjvm.so; then # Check if it is in the client or server directory
512             # Try the server directory
513             D=$ac_java_jvm_dir/jre/lib/$machine/server
514             if test ! -f $D/libjvm.so; then
515                 AC_MSG_ERROR([Could not find libjvm.so in
516                 jre/lib/$machine/client/ or in jre/lib/$machine/server/.
517                 Please report to http://bugzilla.scilab.org/])
518             fi
519         fi
520                 ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
521                 ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljvm"
522                 D=$ac_java_jvm_dir/jre/lib/$machine/native_threads
523                 if test -d $D; then
524                   ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
525                   ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D"
526                 fi
527             fi
528         fi
529
530         # Sun JDK 1.5 for AMD64 Linux (server JVM)
531
532         F=jre/lib/amd64/libjava.so
533         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
534             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
535             if test -f $ac_java_jvm_dir/$F ; then
536                 AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
537
538                 D=`dirname $ac_java_jvm_dir/$F`
539                 ac_java_jvm_jni_lib_runtime_path=$D
540                 ac_java_jvm_jni_lib_flags="-L$D -ljava -lverify"
541
542                 D=$ac_java_jvm_dir/jre/lib/amd64/server
543                 ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
544                 ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljvm"
545             fi
546         fi
547
548         # Eclipse/IBM Java Compiler
549
550         F=jre/lib/i386/client/libjvm.so
551         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
552             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
553             if test -f $ac_java_jvm_dir/$F ; then
554                 AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
555
556                 D=`dirname $ac_java_jvm_dir/$F`
557                 ac_java_jvm_jni_lib_runtime_path=$D
558                 ac_java_jvm_jni_lib_flags="-L$D -ljvm"
559
560                 D=$ac_java_jvm_dir/jre/lib/i386/server
561                 ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
562                 ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljvm"
563             fi
564         fi
565
566         # IBM Java Compiler under Suse (and probably others)
567
568         F=jre/bin/classic/libjvm.so
569         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
570             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
571             if test -f $ac_java_jvm_dir/$F ; then
572                 AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
573
574                 D=`dirname $ac_java_jvm_dir/$F`
575                 ac_java_jvm_jni_lib_runtime_path=$D
576                 ac_java_jvm_jni_lib_flags="-L$D -ljvm"
577
578                 D=$ac_java_jvm_dir/bin/
579                 ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
580                 ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljava"
581             fi
582         fi
583
584         # Sun JDK 1.4 and 1.5 for Win32 (client JVM)
585
586         F=lib/jvm.lib
587         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
588             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
589             if test -f $ac_java_jvm_dir/$F ; then
590                 # jre/bin/client must contain jvm.dll
591                 # jre/bin/server directory could also contain jvm.dll,
592                 # just assume the user wants to use the client JVM.
593                 DLL=jre/bin/client/jvm.dll
594                 if test -f $ac_java_jvm_dir/$DLL ; then
595                     AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
596                     D1=$ac_java_jvm_dir/jre/bin
597                     D2=$ac_java_jvm_dir/jre/bin/client
598                     ac_java_jvm_jni_lib_runtime_path="${D1}:${D2}"
599                     ac_java_jvm_jni_lib_flags="$ac_java_jvm_dir/$F"
600                 fi
601             fi
602         fi
603     fi
604
605         # Under GNU/Debian on a mipsel CPU, uname -m is still returning mips
606         # causing a confusion with mips... Therefor, I have to hardcode this
607         # test
608         # Note that most of the code is duplicated from
609         # Sun/Blackdown 1.4 for Linux (client JVM) tests
610         F=jre/lib/mipsel/libjava.so
611         if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
612             AC_MSG_LOG([Looking for $ac_java_jvm_dir/$F])
613             if test -f $ac_java_jvm_dir/$F ; then
614                 AC_MSG_LOG([Found $ac_java_jvm_dir/$F])
615                 D=`dirname $ac_java_jvm_dir/$F`
616                 ac_java_jvm_jni_lib_runtime_path=$D
617                 ac_java_jvm_jni_lib_flags="-L$D -ljava -lverify"
618                 D=$ac_java_jvm_dir/jre/lib/mipsel/client
619         if test ! -f $D/libjvm.so; then # Check if it is in the client or server directory
620             # Try the server directory
621             D=$ac_java_jvm_dir/jre/lib/mipsel/server
622         fi
623                 ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
624                 ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D -ljvm"
625                 D=$ac_java_jvm_dir/jre/lib/mipsel/native_threads
626                 if test -d $D; then
627                   ac_java_jvm_jni_lib_runtime_path="${ac_java_jvm_jni_lib_runtime_path}:$D"
628                   ac_java_jvm_jni_lib_flags="$ac_java_jvm_jni_lib_flags -L$D"
629                 fi
630             fi
631         fi
632
633     # Generate error for unsupported JVM layout
634
635     if test "x$ac_java_jvm_jni_lib_flags" = "x" ; then
636         AC_MSG_ERROR([Could not detect the location of the Java
637             shared library. You will need to update java.m4
638             to add support for this JVM configuration.])
639     fi
640
641     AC_MSG_LOG([Using the following JNI library flags $ac_java_jvm_jni_lib_flags])
642     AC_MSG_LOG([Using the following runtime library path $ac_java_jvm_jni_lib_runtime_path])
643
644     AC_MSG_LOG([Using LD_PRELOAD=$ac_java_jvm_ld_preload],1)
645     AC_MSG_LOG([Using LD_BIND_NOW=$ac_java_jvm_ld_bind_now],1)
646
647     # Make sure we can compile and link a trivial JNI program
648
649     AC_REQUIRE([AC_PROG_CC])
650
651     AC_CACHE_CHECK(to see if we can link a JNI application,
652         ac_cv_java_jvm_working_jni_link,[
653         AC_LANG_PUSH(C)
654         ac_saved_cflags=$CFLAGS
655         ac_saved_libs=$LIBS
656         CFLAGS="$CFLAGS $ac_java_jvm_jni_include_flags"
657         LIBS="$LIBS $ac_java_jvm_jni_lib_flags"
658         AC_TRY_LINK([
659             #include <jni.h>
660         ],[$libSymbolToTest(NULL,0,NULL);],
661             ac_cv_java_jvm_working_jni_link=yes,
662             ac_cv_java_jvm_working_jni_link=no)
663         AC_LANG_POP()
664         CFLAGS=$ac_saved_cflags
665         LIBS=$ac_saved_libs
666     ])
667
668     # gcc can't link with some JDK .lib files under Win32.
669     # Work around this problem by linking with win/libjvm.dll.a
670
671     if test "$ac_cv_java_jvm_working_jni_link" != "yes" &&
672       test "$ac_cv_tcl_win32" = "yes"; then
673         AC_LANG_PUSH(C)
674         ac_saved_cflags=$CFLAGS
675         ac_saved_libs=$LIBS
676         CFLAGS="$CFLAGS $ac_java_jvm_jni_include_flags"
677         LIBS="$LIBS -L$srcdir/win -ljvm"
678         AC_TRY_LINK([
679             #include <jni.h>
680         ],[$libSymbolToTest(NULL,0,NULL);],
681             ac_cv_java_jvm_working_jni_link=yes,
682             ac_cv_java_jvm_working_jni_link=no)
683         AC_LANG_POP()
684         CFLAGS=$ac_saved_cflags
685         LIBS=$ac_saved_libs
686
687         if test "$ac_cv_java_jvm_working_jni_link" = "yes"; then
688             AC_MSG_LOG([Using custom JNI link lib])
689             ac_java_jvm_jni_lib_flags="-L$srcdir/win -ljvm"
690         fi
691     fi
692
693     if test "$ac_cv_java_jvm_working_jni_link" != "yes"; then
694         AC_MSG_ERROR([could not link file that includes jni.h
695         Either the configure script does not know how to deal with
696         this JVM configuration or the JVM install is broken or corrupted.])
697     fi
698 ])
699
700
701 #------------------------------------------------------------------------
702 # AC_JAVA_WITH_JDK
703 #
704 #    Check to see if the --with-jdk command line option is given.
705 #    If it was, then set ac_java_with_jdk to the DIR argument.
706 #
707 # Arguments:
708 #    NONE
709 #
710 # VARIABLES SET:
711 #    ac_java_with_jdk can be set to the directory where the jdk lives
712 #    ac_java_jvm_name can be set to "jdk"
713 #------------------------------------------------------------------------
714
715 AC_DEFUN([AC_JAVA_WITH_JDK], [
716     AC_ARG_WITH(jdk,
717     AC_HELP_STRING([--with-jdk=DIR],[use JDK from DIR]))
718
719     if test "$with_jdk" = "no" -o -z "$with_jdk"; then
720         NO=op
721     elif test "$with_jdk" = "yes" -o \( ! -d "$with_jdk" \); then
722         AC_MSG_ERROR([--with-jdk=DIR option, must pass a valid DIR])
723     elif test "$with_jdk" != "no" ; then
724         AC_MSG_RESULT([Use JDK path specified ($with_jdk)])
725         ac_java_jvm_dir=$with_jdk
726         ac_java_jvm_name=jdk
727     fi
728 ])
729
730 #------------------------------------------------------------------------
731 # AC_JAVA_TOOLS
732 #
733 #    Figure out the paths of any Java tools we will need later on.
734 #
735 # Arguments:
736 #    NONE
737 #
738 # VARIABLES SET:
739 #    JAVA
740 #    JAVA_G
741 #    JAVAC
742 #    JAVAH
743 #    JAR
744 #    JDB
745 #    JAVADOC
746 #
747 # DEPENDS ON:
748 #    This macro must be run after the AC_JAVA_DETECT_JVM macro as
749 #    it depends on the ac_java_jvm_name, ac_java_jvm_version and
750 #    ac_java_jvm_dir variables
751 #------------------------------------------------------------------------
752
753 AC_DEFUN([AC_JAVA_TOOLS], [
754
755     ac_java_jvm_bin_dir=$ac_java_jvm_dir/bin
756
757     AC_JAVA_TOOLS_CHECK(JAVA, java, $ac_java_jvm_bin_dir)
758
759     # Don't error if java_g can not be found
760     AC_JAVA_TOOLS_CHECK(JAVA_G, java_g, $ac_java_jvm_bin_dir, 1)
761
762     if test "x$JAVA_G" = "x" ; then
763         JAVA_G=$JAVA
764     fi
765
766     TOOL=javah
767     AC_JAVA_TOOLS_CHECK(JAVAH, $TOOL, $ac_java_jvm_bin_dir)
768
769     AC_JAVA_TOOLS_CHECK(JAR, jar, $ac_java_jvm_bin_dir)
770
771     AC_JAVA_TOOLS_CHECK(JAVADOC, javadoc, $ac_java_jvm_bin_dir)
772
773     # Don't error if jdb can not be found
774     AC_JAVA_TOOLS_CHECK(JDB, jdb, $ac_java_jvm_bin_dir, 1)
775
776     case "$ac_java_jvm_version" in
777         *)
778             # JDK on Win32 does not allow connection with suspend=n
779             if test "$ac_cv_tcl_win32" = "yes"; then
780                 suspend="y"
781             else
782                 suspend="n"
783             fi
784             JDB_ATTACH_FLAGS="-attach 8757"
785             JAVA_G_FLAGS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8757,server=y,suspend=$suspend"
786             JDB_ATTACH_FLAGS="-attach 8757"
787             ;;
788     esac
789 ])
790
791
792
793 #------------------------------------------------------------------------
794 # AC_JAVA_ANT
795 #
796 #    Figure out if ant is available and where
797 #
798 # Arguments:
799 #    PATH
800 #
801 # VARIABLES SET:
802 #    ANT
803 #
804 #------------------------------------------------------------------------
805
806 AC_DEFUN([AC_JAVA_ANT], [
807     AC_ARG_WITH(ant,
808     AC_HELP_STRING([--with-ant=DIR],[Use ant from DIR]),
809     ANTPATH=$withval, ANTPATH=no)
810     if test "$ANTPATH" = "no" ; then
811         AC_JAVA_TOOLS_CHECK(ANT, ant)
812     elif test ! -d "$ANTPATH"; then
813         AC_MSG_ERROR([--with-ant=DIR option, must pass a valid DIR])
814     else
815         AC_JAVA_TOOLS_CHECK(ANT, ant, $ANTPATH/bin $ANTPATH)
816     fi
817 ])
818
819 #------------------------------------------------------------------------
820 # AC_JAVA_CHECK_PACKAGE
821 #
822 # Check if the package (generally a jar file) is available and the class
823 # usable
824 #
825 # Arguments:
826 #    1. name of the package
827 #   2. name of the class to test
828 #   3. used by (Comment)
829 #   4. Do not stop on error
830 # VARIABLES SET:
831 #
832 #
833 #------------------------------------------------------------------------
834
835 AC_DEFUN([AC_JAVA_CHECK_PACKAGE], [
836     AC_MSG_CHECKING($1)
837     PACKAGE_JAR_FILE=
838     found_jar=no
839     saved_ac_java_classpath=$ac_java_classpath
840     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)"
841     for jardir in "`pwd`/thirdparty" "`pwd`/jar" $DEFAULT_JAR_DIR; do
842       for jar in "$jardir/$1.jar" "$jardir/lib$1.jar" "$jardir/lib$1-java.jar" "$jardir/$1*.jar"; do
843
844 # TODO check the behaviour when spaces
845         jars_resolved=`ls $jar 2>/dev/null`
846         for jar_resolved in $jars_resolved; do # If several jars matches
847           if test -e "$jar_resolved"; then
848             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
849             AC_JAVA_TRY_COMPILE([import $2;], , "no", [
850               AC_MSG_RESULT([$jar_resolved])
851               found_jar=yes
852               PACKAGE_JAR_FILE=$jar_resolved
853               break 3
854             ], [
855             ac_java_classpath=$saved_ac_java_classpath
856
857             ])
858           fi
859         done
860       done
861     done
862     if test "$found_jar" = "no"; then
863       AC_MSG_RESULT([no])
864       if test "$4" = "yes"; then
865          AC_MSG_WARN([Could not find or use the Java package/jar $1 used by $3 (looking for package $2)])
866       else
867           AC_MSG_ERROR([Could not find or use the Java package/jar $1 used by $3 (looking for package $2)])
868       fi
869     fi
870 ])
871
872 #------------------------------------------------------------------------
873 # AC_JAVA_TOOLS_CHECK(VARIABLE, TOOL, PATH, NOERR)
874 #
875 #    Helper function that will look for the given tool on the
876 #    given PATH. If cross compiling and the tool can not
877 #    be found on the PATH, then search for the same tool
878 #    on the users PATH. If the tool still can not be found
879 #    then give up with an error unless NOERR is 1.
880 #
881 # Arguments:
882 #    1. The variable name we pass to AC_PATH_PROG
883 #    2. The name of the tool
884 #    3. The path to search on
885 #    4. Pass 1 if you do not want any error generated
886 #------------------------------------------------------------------------
887
888 AC_DEFUN([AC_JAVA_TOOLS_CHECK], [
889     if test "$cross_compiling" = "yes" ; then
890         AC_PATH_PROG($1, $2)
891     else
892         AC_PATH_PROG($1, $2, , $3)
893     fi
894
895     # Check to see if $1 could not be found
896
897     m4_ifval([$4],,[
898     if test "x[$]$1" = "x" ; then
899         AC_MSG_ERROR([Cannot find $2])
900     fi
901     ])
902 ])