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