summaryrefslogtreecommitdiff
path: root/ext/java/config.m4
blob: 105baf377c0abc689a0378799bebded7d14a5b87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
dnl
dnl $Id$
dnl
AC_DEFUN(JAVA_FIND_JAR, [
 AC_MSG_CHECKING([Java Jar location])
  if test "$PHP_JAVA" = "yes"; then
    if JAVA_JAR=`which jar 2>/dev/null`; then
      JAVA_JAR="$JAVA_JAR cf"
    else
      JAVA_JAR=
    fi
    PHP_JAVA=`cd \`dirname \\\`which javac\\\`\`/..;pwd`

    dnl
    dnl substitue zip for systems which don't have jar
    dnl
    if test -z "$JAVA_JAR"; then
      JAVA_JAR='zip -q0'
    fi
  else
    dnl
    dnl we have a custom path defined so use it
    dnl
    if test -x $PHP_JAVA/bin/jar; then
      JAVA_JAR="$PHP_JAVA/bin/jar cf"
    else
      AC_MSG_ERROR([Unable to locate $PHP_JAVA/bin])
    fi
  fi
  PHP_SUBST(JAVA_JAR)
  AC_MSG_RESULT([$JAVA_JAR])
])

AC_DEFUN(JAVA_FIND_C, [
 AC_MSG_CHECKING([Java C location])
 if test "$PHP_JAVA" = "yes"; then
   JAVA_C=`which javac`
 else
   dnl
   dnl  We've been given a path to use, so use it
   dnl
   if test -x $PHP_JAVA/bin/javac; then
     JAVA_C=$PHP_JAVA/bin/javac
   else
     AC_MSG_ERROR([Unable to locate $PHP_JAVA/bin])
   fi
 fi
 if test -z "$JAVA_C"; then
   AC_MSG_ERROR([Unable to locate the javac binary in your system path
Either adjust your Java installation or provide the Java installation path,
e.g. --with-java=/java expecting /java/bin/ to contain the binaries])
  fi

  PHP_SUBST(JAVA_C)
  AC_MSG_RESULT([$JAVA_C])
])

AC_DEFUN(JAVA_CHECK_LIB, [
 AC_MSG_CHECKING([Checking for libjava])
 if test -d $PHP_JAVA/lib/kaffe; then
   PHP_ADD_LIBPATH($PHP_JAVA/lib)
   JAVA_CFLAGS=-DKAFFE
   JAVA_INCLUDE=-I$PHP_JAVA/include/kaffe
   JAVA_CLASSPATH=$PHP_JAVA/share/kaffe/Klasses.jar
   JAVA_LIB=kaffevm
   JAVA_LIBPATH=$PHP_JAVA/lib/kaffe
   java_libext=kaffevm

   test -f $PHP_JAVA/lib/$JAVA_LIB       && JAVA_LIBPATH=$PHP_JAVA/lib
   test -f $PHP_JAVA/lib/kaffe/$JAVA_LIB && JAVA_LIBPATH=$PHP_JAVA/lib/kaffe

   dnl
   dnl accomodate old versions of kaffe which don't support jar
   dnl
   if kaffe -version 2>&1 | grep 1.0b > /dev/null; then
     JAVA_JAR='zip -q0'
   fi
 elif test -f $PHP_JAVA/lib/$java_libext; then
   JAVA_LIB=java
   JAVA_LIBPATH=$PHP_JAVA/lib
   JAVA_INCLUDE=-I$PHP_JAVA/include

   test -f $PHP_JAVA/lib/classes.zip && JAVA_CFLAGS=-DJNI_11
   test -f $PHP_JAVA/lib/jvm.jar     && JAVA_CFLAGS=-DJNI_12
   test -f $PHP_JAVA/lib/classes.zip && JAVA_CLASSPATH=$PHP_JAVA/lib/classes.zip
   test -f $PHP_JAVA/lib/jvm.jar     && JAVA_CLASSPATH=$PHP_JAVA/lib/jvm.jar

   for i in $PHP_JAVA/include/*; do
     test -f $i/jni_md.h && JAVA_INCLUDE="$JAVA_INCLUDE $i"
   done
   dnl
   dnl sample JDK v 1.4 path
   dnl /usr/java/j2sdk1.4.0_01/jre/lib/i386/libjava.so
   dnl
 else
   dnl
   dnl We have to find everything
   dnl
   for i in `find $PHP_JAVA/include -type d`; do
     test -f $i/jni.h      && JAVA_INCLUDE=-I$i
     test -f $i/jni_md.h   && JAVA_INCLUDE="$JAVA_INCLUDE -I$i"
   done

   for i in `find $PHP_JAVA/ -type d`; do
     test -f $i/classes.zip && JAVA_CFLAGS=-DJNI_11
     test -f $i/rt.jar      && JAVA_CFLAGS=-DJNI_12
     test -f $i/classes.zip && JAVA_CLASSPATH=$i/classes.zip
     test -f $i/rt.jar      && JAVA_CLASSPATH=$i/rt.jar

     if test -f $i/$java_libext; then
       JAVA_LIB=java
       JAVA_LIBPATH=$i

       test -d $i/hotspot && PHP_ADD_LIBPATH($i/hotspot)
       test -d $i/classic && PHP_ADD_LIBPATH($i/classic)
       test -d $i/server  && PHP_ADD_LIBPATH($i/server)
       test -d $i/native_threads && PHP_ADD_LIBPATH($i/native_threads)
     fi
   done

   if test -z "$JAVA_INCLUDE"; then
     AC_MSG_RESULT(no)
     AC_MSG_ERROR(unable to find Java VM includes)
   fi

   JAVA_CFLAGS="$JAVA_CFLAGS -D_REENTRANT"
 fi

 AC_MSG_RESULT([$JAVA_LIBPATH])
])


PHP_ARG_WITH(java, for Java support,
[  --with-java[=DIR]       Include Java support. DIR is the JDK base install directory. 
                          This extension is always built as shared.])

if test "$PHP_JAVA" != "no"; then
  platform=`uname -s 2>/dev/null`
  java_libext=libjava.so
  case $platform in
    AIX) java_libext=libjava.a ;;
    HP-UX) java_libext=libjava.sl ;;
    Darwin) java_libext=libjava.jnilib ;;
  esac  
  JAVA_FIND_JAR()
  JAVA_FIND_C()

  if test "$platform" = "Darwin"; then
    AC_CHECK_HEADERS([JavaVM/JavaVM.h])
    AC_CHECK_HEADERS([JavaVM/jni.h])
    dnl JAVA_CLASSPATH=/System/Library/Frameworks/JavaVM.framework/Classes/classes.jar
    PHP_CHECK_FRAMEWORK("JavaVM", JNI_CreateJavaVM,[AC_DEFINE(HAVE_JAVA,1,[ ])])
    PHP_ADD_FRAMEWORK("JavaVM")
    JAVA_CFLAGS="-x objective-c"
  else
    JAVA_CHECK_LIB()
    AC_DEFINE(HAVE_JAVA,1,[ ])

    if test -z "$JAVA_LIBPATH"; then
      AC_MSG_ERROR([unable to find Java VM libraries in $PHP_JAVA])
    fi

    PHP_ADD_LIBPATH($JAVA_LIBPATH)
    JAVA_CFLAGS="$JAVA_CFLAGS '-DJAVALIB=\"$JAVA_LIBPATH/$java_libext\"'"
  fi

  if test "$PHP_SAPI" != "servlet"; then
    PHP_NEW_EXTENSION(java, java.c, shared,, $JAVA_CFLAGS $JAVA_INCLUDE)

    if test "$PHP_SAPI" = "cgi"; then
      if test "$platform" != "Darwin"; then
        PHP_ADD_LIBRARY($JAVA_LIB)
      fi
    fi

    INSTALL_IT="$INSTALL_IT; \$(srcdir)/build/shtool mkdir -p -f -m 0755 \$(INSTALL_ROOT)\$(libdir)"
    INSTALL_IT="$INSTALL_IT; \$(INSTALL) -m 0755 \$(srcdir)/ext/java/php_java.jar \$(INSTALL_ROOT)\$(libdir)"
  fi

  PHP_SUBST(JAVA_CLASSPATH)

  PHP_ADD_MAKEFILE_FRAGMENT
fi