Add configure support for kfreebsd and hurd. Patch by Sylvestre Ledru.
[oota-llvm.git] / autoconf / configure.ac
1 dnl === configure.ac --------------------------------------------------------===
2 dnl                     The LLVM Compiler Infrastructure
3 dnl
4 dnl This file is distributed under the University of Illinois Open Source
5 dnl License. See LICENSE.TXT for details.
6 dnl
7 dnl===-----------------------------------------------------------------------===
8 dnl This is the LLVM configuration script. It is processed by the autoconf
9 dnl program to produce a script named configure. This script contains the
10 dnl configuration checks that LLVM needs in order to support multiple platforms.
11 dnl This file is composed of 10 sections per the recommended organization of
12 dnl autoconf input defined in the autoconf documentation. As this file evolves,
13 dnl please keep the various types of checks within their sections. The sections
14 dnl are as follows:
15 dnl
16 dnl SECTION 1: Initialization & Setup
17 dnl SECTION 2: Architecture, target, and host checks
18 dnl SECTION 3: Command line arguments for the configure script.
19 dnl SECTION 4: Check for programs we need and that they are the right version
20 dnl SECTION 5: Check for libraries
21 dnl SECTION 6: Check for header files
22 dnl SECTION 7: Check for types and structures
23 dnl SECTION 8: Check for specific functions needed
24 dnl SECTION 9: Additional checks, variables, etc.
25 dnl SECTION 10: Specify the output files and generate it
26 dnl
27 dnl===-----------------------------------------------------------------------===
28 dnl===
29 dnl=== SECTION 1: Initialization & Setup
30 dnl===
31 dnl===-----------------------------------------------------------------------===
32 dnl Initialize autoconf and define the package name, version number and
33 dnl address for reporting bugs.
34 AC_INIT([LLVM],[3.1svn],[http://llvm.org/bugs/])
35
36 dnl Provide a copyright substitution and ensure the copyright notice is included
37 dnl in the output of --version option of the generated configure script.
38 AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign."])
39 AC_COPYRIGHT([Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign.])
40
41 dnl Indicate that we require autoconf 2.60 or later.
42 AC_PREREQ(2.60)
43
44 dnl Verify that the source directory is valid. This makes sure that we are
45 dnl configuring LLVM and not some other package (it validates --srcdir argument)
46 AC_CONFIG_SRCDIR([lib/VMCore/Module.cpp])
47
48 dnl Place all of the extra autoconf files into the config subdirectory. Tell
49 dnl various tools where the m4 autoconf macros are.
50 AC_CONFIG_AUX_DIR([autoconf])
51
52 dnl Quit if the source directory has already been configured.
53 dnl NOTE: This relies upon undocumented autoconf behavior.
54 if test ${srcdir} != "." ; then
55   if test -f ${srcdir}/include/llvm/Config/config.h ; then
56     AC_MSG_ERROR([Already configured in ${srcdir}])
57   fi
58 fi
59
60 dnl We need to check for the compiler up here to avoid anything else
61 dnl starting with a different one.
62 AC_PROG_CC(clang llvm-gcc gcc)
63 AC_PROG_CXX(clang++ llvm-g++ g++)
64 AC_PROG_CPP
65
66 dnl Configure all of the projects present in our source tree. While we could
67 dnl just AC_CONFIG_SUBDIRS on the set of directories in projects that have a
68 dnl configure script, that usage of the AC_CONFIG_SUBDIRS macro is deprecated.
69 dnl Instead we match on the known projects.
70
71 dnl
72 dnl One tricky part of doing this is that some projects depend upon other
73 dnl projects.  For example, several projects rely upon the LLVM test suite.
74 dnl We want to configure those projects first so that their object trees are
75 dnl created before running the configure scripts of projects that depend upon
76 dnl them.
77 dnl
78
79 dnl Several projects use llvm-gcc, so configure that first
80 if test -d ${srcdir}/projects/llvm-gcc ; then
81   AC_CONFIG_SUBDIRS([projects/llvm-gcc])
82 fi
83
84 dnl Several projects use the LLVM test suite, so configure it next.
85 if test -d ${srcdir}/projects/test-suite ; then
86   AC_CONFIG_SUBDIRS([projects/test-suite])
87 fi
88
89 dnl llvm-test is the old name of the test-suite, kept here for backwards
90 dnl compatibility
91 if test -d ${srcdir}/projects/llvm-test ; then
92   AC_CONFIG_SUBDIRS([projects/llvm-test])
93 fi
94
95 dnl Some projects use poolalloc; configure that next
96 if test -d ${srcdir}/projects/poolalloc ; then
97   AC_CONFIG_SUBDIRS([projects/poolalloc])
98 fi
99
100 if test -d ${srcdir}/projects/llvm-poolalloc ; then
101   AC_CONFIG_SUBDIRS([projects/llvm-poolalloc])
102 fi
103
104 dnl Check for all other projects
105 for i in `ls ${srcdir}/projects`
106 do
107   if test -d ${srcdir}/projects/${i} ; then
108     case ${i} in
109       sample)       AC_CONFIG_SUBDIRS([projects/sample])    ;;
110       privbracket)  AC_CONFIG_SUBDIRS([projects/privbracket]) ;;
111       llvm-stacker) AC_CONFIG_SUBDIRS([projects/llvm-stacker]) ;;
112       llvm-reopt)   AC_CONFIG_SUBDIRS([projects/llvm-reopt]);;
113       llvm-java)    AC_CONFIG_SUBDIRS([projects/llvm-java]) ;;
114       llvm-tv)      AC_CONFIG_SUBDIRS([projects/llvm-tv])   ;;
115       safecode)     AC_CONFIG_SUBDIRS([projects/safecode]) ;;
116       llvm-kernel)  AC_CONFIG_SUBDIRS([projects/llvm-kernel]) ;;
117       compiler-rt)       ;;
118       llvm-gcc)       ;;
119       test-suite)     ;;
120       llvm-test)      ;;
121       poolalloc)      ;;
122       llvm-poolalloc) ;;
123       *)
124         AC_MSG_WARN([Unknown project (${i}) won't be configured automatically])
125         ;;
126     esac
127   fi
128 done
129
130 dnl Disable the build of polly, even if it is checked out into tools/polly.
131 AC_ARG_ENABLE(polly,
132               AS_HELP_STRING([--enable-polly],
133                              [Use polly if available (default is YES)]),,
134                              enableval=default)
135 case "$enableval" in
136   yes) AC_SUBST(ENABLE_POLLY,[1]) ;;
137   no)  AC_SUBST(ENABLE_POLLY,[0]) ;;
138   default) AC_SUBST(ENABLE_POLLY,[1]) ;;
139   *) AC_MSG_ERROR([Invalid setting for --enable-polly. Use "yes" or "no"]) ;;
140 esac
141
142
143 dnl Check if polly is checked out into tools/polly and configure it if
144 dnl available.
145 if (test -d ${srcdir}/tools/polly) && (test $ENABLE_POLLY -eq 1) ; then
146   AC_SUBST(LLVM_HAS_POLLY,1)
147   AC_CONFIG_SUBDIRS([tools/polly])
148 fi
149
150 dnl===-----------------------------------------------------------------------===
151 dnl===
152 dnl=== SECTION 2: Architecture, target, and host checks
153 dnl===
154 dnl===-----------------------------------------------------------------------===
155
156 dnl Check the target for which we're compiling and the host that will do the
157 dnl compilations. This will tell us which LLVM compiler will be used for
158 dnl compiling SSA into object code. This needs to be done early because
159 dnl following tests depend on it.
160 AC_CANONICAL_TARGET
161
162 dnl Determine the platform type and cache its value. This helps us configure
163 dnl the System library to the correct build platform.
164 AC_CACHE_CHECK([type of operating system we're going to host on],
165                [llvm_cv_os_type],
166 [case $host in
167   *-*-aix*)
168     llvm_cv_link_all_option="-Wl,--whole-archive"
169     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
170     llvm_cv_os_type="AIX"
171     llvm_cv_platform_type="Unix" ;;
172   *-*-irix*)
173     llvm_cv_link_all_option="-Wl,--whole-archive"
174     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
175     llvm_cv_os_type="IRIX"
176     llvm_cv_platform_type="Unix" ;;
177   *-*-cygwin*)
178     llvm_cv_link_all_option="-Wl,--whole-archive"
179     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
180     llvm_cv_os_type="Cygwin"
181     llvm_cv_platform_type="Unix" ;;
182   *-*-darwin*)
183     llvm_cv_link_all_option="-Wl,-all_load"
184     llvm_cv_no_link_all_option="-Wl,-noall_load"
185     llvm_cv_os_type="Darwin"
186     llvm_cv_platform_type="Unix" ;;
187   *-*-minix*)
188     llvm_cv_link_all_option="-Wl,-all_load"
189     llvm_cv_no_link_all_option="-Wl,-noall_load"
190     llvm_cv_os_type="Minix"
191     llvm_cv_platform_type="Unix" ;;
192   *-*-freebsd* | *-*-kfreebsd-gnu)
193     llvm_cv_link_all_option="-Wl,--whole-archive"
194     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
195     llvm_cv_os_type="FreeBSD"
196     llvm_cv_platform_type="Unix" ;;
197   *-*-openbsd*)
198     llvm_cv_link_all_option="-Wl,--whole-archive"
199     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
200     llvm_cv_os_type="OpenBSD"
201     llvm_cv_platform_type="Unix" ;;
202   *-*-netbsd*)
203     llvm_cv_link_all_option="-Wl,--whole-archive"
204     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
205     llvm_cv_os_type="NetBSD"
206     llvm_cv_platform_type="Unix" ;;
207   *-*-dragonfly*)
208     llvm_cv_link_all_option="-Wl,--whole-archive"
209     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
210     llvm_cv_os_type="DragonFly"
211     llvm_cv_platform_type="Unix" ;;
212   *-*-hpux*)
213     llvm_cv_link_all_option="-Wl,--whole-archive"
214     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
215     llvm_cv_os_type="HP-UX"
216     llvm_cv_platform_type="Unix" ;;
217   *-*-interix*)
218     llvm_cv_link_all_option="-Wl,--whole-archive"
219     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
220     llvm_cv_os_type="Interix"
221     llvm_cv_platform_type="Unix" ;;
222   *-*-linux*)
223     llvm_cv_link_all_option="-Wl,--whole-archive"
224     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
225     llvm_cv_os_type="Linux"
226     llvm_cv_platform_type="Unix" ;;
227   *-*-gnu*)
228     llvm_cv_link_all_option="-Wl,--whole-archive"
229     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
230     llvm_cv_os_type="GNU"
231     llvm_cv_platform_type="Unix" ;;
232   *-*-solaris*)
233     llvm_cv_link_all_option="-Wl,-z,allextract"
234     llvm_cv_no_link_all_option="-Wl,-z,defaultextract"
235     llvm_cv_os_type="SunOS"
236     llvm_cv_platform_type="Unix" ;;
237   *-*-auroraux*)
238     llvm_cv_link_all_option="-Wl,-z,allextract"
239     llvm_cv_link_all_option="-Wl,-z,defaultextract"
240     llvm_cv_os_type="AuroraUX"
241     llvm_cv_platform_type="Unix" ;;
242   *-*-win32*)
243     llvm_cv_link_all_option="-Wl,--whole-archive"
244     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
245     llvm_cv_os_type="Win32"
246     llvm_cv_platform_type="Win32" ;;
247   *-*-mingw*)
248     llvm_cv_link_all_option="-Wl,--whole-archive"
249     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
250     llvm_cv_os_type="MingW"
251     llvm_cv_platform_type="Win32" ;;
252   *-*-haiku*)
253     llvm_cv_link_all_option="-Wl,--whole-archive"
254     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
255     llvm_cv_os_type="Haiku"
256     llvm_cv_platform_type="Unix" ;;
257   *-unknown-eabi*)
258     llvm_cv_link_all_option="-Wl,--whole-archive"
259     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
260     llvm_cv_os_type="Freestanding"
261     llvm_cv_platform_type="Unix" ;;
262   *-unknown-elf*)
263     llvm_cv_link_all_option="-Wl,--whole-archive"
264     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
265     llvm_cv_os_type="Freestanding"
266     llvm_cv_platform_type="Unix" ;;
267   *)
268     llvm_cv_link_all_option=""
269     llvm_cv_no_link_all_option=""
270     llvm_cv_os_type="Unknown"
271     llvm_cv_platform_type="Unknown" ;;
272 esac])
273
274 AC_CACHE_CHECK([type of operating system we're going to target],
275                [llvm_cv_target_os_type],
276 [case $target in
277   *-*-aix*)
278     llvm_cv_target_os_type="AIX" ;;
279   *-*-irix*)
280     llvm_cv_target_os_type="IRIX" ;;
281   *-*-cygwin*)
282     llvm_cv_target_os_type="Cygwin" ;;
283   *-*-darwin*)
284     llvm_cv_target_os_type="Darwin" ;;
285   *-*-minix*)
286     llvm_cv_target_os_type="Minix" ;;
287   *-*-freebsd*)
288     llvm_cv_target_os_type="FreeBSD" ;;
289   *-*-openbsd*)
290     llvm_cv_target_os_type="OpenBSD" ;;
291   *-*-netbsd*)
292     llvm_cv_target_os_type="NetBSD" ;;
293   *-*-dragonfly*)
294     llvm_cv_target_os_type="DragonFly" ;;
295   *-*-hpux*)
296     llvm_cv_target_os_type="HP-UX" ;;
297   *-*-interix*)
298     llvm_cv_target_os_type="Interix" ;;
299   *-*-linux*)
300     llvm_cv_target_os_type="Linux" ;;
301   *-*-solaris*)
302     llvm_cv_target_os_type="SunOS" ;;
303   *-*-auroraux*)
304     llvm_cv_target_os_type="AuroraUX" ;;
305   *-*-win32*)
306     llvm_cv_target_os_type="Win32" ;;
307   *-*-mingw*)
308     llvm_cv_target_os_type="MingW" ;;
309   *-*-haiku*)
310     llvm_cv_target_os_type="Haiku" ;;
311   *-*-rtems*)
312     llvm_cv_target_os_type="RTEMS" ;;
313   *-*-nacl*)
314     llvm_cv_target_os_type="NativeClient" ;;
315   *-unknown-eabi*)
316     llvm_cv_target_os_type="Freestanding" ;;
317   *)
318     llvm_cv_target_os_type="Unknown" ;;
319 esac])
320
321 dnl Make sure we aren't attempting to configure for an unknown system
322 if test "$llvm_cv_os_type" = "Unknown" ; then
323   AC_MSG_ERROR([Operating system is unknown, configure can't continue])
324 fi
325
326 dnl Set the "OS" Makefile variable based on the platform type so the
327 dnl makefile can configure itself to specific build hosts
328 AC_SUBST(OS,$llvm_cv_os_type)
329 AC_SUBST(HOST_OS,$llvm_cv_os_type)
330 AC_SUBST(TARGET_OS,$llvm_cv_target_os_type)
331
332 dnl Set the LINKALL and NOLINKALL Makefile variables based on the platform
333 AC_SUBST(LINKALL,$llvm_cv_link_all_option)
334 AC_SUBST(NOLINKALL,$llvm_cv_no_link_all_option)
335
336 dnl Set the "LLVM_ON_*" variables based on llvm_cv_platform_type
337 dnl This is used by lib/Support to determine the basic kind of implementation
338 dnl to use.
339 case $llvm_cv_platform_type in
340   Unix)
341     AC_DEFINE([LLVM_ON_UNIX],[1],[Define if this is Unixish platform])
342     AC_SUBST(LLVM_ON_UNIX,[1])
343     AC_SUBST(LLVM_ON_WIN32,[0])
344     ;;
345   Win32)
346     AC_DEFINE([LLVM_ON_WIN32],[1],[Define if this is Win32ish platform])
347     AC_SUBST(LLVM_ON_UNIX,[0])
348     AC_SUBST(LLVM_ON_WIN32,[1])
349     ;;
350 esac
351
352 dnl Determine what our target architecture is and configure accordingly.
353 dnl This will allow Makefiles to make a distinction between the hardware and
354 dnl the OS.
355 AC_CACHE_CHECK([target architecture],[llvm_cv_target_arch],
356 [case $target in
357   i?86-*)                 llvm_cv_target_arch="x86" ;;
358   amd64-* | x86_64-*)     llvm_cv_target_arch="x86_64" ;;
359   sparc*-*)               llvm_cv_target_arch="Sparc" ;;
360   powerpc*-*)             llvm_cv_target_arch="PowerPC" ;;
361   arm*-*)                 llvm_cv_target_arch="ARM" ;;
362   mips-*)                 llvm_cv_target_arch="Mips" ;;
363   xcore-*)                llvm_cv_target_arch="XCore" ;;
364   msp430-*)               llvm_cv_target_arch="MSP430" ;;
365   hexagon-*)              llvm_cv_target_arch="Hexagon" ;;
366   mblaze-*)               llvm_cv_target_arch="MBlaze" ;;
367   ptx-*)                  llvm_cv_target_arch="PTX" ;;
368   *)                      llvm_cv_target_arch="Unknown" ;;
369 esac])
370
371 if test "$llvm_cv_target_arch" = "Unknown" ; then
372   AC_MSG_WARN([Configuring LLVM for an unknown target archicture])
373 fi
374
375 # Determine the LLVM native architecture for the target
376 case "$llvm_cv_target_arch" in
377     x86)     LLVM_NATIVE_ARCH="X86" ;;
378     x86_64)  LLVM_NATIVE_ARCH="X86" ;;
379     *)       LLVM_NATIVE_ARCH="$llvm_cv_target_arch" ;;
380 esac
381
382 dnl Define a substitution, ARCH, for the target architecture
383 AC_SUBST(ARCH,$llvm_cv_target_arch)
384
385 dnl Check for the endianness of the target
386 AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little]))
387
388 dnl Check for build platform executable suffix if we're crosscompiling
389 if test "$cross_compiling" = yes; then
390   AC_SUBST(LLVM_CROSS_COMPILING, [1])
391   AC_BUILD_EXEEXT
392   ac_build_prefix=${build_alias}-
393   AC_CHECK_PROG(BUILD_CXX, ${ac_build_prefix}g++, ${ac_build_prefix}g++)
394   if test -z "$BUILD_CXX"; then
395      AC_CHECK_PROG(BUILD_CXX, g++, g++)
396      if test -z "$BUILD_CXX"; then
397        AC_CHECK_PROG(BUILD_CXX, c++, c++, , , /usr/ucb/c++)
398      fi
399   fi
400 else
401   AC_SUBST(LLVM_CROSS_COMPILING, [0])
402 fi
403
404 dnl Check to see if there's a .svn or .git directory indicating that this
405 dnl build is being done from a checkout. This sets up several defaults for
406 dnl the command line switches. When we build with a checkout directory,
407 dnl we get a debug with assertions turned on. Without, we assume a source
408 dnl release and we get an optimized build without assertions.
409 dnl See --enable-optimized and --enable-assertions below
410 if test -d ".svn" -o -d "${srcdir}/.svn" -o -d ".git" -o -d "${srcdir}/.git"; then
411   cvsbuild="yes"
412   optimize="no"
413   AC_SUBST(CVSBUILD,[[CVSBUILD=1]])
414 else
415   cvsbuild="no"
416   optimize="yes"
417 fi
418
419 dnl===-----------------------------------------------------------------------===
420 dnl===
421 dnl=== SECTION 3: Command line arguments for the configure script.
422 dnl===
423 dnl===-----------------------------------------------------------------------===
424
425 dnl --enable-libcpp : check whether or not to use libc++ on the command line
426 AC_ARG_ENABLE(libcpp,
427               AS_HELP_STRING([--enable-libcpp],
428                              [Use libc++ if available (default is NO)]),,
429                              enableval=default)
430 case "$enableval" in
431   yes) AC_SUBST(ENABLE_LIBCPP,[1]) ;;
432   no)  AC_SUBST(ENABLE_LIBCPP,[0]) ;;
433   default) AC_SUBST(ENABLE_LIBCPP,[0]);;
434   *) AC_MSG_ERROR([Invalid setting for --enable-libcpp. Use "yes" or "no"]) ;;
435 esac
436
437 dnl --enable-optimized : check whether they want to do an optimized build:
438 AC_ARG_ENABLE(optimized, AS_HELP_STRING(
439  --enable-optimized,[Compile with optimizations enabled (default is NO)]),,enableval=$optimize)
440 if test ${enableval} = "no" ; then
441   AC_SUBST(ENABLE_OPTIMIZED,[[]])
442 else
443   AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
444 fi
445
446 dnl --enable-profiling : check whether they want to do a profile build:
447 AC_ARG_ENABLE(profiling, AS_HELP_STRING(
448  --enable-profiling,[Compile with profiling enabled (default is NO)]),,enableval="no")
449 if test ${enableval} = "no" ; then
450   AC_SUBST(ENABLE_PROFILING,[[]])
451 else
452   AC_SUBST(ENABLE_PROFILING,[[ENABLE_PROFILING=1]])
453 fi
454
455 dnl --enable-assertions : check whether they want to turn on assertions or not:
456 AC_ARG_ENABLE(assertions,AS_HELP_STRING(
457   --enable-assertions,[Compile with assertion checks enabled (default is YES)]),, enableval="yes")
458 if test ${enableval} = "yes" ; then
459   AC_SUBST(DISABLE_ASSERTIONS,[[]])
460 else
461   AC_SUBST(DISABLE_ASSERTIONS,[[DISABLE_ASSERTIONS=1]])
462 fi
463
464 dnl --enable-expensive-checks : check whether they want to turn on expensive debug checks:
465 AC_ARG_ENABLE(expensive-checks,AS_HELP_STRING(
466   --enable-expensive-checks,[Compile with expensive debug checks enabled (default is NO)]),, enableval="no")
467 if test ${enableval} = "yes" ; then
468   AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[ENABLE_EXPENSIVE_CHECKS=1]])
469   AC_SUBST(EXPENSIVE_CHECKS,[[yes]])
470 else
471   AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[]])
472   AC_SUBST(EXPENSIVE_CHECKS,[[no]])
473 fi
474
475 dnl --enable-debug-runtime : should runtime libraries have debug symbols?
476 AC_ARG_ENABLE(debug-runtime,
477    AS_HELP_STRING(--enable-debug-runtime,[Build runtime libs with debug symbols (default is NO)]),,enableval=no)
478 if test ${enableval} = "no" ; then
479   AC_SUBST(DEBUG_RUNTIME,[[]])
480 else
481   AC_SUBST(DEBUG_RUNTIME,[[DEBUG_RUNTIME=1]])
482 fi
483
484 dnl --enable-debug-symbols : should even optimized compiler libraries
485 dnl have debug symbols?
486 AC_ARG_ENABLE(debug-symbols,
487    AS_HELP_STRING(--enable-debug-symbols,[Build compiler with debug symbols (default is NO if optimization is on and YES if it's off)]),,enableval=no)
488 if test ${enableval} = "no" ; then
489   AC_SUBST(DEBUG_SYMBOLS,[[]])
490 else
491   AC_SUBST(DEBUG_SYMBOLS,[[DEBUG_SYMBOLS=1]])
492 fi
493
494 dnl --enable-jit: check whether they want to enable the jit
495 AC_ARG_ENABLE(jit,
496   AS_HELP_STRING(--enable-jit,
497                  [Enable Just In Time Compiling (default is YES)]),,
498   enableval=default)
499 if test ${enableval} = "no"
500 then
501   AC_SUBST(JIT,[[]])
502 else
503   case "$llvm_cv_target_arch" in
504     x86)         AC_SUBST(TARGET_HAS_JIT,1) ;;
505     Sparc)       AC_SUBST(TARGET_HAS_JIT,0) ;;
506     PowerPC)     AC_SUBST(TARGET_HAS_JIT,1) ;;
507     x86_64)      AC_SUBST(TARGET_HAS_JIT,1) ;;
508     ARM)         AC_SUBST(TARGET_HAS_JIT,1) ;;
509     Mips)        AC_SUBST(TARGET_HAS_JIT,1) ;;
510     XCore)       AC_SUBST(TARGET_HAS_JIT,0) ;;
511     MSP430)      AC_SUBST(TARGET_HAS_JIT,0) ;;
512     Hexagon)     AC_SUBST(TARGET_HAS_JIT,0) ;;
513     MBlaze)      AC_SUBST(TARGET_HAS_JIT,0) ;;
514     PTX)         AC_SUBST(TARGET_HAS_JIT,0) ;;
515     *)           AC_SUBST(TARGET_HAS_JIT,0) ;;
516   esac
517 fi
518
519 dnl Allow enablement of building and installing docs
520 AC_ARG_ENABLE(docs,
521               AS_HELP_STRING([--enable-docs],
522                              [Build documents (default is YES)]),,
523                              enableval=default)
524 case "$enableval" in
525   yes) AC_SUBST(ENABLE_DOCS,[1]) ;;
526   no)  AC_SUBST(ENABLE_DOCS,[0]) ;;
527   default) AC_SUBST(ENABLE_DOCS,[1]) ;;
528   *) AC_MSG_ERROR([Invalid setting for --enable-docs. Use "yes" or "no"]) ;;
529 esac
530
531 dnl Allow enablement of doxygen generated documentation
532 AC_ARG_ENABLE(doxygen,
533               AS_HELP_STRING([--enable-doxygen],
534                              [Build doxygen documentation (default is NO)]),,
535                              enableval=default)
536 case "$enableval" in
537   yes) AC_SUBST(ENABLE_DOXYGEN,[1]) ;;
538   no)  AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
539   default) AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
540   *) AC_MSG_ERROR([Invalid setting for --enable-doxygen. Use "yes" or "no"]) ;;
541 esac
542
543 dnl Allow disablement of threads
544 AC_ARG_ENABLE(threads,
545               AS_HELP_STRING([--enable-threads],
546                              [Use threads if available (default is YES)]),,
547                              enableval=default)
548 case "$enableval" in
549   yes) AC_SUBST(LLVM_ENABLE_THREADS,[1]) ;;
550   no)  AC_SUBST(LLVM_ENABLE_THREADS,[0]) ;;
551   default) AC_SUBST(LLVM_ENABLE_THREADS,[1]) ;;
552   *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
553 esac
554 AC_DEFINE_UNQUOTED([LLVM_ENABLE_THREADS],$LLVM_ENABLE_THREADS,
555                    [Define if threads enabled])
556
557 dnl Allow disablement of pthread.h
558 AC_ARG_ENABLE(pthreads,
559               AS_HELP_STRING([--enable-pthreads],
560                              [Use pthreads if available (default is YES)]),,
561                              enableval=default)
562 case "$enableval" in
563   yes) AC_SUBST(ENABLE_PTHREADS,[1]) ;;
564   no)  AC_SUBST(ENABLE_PTHREADS,[0]) ;;
565   default) AC_SUBST(ENABLE_PTHREADS,[1]) ;;
566   *) AC_MSG_ERROR([Invalid setting for --enable-pthreads. Use "yes" or "no"]) ;;
567 esac
568
569 dnl Allow building without position independent code
570 AC_ARG_ENABLE(pic,
571   AS_HELP_STRING([--enable-pic],
572                  [Build LLVM with Position Independent Code (default is YES)]),,
573                  enableval=default)
574 case "$enableval" in
575   yes) AC_SUBST(ENABLE_PIC,[1]) ;;
576   no)  AC_SUBST(ENABLE_PIC,[0]) ;;
577   default) AC_SUBST(ENABLE_PIC,[1]) ;;
578   *) AC_MSG_ERROR([Invalid setting for --enable-pic. Use "yes" or "no"]) ;;
579 esac
580 AC_DEFINE_UNQUOTED([ENABLE_PIC],$ENABLE_PIC,
581                    [Define if position independent code is enabled])
582
583 dnl Allow building a shared library and linking tools against it.
584 AC_ARG_ENABLE(shared,
585   AS_HELP_STRING([--enable-shared],
586                  [Build a shared library and link tools against it (default is NO)]),,
587                  enableval=default)
588 case "$enableval" in
589   yes) AC_SUBST(ENABLE_SHARED,[1]) ;;
590   no)  AC_SUBST(ENABLE_SHARED,[0]) ;;
591   default) AC_SUBST(ENABLE_SHARED,[0]) ;;
592   *) AC_MSG_ERROR([Invalid setting for --enable-shared. Use "yes" or "no"]) ;;
593 esac
594
595 dnl Allow libstdc++ is embedded in LLVM.dll.
596 AC_ARG_ENABLE(embed-stdcxx,
597   AS_HELP_STRING([--enable-embed-stdcxx],
598                  [Build a shared library with embedded libstdc++ for Win32 DLL (default is NO)]),,
599                  enableval=default)
600 case "$enableval" in
601   yes) AC_SUBST(ENABLE_EMBED_STDCXX,[1]) ;;
602   no)  AC_SUBST(ENABLE_EMBED_STDCXX,[0]) ;;
603   default) AC_SUBST(ENABLE_EMBED_STDCXX,[0]) ;;
604   *) AC_MSG_ERROR([Invalid setting for --enable-embed-stdcxx. Use "yes" or "no"]) ;;
605 esac
606
607 dnl Enable embedding timestamp information into build.
608 AC_ARG_ENABLE(timestamps,
609   AS_HELP_STRING([--enable-timestamps],
610                  [Enable embedding timestamp information in build (default is YES)]),,
611                  enableval=default)
612 case "$enableval" in
613   yes) AC_SUBST(ENABLE_TIMESTAMPS,[1]) ;;
614   no)  AC_SUBST(ENABLE_TIMESTAMPS,[0]) ;;
615   default) AC_SUBST(ENABLE_TIMESTAMPS,[1]) ;;
616   *) AC_MSG_ERROR([Invalid setting for --enable-timestamps. Use "yes" or "no"]) ;;
617 esac
618 AC_DEFINE_UNQUOTED([ENABLE_TIMESTAMPS],$ENABLE_TIMESTAMPS,
619                    [Define if timestamp information (e.g., __DATE___) is allowed])
620
621 dnl Allow specific targets to be specified for building (or not)
622 TARGETS_TO_BUILD=""
623 AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
624     [Build specific host targets: all or target1,target2,... Valid targets are:
625      host, x86, x86_64, sparc, powerpc, arm, mips, spu, hexagon,
626      xcore, msp430, ptx, cbe, and cpp (default=all)]),,
627     enableval=all)
628 if test "$enableval" = host-only ; then
629   enableval=host
630 fi
631 case "$enableval" in
632   all) TARGETS_TO_BUILD="X86 Sparc PowerPC ARM Mips CellSPU XCore MSP430 CBackend CppBackend MBlaze PTX Hexagon" ;;
633   *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do
634       case "$a_target" in
635         x86)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
636         x86_64)   TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
637         sparc)    TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
638         powerpc)  TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
639         arm)      TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
640         mips)     TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
641         spu)      TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
642         xcore)    TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
643         msp430)   TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
644         cbe)      TARGETS_TO_BUILD="CBackend $TARGETS_TO_BUILD" ;;
645         cpp)      TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;;
646         hexagon)  TARGETS_TO_BUILD="Hexagon $TARGETS_TO_BUILD" ;;
647         mblaze)   TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
648         ptx)      TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
649         host) case "$llvm_cv_target_arch" in
650             x86)         TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
651             x86_64)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
652             Sparc)       TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
653             PowerPC)     TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
654             ARM)         TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
655             Mips)        TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
656             MBlaze)      TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;;
657             CellSPU|SPU) TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
658             XCore)       TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
659             MSP430)      TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
660             Hexagon)     TARGETS_TO_BUILD="Hexagon $TARGETS_TO_BUILD" ;;
661             PTX)         TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;;
662             *)       AC_MSG_ERROR([Can not set target to build]) ;;
663           esac ;;
664         *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
665       esac
666   done
667   ;;
668 esac
669 AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD)
670
671 # Determine whether we are building LLVM support for the native architecture.
672 # If so, define LLVM_NATIVE_ARCH to that LLVM target.
673 for a_target in $TARGETS_TO_BUILD; do
674   if test "$a_target" = "$LLVM_NATIVE_ARCH"; then
675     AC_DEFINE_UNQUOTED(LLVM_NATIVE_ARCH, $LLVM_NATIVE_ARCH,
676       [LLVM architecture name for the native architecture, if available])
677     LLVM_NATIVE_TARGET="LLVMInitialize${LLVM_NATIVE_ARCH}Target"
678     LLVM_NATIVE_TARGETINFO="LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo"
679     LLVM_NATIVE_TARGETMC="LLVMInitialize${LLVM_NATIVE_ARCH}TargetMC"
680     LLVM_NATIVE_ASMPRINTER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter"
681     if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/Makefile ; then
682       LLVM_NATIVE_ASMPARSER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser"
683     fi
684     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGET, $LLVM_NATIVE_TARGET,
685       [LLVM name for the native Target init function, if available])
686     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETINFO, $LLVM_NATIVE_TARGETINFO,
687       [LLVM name for the native TargetInfo init function, if available])
688     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETMC, $LLVM_NATIVE_TARGETMC,
689       [LLVM name for the native target MC init function, if available])
690     AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPRINTER, $LLVM_NATIVE_ASMPRINTER,
691       [LLVM name for the native AsmPrinter init function, if available])
692     if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/Makefile ; then
693       AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPARSER, $LLVM_NATIVE_ASMPARSER,
694        [LLVM name for the native AsmParser init function, if available])
695     fi
696   fi
697 done
698
699 # Build the LLVM_TARGET and LLVM_... macros for Targets.def and the individual
700 # target feature def files.
701 LLVM_ENUM_TARGETS=""
702 LLVM_ENUM_ASM_PRINTERS=""
703 LLVM_ENUM_ASM_PARSERS=""
704 LLVM_ENUM_DISASSEMBLERS=""
705 for target_to_build in $TARGETS_TO_BUILD; do
706   LLVM_ENUM_TARGETS="LLVM_TARGET($target_to_build) $LLVM_ENUM_TARGETS"
707   if test -f ${srcdir}/lib/Target/${target_to_build}/*AsmPrinter.cpp ; then
708     LLVM_ENUM_ASM_PRINTERS="LLVM_ASM_PRINTER($target_to_build) $LLVM_ENUM_ASM_PRINTERS";
709   fi
710   if test -f ${srcdir}/lib/Target/${target_to_build}/AsmParser/Makefile ; then
711     LLVM_ENUM_ASM_PARSERS="LLVM_ASM_PARSER($target_to_build) $LLVM_ENUM_ASM_PARSERS";
712   fi
713   if test -f ${srcdir}/lib/Target/${target_to_build}/Disassembler/Makefile ; then
714     LLVM_ENUM_DISASSEMBLERS="LLVM_DISASSEMBLER($target_to_build) $LLVM_ENUM_DISASSEMBLERS";
715   fi
716 done
717 AC_SUBST(LLVM_ENUM_TARGETS)
718 AC_SUBST(LLVM_ENUM_ASM_PRINTERS)
719 AC_SUBST(LLVM_ENUM_ASM_PARSERS)
720 AC_SUBST(LLVM_ENUM_DISASSEMBLERS)
721
722 dnl Prevent the CBackend from using printf("%a") for floating point so older
723 dnl C compilers that cannot deal with the 0x0p+0 hex floating point format
724 dnl can still compile the CBE's output
725 AC_ARG_ENABLE([cbe-printf-a],AS_HELP_STRING([--enable-cbe-printf-a],
726   [Enable C Backend output with hex floating point via %a  (default is YES)]),,
727   enableval=default)
728 case "$enableval" in
729   yes) AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
730   no)  AC_SUBST(ENABLE_CBE_PRINTF_A,[0]) ;;
731   default)  AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
732   *) AC_MSG_ERROR([Invalid setting for --enable-cbe-printf-a. Use "yes" or "no"]) ;;
733 esac
734 AC_DEFINE_UNQUOTED([ENABLE_CBE_PRINTF_A],$ENABLE_CBE_PRINTF_A,
735                    [Define if CBE is enabled for printf %a output])
736
737 dnl Override the option to use for optimized builds.
738 AC_ARG_WITH(optimize-option,
739   AS_HELP_STRING([--with-optimize-option],
740                  [Select the compiler options to use for optimized builds]),,
741                  withval=default)
742 AC_MSG_CHECKING([optimization flags])
743 case "$withval" in
744   default)
745     case "$llvm_cv_os_type" in
746     FreeBSD) optimize_option=-O2 ;;
747     MingW) optimize_option=-O2 ;;
748     *)     optimize_option=-O3 ;;
749     esac ;;
750   *) optimize_option="$withval" ;;
751 esac
752 AC_SUBST(OPTIMIZE_OPTION,$optimize_option)
753 AC_MSG_RESULT([$optimize_option])
754
755 dnl Specify extra build options
756 AC_ARG_WITH(extra-options,
757   AS_HELP_STRING([--with-extra-options],
758                  [Specify additional options to compile LLVM with]),,
759                  withval=default)
760 case "$withval" in
761   default) EXTRA_OPTIONS= ;;
762   *) EXTRA_OPTIONS=$withval ;;
763 esac
764 AC_SUBST(EXTRA_OPTIONS,$EXTRA_OPTIONS)
765
766 dnl Specify extra linker build options
767 AC_ARG_WITH(extra-ld-options,
768   AS_HELP_STRING([--with-extra-ld-options],
769                  [Specify additional options to link LLVM with]),,
770                  withval=default)
771 case "$withval" in
772   default) EXTRA_LD_OPTIONS= ;;
773   *) EXTRA_LD_OPTIONS=$withval ;;
774 esac
775 AC_SUBST(EXTRA_LD_OPTIONS,$EXTRA_LD_OPTIONS)
776
777 dnl Allow specific bindings to be specified for building (or not)
778 AC_ARG_ENABLE([bindings],AS_HELP_STRING([--enable-bindings],
779     [Build specific language bindings: all,auto,none,{binding-name} (default=auto)]),,
780     enableval=default)
781 BINDINGS_TO_BUILD=""
782 case "$enableval" in
783   yes | default | auto) BINDINGS_TO_BUILD="auto" ;;
784   all ) BINDINGS_TO_BUILD="ocaml" ;;
785   none | no) BINDINGS_TO_BUILD="" ;;
786   *)for a_binding in `echo $enableval|sed -e 's/,/ /g' ` ; do
787       case "$a_binding" in
788         ocaml) BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD" ;;
789         *) AC_MSG_ERROR([Unrecognized binding $a_binding]) ;;
790       esac
791   done
792   ;;
793 esac
794
795 dnl Allow the ocaml libdir to be overridden. This could go in a configure
796 dnl script for bindings/ocaml/configure, except that its auto value depends on
797 dnl OCAMLC, which is found here to support tests.
798 AC_ARG_WITH([ocaml-libdir],
799   [AS_HELP_STRING([--with-ocaml-libdir],
800     [Specify install location for ocaml bindings (default is stdlib)])],
801   [],
802   [withval=auto])
803 case "$withval" in
804   auto) with_ocaml_libdir="$withval" ;;
805   /* | [[A-Za-z]]:[[\\/]]*) with_ocaml_libdir="$withval" ;;
806   *) AC_MSG_ERROR([Invalid path for --with-ocaml-libdir. Provide full path]) ;;
807 esac
808
809 AC_ARG_WITH(clang-srcdir,
810   AS_HELP_STRING([--with-clang-srcdir],
811     [Directory to the out-of-tree Clang source]),,
812     withval="-")
813 case "$withval" in
814   -) clang_src_root="" ;;
815   /* | [[A-Za-z]]:[[\\/]]*) clang_src_root="$withval" ;;
816   *) clang_src_root="$ac_pwd/$withval" ;;
817 esac
818 AC_SUBST(CLANG_SRC_ROOT,[$clang_src_root])
819
820 AC_ARG_WITH(clang-resource-dir,
821   AS_HELP_STRING([--with-clang-resource-dir],
822     [Relative directory from the Clang binary for resource files]),,
823     withval="")
824 AC_DEFINE_UNQUOTED(CLANG_RESOURCE_DIR,"$withval",
825                    [Relative directory for resource files])
826
827 AC_ARG_WITH(c-include-dirs,
828   AS_HELP_STRING([--with-c-include-dirs],
829     [Colon separated list of directories clang will search for headers]),,
830     withval="")
831 AC_DEFINE_UNQUOTED(C_INCLUDE_DIRS,"$withval",
832                    [Directories clang will search for headers])
833
834 AC_ARG_WITH(cxx-include-root,
835   AS_HELP_STRING([--with-cxx-include-root],
836     [Directory with the libstdc++ headers.]),,
837     withval="")
838 AC_DEFINE_UNQUOTED(CXX_INCLUDE_ROOT,"$withval",
839                    [Directory with the libstdc++ headers.])
840
841 AC_ARG_WITH(cxx-include-arch,
842   AS_HELP_STRING([--with-cxx-include-arch],
843     [Architecture of the libstdc++ headers.]),,
844     withval="")
845 AC_DEFINE_UNQUOTED(CXX_INCLUDE_ARCH,"$withval",
846                    [Arch the libstdc++ headers.])
847
848 AC_ARG_WITH(cxx-include-32bit-dir,
849   AS_HELP_STRING([--with-cxx-include-32bit-dir],
850     [32 bit multilib dir.]),,
851     withval="")
852 AC_DEFINE_UNQUOTED(CXX_INCLUDE_32BIT_DIR,"$withval",
853                    [32 bit multilib directory.])
854
855 AC_ARG_WITH(cxx-include-64bit-dir,
856   AS_HELP_STRING([--with-cxx-include-64bit-dir],
857     [64 bit multilib directory.]),,
858     withval="")
859 AC_DEFINE_UNQUOTED(CXX_INCLUDE_64BIT_DIR,"$withval",
860                    [64 bit multilib directory.])
861
862 dnl Allow linking of LLVM with GPLv3 binutils code.
863 AC_ARG_WITH(binutils-include,
864   AS_HELP_STRING([--with-binutils-include],
865     [Specify path to binutils/include/ containing plugin-api.h file for gold plugin.]),,
866   withval=default)
867 case "$withval" in
868   default) WITH_BINUTILS_INCDIR=default ;;
869   /* | [[A-Za-z]]:[[\\/]]*)      WITH_BINUTILS_INCDIR=$withval ;;
870   *) AC_MSG_ERROR([Invalid path for --with-binutils-include. Provide full path]) ;;
871 esac
872 if test "x$WITH_BINUTILS_INCDIR" != xdefault ; then
873   AC_SUBST(BINUTILS_INCDIR,$WITH_BINUTILS_INCDIR)
874   if test ! -f "$WITH_BINUTILS_INCDIR/plugin-api.h"; then
875      echo "$WITH_BINUTILS_INCDIR/plugin-api.h"
876      AC_MSG_ERROR([Invalid path to directory containing plugin-api.h.]);
877   fi
878 fi
879
880 dnl Specify the URL where bug reports should be submitted.
881 AC_ARG_WITH(bug-report-url,
882   AS_HELP_STRING([--with-bug-report-url],
883     [Specify the URL where bug reports should be submitted (default=http://llvm.org/bugs/)]),,
884     withval="http://llvm.org/bugs/")
885 AC_DEFINE_UNQUOTED(BUG_REPORT_URL,"$withval",
886                    [Bug report URL.])
887
888 dnl --enable-libffi : check whether the user wants to turn off libffi:
889 AC_ARG_ENABLE(libffi,AS_HELP_STRING(
890   --enable-libffi,[Check for the presence of libffi (default is NO)]),
891   [case "$enableval" in
892     yes) llvm_cv_enable_libffi="yes" ;;
893     no)  llvm_cv_enable_libffi="no"  ;;
894     *) AC_MSG_ERROR([Invalid setting for --enable-libffi. Use "yes" or "no"]) ;;
895   esac],
896   llvm_cv_enable_libffi=no)
897
898 AC_ARG_WITH(internal-prefix,
899   AS_HELP_STRING([--with-internal-prefix],
900     [Installation directory for internal files]),,
901     withval="")
902 AC_SUBST(INTERNAL_PREFIX,[$withval])
903
904 dnl===-----------------------------------------------------------------------===
905 dnl===
906 dnl=== SECTION 4: Check for programs we need and that they are the right version
907 dnl===
908 dnl===-----------------------------------------------------------------------===
909
910 AC_PROG_NM
911 AC_SUBST(NM)
912
913 dnl Check for the tools that the makefiles require
914 AC_CHECK_GNU_MAKE
915 AC_PROG_LN_S
916 AC_PATH_PROG(CMP, [cmp], [cmp])
917 AC_PATH_PROG(CP, [cp], [cp])
918 AC_PATH_PROG(DATE, [date], [date])
919 AC_PATH_PROG(FIND, [find], [find])
920 AC_PATH_PROG(GREP, [grep], [grep])
921 AC_PATH_PROG(MKDIR,[mkdir],[mkdir])
922 AC_PATH_PROG(MV,   [mv],   [mv])
923 AC_PROG_RANLIB
924 AC_CHECK_TOOL(AR, ar, false)
925 AC_PATH_PROG(RM,   [rm],   [rm])
926 AC_PATH_PROG(SED,  [sed],  [sed])
927 AC_PATH_PROG(TAR,  [tar],  [gtar])
928 AC_PATH_PROG(BINPWD,[pwd],  [pwd])
929
930 dnl Looking for misc. graph plotting software
931 AC_PATH_PROG(GRAPHVIZ, [Graphviz], [echo Graphviz])
932 if test "$GRAPHVIZ" != "echo Graphviz" ; then
933   AC_DEFINE([HAVE_GRAPHVIZ],[1],[Define if the Graphviz program is available])
934   dnl If we're targeting for mingw we should emit windows paths, not msys
935   if test "$llvm_cv_os_type" = "MingW" ; then
936     GRAPHVIZ=`echo $GRAPHVIZ | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
937   fi
938   AC_DEFINE_UNQUOTED([LLVM_PATH_GRAPHVIZ],"$GRAPHVIZ${EXEEXT}",
939    [Define to path to Graphviz program if found or 'echo Graphviz' otherwise])
940 fi
941 AC_PATH_PROG(DOT, [dot], [echo dot])
942 if test "$DOT" != "echo dot" ; then
943   AC_DEFINE([HAVE_DOT],[1],[Define if the dot program is available])
944   dnl If we're targeting for mingw we should emit windows paths, not msys
945   if test "$llvm_cv_os_type" = "MingW" ; then
946     DOT=`echo $DOT | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
947   fi
948   AC_DEFINE_UNQUOTED([LLVM_PATH_DOT],"$DOT${EXEEXT}",
949    [Define to path to dot program if found or 'echo dot' otherwise])
950 fi
951 AC_PATH_PROG(FDP, [fdp], [echo fdp])
952 if test "$FDP" != "echo fdp" ; then
953   AC_DEFINE([HAVE_FDP],[1],[Define if the neat program is available])
954   dnl If we're targeting for mingw we should emit windows paths, not msys
955   if test "$llvm_cv_os_type" = "MingW" ; then
956     FDP=`echo $FDP | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
957   fi
958   AC_DEFINE_UNQUOTED([LLVM_PATH_FDP],"$FDP${EXEEXT}",
959    [Define to path to fdp program if found or 'echo fdp' otherwise])
960 fi
961 AC_PATH_PROG(NEATO, [neato], [echo neato])
962 if test "$NEATO" != "echo neato" ; then
963   AC_DEFINE([HAVE_NEATO],[1],[Define if the neat program is available])
964   dnl If we're targeting for mingw we should emit windows paths, not msys
965   if test "$llvm_cv_os_type" = "MingW" ; then
966     NEATO=`echo $NEATO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
967   fi
968   AC_DEFINE_UNQUOTED([LLVM_PATH_NEATO],"$NEATO${EXEEXT}",
969    [Define to path to neato program if found or 'echo neato' otherwise])
970 fi
971 AC_PATH_PROG(TWOPI, [twopi], [echo twopi])
972 if test "$TWOPI" != "echo twopi" ; then
973   AC_DEFINE([HAVE_TWOPI],[1],[Define if the neat program is available])
974   dnl If we're targeting for mingw we should emit windows paths, not msys
975   if test "$llvm_cv_os_type" = "MingW" ; then
976     TWOPI=`echo $TWOPI | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
977   fi
978   AC_DEFINE_UNQUOTED([LLVM_PATH_TWOPI],"$TWOPI${EXEEXT}",
979    [Define to path to twopi program if found or 'echo twopi' otherwise])
980 fi
981 AC_PATH_PROG(CIRCO, [circo], [echo circo])
982 if test "$CIRCO" != "echo circo" ; then
983   AC_DEFINE([HAVE_CIRCO],[1],[Define if the neat program is available])
984   dnl If we're targeting for mingw we should emit windows paths, not msys
985   if test "$llvm_cv_os_type" = "MingW" ; then
986     CIRCO=`echo $CIRCO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
987   fi
988   AC_DEFINE_UNQUOTED([LLVM_PATH_CIRCO],"$CIRCO${EXEEXT}",
989    [Define to path to circo program if found or 'echo circo' otherwise])
990 fi
991 AC_PATH_PROGS(GV, [gv gsview32], [echo gv])
992 if test "$GV" != "echo gv" ; then
993   AC_DEFINE([HAVE_GV],[1],[Define if the gv program is available])
994   dnl If we're targeting for mingw we should emit windows paths, not msys
995   if test "$llvm_cv_os_type" = "MingW" ; then
996     GV=`echo $GV | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
997   fi
998   AC_DEFINE_UNQUOTED([LLVM_PATH_GV],"$GV${EXEEXT}",
999    [Define to path to gv program if found or 'echo gv' otherwise])
1000 fi
1001 AC_PATH_PROG(DOTTY, [dotty], [echo dotty])
1002 if test "$DOTTY" != "echo dotty" ; then
1003   AC_DEFINE([HAVE_DOTTY],[1],[Define if the dotty program is available])
1004   dnl If we're targeting for mingw we should emit windows paths, not msys
1005   if test "$llvm_cv_os_type" = "MingW" ; then
1006     DOTTY=`echo $DOTTY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1007   fi
1008   AC_DEFINE_UNQUOTED([LLVM_PATH_DOTTY],"$DOTTY${EXEEXT}",
1009    [Define to path to dotty program if found or 'echo dotty' otherwise])
1010 fi
1011 AC_PATH_PROG(XDOT_PY, [xdot.py], [echo xdot.py])
1012 if test "$XDOT_PY" != "echo xdot.py" ; then
1013   AC_DEFINE([HAVE_XDOT_PY],[1],[Define if the xdot.py program is available])
1014   dnl If we're targeting for mingw we should emit windows paths, not msys
1015   if test "$llvm_cv_os_type" = "MingW" ; then
1016     XDOT_PY=`echo $XDOT_PY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1017   fi
1018   AC_DEFINE_UNQUOTED([LLVM_PATH_XDOT_PY],"$XDOT_PY${EXEEXT}",
1019    [Define to path to xdot.py program if found or 'echo xdot.py' otherwise])
1020 fi
1021
1022 dnl Look for a sufficiently recent version of Perl.
1023 LLVM_PROG_PERL([5.006])
1024 AC_SUBST(PERL)
1025 if test x"$PERL" = xnone; then
1026    AC_SUBST(HAVE_PERL,0)
1027    AC_MSG_ERROR([perl is required but was not found, please install it])
1028 else
1029    AC_SUBST(HAVE_PERL,1)
1030 fi
1031
1032 dnl Find the install program
1033 AC_PROG_INSTALL
1034 dnl Prepend src dir to install path dir if it's a relative path
1035 dnl This is a hack for installs that take place in something other
1036 dnl than the top level.
1037 case "$INSTALL" in
1038  [[\\/$]]* | ?:[[\\/]]* ) ;;
1039  *)  INSTALL="\\\$(TOPSRCDIR)/$INSTALL" ;;
1040 esac
1041
1042 dnl Checks for documentation and testing tools that we can do without. If these
1043 dnl are not found then they are set to "true" which always succeeds but does
1044 dnl nothing. This just lets the build output show that we could have done
1045 dnl something if the tool was available.
1046 AC_PATH_PROG(BZIP2, [bzip2])
1047 AC_PATH_PROG(CAT, [cat])
1048 AC_PATH_PROG(DOXYGEN, [doxygen])
1049 AC_PATH_PROG(GROFF, [groff])
1050 AC_PATH_PROG(GZIPBIN, [gzip])
1051 AC_PATH_PROG(POD2HTML, [pod2html])
1052 AC_PATH_PROG(POD2MAN, [pod2man])
1053 AC_PATH_PROG(PDFROFF, [pdfroff])
1054 AC_PATH_PROG(RUNTEST, [runtest])
1055 DJ_AC_PATH_TCLSH
1056 AC_PATH_PROG(ZIP, [zip])
1057 AC_PATH_PROGS(OCAMLC, [ocamlc])
1058 AC_PATH_PROGS(OCAMLOPT, [ocamlopt])
1059 AC_PATH_PROGS(OCAMLDEP, [ocamldep])
1060 AC_PATH_PROGS(OCAMLDOC, [ocamldoc])
1061 AC_PATH_PROGS(GAS, [gas as])
1062
1063 dnl Get the version of the linker in use.
1064 AC_LINK_GET_VERSION
1065
1066 dnl Determine whether the linker supports the -R option.
1067 AC_LINK_USE_R
1068
1069 dnl Determine whether the linker supports the -export-dynamic option.
1070 AC_LINK_EXPORT_DYNAMIC
1071
1072 dnl Determine whether the linker supports the --version-script option.
1073 AC_LINK_VERSION_SCRIPT
1074
1075 dnl Check for libtool and the library that has dlopen function (which must come
1076 dnl before the AC_PROG_LIBTOOL check in order to enable dlopening libraries with
1077 dnl libtool).
1078 AC_LIBTOOL_DLOPEN
1079 AC_LIB_LTDL
1080
1081 AC_MSG_CHECKING([tool compatibility])
1082
1083 dnl Ensure that compilation tools are GCC or a GNU compatible compiler such as
1084 dnl ICC; we use GCC specific options in the makefiles so the compiler needs
1085 dnl to support those options.
1086 dnl "icc" emits gcc signatures
1087 dnl "icc -no-gcc" emits no gcc signature BUT is still compatible
1088 ICC=no
1089 IXX=no
1090 case $CC in
1091   icc*|icpc*)
1092     ICC=yes
1093     IXX=yes
1094     ;;
1095    *)
1096     ;;
1097 esac
1098
1099 if test "$GCC" != "yes" && test "$ICC" != "yes"
1100 then
1101   AC_MSG_ERROR([gcc|icc required but not found])
1102 fi
1103
1104 dnl Ensure that compilation tools are compatible with GCC extensions
1105 if test "$GXX" != "yes" && test "$IXX" != "yes"
1106 then
1107   AC_MSG_ERROR([g++|clang++|icc required but not found])
1108 fi
1109
1110 dnl Verify that GCC is version 3.0 or higher
1111 if test "$GCC" = "yes"
1112 then
1113   AC_COMPILE_IFELSE([[#if !defined(__GNUC__) || __GNUC__ < 3
1114 #error Unsupported GCC version
1115 #endif
1116 ]], [], [AC_MSG_ERROR([gcc 3.x required, but you have a lower version])])
1117 fi
1118
1119 dnl Check for GNU Make.  We use its extensions, so don't build without it
1120 if test -z "$llvm_cv_gnu_make_command"
1121 then
1122   AC_MSG_ERROR([GNU Make required but not found])
1123 fi
1124
1125 dnl Tool compatibility is okay if we make it here.
1126 AC_MSG_RESULT([ok])
1127
1128 dnl Check optional compiler flags.
1129 AC_MSG_CHECKING([optional compiler flags])
1130 CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros])
1131 CXX_FLAG_CHECK(NO_MISSING_FIELD_INITIALIZERS, [-Wno-missing-field-initializers])
1132 AC_MSG_RESULT([$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS])
1133
1134 dnl===-----------------------------------------------------------------------===
1135 dnl===
1136 dnl=== SECTION 5: Check for libraries
1137 dnl===
1138 dnl===-----------------------------------------------------------------------===
1139
1140 AC_CHECK_LIB(m,sin)
1141 if test "$llvm_cv_os_type" = "MingW" ; then
1142   AC_CHECK_LIB(imagehlp, main)
1143   AC_CHECK_LIB(psapi, main)
1144 fi
1145
1146 dnl dlopen() is required for plugin support.
1147 AC_SEARCH_LIBS(dlopen,dl,AC_DEFINE([HAVE_DLOPEN],[1],
1148                [Define if dlopen() is available on this platform.]),
1149                AC_MSG_WARN([dlopen() not found - disabling plugin support]))
1150
1151 dnl libffi is optional; used to call external functions from the interpreter
1152 if test "$llvm_cv_enable_libffi" = "yes" ; then
1153   AC_SEARCH_LIBS(ffi_call,ffi,AC_DEFINE([HAVE_FFI_CALL],[1],
1154                  [Define if libffi is available on this platform.]),
1155                  AC_MSG_ERROR([libffi not found - configure without --enable-libffi to compile without it]))
1156 fi
1157
1158 dnl mallinfo is optional; the code can compile (minus features) without it
1159 AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],
1160                [Define if mallinfo() is available on this platform.]))
1161
1162 dnl pthread locking functions are optional - but llvm will not be thread-safe
1163 dnl without locks.
1164 if test "$LLVM_ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1165   AC_CHECK_LIB(pthread, pthread_mutex_init)
1166   AC_SEARCH_LIBS(pthread_mutex_lock,pthread,
1167                  AC_DEFINE([HAVE_PTHREAD_MUTEX_LOCK],[1],
1168                            [Have pthread_mutex_lock]))
1169   AC_SEARCH_LIBS(pthread_rwlock_init,pthread,
1170                  AC_DEFINE([HAVE_PTHREAD_RWLOCK_INIT],[1],
1171                  [Have pthread_rwlock_init]))
1172   AC_SEARCH_LIBS(pthread_getspecific,pthread,
1173                  AC_DEFINE([HAVE_PTHREAD_GETSPECIFIC],[1],
1174                  [Have pthread_getspecific]))
1175 fi
1176
1177 dnl Allow extra x86-disassembler library
1178 AC_ARG_WITH(udis86,
1179   AS_HELP_STRING([--with-udis86=<path>],
1180     [Use udis86 external x86 disassembler library]),
1181     [
1182       AC_SUBST(USE_UDIS86, [1])
1183       case "$withval" in
1184         /usr/lib|yes) ;;
1185         *) LDFLAGS="$LDFLAGS -L${withval}" ;;
1186       esac
1187       AC_CHECK_LIB(udis86, ud_init, [], [
1188         echo "Error! You need to have libudis86 around."
1189         exit -1
1190       ])
1191     ],
1192     AC_SUBST(USE_UDIS86, [0]))
1193 AC_DEFINE_UNQUOTED([USE_UDIS86],$USE_UDIS86,
1194                    [Define if use udis86 library])
1195
1196 dnl Allow OProfile support for JIT output.
1197 AC_ARG_WITH(oprofile,
1198   AS_HELP_STRING([--with-oprofile=<prefix>],
1199     [Tell OProfile >= 0.9.4 how to symbolize JIT output]),
1200     [
1201       AC_SUBST(USE_OPROFILE, [1])
1202       case "$withval" in
1203         /usr|yes) llvm_cv_oppath=/usr/lib/oprofile ;;
1204         no) llvm_cv_oppath=
1205             AC_SUBST(USE_OPROFILE, [0]) ;;
1206         *) llvm_cv_oppath="${withval}/lib/oprofile"
1207            CPPFLAGS="-I${withval}/include";;
1208       esac
1209       if test -n "$llvm_cv_oppath" ; then
1210         LIBS="$LIBS -L${llvm_cv_oppath} -Wl,-rpath,${llvm_cv_oppath}"
1211         dnl Work around http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=537744:
1212         dnl libbfd is not included properly in libopagent in some Debian
1213         dnl versions.  If libbfd isn't found at all, we assume opagent works
1214         dnl anyway.
1215         AC_SEARCH_LIBS(bfd_init, bfd, [], [])
1216         AC_SEARCH_LIBS(op_open_agent, opagent, [], [
1217           echo "Error! You need to have libopagent around."
1218           exit -1
1219         ])
1220         AC_CHECK_HEADER([opagent.h], [], [
1221           echo "Error! You need to have opagent.h around."
1222           exit -1
1223           ])
1224       fi
1225     ],
1226     [
1227       AC_SUBST(USE_OPROFILE, [0])
1228     ])
1229 AC_DEFINE_UNQUOTED([USE_OPROFILE],$USE_OPROFILE,
1230                    [Define if we have the oprofile JIT-support library])
1231
1232 dnl===-----------------------------------------------------------------------===
1233 dnl===
1234 dnl=== SECTION 6: Check for header files
1235 dnl===
1236 dnl===-----------------------------------------------------------------------===
1237
1238 dnl First, use autoconf provided macros for specific headers that we need
1239 dnl We don't check for ancient stuff or things that are guaranteed to be there
1240 dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
1241 dnl Generally we're looking for POSIX headers.
1242 AC_HEADER_DIRENT
1243 AC_HEADER_MMAP_ANONYMOUS
1244 AC_HEADER_STAT
1245 AC_HEADER_SYS_WAIT
1246 AC_HEADER_TIME
1247
1248 AC_CHECK_HEADERS([dlfcn.h execinfo.h fcntl.h inttypes.h limits.h link.h])
1249 AC_CHECK_HEADERS([malloc.h setjmp.h signal.h stdint.h termios.h unistd.h])
1250 AC_CHECK_HEADERS([utime.h windows.h])
1251 AC_CHECK_HEADERS([sys/mman.h sys/param.h sys/resource.h sys/time.h sys/uio.h])
1252 AC_CHECK_HEADERS([sys/types.h sys/ioctl.h malloc/malloc.h mach/mach.h])
1253 AC_CHECK_HEADERS([valgrind/valgrind.h])
1254 AC_CHECK_HEADERS([fenv.h])
1255 if test "$LLVM_ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1256   AC_CHECK_HEADERS(pthread.h,
1257                    AC_SUBST(HAVE_PTHREAD, 1),
1258                    AC_SUBST(HAVE_PTHREAD, 0))
1259 else
1260   AC_SUBST(HAVE_PTHREAD, 0)
1261 fi
1262
1263 dnl Try to find ffi.h.
1264 if test "$llvm_cv_enable_libffi" = "yes" ; then
1265   AC_CHECK_HEADERS([ffi.h ffi/ffi.h])
1266 fi
1267
1268 dnl Try to find Darwin specific crash reporting libraries.
1269 AC_CHECK_HEADERS([CrashReporterClient.h])
1270
1271 dnl Try to find Darwin specific crash reporting global.
1272 AC_MSG_CHECKING([__crashreporter_info__])
1273 AC_LINK_IFELSE(
1274   AC_LANG_SOURCE(
1275     [[extern const char *__crashreporter_info__;
1276       int main() {
1277         __crashreporter_info__ = "test";
1278         return 0;
1279       }
1280     ]]),
1281   AC_MSG_RESULT(yes)
1282   AC_DEFINE(HAVE_CRASHREPORTER_INFO, 1, Can use __crashreporter_info__),
1283   AC_MSG_RESULT(no)
1284   AC_DEFINE(HAVE_CRASHREPORTER_INFO, 0,
1285             Define if __crashreporter_info__ exists.))
1286
1287 dnl===-----------------------------------------------------------------------===
1288 dnl===
1289 dnl=== SECTION 7: Check for types and structures
1290 dnl===
1291 dnl===-----------------------------------------------------------------------===
1292
1293 AC_HUGE_VAL_CHECK
1294 AC_TYPE_PID_T
1295 AC_TYPE_SIZE_T
1296 AC_DEFINE_UNQUOTED([RETSIGTYPE],[void],[Define as the return type of signal handlers (`int' or `void').])
1297 AC_STRUCT_TM
1298 AC_CHECK_TYPES([int64_t],,AC_MSG_ERROR([Type int64_t required but not found]))
1299 AC_CHECK_TYPES([uint64_t],,
1300          AC_CHECK_TYPES([u_int64_t],,
1301          AC_MSG_ERROR([Type uint64_t or u_int64_t required but not found])))
1302
1303 dnl===-----------------------------------------------------------------------===
1304 dnl===
1305 dnl=== SECTION 8: Check for specific functions needed
1306 dnl===
1307 dnl===-----------------------------------------------------------------------===
1308
1309 AC_CHECK_FUNCS([backtrace ceilf floorf roundf rintf nearbyintf getcwd ])
1310 AC_CHECK_FUNCS([powf fmodf strtof round ])
1311 AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ])
1312 AC_CHECK_FUNCS([isatty mkdtemp mkstemp ])
1313 AC_CHECK_FUNCS([mktemp posix_spawn pread realpath sbrk setrlimit strdup ])
1314 AC_CHECK_FUNCS([strerror strerror_r setenv ])
1315 AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
1316 AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp writev])
1317 AC_C_PRINTF_A
1318 AC_FUNC_RAND48
1319
1320 dnl Check the declaration "Secure API" on Windows environments.
1321 AC_CHECK_DECLS([strerror_s])
1322
1323 dnl Check symbols in libgcc.a for JIT on Mingw.
1324 if test "$llvm_cv_os_type" = "MingW" ; then
1325   AC_CHECK_LIB(gcc,_alloca,AC_DEFINE([HAVE__ALLOCA],[1],[Have host's _alloca]))
1326   AC_CHECK_LIB(gcc,__alloca,AC_DEFINE([HAVE___ALLOCA],[1],[Have host's __alloca]))
1327   AC_CHECK_LIB(gcc,__chkstk,AC_DEFINE([HAVE___CHKSTK],[1],[Have host's __chkstk]))
1328   AC_CHECK_LIB(gcc,___chkstk,AC_DEFINE([HAVE____CHKSTK],[1],[Have host's ___chkstk]))
1329
1330   AC_CHECK_LIB(gcc,__ashldi3,AC_DEFINE([HAVE___ASHLDI3],[1],[Have host's __ashldi3]))
1331   AC_CHECK_LIB(gcc,__ashrdi3,AC_DEFINE([HAVE___ASHRDI3],[1],[Have host's __ashrdi3]))
1332   AC_CHECK_LIB(gcc,__divdi3,AC_DEFINE([HAVE___DIVDI3],[1],[Have host's __divdi3]))
1333   AC_CHECK_LIB(gcc,__fixdfdi,AC_DEFINE([HAVE___FIXDFDI],[1],[Have host's __fixdfdi]))
1334   AC_CHECK_LIB(gcc,__fixsfdi,AC_DEFINE([HAVE___FIXSFDI],[1],[Have host's __fixsfdi]))
1335   AC_CHECK_LIB(gcc,__floatdidf,AC_DEFINE([HAVE___FLOATDIDF],[1],[Have host's __floatdidf]))
1336   AC_CHECK_LIB(gcc,__lshrdi3,AC_DEFINE([HAVE___LSHRDI3],[1],[Have host's __lshrdi3]))
1337   AC_CHECK_LIB(gcc,__moddi3,AC_DEFINE([HAVE___MODDI3],[1],[Have host's __moddi3]))
1338   AC_CHECK_LIB(gcc,__udivdi3,AC_DEFINE([HAVE___UDIVDI3],[1],[Have host's __udivdi3]))
1339   AC_CHECK_LIB(gcc,__umoddi3,AC_DEFINE([HAVE___UMODDI3],[1],[Have host's __umoddi3]))
1340
1341   AC_CHECK_LIB(gcc,__main,AC_DEFINE([HAVE___MAIN],[1],[Have host's __main]))
1342   AC_CHECK_LIB(gcc,__cmpdi2,AC_DEFINE([HAVE___CMPDI2],[1],[Have host's __cmpdi2]))
1343 fi
1344
1345 dnl Check Win32 API EnumerateLoadedModules.
1346 if test "$llvm_cv_os_type" = "MingW" ; then
1347   AC_MSG_CHECKING([whether EnumerateLoadedModules() accepts new decl])
1348   AC_COMPILE_IFELSE([[#include <windows.h>
1349 #include <imagehlp.h>
1350 extern void foo(PENUMLOADED_MODULES_CALLBACK);
1351 extern void foo(BOOL(CALLBACK*)(PCSTR,ULONG_PTR,ULONG,PVOID));]],
1352 [
1353   AC_MSG_RESULT([yes])
1354   llvm_cv_win32_elmcb_pcstr="PCSTR"
1355 ],
1356 [
1357   AC_MSG_RESULT([no])
1358   llvm_cv_win32_elmcb_pcstr="PSTR"
1359 ])
1360   AC_DEFINE_UNQUOTED([WIN32_ELMCB_PCSTR],$llvm_cv_win32_elmcb_pcstr,[Type of 1st arg on ELM Callback])
1361 fi
1362
1363 dnl Check for variations in the Standard C++ library and STL. These macros are
1364 dnl provided by LLVM in the autoconf/m4 directory.
1365 AC_FUNC_ISNAN
1366 AC_FUNC_ISINF
1367
1368 dnl Check for mmap support.We also need to know if /dev/zero is required to
1369 dnl be opened for allocating RWX memory.
1370 dnl Make sure we aren't attempting to configure for an unknown system
1371 if test "$llvm_cv_platform_type" = "Unix" ; then
1372   AC_FUNC_MMAP
1373   AC_FUNC_MMAP_FILE
1374   AC_NEED_DEV_ZERO_FOR_MMAP
1375
1376   if test "$ac_cv_func_mmap_fixed_mapped" = "no"
1377   then
1378     AC_MSG_WARN([mmap() of a fixed address required but not supported])
1379   fi
1380   if test "$ac_cv_func_mmap_file" = "no"
1381   then
1382     AC_MSG_WARN([mmap() of files required but not found])
1383   fi
1384 fi
1385
1386 dnl atomic builtins are required for threading support.
1387 AC_MSG_CHECKING(for GCC atomic builtins)
1388 dnl Since we'll be using these atomic builtins in C++ files we should test
1389 dnl the C++ compiler.
1390 AC_LANG_PUSH([C++])
1391 AC_LINK_IFELSE(
1392   AC_LANG_SOURCE(
1393     [[int main() {
1394         volatile unsigned long val = 1;
1395         __sync_synchronize();
1396         __sync_val_compare_and_swap(&val, 1, 0);
1397         __sync_add_and_fetch(&val, 1);
1398         __sync_sub_and_fetch(&val, 1);
1399         return 0;
1400       }
1401     ]]),
1402   AC_LANG_POP([C++])
1403   AC_MSG_RESULT(yes)
1404   AC_DEFINE(LLVM_HAS_ATOMICS, 1, Has gcc/MSVC atomic intrinsics),
1405   AC_MSG_RESULT(no)
1406   AC_DEFINE(LLVM_HAS_ATOMICS, 0, Has gcc/MSVC atomic intrinsics)
1407   AC_MSG_WARN([LLVM will be built thread-unsafe because atomic builtins are missing]))
1408
1409 dnl===-----------------------------------------------------------------------===
1410 dnl===
1411 dnl=== SECTION 9: Additional checks, variables, etc.
1412 dnl===
1413 dnl===-----------------------------------------------------------------------===
1414
1415 dnl Handle 32-bit linux systems running a 64-bit kernel.
1416 dnl This has to come after section 4 because it invokes the compiler.
1417 if test "$llvm_cv_os_type" = "Linux" -a "$llvm_cv_target_arch" = "x86_64" ; then
1418   AC_IS_LINUX_MIXED
1419   if test "$llvm_cv_linux_mixed" = "yes"; then
1420     llvm_cv_target_arch="x86"
1421     ARCH="x86"
1422   fi
1423 fi
1424
1425 dnl Check whether __dso_handle is present
1426 AC_CHECK_FUNCS([__dso_handle])
1427
1428 dnl Propagate the shared library extension that the libltdl checks did to
1429 dnl the Makefiles so we can use it there too
1430 AC_SUBST(SHLIBEXT,$libltdl_cv_shlibext)
1431
1432 dnl Propagate the run-time library path variable that the libltdl
1433 dnl checks found to the Makefiles so we can use it there too
1434 AC_SUBST(SHLIBPATH_VAR,$libltdl_cv_shlibpath_var)
1435
1436 # Translate the various configuration directories and other basic
1437 # information into substitutions that will end up in Makefile.config.in
1438 # that these configured values can be used by the makefiles
1439 if test "${prefix}" = "NONE" ; then
1440   prefix="/usr/local"
1441 fi
1442 eval LLVM_PREFIX="${prefix}";
1443 eval LLVM_BINDIR="${prefix}/bin";
1444 eval LLVM_LIBDIR="${prefix}/lib";
1445 eval LLVM_DATADIR="${prefix}/share/llvm";
1446 eval LLVM_DOCSDIR="${prefix}/share/doc/llvm";
1447 eval LLVM_ETCDIR="${prefix}/etc/llvm";
1448 eval LLVM_INCLUDEDIR="${prefix}/include";
1449 eval LLVM_INFODIR="${prefix}/info";
1450 eval LLVM_MANDIR="${prefix}/man";
1451 LLVM_CONFIGTIME=`date`
1452 AC_SUBST(LLVM_PREFIX)
1453 AC_SUBST(LLVM_BINDIR)
1454 AC_SUBST(LLVM_LIBDIR)
1455 AC_SUBST(LLVM_DATADIR)
1456 AC_SUBST(LLVM_DOCSDIR)
1457 AC_SUBST(LLVM_ETCDIR)
1458 AC_SUBST(LLVM_INCLUDEDIR)
1459 AC_SUBST(LLVM_INFODIR)
1460 AC_SUBST(LLVM_MANDIR)
1461 AC_SUBST(LLVM_CONFIGTIME)
1462
1463 # Place the various directores into the config.h file as #defines so that we
1464 # can know about the installation paths within LLVM.
1465 AC_DEFINE_UNQUOTED(LLVM_PREFIX,"$LLVM_PREFIX",
1466                    [Installation prefix directory])
1467 AC_DEFINE_UNQUOTED(LLVM_BINDIR, "$LLVM_BINDIR",
1468                    [Installation directory for binary executables])
1469 AC_DEFINE_UNQUOTED(LLVM_LIBDIR, "$LLVM_LIBDIR",
1470                    [Installation directory for libraries])
1471 AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DATADIR",
1472                    [Installation directory for data files])
1473 AC_DEFINE_UNQUOTED(LLVM_DOCSDIR, "$LLVM_DOCSDIR",
1474                    [Installation directory for documentation])
1475 AC_DEFINE_UNQUOTED(LLVM_ETCDIR, "$LLVM_ETCDIR",
1476                    [Installation directory for config files])
1477 AC_DEFINE_UNQUOTED(LLVM_INCLUDEDIR, "$LLVM_INCLUDEDIR",
1478                    [Installation directory for include files])
1479 AC_DEFINE_UNQUOTED(LLVM_INFODIR, "$LLVM_INFODIR",
1480                    [Installation directory for .info files])
1481 AC_DEFINE_UNQUOTED(LLVM_MANDIR, "$LLVM_MANDIR",
1482                    [Installation directory for man pages])
1483 AC_DEFINE_UNQUOTED(LLVM_CONFIGTIME, "$LLVM_CONFIGTIME",
1484                    [Time at which LLVM was configured])
1485 AC_DEFINE_UNQUOTED(LLVM_DEFAULT_TARGET_TRIPLE, "$target",
1486                    [Target triple LLVM will generate code for by default])
1487
1488 # Determine which bindings to build.
1489 if test "$BINDINGS_TO_BUILD" = auto ; then
1490   BINDINGS_TO_BUILD=""
1491   if test "x$OCAMLC" != x -a "x$OCAMLDEP" != x ; then
1492     BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD"
1493   fi
1494 fi
1495 AC_SUBST(BINDINGS_TO_BUILD,$BINDINGS_TO_BUILD)
1496
1497 # This isn't really configurey, but it avoids having to repeat the list in
1498 # other files.
1499 AC_SUBST(ALL_BINDINGS,ocaml)
1500
1501 # Do any work necessary to ensure that bindings have what they need.
1502 binding_prereqs_failed=0
1503 for a_binding in $BINDINGS_TO_BUILD ; do
1504   case "$a_binding" in
1505   ocaml)
1506     if test "x$OCAMLC" = x ; then
1507       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlc not found. Try configure OCAMLC=/path/to/ocamlc])
1508       binding_prereqs_failed=1
1509     fi
1510     if test "x$OCAMLDEP" = x ; then
1511       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamldep not found. Try configure OCAMLDEP=/path/to/ocamldep])
1512       binding_prereqs_failed=1
1513     fi
1514     if test "x$OCAMLOPT" = x ; then
1515       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlopt not found. Try configure OCAMLOPT=/path/to/ocamlopt])
1516       dnl ocamlopt is optional!
1517     fi
1518     if test "x$with_ocaml_libdir" != xauto ; then
1519       AC_SUBST(OCAML_LIBDIR,$with_ocaml_libdir)
1520     else
1521       ocaml_stdlib="`"$OCAMLC" -where`"
1522       if test "$LLVM_PREFIX" '<' "$ocaml_stdlib" -a "$ocaml_stdlib" '<' "$LLVM_PREFIX~"
1523       then
1524         # ocaml stdlib is beneath our prefix; use stdlib
1525         AC_SUBST(OCAML_LIBDIR,$ocaml_stdlib)
1526       else
1527         # ocaml stdlib is outside our prefix; use libdir/ocaml
1528         AC_SUBST(OCAML_LIBDIR,$LLVM_LIBDIR/ocaml)
1529       fi
1530     fi
1531     ;;
1532   esac
1533 done
1534 if test "$binding_prereqs_failed" = 1 ; then
1535   AC_MSG_ERROR([Prequisites for bindings not satisfied. Fix them or use configure --disable-bindings.])
1536 fi
1537
1538 dnl Determine whether the compiler supports -fvisibility-inlines-hidden.
1539 AC_CXX_USE_VISIBILITY_INLINES_HIDDEN
1540
1541 dnl Determine linker rpath flag
1542 if test "$llvm_cv_link_use_r" = "yes" ; then
1543   RPATH="-Wl,-R"
1544 else
1545   RPATH="-Wl,-rpath"
1546 fi
1547 AC_SUBST(RPATH)
1548
1549 dnl Determine linker rdynamic flag
1550 if test "$llvm_cv_link_use_export_dynamic" = "yes" ; then
1551   RDYNAMIC="-Wl,-export-dynamic"
1552 else
1553   RDYNAMIC=""
1554 fi
1555 AC_SUBST(RDYNAMIC)
1556
1557 dnl===-----------------------------------------------------------------------===
1558 dnl===
1559 dnl=== SECTION 10: Specify the output files and generate it
1560 dnl===
1561 dnl===-----------------------------------------------------------------------===
1562
1563 dnl Configure header files
1564 dnl WARNING: dnl If you add or remove any of the following config headers, then
1565 dnl you MUST also update Makefile.rules so that the variable FilesToConfig
1566 dnl contains the same list of files as AC_CONFIG_HEADERS below. This ensures the
1567 dnl files can be updated automatically when their *.in sources change.
1568 AC_CONFIG_HEADERS([include/llvm/Config/config.h include/llvm/Config/llvm-config.h])
1569 AH_TOP([#ifndef CONFIG_H
1570 #define CONFIG_H])
1571 AH_BOTTOM([#endif])
1572
1573 AC_CONFIG_FILES([include/llvm/Config/Targets.def])
1574 AC_CONFIG_FILES([include/llvm/Config/AsmPrinters.def])
1575 AC_CONFIG_FILES([include/llvm/Config/AsmParsers.def])
1576 AC_CONFIG_FILES([include/llvm/Config/Disassemblers.def])
1577 AC_CONFIG_HEADERS([include/llvm/Support/DataTypes.h])
1578
1579 dnl Configure the makefile's configuration data
1580 AC_CONFIG_FILES([Makefile.config])
1581
1582 dnl Configure the RPM spec file for LLVM
1583 AC_CONFIG_FILES([llvm.spec])
1584
1585 dnl Configure doxygen's configuration file
1586 AC_CONFIG_FILES([docs/doxygen.cfg])
1587 if test -f ${srcdir}/tools/clang/README.txt; then
1588   AC_CONFIG_FILES([tools/clang/docs/doxygen.cfg])
1589 fi
1590
1591 dnl OCaml findlib META file
1592 AC_CONFIG_FILES([bindings/ocaml/llvm/META.llvm])
1593
1594 dnl Do special configuration of Makefiles
1595 AC_CONFIG_COMMANDS([setup],,[llvm_src="${srcdir}"])
1596 AC_CONFIG_MAKEFILE(Makefile)
1597 AC_CONFIG_MAKEFILE(Makefile.common)
1598 AC_CONFIG_MAKEFILE(examples/Makefile)
1599 AC_CONFIG_MAKEFILE(lib/Makefile)
1600 AC_CONFIG_MAKEFILE(runtime/Makefile)
1601 AC_CONFIG_MAKEFILE(test/Makefile)
1602 AC_CONFIG_MAKEFILE(test/Makefile.tests)
1603 AC_CONFIG_MAKEFILE(unittests/Makefile)
1604 AC_CONFIG_MAKEFILE(tools/Makefile)
1605 AC_CONFIG_MAKEFILE(utils/Makefile)
1606 AC_CONFIG_MAKEFILE(projects/Makefile)
1607 AC_CONFIG_MAKEFILE(bindings/Makefile)
1608 AC_CONFIG_MAKEFILE(bindings/ocaml/Makefile.ocaml)
1609
1610 dnl Finally, crank out the output
1611 AC_OUTPUT