OSDN Git Service

libgo: Define CC_FOR_BUILD in Makefile.
[pf3gnuchains/gcc-fork.git] / libgo / configure.ac
1 # configure.ac -- Go library configure script.
2
3 # Copyright 2009 The Go Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style
5 # license that can be found in the LICENSE file.
6
7 # Process this file with autoreconf to produce configure.
8
9 AC_PREREQ(2.64)
10 AC_INIT(package-unused, version-unused,, libgo)
11 AC_CONFIG_SRCDIR(Makefile.am)
12 AC_CONFIG_HEADER(config.h)
13
14 libtool_VERSION=1:0:0
15 AC_SUBST(libtool_VERSION)
16
17 AM_ENABLE_MULTILIB(, ..)
18
19 AC_CANONICAL_SYSTEM
20 target_alias=${target_alias-$host_alias}
21
22 AM_INIT_AUTOMAKE([1.9.3 no-define foreign -Wall])
23 AH_TEMPLATE(PACKAGE, [Name of package])
24 AH_TEMPLATE(VERSION, [Version number of package])
25
26 m4_rename([_AC_ARG_VAR_PRECIOUS],[glibgo_PRECIOUS])
27 m4_define([_AC_ARG_VAR_PRECIOUS],[])
28 AC_PROG_CC
29 AC_PROG_GO
30 m4_rename_force([glibgo_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
31
32 AC_SUBST(CFLAGS)
33
34 AM_MAINTAINER_MODE
35
36 AC_PROG_LD
37 AC_PROG_RANLIB
38 AC_CHECK_TOOL(OBJCOPY, objcopy, missing-objcopy)
39
40 AC_LIBTOOL_DLOPEN
41 AM_PROG_LIBTOOL
42 AC_SUBST(enable_shared)
43 AC_SUBST(enable_static)
44
45 CC_FOR_BUILD=${CC_FOR_BUILD:-gcc}
46 AC_SUBST(CC_FOR_BUILD)
47
48 WARN_FLAGS='-Wall -Wextra -Wwrite-strings -Wcast-qual'
49 AC_SUBST(WARN_FLAGS)
50
51 dnl FIXME: This should be controlled by --enable-maintainer-mode.
52 WERROR="-Werror"
53 AC_SUBST(WERROR)
54
55 glibgo_toolexecdir=no
56 glibgo_toolexeclibdir=no
57 glibgo_prefixdir=$prefix
58
59 AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
60 AC_ARG_ENABLE([version-specific-runtime-libs],
61   AC_HELP_STRING([--enable-version-specific-runtime-libs],
62                  [Specify that runtime libraries should be installed in a compiler-specific directory]),
63   [case "$enableval" in
64     yes) version_specific_libs=yes ;;
65     no)  version_specific_libs=no ;;
66     *)   AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);;
67    esac],
68   [version_specific_libs=no])
69 AC_MSG_RESULT($version_specific_libs)
70
71 # Version-specific runtime libs processing.
72 if test $version_specific_libs = yes; then
73   glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
74   glibgo_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)'
75 fi
76
77 # Calculate glibgo_toolexecdir, glibgo_toolexeclibdir
78 # Install a library built with a cross compiler in tooldir, not libdir.
79 if test x"$glibgo_toolexecdir" = x"no"; then
80   if test -n "$with_cross_host" &&
81      test x"$with_cross_host" != x"no"; then
82     glibgo_toolexecdir='${exec_prefix}/${host_alias}'
83     glibgo_toolexeclibdir='${toolexecdir}/lib'
84   else
85     glibgo_toolexecdir='${libdir}/gcc/${host_alias}'
86     glibgo_toolexeclibdir='${libdir}'
87   fi
88   multi_os_directory=`$CC -print-multi-os-directory`
89   case $multi_os_directory in
90     .) ;; # Avoid trailing /.
91     *) glibgo_toolexeclibdir=$glibgo_toolexeclibdir/$multi_os_directory ;;
92   esac
93 fi
94
95 AC_SUBST(glibgo_prefixdir)
96 AC_SUBST(glibgo_toolexecdir)
97 AC_SUBST(glibgo_toolexeclibdir)
98
99 # See if the user wants to configure without libffi.  Some
100 # architectures don't support it.  FIXME: We should set a default
101 # based on the host.
102 AC_ARG_WITH(libffi,
103   AS_HELP_STRING([--without-libffi],
104                  [don't use libffi]),
105   [:],
106   [with_libffi=${with_libffi_default-yes}])
107
108 LIBFFI=
109 LIBFFIINCS=
110 if test "$with_libffi" != no; then
111    AC_DEFINE(USE_LIBFFI, 1, [Define if we're to use libffi.])
112    LIBFFI=../libffi/libffi_convenience.la
113    LIBFFIINCS='-I$(top_srcdir)/../libffi/include -I../libffi/include'
114 fi
115 AC_SUBST(LIBFFI)
116 AC_SUBST(LIBFFIINCS)
117
118 is_darwin=no
119 is_freebsd=no
120 is_irix=no
121 is_linux=no
122 is_rtems=no
123 is_solaris=no
124 GOOS=unknown
125 case ${host} in
126   *-*-darwin*)   is_darwin=yes;  GOOS=darwin ;;
127   *-*-freebsd*)  is_freebsd=yes; GOOS=freebsd ;;
128   *-*-irix6*)    is_irix=yes;    GOOS=irix ;;
129   *-*-linux*)    is_linux=yes;   GOOS=linux ;;
130   *-*-rtems*)    is_rtems=yes;   GOOS=rtems ;;
131   *-*-solaris2*) is_solaris=yes; GOOS=solaris ;;
132 esac
133 AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes)
134 AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes)
135 AM_CONDITIONAL(LIBGO_IS_IRIX, test $is_irix = yes)
136 AM_CONDITIONAL(LIBGO_IS_LINUX, test $is_linux = yes)
137 AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes)
138 AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes)
139 AC_SUBST(GOOS)
140
141 dnl N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch).
142 is_386=no
143 is_alpha=no
144 is_arm=no
145 is_m68k=no
146 mips_abi=unknown
147 is_ppc=no
148 is_ppc64=no
149 is_sparc=no
150 is_sparc64=no
151 is_x86_64=no
152 GOARCH=unknown
153 case ${host} in
154   alpha*-*-*)
155     is_alpha=yes
156     GOARCH=alpha
157     ;;
158   arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
159     is_arm=yes
160     GOARCH=arm
161     ;;
162 changequote(,)dnl
163   i[34567]86-*-* | x86_64-*-*)
164 changequote([,])dnl
165     AC_COMPILE_IFELSE([
166 #ifdef __x86_64__
167 #error 64-bit
168 #endif],
169 [is_386=yes], [is_x86_64=yes])
170     if test "$is_386" = "yes"; then
171       GOARCH=386
172     else
173       GOARCH=amd64
174     fi
175     ;;
176   m68k*-*-*)
177     is_m68k=yes
178     GOARCH=m68k
179     ;;
180   mips*-*-*)
181     AC_COMPILE_IFELSE([
182 #if _MIPS_SIM != _ABIO32
183 #error not o32
184 #endif],
185 [mips_abi="o32"],
186         [AC_COMPILE_IFELSE([
187 #if _MIPS_SIM != _ABIN32
188 #error not n32
189 #endif],
190 [mips_abi="n32"],
191         [AC_COMPILE_IFELSE([
192 #if _MIPS_SIM != _ABI64
193 #error not n64
194 #endif],
195 [mips_abi="n64"],
196         [AC_COMPILE_IFELSE([
197 #if _MIPS_SIM != _ABIO64
198 #error not o64
199 #endif],
200 [mips_abi="o64"],
201         [AC_MSG_ERROR([unknown MIPS ABI])
202 [mips_abi="n32"]])])])])
203     case "$mips_abi" in
204     "o32") GOARCH=mipso32 ;;
205     "n32") GOARCH=mipsn32 ;;
206     "n64") GOARCH=mipsn64 ;;
207     "o64") GOARCH=mipso64 ;;
208     esac
209     ;;
210   rs6000*-*-* | powerpc*-*-*)
211     AC_COMPILE_IFELSE([
212 #ifdef _ARCH_PPC64
213 #error 64-bit
214 #endif],
215 [is_ppc=yes], [is_ppc64=yes])
216     if test "$is_ppc" = "yes"; then
217       GOARCH=ppc
218     else
219       GOARCH=ppc64
220     fi
221     ;;
222   sparc*-*-*)
223     AC_COMPILE_IFELSE([
224 #if defined(__sparcv9) || defined(__arch64__)
225 #error 64-bit
226 #endif],
227 [is_sparc=yes], [is_sparc64=yes])
228     if test "$is_sparc" = "yes"; then
229       GOARCH=sparc
230     else
231       GOARCH=sparc64
232     fi
233     ;;
234 esac
235 AM_CONDITIONAL(LIBGO_IS_386, test $is_386 = yes)
236 AM_CONDITIONAL(LIBGO_IS_ALPHA, test $is_alpha = yes)
237 AM_CONDITIONAL(LIBGO_IS_ARM, test $is_arm = yes)
238 AM_CONDITIONAL(LIBGO_IS_M68K, test $is_m68k = yes)
239 AM_CONDITIONAL(LIBGO_IS_MIPS, test $mips_abi != unknown)
240 AM_CONDITIONAL(LIBGO_IS_MIPSO32, test $mips_abi = o32)
241 AM_CONDITIONAL(LIBGO_IS_MIPSN32, test $mips_abi = n32)
242 AM_CONDITIONAL(LIBGO_IS_MIPSN64, test $mips_abi = n64)
243 AM_CONDITIONAL(LIBGO_IS_MIPSO64, test $mips_abi = o64)
244 AM_CONDITIONAL(LIBGO_IS_PPC, test $is_ppc = yes)
245 AM_CONDITIONAL(LIBGO_IS_PPC64, test $is_ppc64 = yes)
246 AM_CONDITIONAL(LIBGO_IS_SPARC, test $is_sparc = yes)
247 AM_CONDITIONAL(LIBGO_IS_SPARC64, test $is_sparc64 = yes)
248 AM_CONDITIONAL(LIBGO_IS_X86_64, test $is_x86_64 = yes)
249 AC_SUBST(GOARCH)
250
251 dnl Some files are only present when needed for specific architectures.
252 GO_SYSCALLS_SYSCALL_OS_ARCH_FILE=
253 if test -f ${srcdir}/syscalls/syscall_${GOOS}_${GOARCH}.go; then
254   GO_SYSCALLS_SYSCALL_OS_ARCH_FILE=syscalls/syscall_${GOOS}_${GOARCH}.go
255 fi
256 AC_SUBST(GO_SYSCALLS_SYSCALL_OS_ARCH_FILE)
257
258 GO_DEBUG_PROC_REGS_OS_ARCH_FILE=
259 if test -f ${srcdir}/go/debug/proc/regs_${GOOS}_${GOARCH}.go; then
260   GO_DEBUG_PROC_REGS_OS_ARCH_FILE=go/debug/proc/regs_${GOOS}_${GOARCH}.go
261 fi
262 AC_SUBST(GO_DEBUG_PROC_REGS_OS_ARCH_FILE)
263
264 dnl Some targets need special flags to build sysinfo.go.
265 case "$target" in
266     mips-sgi-irix6.5*)
267         # IRIX 6 needs _XOPEN_SOURCE=500 for the XPG5 version of struct
268         # msghdr in <sys/socket.h>.
269         OSCFLAGS='-D_XOPEN_SOURCE=500'
270         ;;
271     *-*-solaris2.[[89]])
272         # Solaris 8/9 need this so struct msghdr gets the msg_control
273         # etc. fields in <sys/socket.h> (_XPG4_2).
274         OSCFLAGS='-D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D__EXTENSIONS__'
275         ;;
276     *-*-solaris2.1[[01]])
277         # Solaris 10+ needs this so struct msghdr gets the msg_control
278         # etc. fields in <sys/socket.h> (_XPG4_2).  _XOPEN_SOURCE=500 as
279         # above doesn't work with C99.
280         OSCFLAGS='-D_XOPEN_SOURCE=600 -D__EXTENSIONS__'
281         ;;
282 esac
283 AC_SUBST(OSCFLAGS)
284
285 dnl Use -fsplit-stack when compiling C code if available.
286 AC_CACHE_CHECK([whether -fsplit-stack is supported],
287 [libgo_cv_c_split_stack_supported],
288 [CFLAGS_hold=$CFLAGS
289 CFLAGS="$CFLAGS -fsplit-stack"
290 AC_COMPILE_IFELSE([[int i;]],
291 [libgo_cv_c_split_stack_supported=yes],
292 [libgo_cv_c_split_stack_supported=no])
293 CFLAGS=$CFLAGS_hold])
294 if test "$libgo_cv_c_split_stack_supported" = yes; then
295   SPLIT_STACK=-fsplit-stack
296   AC_DEFINE(USING_SPLIT_STACK, 1,
297                 [Define if the compiler supports -fsplit-stack])
298 else
299   SPLIT_STACK=
300 fi
301 AC_SUBST(SPLIT_STACK)
302 AM_CONDITIONAL(USING_SPLIT_STACK,
303         test "$libgo_cv_c_split_stack_supported" = yes)
304
305 dnl Check whether the linker does stack munging when calling from
306 dnl split-stack into non-split-stack code.  We check this by looking
307 dnl at the --help output.  FIXME: This is only half right: it's
308 dnl possible for the linker to support this for some targets but not
309 dnl others.
310 AC_CACHE_CHECK([whether linker supports split stack],
311 [libgo_cv_c_linker_supports_split_stack],
312 libgo_cv_c_linker_supports_split_stack=no
313 if $LD --help 2>/dev/null | grep split-stack-adjust-size >/dev/null 2>&1; then
314   libgo_cv_c_linker_supports_split_stack=yes
315 fi)
316 if test "$libgo_cv_c_linker_supports_split_stack" = yes; then
317   AC_DEFINE(LINKER_SUPPORTS_SPLIT_STACK, 1,
318             [Define if the linker support split stack adjustments])
319 fi
320
321 dnl Test for the -lm library.
322 MATH_LIBS=
323 AC_CHECK_LIB([m], [sqrt], MATH_LIBS=-lm)
324 AC_SUBST(MATH_LIBS)
325
326 dnl Test for -lsocket and -lnsl.  Copied from libjava/configure.ac.
327 AC_CACHE_CHECK([for socket libraries], libgo_cv_lib_sockets,
328   [libgo_cv_lib_sockets=
329    libgo_check_both=no
330    AC_CHECK_FUNC(connect, libgo_check_socket=no, libgo_check_socket=yes)
331    if test "$libgo_check_socket" = "yes"; then
332      unset ac_cv_func_connect
333      AC_CHECK_LIB(socket, main, libgo_cv_lib_sockets="-lsocket",
334                   libgo_check_both=yes)
335    fi
336    if test "$libgo_check_both" = "yes"; then
337      libgo_old_libs=$LIBS
338      LIBS="$LIBS -lsocket -lnsl"
339      unset ac_cv_func_accept
340      AC_CHECK_FUNC(accept,
341                    [libgo_check_nsl=no
342                     libgo_cv_lib_sockets="-lsocket -lnsl"])
343      unset ac_cv_func_accept
344      LIBS=$libgo_old_libs
345    fi
346    unset ac_cv_func_gethostbyname
347    libgo_old_libs="$LIBS"
348    AC_CHECK_FUNC(gethostbyname, ,
349                  [AC_CHECK_LIB(nsl, main,
350                         [libgo_cv_lib_sockets="$libgo_cv_lib_sockets -lnsl"])])
351    unset ac_cv_func_gethostbyname
352    LIBS=$libgo_old_libs
353 ])
354 NET_LIBS="$libgo_cv_lib_sockets"
355 AC_SUBST(NET_LIBS)
356
357 dnl Test whether the compiler supports the -pthread option.
358 AC_CACHE_CHECK([whether -pthread is supported],
359 [libgo_cv_lib_pthread],
360 [CFLAGS_hold=$CFLAGS
361 CFLAGS="$CFLAGS -pthread"
362 AC_COMPILE_IFELSE([[int i;]],
363 [libgo_cv_lib_pthread=yes],
364 [libgo_cv_lib_pthread=no])
365 CFLAGS=$CFLAGS_hold])
366 PTHREAD_CFLAGS=
367 if test "$libgo_cv_lib_pthread" = yes; then
368   PTHREAD_CFLAGS=-pthread
369 fi
370 AC_SUBST(PTHREAD_CFLAGS)
371
372 dnl Test for the -lpthread library.
373 PTHREAD_LIBS=
374 AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS=-lpthread)
375 AC_SUBST(PTHREAD_LIBS)
376
377 dnl Test if -lrt is required for sched_yield.
378 AC_SEARCH_LIBS([sched_yield], [rt])
379
380 AC_C_BIGENDIAN
381
382 GCC_CHECK_UNWIND_GETIPINFO
383
384 AC_ARG_ENABLE(sjlj-exceptions,
385   AC_HELP_STRING([--enable-sjlj-exceptions],
386                  [force use of builtin_setjmp for exceptions]),
387   [case "$enableval" in
388    yes|no|auto) ;;
389    *) AC_MSG_ERROR([unknown argument to --enable-sjlj-exceptions]) ;;
390    esac],
391   [enable_sjlj_exceptions=auto])
392
393 AC_CACHE_CHECK([whether to use setjmp/longjmp exceptions],
394 [libgo_cv_lib_sjlj_exceptions],
395 [AC_LANG_CONFTEST(
396   [AC_LANG_SOURCE([
397 void bar ();
398 void clean (int *);
399 void foo ()
400 {
401   int i __attribute__ ((cleanup (clean)));
402   bar();
403 }
404 ])])
405 CFLAGS_hold=$CFLAGS
406 CFLAGS="--save-temps -fexceptions"
407 libgo_cv_lib_sjlj_exceptions=unknown
408 AS_IF([ac_fn_c_try_compile],
409   [if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1; then
410     libgo_cv_lib_sjlj_exceptions=yes
411   elif grep _Unwind_Resume conftest.s >/dev/null 2>&1; then
412     libgo_cv_lib_sjlj_exceptions=no
413   fi])
414 CFLAGS=$CFLAGS_hold
415 rm -f conftest*
416 ])
417
418 if test "$enable_sjlj_exceptions" = "auto"; then
419   enable_sjlj_exceptions=$libgo_cv_lib_sjlj_exceptions
420 fi
421
422 case $enable_sjlj_exceptions in
423 yes)
424   AC_DEFINE(LIBGO_SJLJ_EXCEPTIONS, 1,
425         [Define if the C++ compiler is configured for setjmp/longjmp exceptions.])
426   ;;
427 no)
428   ;;
429 *)
430   AC_MSG_ERROR([unable to detect exception model])
431   ;;
432 esac
433
434 AC_CHECK_HEADERS(sys/mman.h syscall.h sys/epoll.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h)
435 AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
436
437 AC_CHECK_FUNCS(srandom random strerror_r strsignal wait4 mincore setenv)
438 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
439 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
440
441 AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4],
442 [libgo_cv_func___sync_bool_compare_and_swap_4],
443 [AC_LINK_IFELSE([
444 typedef unsigned int uint32  __attribute__ ((mode (SI)));
445 uint32 i;
446 int main() { return __sync_bool_compare_and_swap (&i, 0, 1); }
447 ],
448 [libgo_cv_func___sync_bool_compare_and_swap_4=yes],
449 [libgo_cv_func___sync_bool_compare_and_swap_4=no])])
450 if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then
451   AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4, 1,
452     [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint32])
453 fi
454
455 AC_CACHE_CHECK([for __sync_fetch_and_add_4],
456 [libgo_cv_func___sync_fetch_and_add_4],
457 [AC_LINK_IFELSE([
458 typedef unsigned int uint32  __attribute__ ((mode (SI)));
459 uint32 i;
460 int main() { return __sync_fetch_and_add (&i, 1); }
461 ],
462 [libgo_cv_func___sync_fetch_and_add_4=yes],
463 [libgo_cv_func___sync_fetch_and_add_4=no])])
464 if test "$libgo_cv_func___sync_fetch_and_add_4" = "yes"; then
465   AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD_4, 1,
466     [Define to 1 if the compiler provides the __sync_fetch_and_add function for uint32])
467 fi
468
469 dnl For x86 we want to use the -minline-all-stringops option to avoid
470 dnl forcing a stack split when calling memcpy and friends.
471 AC_CACHE_CHECK([whether compiler supports -minline-all-stringops],
472 [libgo_cv_c_stringops],
473 [CFLAGS_hold=$CFLAGS
474 CFLAGS="$CFLAGS -minline-all-stringops"
475 AC_COMPILE_IFELSE([int i;],
476 [libgo_cv_c_stringops=yes],
477 [libgo_cv_c_stringops=no])
478 CFLAGS=$CFLAGS_hold])
479 STRINGOPS_FLAG=
480 if test "$libgo_cv_c_stringops" = yes; then
481   STRINGOPS_FLAG=-minline-all-stringops
482 fi
483 AC_SUBST(STRINGOPS_FLAG)
484
485 CFLAGS_hold=$CFLAGS
486 CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
487 AC_CHECK_TYPES(off64_t)
488 CFLAGS=$CFLAGS_hold
489
490 AC_CACHE_SAVE
491
492 if test ${multilib} = yes; then
493   multilib_arg="--enable-multilib"
494 else
495   multilib_arg=
496 fi
497
498 AC_CONFIG_FILES(Makefile testsuite/Makefile)
499
500 AC_CONFIG_COMMANDS([default],
501 [if test -n "$CONFIG_FILES"; then
502    # Multilibs need MULTISUBDIR defined correctly in certain makefiles so
503    # that multilib installs will end up installed in the correct place.
504    # The testsuite needs it for multilib-aware ABI baseline files.
505    # To work around this not being passed down from config-ml.in ->
506    # srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
507    # append it here.  Only modify Makefiles that have just been created.
508    #
509    # Also, get rid of this simulated-VPATH thing that automake does.
510    cat > vpsed << \_EOF
511 s!`test -f '$<' || echo '$(srcdir)/'`!!
512 _EOF
513    for i in $SUBDIRS; do
514     case $CONFIG_FILES in
515      *${i}/Makefile*)
516        #echo "Adding MULTISUBDIR to $i/Makefile"
517        sed -f vpsed $i/Makefile > tmp
518        grep '^MULTISUBDIR =' Makefile >> tmp
519        mv tmp $i/Makefile
520        ;;
521     esac
522    done
523    rm vpsed
524  fi
525 ],
526 [
527 # Variables needed in config.status (file generation) which aren't already
528 # passed by autoconf.
529 SUBDIRS="$SUBDIRS"
530 ])
531
532 AC_OUTPUT