[PATCH] Allow Java detection to find gcj -- ok to commit?

Bernhard Rosenkraenzer bero at redhat.de
Tue Sep 24 14:00:44 BST 2002


The attached patch allows KDE's (admin/acinclude.m4.in) java detection to 
use gcj -- I've successfully built the Java bindings and their test apps 
with gcj (and also run them -- they're slow, but work).

Ok to commit?

LLaP
bero

-- 
This message is provided to you under the terms outlined at
http://www.bero.org/terms.html
-------------- next part --------------
--- kdebase.work/admin/acinclude.m4.in.gcj	2002-09-24 13:54:19.000000000 +0200
+++ kdebase.work/admin/acinclude.m4.in	2002-09-24 14:35:52.000000000 +0200
@@ -4574,6 +4574,15 @@
 	  fi
       done
 
+      if test -z "$jredirs"; then
+          dnl gcj does not use a libjvm.so, so this may still be valid
+          IFS=':'
+          for dir in $PATH; do
+              jredirs="$jredirs $dir"
+          done
+          IFS=$kde_save_IFS
+      fi
+
       JAVAC=
       JAVA=
       kde_java_bindir=no
@@ -4605,11 +4614,29 @@
 
 dnl At this point kde_java_bindir and kde_java_includedir are either set or "no"
 if test "x$kde_java_bindir" != "xno"; then
-
-  dnl Look for libjvm.so
-  kde_java_libjvmdir=`find $kde_java_bindir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1`
-  dnl Look for libhpi.so and avoid green threads
-  kde_java_libhpidir=`find $kde_java_bindir/.. -name libhpi.so | grep -v green | sed 's,libhpi.so,,' | head -n 1`
+  dnl Check if java is actually gcj - some of the following checks have to be
+  dnl different if gcj is in use (e.g. gcj doesn't have a separate libjvm)
+  AC_MSG_CHECKING([if java is gcj])
+  AC_TRY_COMPILE(
+    [#include "$kde_java_includedir/jni.h"],
+    [#ifndef __GCJ_JNI_H__
+     #error This is not gcj
+     #endif],
+    [AC_MSG_RESULT(yes)
+     AC_DEFINE(GCJJAVA, 1, [Define if your java is gcj])
+     ac_cv_gcjjava="yes" ],
+    [AC_MSG_RESULT(no)])
+
+  if test x$ac_cv_gcjjava != xyes; then
+    dnl Look for libjvm.so
+    kde_java_libjvmdir=`find $kde_java_bindir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1`
+    dnl Look for libhpi.so and avoid green threads
+    kde_java_libhpidir=`find $kde_java_bindir/.. -name libhpi.so | grep -v green | sed 's,libhpi.so,,' | head -n 1`
+  else
+    dnl gcj does not need libjvm or libhpi; it has its own internal variants thereof.
+    kde_java_libjvmdir=""
+    kde_java_libhpidir=""
+  fi
 
   dnl Now check everything's fine under there
   dnl the include dir is our flag for having the JDK
@@ -4627,30 +4654,39 @@
       AC_MSG_ERROR([jni.h not found under $kde_java_includedir. Use --with-java or --without-java.])
     fi
 
-    jni_includes="-I$kde_java_includedir"
-    dnl Strange thing, jni.h requires jni_md.h which is under genunix here..
-    dnl and under linux here..
-    test -d "$kde_java_includedir/linux" && jni_includes="$jni_includes -I$kde_java_includedir/linux"
-    test -d "$kde_java_includedir/solaris" && jni_includes="$jni_includes -I$kde_java_includedir/solaris"
-    test -d "$kde_java_includedir/genunix" && jni_includes="$jni_includes -I$kde_java_includedir/genunix"
+    if test "$kde_java_includedir" != "/usr/include"; then
+      dnl jdkgcj and quite possibly others put jni.h straight in /usr/include.
+      dnl gcc 3.x does not like -I/usr/include at all...
+      jni_includes="-I$kde_java_includedir"
+    else
+      jni_includes=" "
+    fi
 
+    if test x$ac_cv_gcjjava != xyes; then
+      dnl Strange thing, jni.h requires jni_md.h which is under genunix here..
+      dnl and under linux here..
+      test -d "$kde_java_includedir/linux" && jni_includes="$jni_includes -I$kde_java_includedir/linux"
+      test -d "$kde_java_includedir/solaris" && jni_includes="$jni_includes -I$kde_java_includedir/solaris"
+      test -d "$kde_java_includedir/genunix" && jni_includes="$jni_includes -I$kde_java_includedir/genunix"
+    fi
   else
     JAVAC=
     jni_includes=
   fi
 
-  if test ! -r "$kde_java_libjvmdir/libjvm.so"; then
-     AC_MSG_ERROR([libjvm.so not found under $kde_java_libjvmdir. Use --without-java.])
-  fi 
+  if test x$ac_cv_gcjjava != xyes; then
+     if test ! -r "$kde_java_libjvmdir/libjvm.so"; then
+        AC_MSG_ERROR([libjvm.so not found under $kde_java_libjvmdir. Use --without-java.])
+     fi 
+     if test ! -r "$kde_java_libhpidir/libhpi.so"; then
+       AC_MSG_ERROR([libhpi.so not found under $kde_java_libhpidir. Use --without-java.])
+     fi
+  fi
 
   if test ! -x "$kde_java_bindir/java"; then
       AC_MSG_ERROR([java not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
   fi
 
-  if test ! -r "$kde_java_libhpidir/libhpi.so"; then
-    AC_MSG_ERROR([libhpi.so not found under $kde_java_libhpidir. Use --without-java.])
-  fi
-
   if test -n "$jni_includes"; then
     dnl Check for JNI version
     AC_LANG_SAVE
@@ -4687,7 +4723,9 @@
     JAVAH=$kde_java_bindir/javah
     JAR=$kde_java_bindir/jar
     AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
-    JVMLIBS="-L$kde_java_libjvmdir -ljvm -L$kde_java_libhpidir -lhpi"
+    if test x$ac_cv_gcjjava != xyes; then
+       JVMLIBS="-L$kde_java_libjvmdir -ljvm -L$kde_java_libhpidir -lhpi"
+    fi
     AC_MSG_RESULT([java JDK in $kde_java_bindir])
 
   else


More information about the kde-core-devel mailing list