The R Project SVN R

Rev

Rev 39784 | Rev 41576 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 39784 Rev 41169
Line 45... Line 45...
45
## have_java to yes/no; if it is yes then also sets:
45
## have_java to yes/no; if it is yes then also sets:
46
## JAVA to Java interpreter path
46
## JAVA to Java interpreter path
47
## JAVA_HOME to the home directory of the Java runtime/jdk
47
## JAVA_HOME to the home directory of the Java runtime/jdk
48
## JAVA_LD_LIBRARY_PATH to the path necessary for Java runtime
48
## JAVA_LD_LIBRARY_PATH to the path necessary for Java runtime
49
## JAVA_LIBS to flags necessary to link JNI programs (*)
49
## JAVA_LIBS to flags necessary to link JNI programs (*)
-
 
50
## JAVA_CPPFLAGS to cpp flags necessary to find Java includes (*)
-
 
51
## JAVAC to Java compiler path (optional)
-
 
52
## JAVAH to Java header preprocessor path (optional)
-
 
53
## JAR to Java archiver (optional)
-
 
54
##
-
 
55
## (*) - those variables are modified for use in make files
-
 
56
##       to rely on $(JAVA_HOME) and substituted with 0 suffix
50
##
57
##
51
## JAVA_HOME env var is honored during the search and the search
58
## JAVA_HOME env var is honored during the search and the search
52
## will fail if it is set incorrectly.
59
## will fail if it is set incorrectly.
53
AC_DEFUN([R_JAVA],
60
AC_DEFUN([R_JAVA],
54
[
61
[
Line 57... Line 64...
57
## find java compiler binaries
64
## find java compiler binaries
58
if test -z "${JAVA_HOME}" ; then
65
if test -z "${JAVA_HOME}" ; then
59
  JAVA_PATH=${PATH}
66
  JAVA_PATH=${PATH}
60
else
67
else
61
  ## try jre/bin first just in case we don't have full JDK
68
  ## try jre/bin first just in case we don't have full JDK
62
  JAVA_PATH=${JAVA_HOME}:${JAVA_HOME}/jre/bin:${JAVA_HOME}/bin:${PATH}
69
  JAVA_PATH=${JAVA_HOME}:${JAVA_HOME}/jre/bin:${JAVA_HOME}/bin:${JAVA_HOME}/../bin:${PATH}
63
fi
70
fi
64
## if 'java' is not on the PATH or JAVA_HOME, add some guesses as of
71
## if 'java' is not on the PATH or JAVA_HOME, add some guesses as of
65
## where java could live
72
## where java could live
66
JAVA_PATH=${JAVA_PATH}:/usr/java/bin:/usr/jdk/bin:/usr/lib/java/bin:/usr/lib/jdk/bin:/usr/local/java/bin:/usr/local/jdk/bin:/usr/local/lib/java/bin:/usr/local/lib/jdk/bin
73
JAVA_PATH=${JAVA_PATH}:/usr/java/bin:/usr/jdk/bin:/usr/lib/java/bin:/usr/lib/jdk/bin:/usr/local/java/bin:/usr/local/jdk/bin:/usr/local/lib/java/bin:/usr/local/lib/jdk/bin
67
AC_PATH_PROGS(JAVA,java,,${JAVA_PATH})
74
AC_PATH_PROGS(JAVA,java,,${JAVA_PATH})
Line 107... Line 114...
107
if test ${acx_java_works} = yes; then
114
if test ${acx_java_works} = yes; then
108
  AC_MSG_RESULT([yes])
115
  AC_MSG_RESULT([yes])
109
 
116
 
110
  AC_MSG_CHECKING([for Java environment])
117
  AC_MSG_CHECKING([for Java environment])
111
 
118
 
112
 
-
 
113
  ## retrieve JAVA_HOME from Java itself if not set 
119
  ## find JAVA_HOME from Java itself unless specified
114
  if test -z "${JAVA_HOME}" ; then
120
  if test -z "${JAVA_HOME}" ; then
115
    R_RUN_JAVA(JAVA_HOME,[-classpath ${getsp_cp} getsp java.home])
121
    R_RUN_JAVA(JAVA_HOME,[-classpath ${getsp_cp} getsp java.home])
116
  fi
122
  fi
117
 
123
 
118
  ## the availability of JAVA_HOME will tell us whether it's supported
124
  ## the availability of JAVA_HOME will tell us whether it's supported
Line 121... Line 127...
121
      AC_MSG_RESULT([not found])
127
      AC_MSG_RESULT([not found])
122
    fi
128
    fi
123
  else
129
  else
124
    AC_MSG_RESULT([in ${JAVA_HOME}])
130
    AC_MSG_RESULT([in ${JAVA_HOME}])
125
 
131
 
-
 
132
    : ${JAVA_LIBS=~autodetect~}
-
 
133
    : ${JAVA_CPPFLAGS=~autodetect~}
-
 
134
    : ${JAVA_LD_LIBRARY_PATH=~autodetect~}
-
 
135
    custom_JAVA_LIBS="${JAVA_LIBS}"
-
 
136
    custom_JAVA_CPPFLAGS="${JAVA_CPPFLAGS}"
-
 
137
    custom_JAVA_LD_LIBRARY_PATH="${JAVA_LD_LIBRARY_PATH}"
-
 
138
 
126
    case "${host_os}" in
139
    case "${host_os}" in
127
      darwin*)
140
      darwin*)
128
        JAVA_LIBS="-framework JavaVM"
141
        JAVA_LIBS="-framework JavaVM"
129
        JAVA_LIBS0="-framework JavaVM"
142
        JAVA_LIBS0="-framework JavaVM"
-
 
143
	JAVA_CPPFLAGS="-I${JAVA_HOME}/include"
-
 
144
	JAVA_CPPFLAGS0='-I$(JAVA_HOME)/include'
130
        JAVA_LD_LIBRARY_PATH=
145
        JAVA_LD_LIBRARY_PATH=
131
        ;;
146
        ;;
132
      *)
147
      *)
133
        R_RUN_JAVA(JAVA_LIBS, [-classpath ${getsp_cp} getsp -libs])
148
        R_RUN_JAVA(JAVA_LIBS, [-classpath ${getsp_cp} getsp -libs])
134
        JAVA_LIBS="${JAVA_LIBS} -ljvm"
149
        JAVA_LIBS="${JAVA_LIBS} -ljvm"
135
        R_RUN_JAVA(JAVA_LD_LIBRARY_PATH, [-classpath ${getsp_cp} getsp java.library.path])
150
        R_RUN_JAVA(JAVA_LD_LIBRARY_PATH, [-classpath ${getsp_cp} getsp java.library.path])
136
 
151
 
137
	JAVA_LIBS0=`echo ${JAVA_LIBS} | sed -e s:${JAVA_HOME}:\$\(JAVA_HOME\):g`
152
	JAVA_LIBS0=`echo ${JAVA_LIBS} | sed -e s:${JAVA_HOME}:\$\(JAVA_HOME\):g`
138
	JAVA_LD_LIBRARY_PATH=`echo ${JAVA_LD_LIBRARY_PATH} | sed -e s:${JAVA_HOME}:\$\(JAVA_HOME\):g`
153
	JAVA_LD_LIBRARY_PATH=`echo ${JAVA_LD_LIBRARY_PATH} | sed -e s:${JAVA_HOME}:\$\(JAVA_HOME\):g`
139
 
154
 
-
 
155
	## includes consist of two parts - jni.h and machine-dependent jni_md.h
-
 
156
	jinc=''
-
 
157
	for pinc in include ../include jre/include; do 
-
 
158
	  if test -e "${JAVA_HOME}/${pinc}/jni.h"; then jinc="${JAVA_HOME}/${pinc}"; break; fi
-
 
159
	done
140
	## FIXME: we may want to figure out whether JAVA_HOME is a symlink
160
	## only if we get jni.h we can try to find jni_md.h
-
 
161
	if test -n "${jinc}"; then
-
 
162
	   JAVA_CPPFLAGS="-I${jinc}"
-
 
163
	   mdinc=''
-
 
164
	   jmdirs=''
141
	## to any paths in JAVA_LD_LIBARARY_PATH in which case we should use
165
	   ## put the most probable locations for each system in the first place
-
 
166
	   case "${host_os}" in
-
 
167
	     linux*)   jmdirs=linux;;
-
 
168
	     bsdi*)    jmdirs=bsdos;;
-
 
169
	     osf*)     jmdirs=alpha;;
-
 
170
	     solaris*) jmdirs=solaris;;
-
 
171
	     freebsd*) jmdirs=freebsd;;
-
 
172
	   esac
-
 
173
	   ## prepend . and append less-likely ones
-
 
174
	   jmdirs=". ${jmdirs} genunix ppc x86 iris hp-ux aix win32 cygwin openbsd"
-
 
175
	   for pimd in ${jmdirs}; do
-
 
176
	     if test -e "${jinc}/${pimd}/jni_md.h"; then jmdinc="${jinc}/${pimd}"; break; fi
-
 
177
	   done
-
 
178
	   if test -z "${jmdinc}"; then
142
	## the symlink instead. This would solve versioning problems across
179
	     # ultima-ratio: use find and pray that it works
-
 
180
	     jmdinc=`find "${jinc}/" -name jni_md.h 2>dev/null |head -n 1 2>/dev/null`
-
 
181
	     if test -n "${jmdinc}"; then jmdinc=`dirname "${jmdinc}"`; fi
-
 
182
	   fi
-
 
183
	   if test -n "${jmdinc}"; then
-
 
184
	     if test "${jmdinc}" != "${jinc}/."; then
-
 
185
	       JAVA_CPPFLAGS="${JAVA_CPPFLAGS} -I${jmdinc}"
143
	## Sun's JDKs.
186
	     fi
-
 
187
	   fi
-
 
188
	fi
-
 
189
	JAVA_CPPFLAGS0=`echo ${JAVA_CPPFLAGS} | sed -e s:${JAVA_HOME}:\$\(JAVA_HOME\):g`
144
        ;;
190
        ;;
145
    esac
191
    esac
-
 
192
 
-
 
193
    ## honor user overrides
-
 
194
    acx_java_uses_custom_flags=no
-
 
195
    if test "${custom_JAVA_LIBS}" != '~autodetect~'; then
-
 
196
      JAVA_LIBS="${custom_JAVA_LIBS}"
-
 
197
      JAVA_LIBS0=`echo ${JAVA_LIBS} | sed -e s:${JAVA_HOME}:\$\(JAVA_HOME\):g`
-
 
198
      acx_java_uses_custom_flags=yes
-
 
199
    fi
-
 
200
    if test "${custom_JAVA_CPPFLAGS}" != '~autodetect~'; then
-
 
201
      JAVA_CPPFLAGS="${custom_JAVA_CPPFLAGS}"
-
 
202
      JAVA_CPPFLAGS0=`echo ${JAVA_CPPFLAGS} | sed -e s:${JAVA_HOME}:\$\(JAVA_HOME\):g`
-
 
203
      acx_java_uses_custom_flags=yes
-
 
204
    fi
-
 
205
    if test "${custom_JAVA_LD_LIBRARY_PATH}" != '~autodetect~'; then
-
 
206
      JAVA_LD_LIBRARY_PATH="${custom_JAVA_LD_LIBRARY_PATH}"
-
 
207
    fi
-
 
208
 
-
 
209
    ## try to link a simple JNI program
-
 
210
    AC_MSG_CHECKING([whether JNI programs can be compiled])
-
 
211
    j_save_LIBS="${LIBS}"
-
 
212
    j_save_CPPF="${CPPFLAGS}"
-
 
213
    LIBS="${JAVA_LIBS}"
-
 
214
    CPPFLAGS="${JAVA_CPPFLAGS}"
-
 
215
    AC_LINK_IFELSE([
-
 
216
#include <jni.h>
-
 
217
int main(void) {
-
 
218
    JNI_CreateJavaVM(0, 0, 0);
-
 
219
    return 0;
146
  
220
}
-
 
221
],[AC_MSG_RESULT(yes)
-
 
222
    LIBS="${j_save_LIBS}"
-
 
223
    CPPFLAGS="${j_save_CPPF}"
-
 
224
],[
-
 
225
    if test "${acx_java_uses_custom_flags}" = yes; then
-
 
226
      AC_MSG_RESULT(no)
-
 
227
      AC_MSG_ERROR([Failed to compile a JNI program with custom JAVA_LIBS/JAVA_CPPFLAGS.
-
 
228
See config.log for details.
-
 
229
Do NOT set JAVA_LIBS/JAVA_CPPFLAGS unless you are sure they are correct!
147
    ## note that we actually don't test JAVA_LIBS - we hope that the detection
230
Java/JNI support is optional unless you set either JAVA_LIBS or JAVA_CPPFLAGS.])
-
 
231
    fi
-
 
232
    ## some OSes/Javas need -lpthread
-
 
233
    LIBS="${LIBS} -lpthread"
148
    ## was correct.
234
    AC_LINK_IFELSE([
-
 
235
#include <jni.h>
-
 
236
int main(void) {
-
 
237
    JNI_CreateJavaVM(0, 0, 0);
-
 
238
    return 0;
-
 
239
}
-
 
240
],[AC_MSG_RESULT([yes (with pthreads)])
-
 
241
    JAVA_LIBS0="${JAVA_LIBS0} -lpthread"
-
 
242
],[AC_MSG_RESULT(no)])
-
 
243
    LIBS="${j_save_LIBS}"
-
 
244
    CPPFLAGS="${j_save_CPPF}"
-
 
245
])
149
 
246
 
150
    have_java=yes
247
    have_java=yes
151
  fi
248
  fi
152
else
249
else
153
  AC_MSG_RESULT([no])
250
  AC_MSG_RESULT([no])
Line 160... Line 257...
160
AC_SUBST(JAVAC)
257
AC_SUBST(JAVAC)
161
AC_SUBST(JAVAH)
258
AC_SUBST(JAVAH)
162
AC_SUBST(JAR)
259
AC_SUBST(JAR)
163
AC_SUBST(JAVA_LD_LIBRARY_PATH)
260
AC_SUBST(JAVA_LD_LIBRARY_PATH)
164
AC_SUBST(JAVA_LIBS0)
261
AC_SUBST(JAVA_LIBS0)
-
 
262
AC_SUBST(JAVA_CPPFLAGS0)
165
])
263
])