89fd237de5fe4e049539af9d0e24a359ce37aa69
[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.5svn],[http://llvm.org/bugs/])
35 AC_DEFINE([LLVM_VERSION_MAJOR], [3], [Major version of the LLVM API])
36 AC_DEFINE([LLVM_VERSION_MINOR], [5], [Minor version of the LLVM API])
37
38 dnl Provide a copyright substitution and ensure the copyright notice is included
39 dnl in the output of --version option of the generated configure script.
40 AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2014 University of Illinois at Urbana-Champaign."])
41 AC_COPYRIGHT([Copyright (c) 2003-2014 University of Illinois at Urbana-Champaign.])
42
43 dnl Indicate that we require autoconf 2.60 or later.
44 AC_PREREQ(2.60)
45
46 dnl Verify that the source directory is valid. This makes sure that we are
47 dnl configuring LLVM and not some other package (it validates --srcdir argument)
48 AC_CONFIG_SRCDIR([lib/IR/Module.cpp])
49
50 dnl Place all of the extra autoconf files into the config subdirectory. Tell
51 dnl various tools where the m4 autoconf macros are.
52 AC_CONFIG_AUX_DIR([autoconf])
53
54 dnl Quit if the source directory has already been configured.
55 dnl NOTE: This relies upon undocumented autoconf behavior.
56 if test ${srcdir} != "." ; then
57   if test -f ${srcdir}/include/llvm/Config/config.h ; then
58     AC_MSG_ERROR([Already configured in ${srcdir}])
59   fi
60 fi
61
62 dnl Default to empty (i.e. assigning the null string to) CFLAGS and CXXFLAGS,
63 dnl instead of the autoconf default (for example, '-g -O2' for CC=gcc).
64 : ${CFLAGS=}
65 : ${CXXFLAGS=}
66
67 dnl We need to check for the compiler up here to avoid anything else
68 dnl starting with a different one.
69 AC_PROG_CC(clang gcc)
70 AC_PROG_CXX(clang++ g++)
71 AC_PROG_CPP
72
73 dnl If CXX is Clang, check that it can find and parse C++ standard library
74 dnl headers.
75 if test "$CXX" = "clang++" ; then
76   AC_MSG_CHECKING([whether clang works])
77   AC_LANG_PUSH([C++])
78   dnl Note that space between 'include' and '(' is required.  There's a broken
79   dnl regex in aclocal that otherwise will think that we call m4's include
80   dnl builtin.
81   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <limits>
82 #if __has_include (<cxxabi.h>)
83 #include <cxxabi.h>
84 #endif
85 #if __has_include (<unwind.h>)
86 #include <unwind.h>
87 #endif
88 ]])],
89 [
90   AC_MSG_RESULT([yes])
91 ],
92 [
93   AC_MSG_RESULT([no])
94   AC_MSG_ERROR([Selected compiler could not find or parse C++ standard library headers.  Rerun with CC=c-compiler CXX=c++-compiler ./configure ...])
95 ])
96   AC_LANG_POP([C++])
97 fi
98
99 dnl Set up variables that track whether the host compiler is GCC or Clang where
100 dnl we can effectively sanity check them. We don't try to sanity check all the
101 dnl other possible compilers.
102 AC_MSG_CHECKING([whether GCC or Clang is our host compiler])
103 AC_LANG_PUSH([C++])
104 llvm_cv_cxx_compiler=unknown
105 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! __clang__
106                                      #error
107                                      #endif
108                                      ]])],
109                   llvm_cv_cxx_compiler=clang,
110                   [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! __GNUC__
111                                                         #error
112                                                         #endif
113                                                         ]])],
114                                      llvm_cv_cxx_compiler=gcc, [])])
115 AC_LANG_POP([C++])
116 AC_MSG_RESULT([${llvm_cv_cxx_compiler}])
117
118 dnl Check both GCC and Clang for sufficiently modern versions. These checks can
119 dnl be bypassed by passing a flag if necessary on a platform.
120 AC_ARG_ENABLE(compiler-version-checks,
121               AS_HELP_STRING([--enable-compiler-version-checks],
122                              [Check the version of the host compiler (default is YES)]),,
123                              enableval=default)
124 case "$enableval" in
125   no)
126     ;;
127   yes|default)
128     AC_LANG_PUSH([C++])
129     case "$llvm_cv_cxx_compiler" in
130     clang)
131       AC_MSG_CHECKING([whether Clang is new enough])
132       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
133 #if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 1)
134 #error This version of Clang is too old to build LLVM
135 #endif
136 ]])],
137           [AC_MSG_RESULT([yes])],
138           [AC_MSG_RESULT([no])
139            AC_MSG_ERROR([
140 The selected Clang compiler is not new enough to build LLVM. Please upgrade to
141 Clang 3.1. You may pass --disable-compiler-version-checks to configure to
142 bypass these sanity checks.])])
143       ;;
144     gcc)
145       AC_MSG_CHECKING([whether GCC is new enough])
146       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
147 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
148 #error This version of GCC is too old to build LLVM
149 #endif
150 ]])],
151           [AC_MSG_RESULT([yes])],
152           [AC_MSG_RESULT([no])
153            AC_MSG_ERROR([
154 The selected GCC C++ compiler is not new enough to build LLVM. Please upgrade
155 to GCC 4.7. You may pass --disable-compiler-version-checks to configure to
156 bypass these sanity checks.])])
157       ;;
158     unknown)
159       ;;
160     esac
161     AC_LANG_POP([C++])
162     ;;
163   *)
164     AC_MSG_ERROR([Invalid setting for --enable-compiler-version-checks. Use "yes" or "no"])
165     ;;
166 esac
167
168 dnl Configure all of the projects present in our source tree. While we could
169 dnl just AC_CONFIG_SUBDIRS on the set of directories in projects that have a
170 dnl configure script, that usage of the AC_CONFIG_SUBDIRS macro is deprecated.
171 dnl Instead we match on the known projects.
172
173 dnl
174 dnl One tricky part of doing this is that some projects depend upon other
175 dnl projects.  For example, several projects rely upon the LLVM test suite.
176 dnl We want to configure those projects first so that their object trees are
177 dnl created before running the configure scripts of projects that depend upon
178 dnl them.
179 dnl
180
181 dnl Several projects use the LLVM test suite, so configure it next.
182 if test -d ${srcdir}/projects/test-suite ; then
183   AC_CONFIG_SUBDIRS([projects/test-suite])
184 fi
185
186 dnl llvm-test is the old name of the test-suite, kept here for backwards
187 dnl compatibility
188 if test -d ${srcdir}/projects/llvm-test ; then
189   AC_CONFIG_SUBDIRS([projects/llvm-test])
190 fi
191
192 dnl Some projects use poolalloc; configure that next
193 if test -d ${srcdir}/projects/poolalloc ; then
194   AC_CONFIG_SUBDIRS([projects/poolalloc])
195 fi
196
197 if test -d ${srcdir}/projects/llvm-poolalloc ; then
198   AC_CONFIG_SUBDIRS([projects/llvm-poolalloc])
199 fi
200
201 dnl Check for all other projects
202 for i in `ls ${srcdir}/projects`
203 do
204   if test -d ${srcdir}/projects/${i} ; then
205     case ${i} in
206       sample)       AC_CONFIG_SUBDIRS([projects/sample])    ;;
207       privbracket)  AC_CONFIG_SUBDIRS([projects/privbracket]) ;;
208       safecode)     AC_CONFIG_SUBDIRS([projects/safecode]) ;;
209       compiler-rt)       ;;
210       test-suite)     ;;
211       llvm-test)      ;;
212       poolalloc)      ;;
213       llvm-poolalloc) ;;
214       *)
215         AC_MSG_WARN([Unknown project (${i}) won't be configured automatically])
216         ;;
217     esac
218   fi
219 done
220
221 dnl Disable the build of polly, even if it is checked out into tools/polly.
222 AC_ARG_ENABLE(polly,
223               AS_HELP_STRING([--enable-polly],
224                              [Use polly if available (default is YES)]),,
225                              enableval=default)
226 case "$enableval" in
227   yes) AC_SUBST(ENABLE_POLLY,[1]) ;;
228   no)  AC_SUBST(ENABLE_POLLY,[0]) ;;
229   default) AC_SUBST(ENABLE_POLLY,[1]) ;;
230   *) AC_MSG_ERROR([Invalid setting for --enable-polly. Use "yes" or "no"]) ;;
231 esac
232
233
234 dnl Check if polly is checked out into tools/polly and configure it if
235 dnl available.
236 if (test -d ${srcdir}/tools/polly) && (test $ENABLE_POLLY -eq 1) ; then
237   AC_SUBST(LLVM_HAS_POLLY,1)
238   AC_CONFIG_SUBDIRS([tools/polly])
239 fi
240
241 dnl===-----------------------------------------------------------------------===
242 dnl===
243 dnl=== SECTION 2: Architecture, target, and host checks
244 dnl===
245 dnl===-----------------------------------------------------------------------===
246
247 dnl Check the target for which we're compiling and the host that will do the
248 dnl compilations. This will tell us which LLVM compiler will be used for
249 dnl compiling SSA into object code. This needs to be done early because
250 dnl following tests depend on it.
251 AC_CANONICAL_TARGET
252
253 dnl Determine the platform type and cache its value. This helps us configure
254 dnl the System library to the correct build platform.
255 AC_CACHE_CHECK([type of operating system we're going to host on],
256                [llvm_cv_os_type],
257 [case $host in
258   *-*-aix*)
259     llvm_cv_link_all_option="-Wl,--whole-archive"
260     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
261     llvm_cv_os_type="AIX"
262     llvm_cv_platform_type="Unix" ;;
263   *-*-irix*)
264     llvm_cv_link_all_option="-Wl,--whole-archive"
265     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
266     llvm_cv_os_type="IRIX"
267     llvm_cv_platform_type="Unix" ;;
268   *-*-cygwin*)
269     llvm_cv_link_all_option="-Wl,--whole-archive"
270     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
271     llvm_cv_os_type="Cygwin"
272     llvm_cv_platform_type="Unix" ;;
273   *-*-darwin*)
274     llvm_cv_link_all_option="-Wl,-all_load"
275     llvm_cv_no_link_all_option="-Wl,-noall_load"
276     llvm_cv_os_type="Darwin"
277     llvm_cv_platform_type="Unix" ;;
278   *-*-minix*)
279     llvm_cv_link_all_option="-Wl,-all_load"
280     llvm_cv_no_link_all_option="-Wl,-noall_load"
281     llvm_cv_os_type="Minix"
282     llvm_cv_platform_type="Unix" ;;
283   *-*-freebsd*)
284     llvm_cv_link_all_option="-Wl,--whole-archive"
285     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
286     llvm_cv_os_type="FreeBSD"
287     llvm_cv_platform_type="Unix" ;;
288   *-*-kfreebsd-gnu)
289     llvm_cv_link_all_option="-Wl,--whole-archive"
290     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
291     llvm_cv_os_type="GNU/kFreeBSD"
292     llvm_cv_platform_type="Unix" ;;
293   *-*-openbsd*)
294     llvm_cv_link_all_option="-Wl,--whole-archive"
295     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
296     llvm_cv_os_type="OpenBSD"
297     llvm_cv_platform_type="Unix" ;;
298   *-*-netbsd*)
299     llvm_cv_link_all_option="-Wl,--whole-archive"
300     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
301     llvm_cv_os_type="NetBSD"
302     llvm_cv_platform_type="Unix" ;;
303   *-*-dragonfly*)
304     llvm_cv_link_all_option="-Wl,--whole-archive"
305     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
306     llvm_cv_os_type="DragonFly"
307     llvm_cv_platform_type="Unix" ;;
308   *-*-hpux*)
309     llvm_cv_link_all_option="-Wl,--whole-archive"
310     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
311     llvm_cv_os_type="HP-UX"
312     llvm_cv_platform_type="Unix" ;;
313   *-*-interix*)
314     llvm_cv_link_all_option="-Wl,--whole-archive"
315     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
316     llvm_cv_os_type="Interix"
317     llvm_cv_platform_type="Unix" ;;
318   *-*-linux*)
319     llvm_cv_link_all_option="-Wl,--whole-archive"
320     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
321     llvm_cv_os_type="Linux"
322     llvm_cv_platform_type="Unix" ;;
323   *-*-gnu*)
324     llvm_cv_link_all_option="-Wl,--whole-archive"
325     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
326     llvm_cv_os_type="GNU"
327     llvm_cv_platform_type="Unix" ;;
328   *-*-solaris*)
329     llvm_cv_link_all_option="-Wl,-z,allextract"
330     llvm_cv_no_link_all_option="-Wl,-z,defaultextract"
331     llvm_cv_os_type="SunOS"
332     llvm_cv_platform_type="Unix" ;;
333   *-*-auroraux*)
334     llvm_cv_link_all_option="-Wl,-z,allextract"
335     llvm_cv_link_all_option="-Wl,-z,defaultextract"
336     llvm_cv_os_type="AuroraUX"
337     llvm_cv_platform_type="Unix" ;;
338   *-*-win32*)
339     llvm_cv_link_all_option="-Wl,--whole-archive"
340     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
341     llvm_cv_os_type="Win32"
342     llvm_cv_platform_type="Win32" ;;
343   *-*-mingw*)
344     llvm_cv_link_all_option="-Wl,--whole-archive"
345     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
346     llvm_cv_os_type="MingW"
347     llvm_cv_platform_type="Win32" ;;
348   *-*-haiku*)
349     llvm_cv_link_all_option="-Wl,--whole-archive"
350     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
351     llvm_cv_os_type="Haiku"
352     llvm_cv_platform_type="Unix" ;;
353   *-unknown-eabi*)
354     llvm_cv_link_all_option="-Wl,--whole-archive"
355     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
356     llvm_cv_os_type="Freestanding"
357     llvm_cv_platform_type="Unix" ;;
358   *-unknown-elf*)
359     llvm_cv_link_all_option="-Wl,--whole-archive"
360     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
361     llvm_cv_os_type="Freestanding"
362     llvm_cv_platform_type="Unix" ;;
363   *)
364     llvm_cv_link_all_option=""
365     llvm_cv_no_link_all_option=""
366     llvm_cv_os_type="Unknown"
367     llvm_cv_platform_type="Unknown" ;;
368 esac])
369
370 AC_CACHE_CHECK([type of operating system we're going to target],
371                [llvm_cv_target_os_type],
372 [case $target in
373   *-*-aix*)
374     llvm_cv_target_os_type="AIX" ;;
375   *-*-irix*)
376     llvm_cv_target_os_type="IRIX" ;;
377   *-*-cygwin*)
378     llvm_cv_target_os_type="Cygwin" ;;
379   *-*-darwin*)
380     llvm_cv_target_os_type="Darwin" ;;
381   *-*-minix*)
382     llvm_cv_target_os_type="Minix" ;;
383   *-*-freebsd*)
384     llvm_cv_target_os_type="FreeBSD" ;;
385   *-*-kfreebsd-gnu)
386     llvm_cv_target_os_type="GNU/kFreeBSD" ;;
387   *-*-openbsd*)
388     llvm_cv_target_os_type="OpenBSD" ;;
389   *-*-netbsd*)
390     llvm_cv_target_os_type="NetBSD" ;;
391   *-*-dragonfly*)
392     llvm_cv_target_os_type="DragonFly" ;;
393   *-*-hpux*)
394     llvm_cv_target_os_type="HP-UX" ;;
395   *-*-interix*)
396     llvm_cv_target_os_type="Interix" ;;
397   *-*-linux*)
398     llvm_cv_target_os_type="Linux" ;;
399   *-*-gnu*)
400     llvm_cv_target_os_type="GNU" ;;
401   *-*-solaris*)
402     llvm_cv_target_os_type="SunOS" ;;
403   *-*-auroraux*)
404     llvm_cv_target_os_type="AuroraUX" ;;
405   *-*-win32*)
406     llvm_cv_target_os_type="Win32" ;;
407   *-*-mingw*)
408     llvm_cv_target_os_type="MingW" ;;
409   *-*-haiku*)
410     llvm_cv_target_os_type="Haiku" ;;
411   *-*-rtems*)
412     llvm_cv_target_os_type="RTEMS" ;;
413   *-*-nacl*)
414     llvm_cv_target_os_type="NativeClient" ;;
415   *-unknown-eabi*)
416     llvm_cv_target_os_type="Freestanding" ;;
417   *)
418     llvm_cv_target_os_type="Unknown" ;;
419 esac])
420
421 dnl Make sure we aren't attempting to configure for an unknown system
422 if test "$llvm_cv_os_type" = "Unknown" ; then
423   AC_MSG_ERROR([Operating system is unknown, configure can't continue])
424 fi
425
426 dnl Set the "OS" Makefile variable based on the platform type so the
427 dnl makefile can configure itself to specific build hosts
428 AC_SUBST(OS,$llvm_cv_os_type)
429 AC_SUBST(HOST_OS,$llvm_cv_os_type)
430 AC_SUBST(TARGET_OS,$llvm_cv_target_os_type)
431
432 dnl Set the LINKALL and NOLINKALL Makefile variables based on the platform
433 AC_SUBST(LINKALL,$llvm_cv_link_all_option)
434 AC_SUBST(NOLINKALL,$llvm_cv_no_link_all_option)
435
436 dnl Set the "LLVM_ON_*" variables based on llvm_cv_platform_type
437 dnl This is used by lib/Support to determine the basic kind of implementation
438 dnl to use.
439 case $llvm_cv_platform_type in
440   Unix)
441     AC_DEFINE([LLVM_ON_UNIX],[1],[Define if this is Unixish platform])
442     AC_SUBST(LLVM_ON_UNIX,[1])
443     AC_SUBST(LLVM_ON_WIN32,[0])
444     ;;
445   Win32)
446     AC_DEFINE([LLVM_ON_WIN32],[1],[Define if this is Win32ish platform])
447     AC_SUBST(LLVM_ON_UNIX,[0])
448     AC_SUBST(LLVM_ON_WIN32,[1])
449     ;;
450 esac
451
452 dnl Determine what our target architecture is and configure accordingly.
453 dnl This will allow Makefiles to make a distinction between the hardware and
454 dnl the OS.
455 AC_CACHE_CHECK([target architecture],[llvm_cv_target_arch],
456 [case $target in
457   i?86-*)                 llvm_cv_target_arch="x86" ;;
458   amd64-* | x86_64-*)     llvm_cv_target_arch="x86_64" ;;
459   sparc*-*)               llvm_cv_target_arch="Sparc" ;;
460   powerpc*-*)             llvm_cv_target_arch="PowerPC" ;;
461   arm*-*)                 llvm_cv_target_arch="ARM" ;;
462   aarch64*-*)             llvm_cv_target_arch="AArch64" ;;
463   mips-* | mips64-*)      llvm_cv_target_arch="Mips" ;;
464   mipsel-* | mips64el-*)  llvm_cv_target_arch="Mips" ;;
465   xcore-*)                llvm_cv_target_arch="XCore" ;;
466   msp430-*)               llvm_cv_target_arch="MSP430" ;;
467   hexagon-*)              llvm_cv_target_arch="Hexagon" ;;
468   nvptx-*)                llvm_cv_target_arch="NVPTX" ;;
469   s390x-*)                llvm_cv_target_arch="SystemZ" ;;
470   *)                      llvm_cv_target_arch="Unknown" ;;
471 esac])
472
473 if test "$llvm_cv_target_arch" = "Unknown" ; then
474   AC_MSG_WARN([Configuring LLVM for an unknown target archicture])
475 fi
476
477 dnl Determine the LLVM native architecture for the target
478 case "$llvm_cv_target_arch" in
479     x86)     LLVM_NATIVE_ARCH="X86" ;;
480     x86_64)  LLVM_NATIVE_ARCH="X86" ;;
481     *)       LLVM_NATIVE_ARCH="$llvm_cv_target_arch" ;;
482 esac
483
484 dnl Define a substitution, ARCH, for the target architecture
485 AC_SUBST(ARCH,$llvm_cv_target_arch)
486
487 dnl Determine what our host architecture.
488 dnl This will allow MCJIT regress tests runs only for supported
489 dnl platforms.
490 case $host in
491   i?86-*)                 host_arch="x86" ;;
492   amd64-* | x86_64-*)     host_arch="x86_64" ;;
493   sparc*-*)               host_arch="Sparc" ;;
494   powerpc*-*)             host_arch="PowerPC" ;;
495   arm*-*)                 host_arch="ARM" ;;
496   aarch64*-*)             host_arch="AArch64" ;;
497   mips-* | mips64-*)      host_arch="Mips" ;;
498   mipsel-* | mips64el-*)  host_arch="Mips" ;;
499   xcore-*)                host_arch="XCore" ;;
500   msp430-*)               host_arch="MSP430" ;;
501   hexagon-*)              host_arch="Hexagon" ;;
502   s390x-*)                host_arch="SystemZ" ;;
503   *)                      host_arch="Unknown" ;;
504 esac
505
506 if test "$host_arch" = "Unknown" ; then
507   AC_MSG_WARN([Configuring LLVM for an unknown host archicture])
508 fi
509
510 AC_SUBST(HOST_ARCH,$host_arch)
511
512 dnl Check for build platform executable suffix if we're cross-compiling
513 if test "$cross_compiling" = yes; then
514   AC_SUBST(LLVM_CROSS_COMPILING, [1])
515   AC_BUILD_EXEEXT
516   ac_build_prefix=${build_alias}-
517   AC_CHECK_PROG(BUILD_CXX, ${ac_build_prefix}g++, ${ac_build_prefix}g++)
518   if test -z "$BUILD_CXX"; then
519      AC_CHECK_PROG(BUILD_CXX, g++, g++)
520      if test -z "$BUILD_CXX"; then
521        AC_CHECK_PROG(BUILD_CXX, c++, c++, , , /usr/ucb/c++)
522      fi
523   fi
524 else
525   AC_SUBST(LLVM_CROSS_COMPILING, [0])
526 fi
527
528 dnl Check to see if there's a .svn or .git directory indicating that this
529 dnl build is being done from a checkout. This sets up several defaults for
530 dnl the command line switches. When we build with a checkout directory,
531 dnl we get a debug with assertions turned on. Without, we assume a source
532 dnl release and we get an optimized build without assertions.
533 dnl See --enable-optimized and --enable-assertions below
534 if test -d ".svn" -o -d "${srcdir}/.svn" -o -d ".git" -o -d "${srcdir}/.git"; then
535   cvsbuild="yes"
536   optimize="no"
537   AC_SUBST(CVSBUILD,[[CVSBUILD=1]])
538 else
539   cvsbuild="no"
540   optimize="yes"
541 fi
542
543 dnl===-----------------------------------------------------------------------===
544 dnl===
545 dnl=== SECTION 3: Command line arguments for the configure script.
546 dnl===
547 dnl===-----------------------------------------------------------------------===
548
549 dnl --enable-libcpp : check whether or not to use libc++ on the command line
550 AC_ARG_ENABLE(libcpp,
551               AS_HELP_STRING([--enable-libcpp],
552                              [Use libc++ if available (default is NO)]),,
553                              enableval=default)
554 case "$enableval" in
555   yes) AC_SUBST(ENABLE_LIBCPP,[1]) ;;
556   no)  AC_SUBST(ENABLE_LIBCPP,[0]) ;;
557   default) AC_SUBST(ENABLE_LIBCPP,[0]);;
558   *) AC_MSG_ERROR([Invalid setting for --enable-libcpp. Use "yes" or "no"]) ;;
559 esac
560
561 dnl --enable-cxx11 : check whether or not to use -std=c++11 on the command line
562 AC_ARG_ENABLE(cxx11,
563               AS_HELP_STRING([--enable-cxx11],
564                              [Use c++11 if available (default is NO)]),,
565                              enableval=default)
566 case "$enableval" in
567   yes) AC_SUBST(ENABLE_CXX11,[1]) ;;
568   no)  AC_SUBST(ENABLE_CXX11,[0]) ;;
569   default) AC_SUBST(ENABLE_CXX11,[0]);;
570   *) AC_MSG_ERROR([Invalid setting for --enable-cxx11. Use "yes" or "no"]) ;;
571 esac
572
573 dnl --enable-fission : check whether or not to use -gsplit-dwarf on the command
574 dnl line
575 AC_ARG_ENABLE(split-dwarf,
576               AS_HELP_STRING([--enable-split-dwarf],
577                              [Use split-dwarf if available (default is NO)]),,
578                              enableval=default)
579 case "$enableval" in
580   yes) AC_SUBST(ENABLE_SPLIT_DWARF,[1]) ;;
581   no)  AC_SUBST(ENABLE_SPLIT_DWARF,[0]) ;;
582   default) AC_SUBST(ENABLE_SPLIT_DWARF,[0]);;
583   *) AC_MSG_ERROR([Invalid setting for --enable-split-dwarf. Use "yes" or "no"]) ;;
584 esac
585
586 dnl --enable-clang-arcmt: check whether to enable clang arcmt
587 clang_arcmt="yes"
588 AC_ARG_ENABLE(clang-arcmt,
589               AS_HELP_STRING([--enable-clang-arcmt],
590                              [Enable building of clang ARCMT (default is YES)]),
591                              clang_arcmt="$enableval",
592                              enableval="yes")
593 case "$enableval" in
594   yes) AC_SUBST(ENABLE_CLANG_ARCMT,[1]) ;;
595   no)  AC_SUBST(ENABLE_CLANG_ARCMT,[0]) ;;
596   default) AC_SUBST(ENABLE_CLANG_ARCMT,[1]);;
597   *) AC_MSG_ERROR([Invalid setting for --enable-clang-arcmt. Use "yes" or "no"]) ;;
598 esac
599
600 dnl --enable-clang-static-analyzer: check whether to enable static-analyzer
601 clang_static_analyzer="yes"
602 AC_ARG_ENABLE(clang-static-analyzer,
603               AS_HELP_STRING([--enable-clang-static-analyzer],
604                              [Enable building of clang Static Analyzer (default is YES)]),
605                              clang_static_analyzer="$enableval",
606                              enableval="yes")
607 case "$enableval" in
608   yes) AC_SUBST(ENABLE_CLANG_STATIC_ANALYZER,[1]) ;;
609   no)  
610     if test ${clang_arcmt} != "no" ; then
611       AC_MSG_ERROR([Cannot enable clang ARC Migration Tool while disabling static analyzer.])
612     fi
613     AC_SUBST(ENABLE_CLANG_STATIC_ANALYZER,[0]) 
614     ;;
615   default) AC_SUBST(ENABLE_CLANG_STATIC_ANALYZER,[1]);;
616   *) AC_MSG_ERROR([Invalid setting for --enable-clang-static-analyzer. Use "yes" or "no"]) ;;
617 esac
618
619 dnl --enable-clang-rewriter: check whether to enable clang rewriter
620 AC_ARG_ENABLE(clang-rewriter,
621               AS_HELP_STRING([--enable-clang-rewriter],
622                              [Enable building of clang rewriter (default is YES)]),,
623                              enableval="yes")
624 case "$enableval" in
625   yes) AC_SUBST(ENABLE_CLANG_REWRITER,[1]) ;;
626   no)  
627     if test ${clang_arcmt} != "no" ; then
628       AC_MSG_ERROR([Cannot enable clang ARC Migration Tool while disabling rewriter.])
629     fi
630     if test ${clang_static_analyzer} != "no" ; then
631       AC_MSG_ERROR([Cannot enable clang static analyzer while disabling rewriter.])
632     fi
633     AC_SUBST(ENABLE_CLANG_REWRITER,[0]) 
634     ;;
635   default) AC_SUBST(ENABLE_CLANG_REWRITER,[1]);;
636   *) AC_MSG_ERROR([Invalid setting for --enable-clang-rewriter. Use "yes" or "no"]) ;;
637 esac
638
639 dnl --enable-optimized : check whether they want to do an optimized build:
640 AC_ARG_ENABLE(optimized, AS_HELP_STRING(
641  --enable-optimized,[Compile with optimizations enabled (default is NO)]),,enableval=$optimize)
642 if test ${enableval} = "no" ; then
643   AC_SUBST(ENABLE_OPTIMIZED,[[]])
644 else
645   AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
646 fi
647
648 dnl --enable-profiling : check whether they want to do a profile build:
649 AC_ARG_ENABLE(profiling, AS_HELP_STRING(
650  --enable-profiling,[Compile with profiling enabled (default is NO)]),,enableval="no")
651 if test ${enableval} = "no" ; then
652   AC_SUBST(ENABLE_PROFILING,[[]])
653 else
654   AC_SUBST(ENABLE_PROFILING,[[ENABLE_PROFILING=1]])
655 fi
656
657 dnl --enable-assertions : check whether they want to turn on assertions or not:
658 AC_ARG_ENABLE(assertions,AS_HELP_STRING(
659   --enable-assertions,[Compile with assertion checks enabled (default is YES)]),, enableval="yes")
660 if test ${enableval} = "yes" ; then
661   AC_SUBST(DISABLE_ASSERTIONS,[[]])
662 else
663   AC_SUBST(DISABLE_ASSERTIONS,[[DISABLE_ASSERTIONS=1]])
664 fi
665
666 dnl --enable-werror : check whether we want Werror on by default
667 AC_ARG_ENABLE(werror,AS_HELP_STRING(
668   --enable-werror,[Compile with -Werror enabled (default is NO)]),, enableval="no")
669 case "$enableval" in
670   yes) AC_SUBST(ENABLE_WERROR,[1]) ;;
671   no)  AC_SUBST(ENABLE_WERROR,[0]) ;;
672   default) AC_SUBST(ENABLE_WERROR,[0]);;
673   *) AC_MSG_ERROR([Invalid setting for --enable-werror. Use "yes" or "no"]) ;;
674 esac
675
676 dnl --enable-expensive-checks : check whether they want to turn on expensive debug checks:
677 AC_ARG_ENABLE(expensive-checks,AS_HELP_STRING(
678   --enable-expensive-checks,[Compile with expensive debug checks enabled (default is NO)]),, enableval="no")
679 if test ${enableval} = "yes" ; then
680   AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[ENABLE_EXPENSIVE_CHECKS=1]])
681   AC_SUBST(EXPENSIVE_CHECKS,[[yes]])
682 else
683   AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[]])
684   AC_SUBST(EXPENSIVE_CHECKS,[[no]])
685 fi
686
687 dnl --enable-debug-runtime : should runtime libraries have debug symbols?
688 AC_ARG_ENABLE(debug-runtime,
689    AS_HELP_STRING(--enable-debug-runtime,[Build runtime libs with debug symbols (default is NO)]),,enableval=no)
690 if test ${enableval} = "no" ; then
691   AC_SUBST(DEBUG_RUNTIME,[[]])
692 else
693   AC_SUBST(DEBUG_RUNTIME,[[DEBUG_RUNTIME=1]])
694 fi
695
696 dnl --enable-debug-symbols : should even optimized compiler libraries
697 dnl have debug symbols?
698 AC_ARG_ENABLE(debug-symbols,
699    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)
700 if test ${enableval} = "no" ; then
701   AC_SUBST(DEBUG_SYMBOLS,[[]])
702 else
703   AC_SUBST(DEBUG_SYMBOLS,[[DEBUG_SYMBOLS=1]])
704 fi
705
706 dnl --enable-keep-symbols : do not strip installed executables
707 AC_ARG_ENABLE(keep-symbols,
708    AS_HELP_STRING(--enable-keep-symbols,[Do not strip installed executables)]),,enableval=no)
709 if test ${enableval} = "no" ; then
710   AC_SUBST(KEEP_SYMBOLS,[[]])
711 else
712   AC_SUBST(KEEP_SYMBOLS,[[KEEP_SYMBOLS=1]])
713 fi
714
715 dnl --enable-jit: check whether they want to enable the jit
716 AC_ARG_ENABLE(jit,
717   AS_HELP_STRING(--enable-jit,
718                  [Enable Just In Time Compiling (default is YES)]),,
719   enableval=default)
720 if test ${enableval} = "no"
721 then
722   AC_SUBST(JIT,[[]])
723 else
724   case "$llvm_cv_target_arch" in
725     x86)         AC_SUBST(TARGET_HAS_JIT,1) ;;
726     Sparc)       AC_SUBST(TARGET_HAS_JIT,0) ;;
727     PowerPC)     AC_SUBST(TARGET_HAS_JIT,1) ;;
728     x86_64)      AC_SUBST(TARGET_HAS_JIT,1) ;;
729     ARM)         AC_SUBST(TARGET_HAS_JIT,1) ;;
730     AArch64)     AC_SUBST(TARGET_HAS_JIT,0) ;;
731     Mips)        AC_SUBST(TARGET_HAS_JIT,1) ;;
732     XCore)       AC_SUBST(TARGET_HAS_JIT,0) ;;
733     MSP430)      AC_SUBST(TARGET_HAS_JIT,0) ;;
734     Hexagon)     AC_SUBST(TARGET_HAS_JIT,0) ;;
735     NVPTX)       AC_SUBST(TARGET_HAS_JIT,0) ;;
736     SystemZ)     AC_SUBST(TARGET_HAS_JIT,1) ;;
737     *)           AC_SUBST(TARGET_HAS_JIT,0) ;;
738   esac
739 fi
740
741 dnl Allow enablement of building and installing docs
742 AC_ARG_ENABLE(docs,
743               AS_HELP_STRING([--enable-docs],
744                              [Build documents (default is YES)]),,
745                              enableval=default)
746 case "$enableval" in
747   yes) AC_SUBST(ENABLE_DOCS,[1]) ;;
748   no)  AC_SUBST(ENABLE_DOCS,[0]) ;;
749   default) AC_SUBST(ENABLE_DOCS,[1]) ;;
750   *) AC_MSG_ERROR([Invalid setting for --enable-docs. Use "yes" or "no"]) ;;
751 esac
752
753 dnl Allow enablement of doxygen generated documentation
754 AC_ARG_ENABLE(doxygen,
755               AS_HELP_STRING([--enable-doxygen],
756                              [Build doxygen documentation (default is NO)]),,
757                              enableval=default)
758 case "$enableval" in
759   yes) AC_SUBST(ENABLE_DOXYGEN,[1]) ;;
760   no)  AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
761   default) AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
762   *) AC_MSG_ERROR([Invalid setting for --enable-doxygen. Use "yes" or "no"]) ;;
763 esac
764
765 dnl Allow disablement of threads
766 AC_ARG_ENABLE(threads,
767               AS_HELP_STRING([--enable-threads],
768                              [Use threads if available (default is YES)]),,
769                              enableval=default)
770 case "$enableval" in
771   yes) AC_SUBST(LLVM_ENABLE_THREADS,[1]) ;;
772   no)  AC_SUBST(LLVM_ENABLE_THREADS,[0]) ;;
773   default) AC_SUBST(LLVM_ENABLE_THREADS,[1]) ;;
774   *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
775 esac
776 AC_DEFINE_UNQUOTED([LLVM_ENABLE_THREADS],$LLVM_ENABLE_THREADS,
777                    [Define if threads enabled])
778
779 dnl Allow disablement of pthread.h
780 AC_ARG_ENABLE(pthreads,
781               AS_HELP_STRING([--enable-pthreads],
782                              [Use pthreads if available (default is YES)]),,
783                              enableval=default)
784 case "$enableval" in
785   yes) AC_SUBST(ENABLE_PTHREADS,[1]) ;;
786   no)  AC_SUBST(ENABLE_PTHREADS,[0]) ;;
787   default) AC_SUBST(ENABLE_PTHREADS,[1]) ;;
788   *) AC_MSG_ERROR([Invalid setting for --enable-pthreads. Use "yes" or "no"]) ;;
789 esac
790
791 dnl Allow disablement of zlib
792 AC_ARG_ENABLE(zlib,
793               AS_HELP_STRING([--enable-zlib],
794                              [Use zlib for compression/decompression if
795                               available (default is YES)]),,
796                               enableval=default)
797 case "$enableval" in
798   yes) AC_SUBST(LLVM_ENABLE_ZLIB,[1]) ;;
799   no)  AC_SUBST(LLVM_ENABLE_ZLIB,[0]) ;;
800   default) AC_SUBST(LLVM_ENABLE_ZLIB,[1]) ;;
801   *) AC_MSG_ERROR([Invalid setting for --enable-zlib. Use "yes" or "no"]) ;;
802 esac
803 AC_DEFINE_UNQUOTED([LLVM_ENABLE_ZLIB],$LLVM_ENABLE_ZLIB,
804                    [Define if zlib is enabled])
805
806 dnl Allow building without position independent code
807 AC_ARG_ENABLE(pic,
808   AS_HELP_STRING([--enable-pic],
809                  [Build LLVM with Position Independent Code (default is YES)]),,
810                  enableval=default)
811 case "$enableval" in
812   yes) AC_SUBST(ENABLE_PIC,[1]) ;;
813   no)  AC_SUBST(ENABLE_PIC,[0]) ;;
814   default) AC_SUBST(ENABLE_PIC,[1]) ;;
815   *) AC_MSG_ERROR([Invalid setting for --enable-pic. Use "yes" or "no"]) ;;
816 esac
817 AC_DEFINE_UNQUOTED([ENABLE_PIC],$ENABLE_PIC,
818                    [Define if position independent code is enabled])
819
820 dnl Allow building a shared library and linking tools against it.
821 AC_ARG_ENABLE(shared,
822   AS_HELP_STRING([--enable-shared],
823                  [Build a shared library and link tools against it (default is NO)]),,
824                  enableval=default)
825 case "$enableval" in
826   yes) AC_SUBST(ENABLE_SHARED,[1]) ;;
827   no)  AC_SUBST(ENABLE_SHARED,[0]) ;;
828   default) AC_SUBST(ENABLE_SHARED,[0]) ;;
829   *) AC_MSG_ERROR([Invalid setting for --enable-shared. Use "yes" or "no"]) ;;
830 esac
831
832 dnl Allow libstdc++ is embedded in LLVM.dll.
833 AC_ARG_ENABLE(embed-stdcxx,
834   AS_HELP_STRING([--enable-embed-stdcxx],
835                  [Build a shared library with embedded libstdc++ for Win32 DLL (default is NO)]),,
836                  enableval=default)
837 case "$enableval" in
838   yes) AC_SUBST(ENABLE_EMBED_STDCXX,[1]) ;;
839   no)  AC_SUBST(ENABLE_EMBED_STDCXX,[0]) ;;
840   default) AC_SUBST(ENABLE_EMBED_STDCXX,[0]) ;;
841   *) AC_MSG_ERROR([Invalid setting for --enable-embed-stdcxx. Use "yes" or "no"]) ;;
842 esac
843
844 dnl Enable embedding timestamp information into build.
845 AC_ARG_ENABLE(timestamps,
846   AS_HELP_STRING([--enable-timestamps],
847                  [Enable embedding timestamp information in build (default is YES)]),,
848                  enableval=default)
849 case "$enableval" in
850   yes) AC_SUBST(ENABLE_TIMESTAMPS,[1]) ;;
851   no)  AC_SUBST(ENABLE_TIMESTAMPS,[0]) ;;
852   default) AC_SUBST(ENABLE_TIMESTAMPS,[1]) ;;
853   *) AC_MSG_ERROR([Invalid setting for --enable-timestamps. Use "yes" or "no"]) ;;
854 esac
855 AC_DEFINE_UNQUOTED([ENABLE_TIMESTAMPS],$ENABLE_TIMESTAMPS,
856                    [Define if timestamp information (e.g., __DATE__) is allowed])
857
858 dnl Enable support for showing backtraces.
859 AC_ARG_ENABLE(backtraces, AS_HELP_STRING(
860   [--enable-backtraces],
861   [Enable embedding backtraces on crash (default is YES)]),
862   [case "$enableval" in
863     yes) llvm_cv_enable_backtraces="yes" ;;
864     no)  llvm_cv_enable_backtraces="no"  ;;
865     *) AC_MSG_ERROR([Invalid setting for --enable-backtraces. Use "yes" or "no"]) ;;
866   esac],
867   llvm_cv_enable_backtraces="yes")
868 if test "$llvm_cv_enable_backtraces" = "yes" ; then
869   AC_DEFINE([ENABLE_BACKTRACES],[1],
870             [Define if you want backtraces on crash])
871 fi
872
873 dnl Enable installing platform specific signal handling overrides, for improved
874 dnl CrashRecovery support or interaction with crash reporting software. This
875 dnl support may be inappropriate for some clients embedding LLVM as a library.
876 AC_ARG_ENABLE(crash-overrides, AS_HELP_STRING(
877   [--enable-crash-overrides],
878   [Enable crash handling overrides (default is YES)]),
879   [case "$enableval" in
880     yes) llvm_cv_enable_crash_overrides="yes" ;;
881     no)  llvm_cv_enable_crash_overrides="no"  ;;
882     *) AC_MSG_ERROR([Invalid setting for --enable-crash-overrides. Use "yes" or "no"]) ;;
883   esac],
884   llvm_cv_enable_crash_overrides="yes")
885 if test "$llvm_cv_enable_crash_overrides" = "yes" ; then
886   AC_DEFINE([ENABLE_CRASH_OVERRIDES],[1],
887             [Define to enable crash handling overrides])
888 fi
889
890 dnl Allow specific targets to be specified for building (or not)
891 TARGETS_TO_BUILD=""
892 AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
893     [Build specific host targets: all or target1,target2,... Valid targets are:
894      host, x86, x86_64, sparc, powerpc, arm, aarch64, mips, hexagon,
895      xcore, msp430, nvptx, systemz, r600, and cpp (default=all)]),,
896     enableval=all)
897 if test "$enableval" = host-only ; then
898   enableval=host
899 fi
900 case "$enableval" in
901   all) TARGETS_TO_BUILD="X86 Sparc PowerPC AArch64 ARM Mips XCore MSP430 CppBackend NVPTX Hexagon SystemZ R600" ;;
902   *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do
903       case "$a_target" in
904         x86)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
905         x86_64)   TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
906         sparc)    TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
907         powerpc)  TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
908         aarch64)  TARGETS_TO_BUILD="AArch64 $TARGETS_TO_BUILD" ;;
909         arm)      TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
910         mips)     TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
911         mipsel)   TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
912         mips64)   TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
913         mips64el) TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
914         xcore)    TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
915         msp430)   TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
916         cpp)      TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;;
917         hexagon)  TARGETS_TO_BUILD="Hexagon $TARGETS_TO_BUILD" ;;
918         nvptx)    TARGETS_TO_BUILD="NVPTX $TARGETS_TO_BUILD" ;;
919         systemz)  TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
920         r600)     TARGETS_TO_BUILD="R600 $TARGETS_TO_BUILD" ;;
921         host) case "$llvm_cv_target_arch" in
922             x86)         TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
923             x86_64)      TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
924             Sparc)       TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
925             PowerPC)     TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
926             AArch64)     TARGETS_TO_BUILD="AArch64 $TARGETS_TO_BUILD" ;;
927             ARM)         TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
928             Mips)        TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
929             XCore)       TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;;
930             MSP430)      TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;;
931             Hexagon)     TARGETS_TO_BUILD="Hexagon $TARGETS_TO_BUILD" ;;
932             NVPTX)       TARGETS_TO_BUILD="NVPTX $TARGETS_TO_BUILD" ;;
933             SystemZ)     TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;;
934             *)       AC_MSG_ERROR([Can not set target to build]) ;;
935           esac ;;
936         *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
937       esac
938   done
939   ;;
940 esac
941
942 AC_ARG_ENABLE([experimental-targets],AS_HELP_STRING([--enable-experimental-targets],
943     [Build experimental host targets: disable or target1,target2,...
944      (default=disable)]),,
945     enableval=disable)
946
947 if test ${enableval} != "disable"
948 then
949   TARGETS_TO_BUILD="$enableval $TARGETS_TO_BUILD"
950 fi
951
952 AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD)
953
954 dnl Determine whether we are building LLVM support for the native architecture.
955 dnl If so, define LLVM_NATIVE_ARCH to that LLVM target.
956 for a_target in $TARGETS_TO_BUILD; do
957   if test "$a_target" = "$LLVM_NATIVE_ARCH"; then
958     AC_DEFINE_UNQUOTED(LLVM_NATIVE_ARCH, $LLVM_NATIVE_ARCH,
959       [LLVM architecture name for the native architecture, if available])
960     LLVM_NATIVE_TARGET="LLVMInitialize${LLVM_NATIVE_ARCH}Target"
961     LLVM_NATIVE_TARGETINFO="LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo"
962     LLVM_NATIVE_TARGETMC="LLVMInitialize${LLVM_NATIVE_ARCH}TargetMC"
963     LLVM_NATIVE_ASMPRINTER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter"
964     if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/Makefile ; then
965       LLVM_NATIVE_ASMPARSER="LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser"
966     fi
967     if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/Disassembler/Makefile ; then
968       LLVM_NATIVE_DISASSEMBLER="LLVMInitialize${LLVM_NATIVE_ARCH}Disassembler"
969     fi
970     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGET, $LLVM_NATIVE_TARGET,
971       [LLVM name for the native Target init function, if available])
972     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETINFO, $LLVM_NATIVE_TARGETINFO,
973       [LLVM name for the native TargetInfo init function, if available])
974     AC_DEFINE_UNQUOTED(LLVM_NATIVE_TARGETMC, $LLVM_NATIVE_TARGETMC,
975       [LLVM name for the native target MC init function, if available])
976     AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPRINTER, $LLVM_NATIVE_ASMPRINTER,
977       [LLVM name for the native AsmPrinter init function, if available])
978     if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/Makefile ; then
979       AC_DEFINE_UNQUOTED(LLVM_NATIVE_ASMPARSER, $LLVM_NATIVE_ASMPARSER,
980        [LLVM name for the native AsmParser init function, if available])
981     fi
982     if test -f ${srcdir}/lib/Target/${LLVM_NATIVE_ARCH}/Disassembler/Makefile ; then
983       AC_DEFINE_UNQUOTED(LLVM_NATIVE_DISASSEMBLER, $LLVM_NATIVE_DISASSEMBLER,
984        [LLVM name for the native Disassembler init function, if available])
985     fi
986   fi
987 done
988
989 dnl Build the LLVM_TARGET and LLVM_... macros for Targets.def and the individual
990 dnl target feature def files.
991 LLVM_ENUM_TARGETS=""
992 LLVM_ENUM_ASM_PRINTERS=""
993 LLVM_ENUM_ASM_PARSERS=""
994 LLVM_ENUM_DISASSEMBLERS=""
995 for target_to_build in $TARGETS_TO_BUILD; do
996   LLVM_ENUM_TARGETS="LLVM_TARGET($target_to_build) $LLVM_ENUM_TARGETS"
997   if test -f ${srcdir}/lib/Target/${target_to_build}/*AsmPrinter.cpp ; then
998     LLVM_ENUM_ASM_PRINTERS="LLVM_ASM_PRINTER($target_to_build) $LLVM_ENUM_ASM_PRINTERS";
999   fi
1000   if test -f ${srcdir}/lib/Target/${target_to_build}/AsmParser/Makefile ; then
1001     LLVM_ENUM_ASM_PARSERS="LLVM_ASM_PARSER($target_to_build) $LLVM_ENUM_ASM_PARSERS";
1002   fi
1003   if test -f ${srcdir}/lib/Target/${target_to_build}/Disassembler/Makefile ; then
1004     LLVM_ENUM_DISASSEMBLERS="LLVM_DISASSEMBLER($target_to_build) $LLVM_ENUM_DISASSEMBLERS";
1005   fi
1006 done
1007 AC_SUBST(LLVM_ENUM_TARGETS)
1008 AC_SUBST(LLVM_ENUM_ASM_PRINTERS)
1009 AC_SUBST(LLVM_ENUM_ASM_PARSERS)
1010 AC_SUBST(LLVM_ENUM_DISASSEMBLERS)
1011
1012 dnl Override the option to use for optimized builds.
1013 AC_ARG_WITH(optimize-option,
1014   AS_HELP_STRING([--with-optimize-option],
1015                  [Select the compiler options to use for optimized builds]),,
1016                  withval=default)
1017 AC_MSG_CHECKING([optimization flags])
1018 case "$withval" in
1019   default)
1020     case "$llvm_cv_os_type" in
1021     FreeBSD) optimize_option=-O2 ;;
1022     MingW) optimize_option=-O2 ;;
1023     *)     optimize_option=-O3 ;;
1024     esac ;;
1025   *) optimize_option="$withval" ;;
1026 esac
1027 AC_SUBST(OPTIMIZE_OPTION,$optimize_option)
1028 AC_MSG_RESULT([$optimize_option])
1029
1030 dnl Specify extra build options
1031 AC_ARG_WITH(extra-options,
1032   AS_HELP_STRING([--with-extra-options],
1033                  [Specify additional options to compile LLVM with]),,
1034                  withval=default)
1035 case "$withval" in
1036   default) EXTRA_OPTIONS= ;;
1037   *) EXTRA_OPTIONS=$withval ;;
1038 esac
1039 AC_SUBST(EXTRA_OPTIONS,$EXTRA_OPTIONS)
1040
1041 dnl Specify extra linker build options
1042 AC_ARG_WITH(extra-ld-options,
1043   AS_HELP_STRING([--with-extra-ld-options],
1044                  [Specify additional options to link LLVM with]),,
1045                  withval=default)
1046 case "$withval" in
1047   default) EXTRA_LD_OPTIONS= ;;
1048   *) EXTRA_LD_OPTIONS=$withval ;;
1049 esac
1050 AC_SUBST(EXTRA_LD_OPTIONS,$EXTRA_LD_OPTIONS)
1051
1052 dnl Allow specific bindings to be specified for building (or not)
1053 AC_ARG_ENABLE([bindings],AS_HELP_STRING([--enable-bindings],
1054     [Build specific language bindings: all,auto,none,{binding-name} (default=auto)]),,
1055     enableval=default)
1056 BINDINGS_TO_BUILD=""
1057 case "$enableval" in
1058   yes | default | auto) BINDINGS_TO_BUILD="auto" ;;
1059   all ) BINDINGS_TO_BUILD="ocaml" ;;
1060   none | no) BINDINGS_TO_BUILD="" ;;
1061   *)for a_binding in `echo $enableval|sed -e 's/,/ /g' ` ; do
1062       case "$a_binding" in
1063         ocaml) BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD" ;;
1064         *) AC_MSG_ERROR([Unrecognized binding $a_binding]) ;;
1065       esac
1066   done
1067   ;;
1068 esac
1069
1070 dnl Allow the ocaml libdir to be overridden. This could go in a configure
1071 dnl script for bindings/ocaml/configure, except that its auto value depends on
1072 dnl OCAMLC, which is found here to support tests.
1073 AC_ARG_WITH([ocaml-libdir],
1074   [AS_HELP_STRING([--with-ocaml-libdir],
1075     [Specify install location for ocaml bindings (default is stdlib)])],
1076   [],
1077   [withval=auto])
1078 case "$withval" in
1079   auto) with_ocaml_libdir="$withval" ;;
1080   /* | [[A-Za-z]]:[[\\/]]*) with_ocaml_libdir="$withval" ;;
1081   *) AC_MSG_ERROR([Invalid path for --with-ocaml-libdir. Provide full path]) ;;
1082 esac
1083
1084 AC_ARG_WITH(clang-srcdir,
1085   AS_HELP_STRING([--with-clang-srcdir],
1086     [Directory to the out-of-tree Clang source]),,
1087     withval="-")
1088 case "$withval" in
1089   -) clang_src_root="" ;;
1090   /* | [[A-Za-z]]:[[\\/]]*) clang_src_root="$withval" ;;
1091   *) clang_src_root="$ac_pwd/$withval" ;;
1092 esac
1093 AC_SUBST(CLANG_SRC_ROOT,[$clang_src_root])
1094
1095 AC_ARG_WITH(clang-resource-dir,
1096   AS_HELP_STRING([--with-clang-resource-dir],
1097     [Relative directory from the Clang binary for resource files]),,
1098     withval="")
1099 AC_DEFINE_UNQUOTED(CLANG_RESOURCE_DIR,"$withval",
1100                    [Relative directory for resource files])
1101
1102 AC_ARG_WITH(c-include-dirs,
1103   AS_HELP_STRING([--with-c-include-dirs],
1104     [Colon separated list of directories clang will search for headers]),,
1105     withval="")
1106 AC_DEFINE_UNQUOTED(C_INCLUDE_DIRS,"$withval",
1107                    [Directories clang will search for headers])
1108
1109 # Clang normally uses the system c++ headers and libraries. With this option,
1110 # clang will use the ones provided by a gcc installation instead. This option should
1111 # be passed the same value that was used with --prefix when configuring gcc.
1112 AC_ARG_WITH(gcc-toolchain,
1113   AS_HELP_STRING([--with-gcc-toolchain],
1114     [Directory where gcc is installed.]),,
1115     withval="")
1116 AC_DEFINE_UNQUOTED(GCC_INSTALL_PREFIX,"$withval",
1117                    [Directory where gcc is installed.])
1118
1119 AC_ARG_WITH(default-sysroot,
1120   AS_HELP_STRING([--with-default-sysroot],
1121     [Add --sysroot=<path> to all compiler invocations.]),,
1122     withval="")
1123 AC_DEFINE_UNQUOTED(DEFAULT_SYSROOT,"$withval",
1124                    [Default <path> to all compiler invocations for --sysroot=<path>.])
1125
1126 dnl Allow linking of LLVM with GPLv3 binutils code.
1127 AC_ARG_WITH(binutils-include,
1128   AS_HELP_STRING([--with-binutils-include],
1129     [Specify path to binutils/include/ containing plugin-api.h file for gold plugin.]),,
1130   withval=default)
1131 case "$withval" in
1132   default) WITH_BINUTILS_INCDIR=default ;;
1133   /* | [[A-Za-z]]:[[\\/]]*)      WITH_BINUTILS_INCDIR=$withval ;;
1134   *) AC_MSG_ERROR([Invalid path for --with-binutils-include. Provide full path]) ;;
1135 esac
1136 if test "x$WITH_BINUTILS_INCDIR" != xdefault ; then
1137   AC_SUBST(BINUTILS_INCDIR,$WITH_BINUTILS_INCDIR)
1138   if test ! -f "$WITH_BINUTILS_INCDIR/plugin-api.h"; then
1139      echo "$WITH_BINUTILS_INCDIR/plugin-api.h"
1140      AC_MSG_ERROR([Invalid path to directory containing plugin-api.h.]);
1141   fi
1142 fi
1143
1144 dnl Specify the URL where bug reports should be submitted.
1145 AC_ARG_WITH(bug-report-url,
1146   AS_HELP_STRING([--with-bug-report-url],
1147     [Specify the URL where bug reports should be submitted (default=http://llvm.org/bugs/)]),,
1148     withval="http://llvm.org/bugs/")
1149 AC_DEFINE_UNQUOTED(BUG_REPORT_URL,"$withval",
1150                    [Bug report URL.])
1151
1152 dnl --enable-terminfo: check whether the user wants to control use of terminfo:
1153 AC_ARG_ENABLE(terminfo,AS_HELP_STRING(
1154   [--enable-terminfo],
1155   [Query the terminfo database if available (default is YES)]),
1156   [case "$enableval" in
1157     yes) llvm_cv_enable_terminfo="yes" ;;
1158     no)  llvm_cv_enable_terminfo="no"  ;;
1159     *) AC_MSG_ERROR([Invalid setting for --enable-terminfo. Use "yes" or "no"]) ;;
1160   esac],
1161   llvm_cv_enable_terminfo="yes")
1162
1163 dnl --enable-libffi : check whether the user wants to turn off libffi:
1164 AC_ARG_ENABLE(libffi,AS_HELP_STRING(
1165   --enable-libffi,[Check for the presence of libffi (default is NO)]),
1166   [case "$enableval" in
1167     yes) llvm_cv_enable_libffi="yes" ;;
1168     no)  llvm_cv_enable_libffi="no"  ;;
1169     *) AC_MSG_ERROR([Invalid setting for --enable-libffi. Use "yes" or "no"]) ;;
1170   esac],
1171   llvm_cv_enable_libffi=no)
1172
1173 AC_ARG_WITH(internal-prefix,
1174   AS_HELP_STRING([--with-internal-prefix],
1175     [Installation directory for internal files]),,
1176     withval="")
1177 AC_SUBST(INTERNAL_PREFIX,[$withval])
1178
1179 dnl===-----------------------------------------------------------------------===
1180 dnl===
1181 dnl=== SECTION 4: Check for programs we need and that they are the right version
1182 dnl===
1183 dnl===-----------------------------------------------------------------------===
1184
1185 AC_PROG_NM
1186 AC_SUBST(NM)
1187
1188 dnl Check for the tools that the makefiles require
1189 AC_CHECK_GNU_MAKE
1190 AC_PROG_LN_S
1191 AC_PATH_PROG(CMP, [cmp], [cmp])
1192 AC_PATH_PROG(CP, [cp], [cp])
1193 AC_PATH_PROG(DATE, [date], [date])
1194 AC_PATH_PROG(FIND, [find], [find])
1195 AC_PATH_PROG(GREP, [grep], [grep])
1196 AC_PATH_PROG(MKDIR,[mkdir],[mkdir])
1197 AC_PATH_PROG(MV,   [mv],   [mv])
1198 AC_PROG_RANLIB
1199 AC_CHECK_TOOL(AR, ar, false)
1200 AC_PATH_PROG(RM,   [rm],   [rm])
1201 AC_PATH_PROG(SED,  [sed],  [sed])
1202 AC_PATH_PROG(TAR,  [tar],  [gtar])
1203 AC_PATH_PROG(BINPWD,[pwd],  [pwd])
1204
1205 dnl Looking for misc. graph plotting software
1206 AC_PATH_PROG(GRAPHVIZ, [Graphviz], [echo Graphviz])
1207 if test "$GRAPHVIZ" != "echo Graphviz" ; then
1208   AC_DEFINE([HAVE_GRAPHVIZ],[1],[Define if the Graphviz program is available])
1209   dnl If we're targeting for mingw we should emit windows paths, not msys
1210   if test "$llvm_cv_os_type" = "MingW" ; then
1211     GRAPHVIZ=`echo $GRAPHVIZ | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1212   fi
1213   AC_DEFINE_UNQUOTED([LLVM_PATH_GRAPHVIZ],"$GRAPHVIZ${EXEEXT}",
1214    [Define to path to Graphviz program if found or 'echo Graphviz' otherwise])
1215 fi
1216 AC_PATH_PROG(DOT, [dot], [echo dot])
1217 if test "$DOT" != "echo dot" ; then
1218   AC_DEFINE([HAVE_DOT],[1],[Define if the dot program is available])
1219   dnl If we're targeting for mingw we should emit windows paths, not msys
1220   if test "$llvm_cv_os_type" = "MingW" ; then
1221     DOT=`echo $DOT | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1222   fi
1223   AC_DEFINE_UNQUOTED([LLVM_PATH_DOT],"$DOT${EXEEXT}",
1224    [Define to path to dot program if found or 'echo dot' otherwise])
1225 fi
1226 AC_PATH_PROG(FDP, [fdp], [echo fdp])
1227 if test "$FDP" != "echo fdp" ; then
1228   AC_DEFINE([HAVE_FDP],[1],[Define if the neat program is available])
1229   dnl If we're targeting for mingw we should emit windows paths, not msys
1230   if test "$llvm_cv_os_type" = "MingW" ; then
1231     FDP=`echo $FDP | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1232   fi
1233   AC_DEFINE_UNQUOTED([LLVM_PATH_FDP],"$FDP${EXEEXT}",
1234    [Define to path to fdp program if found or 'echo fdp' otherwise])
1235 fi
1236 AC_PATH_PROG(NEATO, [neato], [echo neato])
1237 if test "$NEATO" != "echo neato" ; then
1238   AC_DEFINE([HAVE_NEATO],[1],[Define if the neat program is available])
1239   dnl If we're targeting for mingw we should emit windows paths, not msys
1240   if test "$llvm_cv_os_type" = "MingW" ; then
1241     NEATO=`echo $NEATO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1242   fi
1243   AC_DEFINE_UNQUOTED([LLVM_PATH_NEATO],"$NEATO${EXEEXT}",
1244    [Define to path to neato program if found or 'echo neato' otherwise])
1245 fi
1246 AC_PATH_PROG(TWOPI, [twopi], [echo twopi])
1247 if test "$TWOPI" != "echo twopi" ; then
1248   AC_DEFINE([HAVE_TWOPI],[1],[Define if the neat program is available])
1249   dnl If we're targeting for mingw we should emit windows paths, not msys
1250   if test "$llvm_cv_os_type" = "MingW" ; then
1251     TWOPI=`echo $TWOPI | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1252   fi
1253   AC_DEFINE_UNQUOTED([LLVM_PATH_TWOPI],"$TWOPI${EXEEXT}",
1254    [Define to path to twopi program if found or 'echo twopi' otherwise])
1255 fi
1256 AC_PATH_PROG(CIRCO, [circo], [echo circo])
1257 if test "$CIRCO" != "echo circo" ; then
1258   AC_DEFINE([HAVE_CIRCO],[1],[Define if the neat program is available])
1259   dnl If we're targeting for mingw we should emit windows paths, not msys
1260   if test "$llvm_cv_os_type" = "MingW" ; then
1261     CIRCO=`echo $CIRCO | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1262   fi
1263   AC_DEFINE_UNQUOTED([LLVM_PATH_CIRCO],"$CIRCO${EXEEXT}",
1264    [Define to path to circo program if found or 'echo circo' otherwise])
1265 fi
1266 AC_PATH_PROGS(GV, [gv gsview32], [echo gv])
1267 if test "$GV" != "echo gv" ; then
1268   AC_DEFINE([HAVE_GV],[1],[Define if the gv program is available])
1269   dnl If we're targeting for mingw we should emit windows paths, not msys
1270   if test "$llvm_cv_os_type" = "MingW" ; then
1271     GV=`echo $GV | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1272   fi
1273   AC_DEFINE_UNQUOTED([LLVM_PATH_GV],"$GV${EXEEXT}",
1274    [Define to path to gv program if found or 'echo gv' otherwise])
1275 fi
1276 AC_PATH_PROG(DOTTY, [dotty], [echo dotty])
1277 if test "$DOTTY" != "echo dotty" ; then
1278   AC_DEFINE([HAVE_DOTTY],[1],[Define if the dotty program is available])
1279   dnl If we're targeting for mingw we should emit windows paths, not msys
1280   if test "$llvm_cv_os_type" = "MingW" ; then
1281     DOTTY=`echo $DOTTY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1282   fi
1283   AC_DEFINE_UNQUOTED([LLVM_PATH_DOTTY],"$DOTTY${EXEEXT}",
1284    [Define to path to dotty program if found or 'echo dotty' otherwise])
1285 fi
1286 AC_PATH_PROGS(XDOT, [xdot xdot.py], [echo xdot])
1287 if test "$XDOT" != "echo xdot" ; then
1288   AC_DEFINE([HAVE_XDOT],[1],[Define if the xdot program is available])
1289   dnl If we're targeting for mingw we should emit windows paths, not msys
1290   if test "$llvm_cv_os_type" = "MingW" ; then
1291     XDOT=`echo $XDOT | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
1292   fi
1293   AC_DEFINE_UNQUOTED([LLVM_PATH_XDOT],"$XDOT${EXEEXT}",
1294    [Define to path to xdot program if found or 'echo xdot' otherwise])
1295 fi
1296
1297 dnl Find the install program
1298 AC_PROG_INSTALL
1299 dnl Prepend src dir to install path dir if it's a relative path
1300 dnl This is a hack for installs that take place in something other
1301 dnl than the top level.
1302 case "$INSTALL" in
1303  [[\\/$]]* | ?:[[\\/]]* ) ;;
1304  *)  INSTALL="\\\$(TOPSRCDIR)/$INSTALL" ;;
1305 esac
1306
1307 dnl Checks for documentation and testing tools that we can do without. If these
1308 dnl are not found then they are set to "true" which always succeeds but does
1309 dnl nothing. This just lets the build output show that we could have done
1310 dnl something if the tool was available.
1311 AC_PATH_PROG(BZIP2, [bzip2])
1312 AC_PATH_PROG(CAT, [cat])
1313 AC_PATH_PROG(DOXYGEN, [doxygen])
1314 AC_PATH_PROG(GROFF, [groff])
1315 AC_PATH_PROG(GZIPBIN, [gzip])
1316 AC_PATH_PROG(PDFROFF, [pdfroff])
1317 AC_PATH_PROG(ZIP, [zip])
1318 AC_PATH_PROGS(OCAMLC, [ocamlc])
1319 AC_PATH_PROGS(OCAMLOPT, [ocamlopt])
1320 AC_PATH_PROGS(OCAMLDEP, [ocamldep])
1321 AC_PATH_PROGS(OCAMLDOC, [ocamldoc])
1322 AC_PATH_PROGS(GAS, [gas as])
1323
1324 dnl Get the version of the linker in use.
1325 AC_LINK_GET_VERSION
1326
1327 dnl Determine whether the linker supports the -R option.
1328 AC_LINK_USE_R
1329
1330 dnl Determine whether the compiler supports the -rdynamic option.
1331 AC_LINK_EXPORT_DYNAMIC
1332
1333 dnl Determine whether the linker supports the --version-script option.
1334 AC_LINK_VERSION_SCRIPT
1335
1336 dnl Check for libtool and the library that has dlopen function (which must come
1337 dnl before the AC_PROG_LIBTOOL check in order to enable dlopening libraries with
1338 dnl libtool).
1339 AC_LIBTOOL_DLOPEN
1340 AC_LIB_LTDL
1341
1342 AC_MSG_CHECKING([tool compatibility])
1343
1344 dnl Ensure that compilation tools are GCC or a GNU compatible compiler such as
1345 dnl ICC; we use GCC specific options in the makefiles so the compiler needs
1346 dnl to support those options.
1347 dnl "icc" emits gcc signatures
1348 dnl "icc -no-gcc" emits no gcc signature BUT is still compatible
1349 ICC=no
1350 IXX=no
1351 case $CC in
1352   icc*|icpc*)
1353     ICC=yes
1354     IXX=yes
1355     ;;
1356    *)
1357     ;;
1358 esac
1359
1360 if test "$GCC" != "yes" && test "$ICC" != "yes"
1361 then
1362   AC_MSG_ERROR([gcc|icc required but not found])
1363 fi
1364
1365 dnl Ensure that compilation tools are compatible with GCC extensions
1366 if test "$GXX" != "yes" && test "$IXX" != "yes"
1367 then
1368   AC_MSG_ERROR([g++|clang++|icc required but not found])
1369 fi
1370
1371 dnl Verify that GCC is version 3.0 or higher
1372 if test "$GCC" = "yes"
1373 then
1374   AC_COMPILE_IFELSE(
1375 [
1376   AC_LANG_SOURCE([[
1377     #if !defined(__GNUC__) || __GNUC__ < 3
1378     #error Unsupported GCC version
1379     #endif
1380   ]])
1381 ],
1382 [], [AC_MSG_ERROR([gcc 3.x required, but you have a lower version])])
1383 fi
1384
1385 dnl Check for GNU Make.  We use its extensions, so don't build without it
1386 if test -z "$llvm_cv_gnu_make_command"
1387 then
1388   AC_MSG_ERROR([GNU Make required but not found])
1389 fi
1390
1391 dnl Tool compatibility is okay if we make it here.
1392 AC_MSG_RESULT([ok])
1393
1394 dnl Check optional compiler flags.
1395 AC_MSG_CHECKING([optional compiler flags])
1396 CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros])
1397 CXX_FLAG_CHECK(NO_MISSING_FIELD_INITIALIZERS, [-Wno-missing-field-initializers])
1398 CXX_FLAG_CHECK(COVERED_SWITCH_DEFAULT, [-Wcovered-switch-default])
1399
1400 dnl GCC's potential uninitialized use analysis is weak and presents lots of
1401 dnl false positives, so disable it.
1402 NO_UNINITIALIZED=
1403 NO_MAYBE_UNINITIALIZED=
1404 if test "$GXX" = "yes"
1405 then
1406   CXX_FLAG_CHECK(NO_MAYBE_UNINITIALIZED, [-Wno-maybe-uninitialized])
1407   dnl gcc 4.7 introduced -Wmaybe-uninitialized to distinguish cases which are
1408   dnl known to be uninitialized from cases which might be uninitialized.  We
1409   dnl still want to catch the first kind of errors.
1410   if test -z "$NO_MAYBE_UNINITIALIZED"
1411   then
1412     CXX_FLAG_CHECK(NO_UNINITIALIZED, [-Wno-uninitialized])
1413   fi
1414 fi
1415 AC_MSG_RESULT([$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS $COVERED_SWITCH_DEFAULT $NO_UNINITIALIZED $NO_MAYBE_UNINITIALIZED])
1416
1417 AC_ARG_WITH([python],
1418             [AS_HELP_STRING([--with-python], [path to python])],
1419             [PYTHON="$withval"])
1420
1421 if test -n "$PYTHON" && test -x "$PYTHON" ; then
1422   AC_MSG_CHECKING([for python])
1423   AC_MSG_RESULT([user defined: $with_python])
1424 else
1425   if test -n "$PYTHON" ; then
1426     AC_MSG_WARN([specified python ($PYTHON) is not usable, searching path])
1427   fi
1428
1429   AC_PATH_PROG([PYTHON], [python python2 python26],
1430                [AC_MSG_RESULT([not found])
1431                 AC_MSG_ERROR([could not find python 2.5 or higher])])
1432 fi
1433
1434 AC_MSG_CHECKING([for python >= 2.5])
1435 ac_python_version=`$PYTHON -V 2>&1 | cut -d' ' -f2`
1436 ac_python_version_major=`echo $ac_python_version | cut -d'.' -f1`
1437 ac_python_version_minor=`echo $ac_python_version | cut -d'.' -f2`
1438 ac_python_version_patch=`echo $ac_python_version | cut -d'.' -f3`
1439 if test "$ac_python_version_major" -gt "2" || \
1440    (test "$ac_python_version_major" -eq "2" && \
1441     test "$ac_python_version_minor" -ge "5") ; then
1442   AC_MSG_RESULT([$PYTHON ($ac_python_version)])
1443 else
1444   AC_MSG_RESULT([not found])
1445   AC_MSG_FAILURE([found python $ac_python_version ($PYTHON); required >= 2.5])
1446 fi
1447
1448 dnl===-----------------------------------------------------------------------===
1449 dnl===
1450 dnl=== SECTION 5: Check for libraries
1451 dnl===
1452 dnl===-----------------------------------------------------------------------===
1453
1454 AC_CHECK_LIB(m,sin)
1455 if test "$llvm_cv_os_type" = "MingW" ; then
1456   AC_CHECK_LIB(imagehlp, main)
1457   AC_CHECK_LIB(psapi, main)
1458   AC_CHECK_LIB(shell32, main)
1459 fi
1460
1461 dnl dlopen() is required for plugin support.
1462 AC_SEARCH_LIBS(dlopen,dl,AC_DEFINE([HAVE_DLOPEN],[1],
1463                [Define if dlopen() is available on this platform.]),
1464                AC_MSG_WARN([dlopen() not found - disabling plugin support]))
1465
1466 dnl Search for the clock_gettime() function. Note that we rely on the POSIX
1467 dnl macros to detect whether clock_gettime is available, this just finds the
1468 dnl right libraries to link with.
1469 AC_SEARCH_LIBS(clock_gettime,rt)
1470
1471 dnl The curses library is optional; used for querying terminal info
1472 if test "$llvm_cv_enable_terminfo" = "yes" ; then
1473   dnl We need the has_color functionality in curses for it to be useful.
1474   AC_SEARCH_LIBS(setupterm,tinfo terminfo curses ncurses ncursesw,
1475                  AC_DEFINE([HAVE_TERMINFO],[1],
1476                            [Define if the setupterm() function is supported this platform.]))
1477 fi
1478
1479 dnl libffi is optional; used to call external functions from the interpreter
1480 if test "$llvm_cv_enable_libffi" = "yes" ; then
1481   AC_SEARCH_LIBS(ffi_call,ffi,AC_DEFINE([HAVE_FFI_CALL],[1],
1482                  [Define if libffi is available on this platform.]),
1483                  AC_MSG_ERROR([libffi not found - configure without --enable-libffi to compile without it]))
1484 fi
1485
1486 dnl mallinfo is optional; the code can compile (minus features) without it
1487 AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],
1488                [Define if mallinfo() is available on this platform.]))
1489
1490 dnl pthread locking functions are optional - but llvm will not be thread-safe
1491 dnl without locks.
1492 if test "$LLVM_ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1493   AC_CHECK_LIB(pthread, pthread_mutex_init)
1494   AC_SEARCH_LIBS(pthread_mutex_lock,pthread,
1495                  AC_DEFINE([HAVE_PTHREAD_MUTEX_LOCK],[1],
1496                            [Have pthread_mutex_lock]))
1497   AC_SEARCH_LIBS(pthread_rwlock_init,pthread,
1498                  AC_DEFINE([HAVE_PTHREAD_RWLOCK_INIT],[1],
1499                  [Have pthread_rwlock_init]))
1500   AC_SEARCH_LIBS(pthread_getspecific,pthread,
1501                  AC_DEFINE([HAVE_PTHREAD_GETSPECIFIC],[1],
1502                  [Have pthread_getspecific]))
1503 fi
1504
1505 dnl zlib is optional; used for compression/uncompression
1506 if test "$LLVM_ENABLE_ZLIB" -eq 1 ; then
1507   AC_CHECK_LIB(z, compress2)
1508 fi
1509
1510 dnl Allow extra x86-disassembler library
1511 AC_ARG_WITH(udis86,
1512   AS_HELP_STRING([--with-udis86=<path>],
1513     [Use udis86 external x86 disassembler library]),
1514     [
1515       AC_SUBST(USE_UDIS86, [1])
1516       case "$withval" in
1517         /usr/lib|yes) ;;
1518         *) LDFLAGS="$LDFLAGS -L${withval}" ;;
1519       esac
1520       AC_CHECK_LIB(udis86, ud_init, [], [
1521         echo "Error! You need to have libudis86 around."
1522         exit -1
1523       ])
1524     ],
1525     AC_SUBST(USE_UDIS86, [0]))
1526 AC_DEFINE_UNQUOTED([USE_UDIS86],$USE_UDIS86,
1527                    [Define if use udis86 library])
1528
1529 dnl Allow OProfile support for JIT output.
1530 AC_ARG_WITH(oprofile,
1531   AS_HELP_STRING([--with-oprofile=<prefix>],
1532     [Tell OProfile >= 0.9.4 how to symbolize JIT output]),
1533     [
1534       AC_SUBST(USE_OPROFILE, [1])
1535       case "$withval" in
1536         /usr|yes) llvm_cv_oppath=/usr/lib/oprofile ;;
1537         no) llvm_cv_oppath=
1538             AC_SUBST(USE_OPROFILE, [0]) ;;
1539         *) llvm_cv_oppath="${withval}/lib/oprofile"
1540            CPPFLAGS="-I${withval}/include";;
1541       esac
1542       case $llvm_cv_os_type in
1543         Linux)
1544           if test -n "$llvm_cv_oppath" ; then
1545             LIBS="$LIBS -lopagent -L${llvm_cv_oppath} -Wl,-rpath,${llvm_cv_oppath}"
1546             dnl Work around http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=537744:
1547             dnl libbfd is not included properly in libopagent in some Debian
1548             dnl versions.  If libbfd isn't found at all, we assume opagent works
1549             dnl anyway.
1550             AC_SEARCH_LIBS(bfd_init, bfd, [], [])
1551             AC_SEARCH_LIBS(op_open_agent, opagent, [], [
1552               echo "Error! You need to have libopagent around."
1553               exit -1
1554             ])
1555             AC_CHECK_HEADER([opagent.h], [], [
1556               echo "Error! You need to have opagent.h around."
1557               exit -1
1558               ])
1559           fi ;;
1560         *)
1561           AC_MSG_ERROR([OProfile support is available on Linux only.]) ;;
1562       esac 
1563     ],
1564     [
1565       AC_SUBST(USE_OPROFILE, [0])
1566     ])
1567 AC_DEFINE_UNQUOTED([LLVM_USE_OPROFILE],$USE_OPROFILE,
1568                    [Define if we have the oprofile JIT-support library])
1569
1570 dnl Enable support for Intel JIT Events API.
1571 AC_ARG_WITH(intel-jitevents,
1572   AS_HELP_STRING([--with-intel-jitevents  Notify Intel JIT profiling API of generated code]),
1573     [
1574        case "$withval" in
1575           yes) AC_SUBST(USE_INTEL_JITEVENTS,[1]);;
1576           no)  AC_SUBST(USE_INTEL_JITEVENTS,[0]);;
1577           *) AC_MSG_ERROR([Invalid setting for --with-intel-jitevents. Use "yes" or "no"]);;
1578        esac
1579
1580       case $llvm_cv_os_type in
1581         Linux|Win32|Cygwin|MingW) ;;
1582         *) AC_MSG_ERROR([Intel JIT API support is available on Linux and Windows only.]);;
1583       esac
1584
1585       case "$llvm_cv_target_arch" in
1586         x86|x86_64) ;;
1587         *) AC_MSG_ERROR([Target architecture $llvm_cv_target_arch does not support Intel JIT Events API.]);;
1588       esac
1589     ],
1590     [
1591       AC_SUBST(USE_INTEL_JITEVENTS, [0])
1592     ])
1593 AC_DEFINE_UNQUOTED([LLVM_USE_INTEL_JITEVENTS],$USE_INTEL_JITEVENTS,
1594                    [Define if we have the Intel JIT API runtime support library])
1595
1596 dnl Check for libxml2
1597 dnl Right now we're just checking for the existence, we could also check for a
1598 dnl particular version via --version on xml2-config
1599 AC_CHECK_PROGS(XML2CONFIG, xml2-config)
1600
1601 AC_MSG_CHECKING(for libxml2 includes)
1602 if test "x$XML2CONFIG" = "x"; then
1603  AC_MSG_RESULT(xml2-config not found)
1604 else
1605  LIBXML2_INC=`$XML2CONFIG --cflags`
1606  AC_MSG_RESULT($LIBXML2_INC)
1607  AC_CHECK_LIB(xml2, xmlReadFile,[AC_DEFINE([CLANG_HAVE_LIBXML],1,[Define if we have libxml2])
1608                                 LIBXML2_LIBS="-lxml2"])
1609 fi
1610 AC_SUBST(LIBXML2_LIBS)
1611 AC_SUBST(LIBXML2_INC)
1612
1613 dnl===-----------------------------------------------------------------------===
1614 dnl===
1615 dnl=== SECTION 6: Check for header files
1616 dnl===
1617 dnl===-----------------------------------------------------------------------===
1618
1619 dnl First, use autoconf provided macros for specific headers that we need
1620 dnl We don't check for ancient stuff or things that are guaranteed to be there
1621 dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
1622 dnl Generally we're looking for POSIX headers.
1623 AC_HEADER_DIRENT
1624 AC_HEADER_MMAP_ANONYMOUS
1625 AC_HEADER_STAT
1626 AC_HEADER_SYS_WAIT
1627 AC_HEADER_TIME
1628
1629 AC_LANG_PUSH([C++])
1630 AC_CHECK_HEADERS([cxxabi.h])
1631 AC_LANG_POP([C++])
1632 AC_CHECK_HEADERS([dlfcn.h execinfo.h fcntl.h inttypes.h link.h])
1633 AC_CHECK_HEADERS([malloc.h setjmp.h signal.h stdint.h termios.h unistd.h])
1634 AC_CHECK_HEADERS([utime.h])
1635 AC_CHECK_HEADERS([sys/mman.h sys/param.h sys/resource.h sys/time.h sys/uio.h])
1636 AC_CHECK_HEADERS([sys/ioctl.h malloc/malloc.h mach/mach.h])
1637 AC_CHECK_HEADERS([valgrind/valgrind.h])
1638 AC_CHECK_HEADERS([fenv.h])
1639 AC_CHECK_DECLS([FE_ALL_EXCEPT, FE_INEXACT], [], [], [[#include <fenv.h>]])
1640 if test "$LLVM_ENABLE_THREADS" -eq 1 && test "$ENABLE_PTHREADS" -eq 1 ; then
1641   AC_CHECK_HEADERS(pthread.h,
1642                    AC_SUBST(HAVE_PTHREAD, 1),
1643                    AC_SUBST(HAVE_PTHREAD, 0))
1644 else
1645   AC_SUBST(HAVE_PTHREAD, 0)
1646 fi
1647 if test "$LLVM_ENABLE_ZLIB" -eq 1 ; then
1648   AC_CHECK_HEADERS(zlib.h,
1649                    AC_SUBST(HAVE_LIBZ, 1),
1650                    AC_SUBST(HAVE_LIBZ, 0))
1651 else
1652   AC_SUBST(HAVE_LIBZ, 0)
1653 fi
1654
1655 dnl Try to find ffi.h.
1656 if test "$llvm_cv_enable_libffi" = "yes" ; then
1657   AC_CHECK_HEADERS([ffi.h ffi/ffi.h])
1658 fi
1659
1660 dnl Try to find Darwin specific crash reporting libraries.
1661 AC_CHECK_HEADERS([CrashReporterClient.h])
1662
1663 dnl Try to find Darwin specific crash reporting global.
1664 AC_MSG_CHECKING([__crashreporter_info__])
1665 AC_LINK_IFELSE(
1666 [
1667   AC_LANG_SOURCE([[
1668     extern const char *__crashreporter_info__;
1669     int main() {
1670       __crashreporter_info__ = "test";
1671       return 0;
1672     }
1673   ]])
1674 ],
1675 [
1676   AC_MSG_RESULT([yes])
1677   AC_DEFINE([HAVE_CRASHREPORTER_INFO], [1], [can use __crashreporter_info__])
1678 ],
1679 [
1680   AC_MSG_RESULT([no])
1681   AC_DEFINE([HAVE_CRASHREPORTER_INFO], [0], [can use __crashreporter_info__])
1682 ])
1683
1684 dnl===-----------------------------------------------------------------------===
1685 dnl===
1686 dnl=== SECTION 7: Check for types and structures
1687 dnl===
1688 dnl===-----------------------------------------------------------------------===
1689
1690 AC_HUGE_VAL_CHECK
1691 AC_TYPE_PID_T
1692 AC_TYPE_SIZE_T
1693 AC_DEFINE_UNQUOTED([RETSIGTYPE],[void],[Define as the return type of signal handlers (`int' or `void').])
1694 AC_STRUCT_TM
1695 AC_CHECK_TYPES([int64_t],,AC_MSG_ERROR([Type int64_t required but not found]))
1696 AC_CHECK_TYPES([uint64_t],,
1697          AC_CHECK_TYPES([u_int64_t],,
1698          AC_MSG_ERROR([Type uint64_t or u_int64_t required but not found])))
1699
1700 dnl===-----------------------------------------------------------------------===
1701 dnl===
1702 dnl=== SECTION 8: Check for specific functions needed
1703 dnl===
1704 dnl===-----------------------------------------------------------------------===
1705
1706 AC_CHECK_FUNCS([backtrace ceilf floorf roundf rintf nearbyintf getcwd ])
1707 AC_CHECK_FUNCS([powf fmodf strtof round ])
1708 AC_CHECK_FUNCS([log log2 log10 exp exp2])
1709 AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ])
1710 AC_CHECK_FUNCS([isatty mkdtemp mkstemp ])
1711 AC_CHECK_FUNCS([mktemp posix_spawn pread realpath sbrk setrlimit ])
1712 AC_CHECK_FUNCS([strerror strerror_r setenv arc4random ])
1713 AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
1714 AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp writev])
1715 AC_CHECK_FUNCS([futimes futimens])
1716 AC_C_PRINTF_A
1717 AC_FUNC_RAND48
1718
1719 dnl Check the declaration "Secure API" on Windows environments.
1720 AC_CHECK_DECLS([strerror_s])
1721
1722 dnl Check symbols in libgcc.a for JIT on Mingw.
1723 if test "$llvm_cv_os_type" = "MingW" ; then
1724   AC_CHECK_LIB(gcc,_alloca,AC_DEFINE([HAVE__ALLOCA],[1],[Have host's _alloca]))
1725   AC_CHECK_LIB(gcc,__alloca,AC_DEFINE([HAVE___ALLOCA],[1],[Have host's __alloca]))
1726   AC_CHECK_LIB(gcc,__chkstk,AC_DEFINE([HAVE___CHKSTK],[1],[Have host's __chkstk]))
1727   AC_CHECK_LIB(gcc,___chkstk,AC_DEFINE([HAVE____CHKSTK],[1],[Have host's ___chkstk]))
1728
1729   AC_CHECK_LIB(gcc,__ashldi3,AC_DEFINE([HAVE___ASHLDI3],[1],[Have host's __ashldi3]))
1730   AC_CHECK_LIB(gcc,__ashrdi3,AC_DEFINE([HAVE___ASHRDI3],[1],[Have host's __ashrdi3]))
1731   AC_CHECK_LIB(gcc,__divdi3,AC_DEFINE([HAVE___DIVDI3],[1],[Have host's __divdi3]))
1732   AC_CHECK_LIB(gcc,__fixdfdi,AC_DEFINE([HAVE___FIXDFDI],[1],[Have host's __fixdfdi]))
1733   AC_CHECK_LIB(gcc,__fixsfdi,AC_DEFINE([HAVE___FIXSFDI],[1],[Have host's __fixsfdi]))
1734   AC_CHECK_LIB(gcc,__floatdidf,AC_DEFINE([HAVE___FLOATDIDF],[1],[Have host's __floatdidf]))
1735   AC_CHECK_LIB(gcc,__lshrdi3,AC_DEFINE([HAVE___LSHRDI3],[1],[Have host's __lshrdi3]))
1736   AC_CHECK_LIB(gcc,__moddi3,AC_DEFINE([HAVE___MODDI3],[1],[Have host's __moddi3]))
1737   AC_CHECK_LIB(gcc,__udivdi3,AC_DEFINE([HAVE___UDIVDI3],[1],[Have host's __udivdi3]))
1738   AC_CHECK_LIB(gcc,__umoddi3,AC_DEFINE([HAVE___UMODDI3],[1],[Have host's __umoddi3]))
1739
1740   AC_CHECK_LIB(gcc,__main,AC_DEFINE([HAVE___MAIN],[1],[Have host's __main]))
1741   AC_CHECK_LIB(gcc,__cmpdi2,AC_DEFINE([HAVE___CMPDI2],[1],[Have host's __cmpdi2]))
1742 fi
1743
1744 dnl Check Win32 API EnumerateLoadedModules.
1745 if test "$llvm_cv_os_type" = "MingW" ; then
1746   AC_MSG_CHECKING([whether EnumerateLoadedModules() accepts new decl])
1747   AC_COMPILE_IFELSE(
1748 [
1749   AC_LANG_SOURCE([[
1750     #include <windows.h>
1751     #include <imagehlp.h>
1752     extern void foo(PENUMLOADED_MODULES_CALLBACK);
1753     extern void foo(BOOL(CALLBACK*)(PCSTR,ULONG_PTR,ULONG,PVOID));
1754   ]])
1755 ],
1756 [
1757   AC_MSG_RESULT([yes])
1758   llvm_cv_win32_elmcb_pcstr="PCSTR"
1759 ],
1760 [
1761   AC_MSG_RESULT([no])
1762   llvm_cv_win32_elmcb_pcstr="PSTR"
1763 ])
1764   AC_DEFINE_UNQUOTED([WIN32_ELMCB_PCSTR],$llvm_cv_win32_elmcb_pcstr,[Type of 1st arg on ELM Callback])
1765 fi
1766
1767 dnl Check for variations in the Standard C++ library and STL. These macros are
1768 dnl provided by LLVM in the autoconf/m4 directory.
1769 AC_FUNC_ISNAN
1770 AC_FUNC_ISINF
1771
1772 dnl Check for mmap support.We also need to know if /dev/zero is required to
1773 dnl be opened for allocating RWX memory.
1774 dnl Make sure we aren't attempting to configure for an unknown system
1775 if test "$llvm_cv_platform_type" = "Unix" ; then
1776   AC_FUNC_MMAP
1777   AC_FUNC_MMAP_FILE
1778   AC_NEED_DEV_ZERO_FOR_MMAP
1779
1780   if test "$ac_cv_func_mmap_fixed_mapped" = "no"
1781   then
1782     AC_MSG_WARN([mmap() of a fixed address required but not supported])
1783   fi
1784   if test "$ac_cv_func_mmap_file" = "no"
1785   then
1786     AC_MSG_WARN([mmap() of files required but not found])
1787   fi
1788 fi
1789
1790 dnl atomic builtins are required for threading support.
1791 AC_MSG_CHECKING(for GCC atomic builtins)
1792 dnl Since we'll be using these atomic builtins in C++ files we should test
1793 dnl the C++ compiler.
1794 AC_LANG_PUSH([C++])
1795 AC_LINK_IFELSE(
1796 [
1797   AC_LANG_SOURCE([[
1798     int main() {
1799       volatile unsigned long val = 1;
1800       __sync_synchronize();
1801       __sync_val_compare_and_swap(&val, 1, 0);
1802       __sync_add_and_fetch(&val, 1);
1803       __sync_sub_and_fetch(&val, 1);
1804       return 0;
1805     }
1806   ]])
1807 ],
1808 [
1809   AC_MSG_RESULT([yes])
1810   AC_DEFINE([LLVM_HAS_ATOMICS], [1], [Has gcc/MSVC atomic intrinsics])
1811 ],
1812 [
1813   AC_MSG_RESULT([no])
1814   AC_DEFINE([LLVM_HAS_ATOMICS], [0], [Has gcc/MSVC atomic intrinsics])
1815   AC_MSG_WARN([LLVM will be built thread-unsafe because atomic builtins are missing])
1816 ])
1817 AC_LANG_POP([C++])
1818
1819 dnl===-----------------------------------------------------------------------===
1820 dnl===
1821 dnl=== SECTION 9: Additional checks, variables, etc.
1822 dnl===
1823 dnl===-----------------------------------------------------------------------===
1824
1825 dnl Handle 32-bit linux systems running a 64-bit kernel.
1826 dnl This has to come after section 4 because it invokes the compiler.
1827 if test "$llvm_cv_os_type" = "Linux" -a "$llvm_cv_target_arch" = "x86_64" ; then
1828   AC_IS_LINUX_MIXED
1829   if test "$llvm_cv_linux_mixed" = "yes"; then
1830     llvm_cv_target_arch="x86"
1831     ARCH="x86"
1832   fi
1833 fi
1834
1835 dnl Check whether __dso_handle is present
1836 AC_CHECK_FUNCS([__dso_handle])
1837
1838 dnl Propagate the shared library extension that the libltdl checks did to
1839 dnl the Makefiles so we can use it there too
1840 AC_SUBST(SHLIBEXT,$libltdl_cv_shlibext)
1841
1842 dnl Propagate the run-time library path variable that the libltdl
1843 dnl checks found to the Makefiles so we can use it there too
1844 AC_SUBST(SHLIBPATH_VAR,$libltdl_cv_shlibpath_var)
1845
1846 dnl Translate the various configuration directories and other basic
1847 dnl information into substitutions that will end up in Makefile.config.in
1848 dnl that these configured values can be used by the makefiles
1849 if test "${prefix}" = "NONE" ; then
1850   prefix="/usr/local"
1851 fi
1852 eval LLVM_PREFIX="${prefix}";
1853 eval LLVM_BINDIR="${prefix}/bin";
1854 eval LLVM_DATADIR="${prefix}/share/llvm";
1855 eval LLVM_DOCSDIR="${prefix}/share/doc/llvm";
1856 eval LLVM_ETCDIR="${prefix}/etc/llvm";
1857 eval LLVM_INCLUDEDIR="${prefix}/include";
1858 eval LLVM_INFODIR="${prefix}/info";
1859 eval LLVM_MANDIR="${prefix}/man";
1860 LLVM_CONFIGTIME=`date`
1861 AC_SUBST(LLVM_PREFIX)
1862 AC_SUBST(LLVM_BINDIR)
1863 AC_SUBST(LLVM_DATADIR)
1864 AC_SUBST(LLVM_DOCSDIR)
1865 AC_SUBST(LLVM_ETCDIR)
1866 AC_SUBST(LLVM_INCLUDEDIR)
1867 AC_SUBST(LLVM_INFODIR)
1868 AC_SUBST(LLVM_MANDIR)
1869 AC_SUBST(LLVM_CONFIGTIME)
1870
1871 dnl Disable embedding timestamps in the build directory, with ENABLE_TIMESTAMPS.
1872 if test "${ENABLE_TIMESTAMPS}" = "0"; then
1873   LLVM_CONFIGTIME="(timestamp not enabled)"
1874 fi
1875
1876 dnl Place the various directories into the config.h file as #defines so that we
1877 dnl can know about the installation paths within LLVM.
1878 AC_DEFINE_UNQUOTED(LLVM_PREFIX,"$LLVM_PREFIX",
1879                    [Installation prefix directory])
1880 AC_DEFINE_UNQUOTED(LLVM_BINDIR, "$LLVM_BINDIR",
1881                    [Installation directory for binary executables])
1882 AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DATADIR",
1883                    [Installation directory for data files])
1884 AC_DEFINE_UNQUOTED(LLVM_DOCSDIR, "$LLVM_DOCSDIR",
1885                    [Installation directory for documentation])
1886 AC_DEFINE_UNQUOTED(LLVM_ETCDIR, "$LLVM_ETCDIR",
1887                    [Installation directory for config files])
1888 AC_DEFINE_UNQUOTED(LLVM_INCLUDEDIR, "$LLVM_INCLUDEDIR",
1889                    [Installation directory for include files])
1890 AC_DEFINE_UNQUOTED(LLVM_INFODIR, "$LLVM_INFODIR",
1891                    [Installation directory for .info files])
1892 AC_DEFINE_UNQUOTED(LLVM_MANDIR, "$LLVM_MANDIR",
1893                    [Installation directory for man pages])
1894 AC_DEFINE_UNQUOTED(LLVM_CONFIGTIME, "$LLVM_CONFIGTIME",
1895                    [Time at which LLVM was configured])
1896 AC_DEFINE_UNQUOTED(LLVM_HOST_TRIPLE, "$host",
1897                    [Host triple LLVM will be executed on])
1898 AC_DEFINE_UNQUOTED(LLVM_DEFAULT_TARGET_TRIPLE, "$target",
1899                    [Target triple LLVM will generate code for by default])
1900
1901 dnl Determine which bindings to build.
1902 if test "$BINDINGS_TO_BUILD" = auto ; then
1903   BINDINGS_TO_BUILD=""
1904   if test "x$OCAMLC" != x -a "x$OCAMLDEP" != x ; then
1905     BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD"
1906   fi
1907 fi
1908 AC_SUBST(BINDINGS_TO_BUILD,$BINDINGS_TO_BUILD)
1909
1910 dnl This isn't really configurey, but it avoids having to repeat the list in
1911 dnl other files.
1912 AC_SUBST(ALL_BINDINGS,ocaml)
1913
1914 dnl Do any work necessary to ensure that bindings have what they need.
1915 binding_prereqs_failed=0
1916 for a_binding in $BINDINGS_TO_BUILD ; do
1917   case "$a_binding" in
1918   ocaml)
1919     if test "x$OCAMLC" = x ; then
1920       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlc not found. Try configure OCAMLC=/path/to/ocamlc])
1921       binding_prereqs_failed=1
1922     fi
1923     if test "x$OCAMLDEP" = x ; then
1924       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamldep not found. Try configure OCAMLDEP=/path/to/ocamldep])
1925       binding_prereqs_failed=1
1926     fi
1927     if test "x$OCAMLOPT" = x ; then
1928       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlopt not found. Try configure OCAMLOPT=/path/to/ocamlopt])
1929       dnl ocamlopt is optional!
1930     fi
1931     if test "x$with_ocaml_libdir" != xauto ; then
1932       AC_SUBST(OCAML_LIBDIR,$with_ocaml_libdir)
1933     else
1934       ocaml_stdlib="`"$OCAMLC" -where`"
1935       if test "$LLVM_PREFIX" '<' "$ocaml_stdlib" -a "$ocaml_stdlib" '<' "$LLVM_PREFIX~"
1936       then
1937         # ocaml stdlib is beneath our prefix; use stdlib
1938         AC_SUBST(OCAML_LIBDIR,$ocaml_stdlib)
1939       else
1940         # ocaml stdlib is outside our prefix; use libdir/ocaml
1941         AC_SUBST(OCAML_LIBDIR,${prefix}/lib/ocaml)
1942       fi
1943     fi
1944     ;;
1945   esac
1946 done
1947 if test "$binding_prereqs_failed" = 1 ; then
1948   AC_MSG_ERROR([Prequisites for bindings not satisfied. Fix them or use configure --disable-bindings.])
1949 fi
1950
1951 dnl Determine whether the compiler supports -fvisibility-inlines-hidden.
1952 AC_CXX_USE_VISIBILITY_INLINES_HIDDEN
1953
1954 dnl Determine linker rpath flag
1955 if test "$llvm_cv_link_use_r" = "yes" ; then
1956   RPATH="-Wl,-R"
1957 else
1958   RPATH="-Wl,-rpath"
1959 fi
1960 AC_SUBST(RPATH)
1961
1962 dnl Determine linker rdynamic flag
1963 if test "$llvm_cv_link_use_export_dynamic" = "yes" ; then
1964   RDYNAMIC="-rdynamic"
1965 else
1966   RDYNAMIC=""
1967 fi
1968 AC_SUBST(RDYNAMIC)
1969
1970 dnl===-----------------------------------------------------------------------===
1971 dnl===
1972 dnl=== SECTION 10: Specify the output files and generate it
1973 dnl===
1974 dnl===-----------------------------------------------------------------------===
1975
1976 dnl Configure header files
1977 dnl WARNING: dnl If you add or remove any of the following config headers, then
1978 dnl you MUST also update Makefile so that the variable FilesToConfig
1979 dnl contains the same list of files as AC_CONFIG_HEADERS below. This ensures the
1980 dnl files can be updated automatically when their *.in sources change.
1981 AC_CONFIG_HEADERS([include/llvm/Config/config.h include/llvm/Config/llvm-config.h])
1982 AH_TOP([#ifndef CONFIG_H
1983 #define CONFIG_H])
1984 AH_BOTTOM([#endif])
1985
1986 AC_CONFIG_FILES([include/llvm/Config/Targets.def])
1987 AC_CONFIG_FILES([include/llvm/Config/AsmPrinters.def])
1988 AC_CONFIG_FILES([include/llvm/Config/AsmParsers.def])
1989 AC_CONFIG_FILES([include/llvm/Config/Disassemblers.def])
1990 AC_CONFIG_HEADERS([include/llvm/Support/DataTypes.h])
1991
1992 dnl Configure the makefile's configuration data
1993 AC_CONFIG_FILES([Makefile.config])
1994
1995 dnl Configure the RPM spec file for LLVM
1996 AC_CONFIG_FILES([llvm.spec])
1997
1998 dnl Configure doxygen's configuration file
1999 AC_CONFIG_FILES([docs/doxygen.cfg])
2000
2001 dnl Configure clang, if present
2002 if test "${clang_src_root}" = ""; then
2003   clang_src_root="$srcdir/tools/clang"
2004 fi
2005 if test -f ${clang_src_root}/README.txt; then
2006   dnl Use variables to stay under 80 columns.
2007   configh="include/clang/Config/config.h"
2008   doxy="docs/doxygen.cfg"
2009   AC_CONFIG_HEADERS([tools/clang/${configh}:${clang_src_root}/${configh}.in])
2010   AC_CONFIG_FILES([tools/clang/${doxy}:${clang_src_root}/${doxy}.in])
2011 fi
2012
2013 dnl OCaml findlib META file
2014 AC_CONFIG_FILES([bindings/ocaml/llvm/META.llvm])
2015
2016 dnl Add --program-prefix value to Makefile.rules. Already an ARG variable.
2017 test "x$program_prefix" = "xNONE" && program_prefix=""
2018 AC_SUBST([program_prefix])
2019
2020
2021 dnl Do special configuration of Makefiles
2022 AC_CONFIG_COMMANDS([setup],,[llvm_src="${srcdir}"])
2023 AC_CONFIG_MAKEFILE(Makefile)
2024 AC_CONFIG_MAKEFILE(Makefile.common)
2025 AC_CONFIG_MAKEFILE(examples/Makefile)
2026 AC_CONFIG_MAKEFILE(lib/Makefile)
2027 AC_CONFIG_MAKEFILE(test/Makefile)
2028 AC_CONFIG_MAKEFILE(test/Makefile.tests)
2029 AC_CONFIG_MAKEFILE(unittests/Makefile)
2030 AC_CONFIG_MAKEFILE(tools/Makefile)
2031 AC_CONFIG_MAKEFILE(utils/Makefile)
2032 AC_CONFIG_MAKEFILE(projects/Makefile)
2033 AC_CONFIG_MAKEFILE(bindings/Makefile)
2034 AC_CONFIG_MAKEFILE(bindings/ocaml/Makefile.ocaml)
2035
2036 dnl Finally, crank out the output
2037 AC_OUTPUT