]>
Commit | Line | Data |
---|---|---|
ee9dd372 TT |
1 | dnl Process this with autoconf to create configure |
2 | AC_INIT(java/lang/System.java) | |
3 | ||
0d16618c | 4 | dnl Can't be done in LIBGCJ_CONFIGURE because that confuses automake. |
ee9dd372 TT |
5 | AC_CONFIG_AUX_DIR(..) |
6 | ||
7 | AC_CANONICAL_SYSTEM | |
347b9364 | 8 | AC_PROG_LN_S |
ee9dd372 TT |
9 | |
10 | dnl We use these options to decide which functions to include. | |
11 | AC_ARG_WITH(target-subdir, | |
7941ceab | 12 | [ --with-target-subdir=SUBDIR |
ffccc6be | 13 | configuring in a subdirectory]) |
ee9dd372 | 14 | AC_ARG_WITH(cross-host, |
7941ceab | 15 | [ --with-cross-host=HOST configuring with a cross compiler]) |
ee9dd372 TT |
16 | |
17 | LIBGCJ_CONFIGURE(.) | |
18 | ||
19 | AM_CONFIG_HEADER(include/config.h) | |
20 | ||
7af85558 TT |
21 | # Only use libltdl for native builds. |
22 | if test -z "${with_cross_host}"; then | |
23 | AC_LIBLTDL_CONVENIENCE | |
24 | AC_LIBTOOL_DLOPEN | |
25 | DIRLTDL=libltdl | |
26 | AC_DEFINE(USE_LTDL) | |
27 | # Sigh. Libtool's macro doesn't do the right thing. | |
28 | INCLTDL="-I\$(top_srcdir)/libltdl $INCLTDL" | |
29 | fi | |
30 | AC_SUBST(INCLTDL) | |
31 | AC_SUBST(LIBLTDL) | |
32 | AC_SUBST(DIRLTDL) | |
a3ffcff3 | 33 | AM_PROG_LIBTOOL |
4f5a5d5c | 34 | AC_CONFIG_SUBDIRS($DIRLTDL) |
a3ffcff3 | 35 | |
ee9dd372 TT |
36 | if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then |
37 | COMPPATH=. | |
38 | else | |
39 | COMPPATH=.. | |
40 | fi | |
41 | AC_SUBST(COMPPATH) | |
42 | ||
43 | dnl The -no-testsuite modules omit the test subdir. | |
44 | AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite) | |
45 | ||
46 | dnl See whether the user prefers size or speed for Character. | |
47 | dnl The default is size. | |
48 | AC_ARG_ENABLE(fast-character, | |
7941ceab | 49 | [ --enable-fast-character prefer speed over size for Character], |
ee9dd372 TT |
50 | # Nothing |
51 | , AC_DEFINE(COMPACT_CHARACTER)) | |
52 | ||
ffccc6be AG |
53 | dnl Should the runtime set system properties by examining the |
54 | dnl environment variable GCJ_PROPERTIES? | |
55 | AC_ARG_ENABLE(getenv-properties, | |
56 | [ --disable-getenv-properties | |
57 | don't set system properties from GCJ_PROPERTIES]) | |
58 | ||
59 | dnl Whether GCJ_PROPERTIES is used depends on the target. | |
60 | if test -n "$enable_getenv_properties"; then | |
61 | enable_getenv_properties=${enable_getenv_properties_default-yes} | |
62 | fi | |
63 | if test "$enable_getenv_properties" = no; then | |
64 | AC_DEFINE(DISABLE_GETENV_PROPERTIES) | |
65 | fi | |
66 | ||
ee9dd372 | 67 | dnl See if the user has requested runtime debugging. |
213858c0 BM |
68 | LIBGCJDEBUG="false" |
69 | AC_SUBST(LIBGCJDEBUG) | |
ee9dd372 | 70 | AC_ARG_ENABLE(libgcj-debug, |
7941ceab | 71 | [ --enable-libgcj-debug enable runtime debugging code], |
ee9dd372 | 72 | if test "$enable_libgcj_debug" = yes; then |
213858c0 BM |
73 | AC_DEFINE(DEBUG) |
74 | LIBGCJDEBUG="true" | |
ee9dd372 TT |
75 | fi) |
76 | ||
3cf88fb4 | 77 | dnl See if the user has the interpreter included. |
58eb6e7c | 78 | AC_ARG_ENABLE(interpreter, |
7941ceab | 79 | [ --enable-interpreter enable interpreter], |
58eb6e7c | 80 | if test "$enable_interpreter" = yes; then |
b11f6430 AG |
81 | # This can also be set in configure.host. |
82 | libgcj_interpreter=yes | |
f7ccaa38 BM |
83 | elif test "$enable_interpreter" = no; then |
84 | libgcj_interpreter=no | |
58eb6e7c AG |
85 | fi) |
86 | ||
b11f6430 AG |
87 | if test "$libgcj_interpreter" = yes; then |
88 | AC_DEFINE(INTERPRETER) | |
89 | fi | |
90 | ||
52a11cbf RH |
91 | AC_MSG_CHECKING([for exception model to use]) |
92 | AC_LANG_SAVE | |
93 | AC_LANG_CPLUSPLUS | |
3cf88fb4 | 94 | AC_ARG_ENABLE(sjlj-exceptions, |
52a11cbf RH |
95 | [ --enable-sjlj-exceptions force use of builtin_setjmp for exceptions], |
96 | [:], | |
97 | [dnl Botheration. Now we've got to detect the exception model. | |
98 | dnl Link tests against libgcc.a are problematic since -- at least | |
99 | dnl as of this writing -- we've not been given proper -L bits for | |
100 | dnl single-tree newlib and libgloss. | |
101 | dnl | |
102 | dnl This is what AC_TRY_COMPILE would do if it didn't delete the | |
103 | dnl conftest files before we got a change to grep them first. | |
104 | cat > conftest.$ac_ext << EOF | |
105 | [#]line __oline__ "configure" | |
106 | struct S { ~S(); }; | |
107 | void bar(); | |
108 | void foo() | |
109 | { | |
110 | S s; | |
111 | bar(); | |
112 | } | |
113 | EOF | |
114 | old_CXXFLAGS="$CXXFLAGS" | |
115 | CXXFLAGS=-S | |
116 | if AC_TRY_EVAL(ac_compile); then | |
117 | if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then | |
118 | enable_sjlj_exceptions=yes | |
119 | elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then | |
120 | enable_sjlj_exceptions=no | |
121 | fi | |
122 | fi | |
123 | CXXFLAGS="$old_CXXFLAGS" | |
124 | rm -f conftest*]) | |
125 | if test x$enable_sjlj_exceptions = xyes; then | |
126 | AC_DEFINE(SJLJ_EXCEPTIONS, 1, | |
127 | [Define if the compiler is configured for setjmp/longjmp exceptions.]) | |
128 | ac_exception_model_name=sjlj | |
129 | elif test x$enable_sjlj_exceptions = xno; then | |
130 | ac_exception_model_name="call frame" | |
131 | else | |
132 | AC_MSG_ERROR([unable to detect exception model]) | |
3cf88fb4 | 133 | fi |
52a11cbf RH |
134 | AC_LANG_RESTORE |
135 | AC_MSG_RESULT($ac_exception_model_name) | |
3cf88fb4 | 136 | |
7013e7cd AG |
137 | AC_MSG_CHECKING([for data_start]) |
138 | LIBDATASTARTSPEC= | |
139 | NEEDS_DATA_START= | |
140 | AC_TRY_LINK([extern int data_start;], [return ((int) &data_start);], | |
141 | [AC_MSG_RESULT(found it)], | |
58d2986d | 142 | [LIBDATASTARTSPEC="-u data_start libgcjdata.a%s" |
7013e7cd AG |
143 | NEEDS_DATA_START=yes |
144 | AC_MSG_RESULT(missing)]) | |
145 | AC_SUBST(LIBDATASTARTSPEC) | |
146 | ||
4b68fe8a TT |
147 | dnl See if the user wants to disable java.net. This is the mildly |
148 | dnl ugly way that we admit that target-side configuration sucks. | |
149 | AC_ARG_ENABLE(java-net, | |
150 | [ --disable-java-net disable java.net]) | |
151 | ||
152 | dnl Whether java.net is built by default can depend on the target. | |
153 | if test -n "$enable_java_net"; then | |
154 | enable_java_net=${enable_java_net_default-yes} | |
155 | fi | |
006d4a9b | 156 | if test "$enable_java_net" = no; then |
4b68fe8a TT |
157 | AC_DEFINE(DISABLE_JAVA_NET) |
158 | fi | |
159 | ||
54c2f04b AG |
160 | dnl See if the user wants to disable JVMPI support. |
161 | AC_ARG_ENABLE(jvmpi, | |
162 | [ --disable-jvmpi disable JVMPI support]) | |
163 | ||
164 | if test "$enable_jvmpi" != no; then | |
165 | AC_DEFINE(ENABLE_JVMPI) | |
166 | fi | |
167 | ||
ee9dd372 TT |
168 | dnl If the target is an eCos system, use the appropriate eCos |
169 | dnl I/O routines. | |
170 | dnl FIXME: this should not be a local option but a global target | |
171 | dnl system; at present there is no eCos target. | |
172 | TARGET_ECOS="no" | |
173 | AC_ARG_WITH(ecos, | |
7941ceab | 174 | [ --with-ecos enable runtime eCos target support], |
ee9dd372 TT |
175 | TARGET_ECOS="$with_ecos" |
176 | ) | |
177 | ||
178 | case "$TARGET_ECOS" in | |
179 | no) | |
180 | FILE_DESCRIPTOR=natFileDescriptorPosix.cc | |
ab31268c | 181 | PROCESS=${PROCESS-Posix} |
ee9dd372 TT |
182 | ;; |
183 | *) | |
184 | FILE_DESCRIPTOR=natFileDescriptorEcos.cc | |
42962a48 | 185 | PROCESS=Ecos |
ee9dd372 TT |
186 | AC_DEFINE(ECOS) |
187 | ;; | |
188 | esac | |
189 | ||
0d16618c TT |
190 | AC_EGREP_HEADER(uint32_t, stdint.h, AC_DEFINE(HAVE_INT32_DEFINED)) |
191 | AC_EGREP_HEADER(uint32_t, inttypes.h, AC_DEFINE(HAVE_INT32_DEFINED)) | |
192 | AC_EGREP_HEADER(u_int32_t, sys/types.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED)) | |
193 | AC_EGREP_HEADER(u_int32_t, sys/config.h, AC_DEFINE(HAVE_BSD_INT32_DEFINED)) | |
194 | ||
ee9dd372 TT |
195 | |
196 | dnl These may not be defined in a non-ANS conformant embedded system. | |
197 | dnl FIXME: Should these case a runtime exception in that case? | |
198 | AC_EGREP_HEADER(mktime, time.h, AC_DEFINE(HAVE_MKTIME)) | |
199 | AC_EGREP_HEADER(localtime, time.h, AC_DEFINE(HAVE_LOCALTIME)) | |
200 | ||
201 | dnl Create the subdirectory for natFileDescriptor.cc, or the attempt | |
202 | dnl to create the link will fail. | |
203 | test -d java || mkdir java | |
204 | test -d java/io || mkdir java/io | |
213858c0 | 205 | test -d gnu || mkdir gnu |
ee9dd372 TT |
206 | AC_LINK_FILES(java/io/$FILE_DESCRIPTOR, java/io/natFileDescriptor.cc) |
207 | ||
42962a48 TT |
208 | dnl Likewise for ConcreteProcess.java and natConcreteProcess.cc. |
209 | test -d java/lang || mkdir java/lang | |
210 | AC_LINK_FILES(java/lang/${PROCESS}Process.java, java/lang/ConcreteProcess.java) | |
211 | AC_LINK_FILES(java/lang/nat${PROCESS}Process.cc, java/lang/natConcreteProcess.cc) | |
212 | ||
f994389b TT |
213 | SYSTEMSPEC= |
214 | AC_SUBST(SYSTEMSPEC) | |
215 | ||
0f9c645e AG |
216 | LIBGCJTESTSPEC="-L`pwd`/.libs -rpath `pwd`/.libs" |
217 | AC_SUBST(LIBGCJTESTSPEC) | |
218 | ||
f994389b | 219 | AC_ARG_WITH(system-zlib, |
7941ceab | 220 | [ --with-system-zlib use installed libz]) |
f994389b TT |
221 | ZLIBSPEC= |
222 | AC_SUBST(ZLIBSPEC) | |
0f9c645e AG |
223 | ZLIBTESTSPEC= |
224 | AC_SUBST(ZLIBTESTSPEC) | |
f994389b TT |
225 | |
226 | dnl FIXME: this should be _libs on some hosts. | |
227 | libsubdir=.libs | |
228 | ||
ee9dd372 TT |
229 | dnl Allow the GC to be disabled. Can be useful when debugging. |
230 | AC_MSG_CHECKING([for garbage collector to use]) | |
231 | AC_ARG_ENABLE(java-gc, | |
232 | changequote(<<,>>)dnl | |
7941ceab | 233 | << --enable-java-gc=TYPE choose garbage collector [boehm]>>, |
ee9dd372 TT |
234 | changequote([,]) |
235 | GC=$enableval, | |
236 | GC=boehm) | |
237 | GCLIBS= | |
238 | GCINCS= | |
239 | GCDEPS= | |
240 | GCOBJS= | |
f994389b | 241 | GCSPEC= |
bf3b8e42 | 242 | JC1GCSPEC= |
0f9c645e | 243 | GCTESTSPEC= |
ee9dd372 TT |
244 | case "$GC" in |
245 | boehm) | |
246 | AC_MSG_RESULT(boehm) | |
a3ffcff3 | 247 | GCDEPS='$(top_builddir)/../boehm-gc/libgcjgc.la' |
f994389b TT |
248 | # We include the path to the boehm-gc build directory. |
249 | # See Makefile.am to understand why. | |
250 | GCLIBS="$GCDEPS -L\$(here)/../boehm-gc/$libsubdir" | |
ee9dd372 | 251 | GCINCS='-I$(top_srcdir)/../boehm-gc -I$(top_builddir)/../boehm-gc' |
f994389b | 252 | GCSPEC='-lgcjgc' |
bf3b8e42 | 253 | JC1GCSPEC='-fuse-boehm-gc' |
0f9c645e | 254 | GCTESTSPEC="-L`pwd`/../boehm-gc/.libs -rpath `pwd`/../boehm-gc/.libs" |
ee9dd372 TT |
255 | dnl We also want to pick up some cpp flags required when including |
256 | dnl boehm-config.h. Yuck. | |
257 | GCINCS="$GCINCS `cat ../boehm-gc/boehm-cflags`" | |
a3ffcff3 | 258 | GCOBJS=boehm.lo |
ee9dd372 TT |
259 | GCHDR=boehm-gc.h |
260 | dnl The POSIX thread support needs to know this. | |
261 | AC_DEFINE(HAVE_BOEHM_GC) | |
262 | ;; | |
263 | no) | |
264 | AC_MSG_RESULT(none) | |
a3ffcff3 | 265 | GCOBJS=nogc.lo |
ee9dd372 TT |
266 | GCHDR=no-gc.h |
267 | ;; | |
268 | *) | |
269 | AC_MSG_ERROR(unrecognized collector \"$GC\") | |
270 | ;; | |
271 | esac | |
272 | AC_SUBST(GCLIBS) | |
273 | AC_SUBST(GCINCS) | |
274 | AC_SUBST(GCDEPS) | |
275 | AC_SUBST(GCOBJS) | |
f994389b | 276 | AC_SUBST(GCSPEC) |
bf3b8e42 | 277 | AC_SUBST(JC1GCSPEC) |
0f9c645e | 278 | AC_SUBST(GCTESTSPEC) |
ee9dd372 TT |
279 | AC_LINK_FILES(include/$GCHDR, include/java-gc.h) |
280 | ||
281 | ||
282 | dnl Note that this code is kept in sync with similar code in gcc/configure.in. | |
283 | dnl In particular both packages must make the same decision about which | |
284 | dnl thread package to use. | |
285 | AC_MSG_CHECKING([for threads package to use]) | |
7941ceab | 286 | AC_ARG_ENABLE(threads, [ --enable-threads=TYPE choose threading package], |
ee9dd372 TT |
287 | THREADS=$enableval, |
288 | dnl FIXME: figure out native threads to use here. | |
289 | THREADS=no) | |
290 | ||
291 | if test "$THREADS" = yes; then | |
292 | case "$host" in | |
293 | *-*-vxworks*) | |
294 | THREADS=vxworks | |
295 | ;; | |
296 | *-*-linux*) | |
297 | # FIXME: this isn't correct in all cases. | |
298 | THREADS=posix | |
299 | ;; | |
300 | *-*-win*) | |
301 | THREADS=win32 | |
302 | ;; | |
303 | *-*-irix*) | |
395e3bf9 GZ |
304 | # FIXME: for now, choose POSIX, because we implement that. |
305 | # Later, choose irix threads. | |
306 | THREADS=posix | |
ee9dd372 TT |
307 | ;; |
308 | *-*-solaris*) | |
309 | # FIXME: for now, choose POSIX, because we implement that. | |
310 | # Later, choose solaris threads. | |
311 | THREADS=posix | |
312 | ;; | |
313 | *) | |
314 | # For now. | |
315 | THREADS=none | |
316 | ;; | |
317 | esac | |
318 | fi | |
319 | ||
320 | case "$THREADS" in | |
321 | no | none | single) | |
322 | THREADS=none | |
323 | ;; | |
324 | posix | pthreads) | |
325 | THREADS=posix | |
326 | case "$host" in | |
327 | *-*-linux*) | |
328 | AC_DEFINE(LINUX_THREADS) | |
329 | ;; | |
330 | esac | |
331 | ;; | |
ee9dd372 TT |
332 | decosf1 | irix | mach | os2 | solaris | win32 | dce | vxworks) |
333 | AC_MSG_ERROR(thread package $THREADS not yet supported) | |
334 | ;; | |
335 | *) | |
336 | AC_MSG_ERROR($THREADS is an unknown thread package) | |
337 | ;; | |
338 | esac | |
339 | AC_MSG_RESULT($THREADS) | |
340 | ||
341 | THREADLIBS= | |
342 | THREADINCS= | |
343 | THREADDEPS= | |
344 | THREADOBJS= | |
345 | THREADH= | |
f994389b | 346 | THREADSPEC= |
ee9dd372 TT |
347 | case "$THREADS" in |
348 | posix) | |
349 | THREADLIBS=-lpthread | |
f994389b | 350 | THREADSPEC=-lpthread |
a3ffcff3 | 351 | THREADOBJS=posix-threads.lo |
ee9dd372 TT |
352 | THREADH=posix-threads.h |
353 | # MIT pthreads doesn't seem to have the mutexattr functions. | |
354 | # But for now we don't check for it. We just assume you aren't | |
355 | # using MIT pthreads. | |
356 | AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT) | |
7f6e0fe6 TT |
357 | |
358 | # If we're using the Boehm GC, then we happen to know that it | |
359 | # defines _REENTRANT, so we don't bother. Eww. | |
360 | if test "$GC" != boehm; then | |
361 | AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads]) | |
362 | fi | |
363 | AC_DEFINE(_POSIX_PTHREAD_SEMANTICS, 1, [Required define if using POSIX threads]) | |
ee9dd372 TT |
364 | ;; |
365 | ||
ee9dd372 | 366 | none) |
a3ffcff3 | 367 | THREADOBJS=no-threads.lo |
ee9dd372 TT |
368 | THREADH=no-threads.h |
369 | ;; | |
370 | esac | |
371 | AC_LINK_FILES(include/$THREADH, include/java-threads.h) | |
372 | AC_SUBST(THREADLIBS) | |
373 | AC_SUBST(THREADINCS) | |
374 | AC_SUBST(THREADDEPS) | |
375 | AC_SUBST(THREADOBJS) | |
f994389b | 376 | AC_SUBST(THREADSPEC) |
ee9dd372 TT |
377 | |
378 | AM_CONDITIONAL(USING_GCC, test "$GCC" = yes) | |
379 | ||
380 | CANADIAN=no | |
381 | NULL_TARGET=no | |
f2646bf2 | 382 | NATIVE=yes |
ee9dd372 | 383 | |
52a11cbf | 384 | # Find unwind.h and support headers. If we're in the tree with |
ee9dd372 TT |
385 | # gcc, then look there. Otherwise look in compat-include. If all else |
386 | # fails, just hope the user has set things up somehow. | |
52a11cbf RH |
387 | echo "probing $srcdir/../gcc/unwind.h" |
388 | if test -r $srcdir/../gcc/unwind.h; then | |
389 | GCC_UNWIND_INCLUDE='-I$(top_srcdir)/../gcc' | |
ee9dd372 TT |
390 | else |
391 | if test -d $srcdir/../compat-include; then | |
52a11cbf | 392 | GCC_UNWIND_INCLUDE='-I$(top_srcdir)/../compat-include' |
ee9dd372 | 393 | else |
52a11cbf | 394 | GCC_UNWIND_INCLUDE= |
ee9dd372 TT |
395 | fi |
396 | fi | |
397 | ||
398 | if test -n "${with_cross_host}"; then | |
399 | # We are being configured with a cross compiler. AC_REPLACE_FUNCS | |
400 | # may not work correctly, because the compiler may not be able to | |
401 | # link executables. | |
402 | ||
403 | # We assume newlib. This lets us hard-code the functions we know | |
404 | # we'll have. | |
405 | AC_DEFINE(HAVE_MEMMOVE) | |
406 | AC_DEFINE(HAVE_MEMCPY) | |
407 | AC_DEFINE(HAVE_STRERROR) | |
ee9dd372 TT |
408 | AC_DEFINE(HAVE_GMTIME_R) |
409 | AC_DEFINE(HAVE_LOCALTIME_R) | |
410 | dnl This is only for POSIX threads. | |
411 | AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT) | |
412 | dnl We also assume we are using gcc, which provides alloca. | |
413 | AC_DEFINE(HAVE_ALLOCA) | |
414 | ||
6150df62 TT |
415 | dnl Assume we do not have getuid and friends. |
416 | AC_DEFINE(NO_GETUID) | |
417 | ||
9a480d69 | 418 | ZLIBSPEC=-lzgcj |
0f9c645e | 419 | ZLIBTESTSPEC="-L`pwd`/../zlib/.libs -rpath `pwd`/../zlib/.libs" |
f994389b | 420 | |
ee9dd372 TT |
421 | # If Canadian cross, then don't pick up tools from the build |
422 | # directory. | |
423 | if test "$build" != "$with_cross_host"; then | |
424 | CANADIAN=yes | |
52a11cbf | 425 | GCC_UNWIND_INCLUDE= |
f2646bf2 | 426 | GCJ="${target_alias}-gcj" |
01b02b11 TT |
427 | else |
428 | GCJ= | |
ee9dd372 | 429 | fi |
f2646bf2 | 430 | NATIVE=no |
ee9dd372 | 431 | else |
1d189890 | 432 | AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep) |
6150df62 | 433 | AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd) |
fe5e3b97 | 434 | AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath) |
5662d533 | 435 | AC_CHECK_FUNCS(iconv nl_langinfo setlocale) |
ee9dd372 | 436 | AC_CHECK_FUNCS(inet_aton inet_addr, break) |
6130b0af | 437 | AC_CHECK_FUNCS(inet_pton uname inet_ntoa) |
283a159f AH |
438 | AC_CHECK_FUNCS(backtrace fork execvp pipe) |
439 | AC_CHECK_HEADERS(execinfo.h unistd.h dlfcn.h) | |
b9f243c2 AH |
440 | AC_CHECK_LIB(dl, dladdr, [ |
441 | AC_DEFINE(HAVE_DLADDR)]) | |
283a159f AH |
442 | AC_CHECK_FILES(/proc/self/exe, [ |
443 | AC_DEFINE(HAVE_PROC_SELF_EXE)]) | |
ee9dd372 TT |
444 | |
445 | AC_CHECK_FUNCS(gethostbyname_r, [ | |
446 | AC_DEFINE(HAVE_GETHOSTBYNAME_R) | |
447 | # There are two different kinds of gethostbyname_r. | |
448 | # We look for the one that returns `int'. | |
449 | # Hopefully this check is robust enough. | |
450 | AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [ | |
34c5c0e1 AO |
451 | AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT)]) |
452 | ||
453 | case " $GCINCS " in | |
454 | *" -D_REENTRANT "*) ;; | |
455 | *) | |
456 | dnl On DU4.0, gethostbyname_r is only declared with -D_REENTRANT | |
457 | AC_CACHE_CHECK([whether gethostbyname_r declaration requires -D_REENTRANT], | |
458 | [libjava_cv_gethostbyname_r_needs_reentrant], | |
459 | [ AC_LANG_SAVE | |
460 | AC_LANG_CPLUSPLUS | |
461 | AC_TRY_COMPILE([#include <netdb.h>], | |
462 | [gethostbyname_r("", 0, 0);], | |
463 | [libjava_cv_gethostbyname_r_needs_reentrant=no], [dnl | |
464 | CPPFLAGS_SAVE="$CPPFLAGS" | |
465 | CPPFLAGS="$CPPFLAGS -D_REENTRANT" | |
466 | AC_TRY_COMPILE([#include <netdb.h>], [gethostbyname_r("", 0, 0);], | |
467 | [libjava_cv_gethostbyname_r_needs_reentrant=yes], | |
468 | [libjava_cv_gethostbyname_r_needs_reentrant=fail]) | |
469 | CPPFLAGS="$CPPFLAGS_SAVE" | |
470 | ]) | |
471 | AC_LANG_RESTORE | |
472 | ]) | |
473 | if test "x$libjava_cv_gethostbyname_r_needs_reentrant" = xyes; then | |
7f6e0fe6 | 474 | AC_DEFINE(_REENTRANT, 1, [Required define if using POSIX threads]) |
34c5c0e1 AO |
475 | fi |
476 | ;; | |
477 | esac | |
478 | ||
479 | AC_CACHE_CHECK([for struct hostent_data], | |
480 | [libjava_cv_struct_hostent_data], [dnl | |
481 | AC_TRY_COMPILE([ | |
482 | #if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT) | |
483 | # define _REENTRANT 1 | |
484 | #endif | |
485 | #include <netdb.h>], [struct hostent_data data;], | |
486 | [libjava_cv_struct_hostent_data=yes], | |
487 | [libjava_cv_struct_hostent_data=no])]) | |
488 | if test "x$libjava_cv_struct_hostent_data" = xyes; then | |
489 | AC_DEFINE(HAVE_STRUCT_HOSTENT_DATA, 1, | |
490 | [Define if struct hostent_data is defined in netdb.h]) | |
491 | fi | |
492 | ]) | |
ee9dd372 TT |
493 | |
494 | AC_CHECK_FUNCS(gethostbyaddr_r, [ | |
495 | AC_DEFINE(HAVE_GETHOSTBYADDR_R) | |
496 | # There are two different kinds of gethostbyaddr_r. | |
497 | # We look for the one that returns `int'. | |
498 | # Hopefully this check is robust enough. | |
499 | AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [ | |
500 | AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])]) | |
501 | ||
502 | AC_CHECK_FUNCS(gethostname, [ | |
503 | AC_DEFINE(HAVE_GETHOSTNAME) | |
504 | AC_EGREP_HEADER(gethostname, unistd.h, [ | |
505 | AC_DEFINE(HAVE_GETHOSTNAME_DECL)])]) | |
506 | ||
bc5afba4 TT |
507 | # Look for these functions in the thread library, but only bother |
508 | # if using POSIX threads. | |
509 | if test "$THREADS" = posix; then | |
510 | save_LIBS="$LIBS" | |
511 | LIBS="$LIBS $THREADLIBS" | |
512 | # Some POSIX thread systems don't have pthread_mutexattr_settype. | |
513 | # E.g., Solaris. | |
514 | AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np) | |
515 | ||
516 | # Look for sched_yield. Up to Solaris 2.6, it is in libposix4, since | |
517 | # Solaris 7 the name librt is preferred. | |
518 | AC_CHECK_FUNCS(sched_yield, , [ | |
519 | AC_CHECK_LIB(rt, sched_yield, [ | |
520 | AC_DEFINE(HAVE_SCHED_YIELD) | |
521 | THREADLIBS="$THREADLIBS -lrt" | |
f1b856d9 | 522 | THREADSPEC="$THREADSPEC -lrt"], [ |
bc5afba4 TT |
523 | AC_CHECK_LIB(posix4, sched_yield, [ |
524 | AC_DEFINE(HAVE_SCHED_YIELD) | |
525 | THREADLIBS="$THREADLIBS -lposix4" | |
f1b856d9 | 526 | THREADSPEC="$THREADSPEC -lposix4"])])]) |
bc5afba4 TT |
527 | LIBS="$save_LIBS" |
528 | ||
529 | # We can save a little space at runtime if the mutex has m_count | |
530 | # or __m_count. This is a nice hack for Linux. | |
531 | AC_TRY_COMPILE([#include <pthread.h>], [ | |
532 | extern pthread_mutex_t *mutex; int q = mutex->m_count; | |
533 | ], AC_DEFINE(PTHREAD_MUTEX_HAVE_M_COUNT), [ | |
534 | AC_TRY_COMPILE([#include <pthread.h>], [ | |
535 | extern pthread_mutex_t *mutex; int q = mutex->__m_count; | |
536 | ], AC_DEFINE(PTHREAD_MUTEX_HAVE___M_COUNT))]) | |
537 | fi | |
ee9dd372 TT |
538 | |
539 | # We require a way to get the time. | |
540 | time_found=no | |
541 | AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes) | |
542 | if test "$time_found" = no; then | |
543 | AC_MSG_ERROR([no function found to get the time]) | |
544 | fi | |
545 | ||
138607df | 546 | AC_CHECK_FUNCS(memmove) |
ee9dd372 TT |
547 | |
548 | # We require memcpy. | |
549 | memcpy_found=no | |
550 | AC_CHECK_FUNCS(memcpy, memcpy_found=yes) | |
551 | if test "$memcpy_found" = no; then | |
552 | AC_MSG_ERROR([memcpy is required]) | |
553 | fi | |
554 | ||
f994389b TT |
555 | # Some library-finding code we stole from Tcl. |
556 | #-------------------------------------------------------------------- | |
557 | # Check for the existence of the -lsocket and -lnsl libraries. | |
558 | # The order here is important, so that they end up in the right | |
559 | # order in the command line generated by make. Here are some | |
560 | # special considerations: | |
561 | # 1. Use "connect" and "accept" to check for -lsocket, and | |
562 | # "gethostbyname" to check for -lnsl. | |
563 | # 2. Use each function name only once: can't redo a check because | |
564 | # autoconf caches the results of the last check and won't redo it. | |
565 | # 3. Use -lnsl and -lsocket only if they supply procedures that | |
566 | # aren't already present in the normal libraries. This is because | |
567 | # IRIX 5.2 has libraries, but they aren't needed and they're | |
568 | # bogus: they goof up name resolution if used. | |
569 | # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. | |
570 | # To get around this problem, check for both libraries together | |
571 | # if -lsocket doesn't work by itself. | |
572 | #-------------------------------------------------------------------- | |
573 | ||
574 | AC_CACHE_CHECK([for socket libraries], gcj_cv_lib_sockets, | |
575 | [gcj_cv_lib_sockets= | |
576 | gcj_checkBoth=0 | |
577 | unset ac_cv_func_connect | |
578 | AC_CHECK_FUNC(connect, gcj_checkSocket=0, gcj_checkSocket=1) | |
579 | if test "$gcj_checkSocket" = 1; then | |
580 | unset ac_cv_func_connect | |
581 | AC_CHECK_LIB(socket, main, gcj_cv_lib_sockets="-lsocket", | |
582 | gcj_checkBoth=1) | |
583 | fi | |
584 | if test "$gcj_checkBoth" = 1; then | |
585 | gcj_oldLibs=$LIBS | |
586 | LIBS="$LIBS -lsocket -lnsl" | |
587 | unset ac_cv_func_accept | |
588 | AC_CHECK_FUNC(accept, | |
589 | [gcj_checkNsl=0 | |
590 | gcj_cv_lib_sockets="-lsocket -lnsl"]) | |
591 | unset ac_cv_func_accept | |
592 | LIBS=$gcj_oldLibs | |
593 | fi | |
594 | unset ac_cv_func_gethostbyname | |
595 | gcj_oldLibs=$LIBS | |
596 | LIBS="$LIBS $gcj_cv_lib_sockets" | |
597 | AC_CHECK_FUNC(gethostbyname, , | |
598 | [AC_CHECK_LIB(nsl, main, | |
599 | [gcj_cv_lib_sockets="$gcj_cv_lib_sockets -lnsl"])]) | |
600 | unset ac_cv_func_gethostbyname | |
601 | LIBS=$gcj_oldLIBS | |
602 | ]) | |
603 | SYSTEMSPEC="$SYSTEMSPEC $gcj_cv_lib_sockets" | |
604 | ||
605 | if test "$with_system_zlib" = yes; then | |
606 | AC_CHECK_LIB(z, deflate, ZLIBSPEC=-lz, ZLIBSPEC=-lzgcj) | |
607 | else | |
608 | ZLIBSPEC=-lzgcj | |
0f9c645e | 609 | ZLIBTESTSPEC="-L`pwd`/../zlib/.libs -rpath `pwd`/../zlib/.libs" |
f994389b TT |
610 | fi |
611 | ||
4b7f154f TT |
612 | # On Solaris, and maybe other architectures, the Boehm collector |
613 | # requires -ldl. | |
614 | if test "$GC" = boehm; then | |
615 | AC_CHECK_LIB(dl, main, SYSTEMSPEC="$SYSTEMSPEC -ldl") | |
616 | fi | |
617 | ||
58d2986d AO |
618 | if test -z "${with_multisubdir}"; then |
619 | builddotdot=. | |
620 | else | |
621 | changequote(<<,>>) | |
622 | builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'` | |
623 | changequote([,]) | |
624 | fi | |
9121d9b1 TT |
625 | if test -x "${builddotdot}/../../gcc/gcj"; then |
626 | dir="`cd ${builddotdot}/../../gcc && pwd`" | |
58d2986d | 627 | GCJ="$dir/gcj -B`pwd`/ -B$dir/" |
01b02b11 | 628 | else |
ee9dd372 TT |
629 | CANADIAN=yes |
630 | NULL_TARGET=yes | |
58d2986d | 631 | GCJ="gcj -B`pwd`/" |
01b02b11 | 632 | fi |
ee9dd372 TT |
633 | fi |
634 | ||
58d2986d AO |
635 | # Create it, so that compile/link tests don't fail |
636 | test -f libgcj.spec || touch libgcj.spec | |
58d2986d AO |
637 | |
638 | LT_AC_PROG_GCJ | |
639 | ||
99444711 TT |
640 | dnl FIXME: cross compilation |
641 | AC_CHECK_SIZEOF(void *) | |
642 | ||
f994389b TT |
643 | ZLIBS= |
644 | ZDEPS= | |
41e0e0cd | 645 | ZINCS= |
f994389b TT |
646 | if test "x$ZLIBSPEC" = "x-lzgcj"; then |
647 | # We include the path to the zlib build directory. | |
648 | # See Makefile.am to understand why. | |
649 | ZDEPS='$(top_builddir)/../zlib/libzgcj.la' | |
650 | ZLIBS="$ZDEPS -L\$(here)/../zlib/$libsubdir" | |
41e0e0cd | 651 | ZINCS='-I$(top_srcdir)/../zlib' |
f994389b TT |
652 | else |
653 | ZLIBS="$ZLIBSPEC" | |
654 | fi | |
655 | AC_SUBST(ZLIBS) | |
656 | AC_SUBST(ZDEPS) | |
41e0e0cd | 657 | AC_SUBST(ZINCS) |
67a60018 | 658 | AC_SUBST(DIVIDESPEC) |
f994389b | 659 | |
ee9dd372 TT |
660 | AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes) |
661 | AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes) | |
f2646bf2 | 662 | AM_CONDITIONAL(NATIVE, test "$NATIVE" = yes || test "$NULL_TARGET" = yes) |
b48ed568 | 663 | AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host") |
7013e7cd | 664 | AM_CONDITIONAL(NEEDS_DATA_START, test "$NEEDS_DATA_START" = yes && test "$NATIVE" = yes) |
52a11cbf | 665 | AC_SUBST(GCC_UNWIND_INCLUDE) |
ee9dd372 | 666 | |
01b02b11 | 667 | # Determine gcj version number. |
01b02b11 TT |
668 | changequote(<<,>>) |
669 | gcjvers="`$GCJ -v 2>&1 | sed -n 's/^.*version \([^ ]*\).*$/\1/p'`" | |
670 | changequote([,]) | |
671 | AC_DEFINE_UNQUOTED(GCJVERSION, "$gcjvers") | |
672 | ||
ee9dd372 TT |
673 | AC_SUBST(AM_RUNTESTFLAGS) |
674 | ||
7bee4c4c AG |
675 | dnl Work around a g++ bug. Reported to gcc-bugs@gcc.gnu.org on Jan 22, 2000. |
676 | AC_MSG_CHECKING([for g++ -ffloat-store bug]) | |
677 | save_CFLAGS="$CFLAGS" | |
678 | CFLAGS="-x c++ -O2 -ffloat-store" | |
679 | AC_TRY_COMPILE([#include <math.h>], , | |
680 | [AC_MSG_RESULT(no)], | |
681 | [AC_DEFINE(__NO_MATH_INLINES) | |
682 | AC_MSG_RESULT(yes)]) | |
683 | CFLAGS="$save_CFLAGS" | |
684 | ||
ee9dd372 TT |
685 | dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there. |
686 | dnl On that system, sys/ioctl.h will not include sys/filio.h unless | |
687 | dnl BSD_COMP is defined; just including sys/filio.h is simpler. | |
b755792e | 688 | AC_CHECK_HEADERS(unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/filio.h sys/stat.h sys/select.h sys/socket.h netinet/in.h arpa/inet.h netdb.h pwd.h sys/config.h inttypes.h stdint.h langinfo.h locale.h) |
ee9dd372 TT |
689 | dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h |
690 | dnl for now. If you change this, you also must update natFile.cc. | |
691 | AC_CHECK_HEADERS(dirent.h) | |
692 | ||
a3e174ea | 693 | AC_CHECK_TYPE([ssize_t], [int]) |
ccfe7e46 AO |
694 | |
695 | AC_MSG_CHECKING([for in_addr_t]) | |
696 | AC_TRY_COMPILE([#include <sys/types.h> | |
697 | #if STDC_HEADERS | |
698 | #include <stdlib.h> | |
699 | #include <stddef.h> | |
700 | #endif | |
701 | #if HAVE_NETINET_IN_H | |
702 | #include <netinet/in.h> | |
703 | #endif], [in_addr_t foo;], | |
704 | [AC_DEFINE([HAVE_IN_ADDR_T]) | |
705 | AC_MSG_RESULT(yes)], | |
706 | [AC_MSG_RESULT(no)]) | |
707 | ||
708 | AC_MSG_CHECKING([whether struct ip_mreq is in netinet/in.h]) | |
709 | AC_TRY_COMPILE([#include <netinet/in.h>], [struct ip_mreq mreq;], | |
710 | [AC_DEFINE(HAVE_STRUCT_IP_MREQ) | |
711 | AC_MSG_RESULT(yes)], | |
712 | [AC_MSG_RESULT(no)]) | |
a3e174ea | 713 | |
ee9dd372 TT |
714 | AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h]) |
715 | AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;], | |
716 | [AC_DEFINE(HAVE_INET6) | |
717 | AC_MSG_RESULT(yes)], | |
718 | [AC_MSG_RESULT(no)]) | |
719 | ||
720 | AC_MSG_CHECKING([for socklen_t in sys/socket.h]) | |
9121d9b1 TT |
721 | AC_TRY_COMPILE([#include <sys/types.h> |
722 | #include <sys/socket.h>], [socklen_t x = 5;], | |
ee9dd372 TT |
723 | [AC_DEFINE(HAVE_SOCKLEN_T) |
724 | AC_MSG_RESULT(yes)], | |
725 | [AC_MSG_RESULT(no)]) | |
726 | ||
727 | AC_MSG_CHECKING([for tm_gmtoff in struct tm]) | |
728 | AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;], | |
729 | [AC_DEFINE(STRUCT_TM_HAS_GMTOFF) | |
730 | AC_MSG_RESULT(yes)], | |
731 | [AC_MSG_RESULT(no) | |
732 | AC_MSG_CHECKING([for global timezone variable]) | |
733 | dnl FIXME: we don't want a link check here because that won't work | |
734 | dnl when cross-compiling. So instead we make an assumption that | |
735 | dnl the header file will mention timezone if it exists. | |
736 | AC_TRY_COMPILE([#include <time.h>], [long z2 = timezone;], | |
737 | [AC_DEFINE(HAVE_TIMEZONE) | |
738 | AC_MSG_RESULT(yes)], | |
739 | [AC_MSG_RESULT(no)])]) | |
740 | ||
741 | AC_FUNC_ALLOCA | |
742 | ||
743 | AC_CHECK_PROGS(PERL, perl, false) | |
744 | ||
6c80c45e TT |
745 | SYSDEP_SOURCES= |
746 | ||
747 | case "${host}" in | |
748 | i?86-*-linux*) | |
749 | SIGNAL_HANDLER=include/i386-signal.h | |
750 | ;; | |
751 | sparc-sun-solaris*) | |
752 | SIGNAL_HANDLER=include/sparc-signal.h | |
753 | ;; | |
754 | ia64-*) | |
755 | SYSDEP_SOURCES=sysdep/ia64.c | |
756 | test -d sysdep || mkdir sysdep | |
757 | ;; | |
758 | *) | |
759 | SIGNAL_HANDLER=include/default-signal.h | |
760 | ;; | |
761 | esac | |
762 | ||
763 | # If we're using sjlj exceptions, forget what we just learned. | |
764 | if test "$libgcj_sjlj" = yes; then | |
3cf88fb4 | 765 | SIGNAL_HANDLER=include/default-signal.h |
3cf88fb4 | 766 | fi |
a4e44caa | 767 | |
6c80c45e TT |
768 | AC_SUBST(SYSDEP_SOURCES) |
769 | ||
a4e44caa AH |
770 | AC_LINK_FILES($SIGNAL_HANDLER, include/java-signal.h) |
771 | ||
ee9dd372 TT |
772 | if test "${multilib}" = "yes"; then |
773 | multilib_arg="--enable-multilib" | |
774 | else | |
775 | multilib_arg= | |
776 | fi | |
777 | ||
2622c79d RR |
778 | AC_PATH_XTRA |
779 | ||
5950e016 BM |
780 | dnl Determine which AWT peer libraries to build |
781 | AC_ARG_ENABLE(java-awt, | |
782 | [ --enable-java-awt list of AWT peer implementations to be built]) | |
783 | ||
784 | peerlibs="`echo ${enable_java_awt} | tr ',' ' '`" | |
785 | use_xlib_awt="" | |
786 | use_gtk_awt="" | |
787 | ||
788 | for peer in $peerlibs ; do | |
789 | case $peer in | |
790 | xlib) | |
791 | if [test "$no_x" = yes]; then | |
792 | echo "*** xlib peers requested but no X library available" 1>&2 | |
793 | exit 1 | |
794 | else | |
795 | use_xlib_awt="yes" | |
796 | fi | |
797 | ;; | |
798 | gtk) | |
799 | # Nothing, yet... | |
800 | ;; | |
801 | *) | |
802 | echo "*** unrecognised argument \"${peer}\" for --enable-java-awt" 1>&2 | |
803 | exit 1 | |
804 | esac | |
805 | done | |
806 | ||
807 | AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes) | |
808 | AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes) | |
809 | ||
2622c79d | 810 | |
ee9dd372 TT |
811 | here=`pwd` |
812 | AC_SUBST(here) | |
813 | ||
7e0c895f TT |
814 | # We get this from the environment. |
815 | AC_SUBST(GCJFLAGS) | |
480222b5 | 816 | |
213858c0 | 817 | AC_OUTPUT(Makefile libgcj.spec libgcj-test.spec gnu/classpath/Configuration.java gcj/Makefile include/Makefile testsuite/Makefile, |
ee9dd372 TT |
818 | [if test -n "$CONFIG_FILES"; then |
819 | ac_file=Makefile . ${libgcj_basedir}/../config-ml.in | |
480222b5 TT |
820 | fi |
821 | ||
822 | # Make subdirectories and `.d' files. Look in both srcdir and | |
823 | # builddir for the .java files. | |
824 | h=`pwd` | |
825 | : > deps.mk | |
826 | ( (cd $srcdir && find . -name '*.java' -print) ; | |
827 | find . -name '*.java' -print) | \ | |
828 | fgrep -v testsuite | \ | |
829 | sed -e 's/\.java/.d/' | \ | |
830 | while read f; do | |
831 | echo "include $f" >> deps.mk | |
832 | test -f $f || { | |
833 | changequote(<<,>>) | |
834 | d=`echo $f | sed -e 's,/[^/]*$,,'` | |
835 | changequote([,]) | |
836 | $srcdir/../mkinstalldirs $d | |
583e347f | 837 | echo > $f |
480222b5 TT |
838 | } |
839 | done | |
840 | ], | |
ee9dd372 TT |
841 | srcdir=${srcdir} |
842 | host=${host} | |
843 | target=${target} | |
844 | with_multisubdir=${with_multisubdir} | |
845 | ac_configure_args="${multilib_arg} ${ac_configure_args}" | |
846 | CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} | |
847 | libgcj_basedir=${libgcj_basedir} | |
848 | CC="${CC}" | |
849 | CXX="${CXX}" | |
850 | ) |