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