aboutsummaryrefslogtreecommitdiff
path: root/libjava/configure.in
blob: 98083c9d6da6c11a5c1048c0cebd38b3e7cbacbc (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
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
dnl Process this with autoconf to create configure
AC_INIT(java/lang/System.java)

dnl Can't be done in LIBGCJ_CONFIGURE because that confuses automake. 
AC_CONFIG_AUX_DIR(..)

AC_CANONICAL_SYSTEM

dnl We use these options to decide which functions to include.
AC_ARG_WITH(target-subdir,
[  --with-target-subdir=SUBDIR      Configuring in a subdirectory])
AC_ARG_WITH(cross-host,
[  --with-cross-host=HOST           Configuring with a cross compiler])

LIBGCJ_CONFIGURE(.)

AM_CONFIG_HEADER(include/config.h)

if test -z "$with_target_subdir" || test "$with_target_subdir" = "."; then
   COMPPATH=.
else
   COMPPATH=..
fi
AC_SUBST(COMPPATH)

dnl The -no-testsuite modules omit the test subdir.
AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite)

dnl See whether the user prefers size or speed for Character.
dnl The default is size.
AC_ARG_ENABLE(fast-character,
[  --enable-fast-character          Prefer speed over size for Character],
# Nothing
, AC_DEFINE(COMPACT_CHARACTER))

dnl See if the user has requested runtime debugging.
AC_ARG_ENABLE(libgcj-debug,
[  --enable-libgcj-debug           Enable runtime debugging code],
  if test "$enable_libgcj_debug" = yes; then
     AC_DEFINE(DEBUG)
  fi)

dnl If the target is an eCos system, use the appropriate eCos
dnl I/O routines.
dnl FIXME: this should not be a local option but a global target
dnl system; at present there is no eCos target.
TARGET_ECOS="no"
AC_ARG_WITH(ecos,
[  --with-ecos      Enable runtime eCos target support.],
TARGET_ECOS="$with_ecos"
)

case "$TARGET_ECOS" in
   no)
      FILE_DESCRIPTOR=natFileDescriptorPosix.cc
      ;;
   *)
      FILE_DESCRIPTOR=natFileDescriptorEcos.cc
      AC_DEFINE(ECOS)
      ;;
esac

AC_EGREP_HEADER(__uint32_t, sys/types.h, AC_DEFINE(HAVE_INT32_DEFINED))
AC_EGREP_HEADER(__uint32_t, sys/config.h, AC_DEFINE(HAVE_INT32_DEFINED))

dnl These may not be defined in a non-ANS conformant embedded system.
dnl FIXME: Should these case a runtime exception in that case?
AC_EGREP_HEADER(mktime, time.h, AC_DEFINE(HAVE_MKTIME))
AC_EGREP_HEADER(localtime, time.h, AC_DEFINE(HAVE_LOCALTIME))

dnl Create the subdirectory for natFileDescriptor.cc, or the attempt
dnl to create the link will fail.
test -d java || mkdir java
test -d java/io || mkdir java/io
AC_LINK_FILES(java/io/$FILE_DESCRIPTOR, java/io/natFileDescriptor.cc)

dnl Allow the GC to be disabled.  Can be useful when debugging.
AC_MSG_CHECKING([for garbage collector to use])
AC_ARG_ENABLE(java-gc,
changequote(<<,>>)dnl
<<  --enable-java-gc=TYPE    choose garbage collector [boehm]>>,
changequote([,])
  GC=$enableval,
  GC=boehm)
GCLIBS=
GCINCS=
GCDEPS=
GCOBJS=
case "$GC" in
 boehm)
    AC_MSG_RESULT(boehm)
    GCLIBS='-L$(top_builddir)/../boehm-gc -lgcjgc'
    GCDEPS='$(top_builddir)/../boehm-gc/libgcjgc.a'
    GCINCS='-I$(top_srcdir)/../boehm-gc -I$(top_builddir)/../boehm-gc'
    dnl We also want to pick up some cpp flags required when including
    dnl boehm-config.h.  Yuck.
    GCINCS="$GCINCS `cat ../boehm-gc/boehm-cflags`"
    GCOBJS=boehm.o
    GCHDR=boehm-gc.h
    dnl The POSIX thread support needs to know this.
    AC_DEFINE(HAVE_BOEHM_GC)
    ;;
 no)
    AC_MSG_RESULT(none)
    GCOBJS=nogc.o
    GCHDR=no-gc.h
    ;;
 *)
    AC_MSG_ERROR(unrecognized collector \"$GC\")
    ;;
esac
AC_SUBST(GCLIBS)
AC_SUBST(GCINCS)
AC_SUBST(GCDEPS)
AC_SUBST(GCOBJS)
AC_LINK_FILES(include/$GCHDR, include/java-gc.h)


dnl Note that this code is kept in sync with similar code in gcc/configure.in.
dnl In particular both packages must make the same decision about which
dnl thread package to use.
AC_MSG_CHECKING([for threads package to use])
AC_ARG_ENABLE(threads, [  --enable-threads=TYPE    choose threading package],
  THREADS=$enableval,
  dnl FIXME: figure out native threads to use here.
  THREADS=no)

if test "$THREADS" = yes; then
   case "$host" in
    *-*-vxworks*)
       THREADS=vxworks
       ;;
    *-*-linux*)
       # FIXME: this isn't correct in all cases.
       THREADS=posix
       ;;
    *-*-win*)
       THREADS=win32
       ;;
    *-*-irix*)
       THREADS=irix
       ;;
    *-*-solaris*)
       # FIXME: for now, choose POSIX, because we implement that.
       # Later, choose solaris threads.
       THREADS=posix
       ;;
    *)
       # For now.
       THREADS=none
       ;;
   esac
fi

case "$THREADS" in
 no | none | single)
    THREADS=none
    ;;
 posix | pthreads)
    THREADS=posix
    case "$host" in
     *-*-linux*)
	AC_DEFINE(LINUX_THREADS)
	;;
    esac
    ;;
 qt)
    ;;
 decosf1 | irix | mach | os2 | solaris | win32 | dce | vxworks)
    AC_MSG_ERROR(thread package $THREADS not yet supported)
    ;;
 *)
    AC_MSG_ERROR($THREADS is an unknown thread package)
    ;;
esac
AC_MSG_RESULT($THREADS)

THREADLIBS=
THREADINCS=
THREADDEPS=
THREADOBJS=
THREADH=
case "$THREADS" in
 posix)
    THREADLIBS=-lpthread
    THREADOBJS=posix-threads.o
    THREADH=posix-threads.h
    # MIT pthreads doesn't seem to have the mutexattr functions.
    # But for now we don't check for it.  We just assume you aren't
    # using MIT pthreads.
    AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
    ;;

 qt)
    THREADLIBS='-L$(top_builddir)/../qthreads -lgcjcoop'
    THREADOBJS=quick-threads.o
    THREADINCS='-I$(top_srcdir)/../qthreads'
    THREADH=quick-threads.h
    THREADDEPS='$(top_builddir)/../qthreads/libgcjcoop.a'
    ;;

 none)
    THREADOBJS=no-threads.o
    THREADH=no-threads.h
    ;;
esac
AC_LINK_FILES(include/$THREADH, include/java-threads.h)
AC_SUBST(THREADLIBS)
AC_SUBST(THREADINCS)
AC_SUBST(THREADDEPS)
AC_SUBST(THREADOBJS)

AM_CONDITIONAL(USING_GCC, test "$GCC" = yes)

CANADIAN=no
NULL_TARGET=no

# Find eh-common.h and support headers.  If we're in the tree with
# gcc, then look there.  Otherwise look in compat-include.  If all else
# fails, just hope the user has set things up somehow.
if test -r $srcdir/../gcc/eh-common.h; then
   EH_COMMON_INCLUDE='-I$(top_srcdir)/../gcc -I$(top_srcdir)/../include'
else
   if test -d $srcdir/../compat-include; then
      EH_COMMON_INCLUDE='-I$(top_srcdir)/../compat-include'
   else
      EH_COMMON_INCLUDE=
   fi
fi

if test -n "${with_cross_host}"; then
   # We are being configured with a cross compiler.  AC_REPLACE_FUNCS
   # may not work correctly, because the compiler may not be able to
   # link executables.

   # We assume newlib.  This lets us hard-code the functions we know
   # we'll have.
   AC_DEFINE(HAVE_MEMMOVE)
   AC_DEFINE(HAVE_MEMCPY)
   AC_DEFINE(HAVE_STRERROR)
   AC_DEFINE(HAVE_CTIME_R)
   AC_DEFINE(HAVE_GMTIME_R)
   AC_DEFINE(HAVE_LOCALTIME_R)
   dnl This is only for POSIX threads.
   AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_INIT)
   dnl We also assume we are using gcc, which provides alloca.
   AC_DEFINE(HAVE_ALLOCA)

   # If Canadian cross, then don't pick up tools from the build
   # directory.
   if test "$build" != "$with_cross_host"; then
      CANADIAN=yes
      EH_COMMON_INCLUDE=
   fi
else
   # Some POSIX thread systems don't have pthread_mutexattr_settype.
   # E.g., Solaris.
   AC_CHECK_FUNCS(strerror ioctl select open fsync sleep)
   AC_CHECK_FUNCS(ctime_r ctime, break)
   AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r)
   AC_CHECK_FUNCS(access stat mkdir rename rmdir unlink realpath)
   AC_CHECK_FUNCS(inet_aton inet_addr, break)
   AC_CHECK_FUNCS(inet_pton uname)

   AC_CHECK_FUNCS(gethostbyname_r, [
     AC_DEFINE(HAVE_GETHOSTBYNAME_R)
     # There are two different kinds of gethostbyname_r.
     # We look for the one that returns `int'.
     # Hopefully this check is robust enough.
     AC_EGREP_HEADER(int.*gethostbyname_r, netdb.h, [
       AC_DEFINE(GETHOSTBYNAME_R_RETURNS_INT)])])

   AC_CHECK_FUNCS(gethostbyaddr_r, [
     AC_DEFINE(HAVE_GETHOSTBYADDR_R)
     # There are two different kinds of gethostbyaddr_r.
     # We look for the one that returns `int'.
     # Hopefully this check is robust enough.
     AC_EGREP_HEADER(int.*gethostbyaddr_r, netdb.h, [
       AC_DEFINE(GETHOSTBYADDR_R_RETURNS_INT)])])

   AC_CHECK_FUNCS(gethostname, [
     AC_DEFINE(HAVE_GETHOSTNAME)
     AC_EGREP_HEADER(gethostname, unistd.h, [
       AC_DEFINE(HAVE_GETHOSTNAME_DECL)])])

   # Look for these functions in the thread library.
   save_LIBS="$LIBS"
   LIBS="$LIBS $THREADLIBS"
   AC_CHECK_FUNCS(pthread_mutexattr_settype pthread_mutexattr_setkind_np sched_yield)
   LIBS="$save_LIBS"

   # We require a way to get the time.
   time_found=no
   AC_CHECK_FUNCS(gettimeofday time ftime, time_found=yes)
   if test "$time_found" = no; then
      AC_MSG_ERROR([no function found to get the time])
   fi

   # We require memmove.
   memmove_found=no
   AC_CHECK_FUNCS(memmove, memmove_found=yes)
   if test "$memmove_found" = no; then
      AC_MSG_ERROR([memmove is required])
   fi

   # We require memcpy.
   memcpy_found=no
   AC_CHECK_FUNCS(memcpy, memcpy_found=yes)
   if test "$memcpy_found" = no; then
      AC_MSG_ERROR([memcpy is required])
   fi

   test -d "$libgcj_basedir/../gcc/java" || {
      CANADIAN=yes
      NULL_TARGET=yes
   }
fi

AM_CONDITIONAL(CANADIAN, test "$CANADIAN" = yes)
AM_CONDITIONAL(NULL_TARGET, test "$NULL_TARGET" = yes)
AM_CONDITIONAL(NATIVE, test "$CANADIAN" = no || test "$NULL_TARGET" = yes)

AC_SUBST(EH_COMMON_INCLUDE)

AC_SUBST(AM_RUNTESTFLAGS)

dnl We check for sys/filio.h because Solaris 2.5 defines FIONREAD there.
dnl On that system, sys/ioctl.h will not include sys/filio.h unless
dnl BSD_COMP is defined; just including sys/filio.h is simpler.
AC_CHECK_HEADERS(unistd.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)
dnl We avoid AC_HEADER_DIRENT since we really only care about dirent.h
dnl for now.  If you change this, you also must update natFile.cc.
AC_CHECK_HEADERS(dirent.h)

AC_MSG_CHECKING([whether struct sockaddr_in6 is in netinet/in.h])
AC_TRY_COMPILE([#include <netinet/in.h>], [struct sockaddr_in6 addr6;],
  [AC_DEFINE(HAVE_INET6)
   AC_MSG_RESULT(yes)],
  [AC_MSG_RESULT(no)])

AC_MSG_CHECKING([for socklen_t in sys/socket.h])
AC_TRY_COMPILE([#include <sys/socket.h>], [socklen_t x = 5;],
  [AC_DEFINE(HAVE_SOCKLEN_T)
   AC_MSG_RESULT(yes)],
  [AC_MSG_RESULT(no)])

AC_MSG_CHECKING([for tm_gmtoff in struct tm])
AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
  [AC_DEFINE(STRUCT_TM_HAS_GMTOFF)
   AC_MSG_RESULT(yes)],
  [AC_MSG_RESULT(no)
   AC_MSG_CHECKING([for global timezone variable])
   dnl FIXME: we don't want a link check here because that won't work
   dnl when cross-compiling.  So instead we make an assumption that
   dnl the header file will mention timezone if it exists.
   AC_TRY_COMPILE([#include <time.h>], [long z2 = timezone;],
     [AC_DEFINE(HAVE_TIMEZONE)
      AC_MSG_RESULT(yes)],
     [AC_MSG_RESULT(no)])])

AC_FUNC_ALLOCA

AC_CHECK_PROGS(PERL, perl, false)

if test "${multilib}" = "yes"; then
  multilib_arg="--enable-multilib"
else
  multilib_arg=
fi

here=`pwd`
AC_SUBST(here)

AC_OUTPUT(Makefile testsuite/Makefile,
[if test -n "$CONFIG_FILES"; then
  ac_file=Makefile . ${libgcj_basedir}/../config-ml.in
fi],
srcdir=${srcdir}
host=${host}
target=${target}
with_multisubdir=${with_multisubdir}
ac_configure_args="${multilib_arg} ${ac_configure_args}"
CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
libgcj_basedir=${libgcj_basedir}
CC="${CC}"
CXX="${CXX}"
)