Add methods to StringMap to erase entries by key.
[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.4svn]],[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-2008 University of Illinois at Urbana-Champaign."])
39 AC_COPYRIGHT([Copyright (c) 2003-2008 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)    AC_CONFIG_SUBDIRS([projects/llvm-test]) ;;
74       llvm-reopt)   AC_CONFIG_SUBDIRS([projects/llvm-reopt]);;
75       llvm-gcc)     AC_CONFIG_SUBDIRS([projects/llvm-gcc])  ;;
76       llvm-java)    AC_CONFIG_SUBDIRS([projects/llvm-java]) ;;
77       llvm-tv)      AC_CONFIG_SUBDIRS([projects/llvm-tv])   ;;
78       llvm-poolalloc) AC_CONFIG_SUBDIRS([projects/llvm-poolalloc]) ;;
79       poolalloc)    AC_CONFIG_SUBDIRS([projects/poolalloc]) ;;
80       llvm-kernel)  AC_CONFIG_SUBDIRS([projects/llvm-kernel]) ;;
81       *)
82         AC_MSG_WARN([Unknown project (${i}) won't be configured automatically])
83         ;;
84     esac
85   fi
86 done
87
88 dnl===-----------------------------------------------------------------------===
89 dnl===
90 dnl=== SECTION 2: Architecture, target, and host checks
91 dnl===
92 dnl===-----------------------------------------------------------------------===
93
94 dnl Check the target for which we're compiling and the host that will do the
95 dnl compilations. This will tell us which LLVM compiler will be used for
96 dnl compiling SSA into object code. This needs to be done early because
97 dnl following tests depend on it.
98 AC_CANONICAL_TARGET
99
100 dnl Determine the platform type and cache its value. This helps us configure
101 dnl the System library to the correct build platform.
102 AC_CACHE_CHECK([type of operating system we're going to host on],
103                [llvm_cv_os_type],
104 [case $host in
105   *-*-aix*)
106     llvm_cv_link_all_option="-Wl,--whole-archive"
107     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
108     llvm_cv_os_type="AIX"
109     llvm_cv_platform_type="Unix" ;;
110   *-*-irix*)
111     llvm_cv_link_all_option="-Wl,--whole-archive"
112     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
113     llvm_cv_os_type="IRIX"
114     llvm_cv_platform_type="Unix" ;;
115   *-*-cygwin*)
116     llvm_cv_link_all_option="-Wl,--whole-archive"
117     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
118     llvm_cv_os_type="Cygwin"
119     llvm_cv_platform_type="Unix" ;;
120   *-*-darwin*)
121     llvm_cv_link_all_option="-Wl,-all_load"
122     llvm_cv_no_link_all_option="-Wl,-noall_load"
123     llvm_cv_os_type="Darwin"
124     llvm_cv_platform_type="Unix" ;;
125   *-*-freebsd*)
126     llvm_cv_link_all_option="-Wl,--whole-archive"
127     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
128     llvm_cv_os_type="FreeBSD"
129     llvm_cv_platform_type="Unix" ;;
130   *-*-openbsd*)
131     llvm_cv_link_all_option="-Wl,--whole-archive"
132     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
133     llvm_cv_os_type="OpenBSD"
134     llvm_cv_platform_type="Unix" ;;
135   *-*-netbsd*)
136     llvm_cv_link_all_option="-Wl,--whole-archive"
137     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
138     llvm_cv_os_type="NetBSD"
139     llvm_cv_platform_type="Unix" ;;
140   *-*-hpux*)
141     llvm_cv_link_all_option="-Wl,--whole-archive"
142     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
143     llvm_cv_os_type="HP-UX"
144     llvm_cv_platform_type="Unix" ;;
145   *-*-interix*)
146     llvm_cv_link_all_option="-Wl,--whole-archive"
147     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
148     llvm_cv_os_type="Interix"
149     llvm_cv_platform_type="Unix" ;;
150   *-*-linux*)
151     llvm_cv_link_all_option="-Wl,--whole-archive"
152     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
153     llvm_cv_os_type="Linux"
154     llvm_cv_platform_type="Unix" ;;
155   *-*-solaris*)
156     llvm_cv_link_all_option="-Wl,-z,allextract"
157     llvm_cv_no_link_all_option="-Wl,-z,defaultextract"
158     llvm_cv_os_type="SunOS"
159     llvm_cv_platform_type="Unix" ;;
160   *-*-win32*)
161     llvm_cv_link_all_option="-Wl,--whole-archive"
162     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
163     llvm_cv_os_type="Win32"
164     llvm_cv_platform_type="Win32" ;;
165   *-*-mingw*)
166     llvm_cv_link_all_option="-Wl,--whole-archive"
167     llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
168     llvm_cv_os_type="MingW"
169     llvm_cv_platform_type="Win32" ;;
170   *)
171     llvm_cv_link_all_option=""
172     llvm_cv_no_link_all_option=""
173     llvm_cv_os_type="Unknown"
174     llvm_cv_platform_type="Unknown" ;;
175 esac])
176
177 dnl Make sure we aren't attempting to configure for an unknown system
178 if test "$llvm_cv_os_type" = "Unknown" ; then
179   AC_MSG_ERROR([Operating system is unknown, configure can't continue])
180 fi
181
182 dnl Set the "OS" Makefile variable based on the platform type so the
183 dnl makefile can configure itself to specific build hosts
184 AC_SUBST(OS,$llvm_cv_os_type)
185
186 dnl Set the LINKALL and NOLINKALL Makefile variables based on the platform
187 AC_SUBST(LINKALL,$llvm_cv_link_all_option)
188 AC_SUBST(NOLINKALL,$llvm_cv_no_link_all_option)
189
190 dnl Set the "LLVM_ON_*" variables based on llvm_cvs_platform_type
191 dnl This is used by lib/System to determine the basic kind of implementation
192 dnl to use.
193 case $llvm_cv_platform_type in
194   Unix)
195     AC_DEFINE([LLVM_ON_UNIX],[1],[Define if this is Unixish platform])
196     AC_SUBST(LLVM_ON_UNIX,[1])
197     AC_SUBST(LLVM_ON_WIN32,[0])
198     ;;
199   Win32)
200     AC_DEFINE([LLVM_ON_WIN32],[1],[Define if this is Win32ish platform])
201     AC_SUBST(LLVM_ON_UNIX,[0])
202     AC_SUBST(LLVM_ON_WIN32,[1])
203     ;;
204 esac
205
206 dnl Determine what our target architecture is and configure accordingly.
207 dnl This will allow Makefiles to make a distinction between the hardware and
208 dnl the OS.
209 AC_CACHE_CHECK([target architecture],[llvm_cv_target_arch],
210 [case $target in
211   i?86-*)                 llvm_cv_target_arch="x86" ;;
212   amd64-* | x86_64-*)     llvm_cv_target_arch="x86_64" ;;
213   sparc*-*)               llvm_cv_target_arch="Sparc" ;;
214   powerpc*-*)             llvm_cv_target_arch="PowerPC" ;;
215   alpha*-*)               llvm_cv_target_arch="Alpha" ;;
216   ia64-*)                 llvm_cv_target_arch="IA64" ;;
217   arm-*)                  llvm_cv_target_arch="ARM" ;;
218   mips-*)                 llvm_cv_target_arch="Mips" ;;
219   pic16-*)                llvm_cv_target_arch="PIC16" ;;
220   *)                      llvm_cv_target_arch="Unknown" ;;
221 esac])
222
223 if test "$llvm_cv_target_arch" = "Unknown" ; then
224   AC_MSG_WARN([Configuring LLVM for an unknown target archicture])
225 fi
226
227 dnl Define a substitution, ARCH, for the target architecture
228 AC_SUBST(ARCH,$llvm_cv_target_arch)
229
230 dnl Check for the endianness of the target
231 AC_C_BIGENDIAN(AC_SUBST([ENDIAN],[big]),AC_SUBST([ENDIAN],[little]))
232
233 dnl Check for build platform executable suffix if we're crosscompiling
234 if test "$cross_compiling" = yes; then
235   AC_SUBST(LLVM_CROSS_COMPILING, [1])
236   AC_BUILD_EXEEXT
237 else
238   AC_SUBST(LLVM_CROSS_COMPILING, [0])
239 fi
240
241 dnl Check to see if there's a "CVS" (or .svn) directory indicating that this
242 dnl build is being done from a checkout. This sets up several defaults for the
243 dnl command line switches. When we build with a CVS directory, we get a
244 dnl debug with assertions turned on. Without, we assume a source release and we
245 dnl get an optimized build without assertions. See --enable-optimized and
246 dnl --enable-assertions below
247 if test -d "CVS" -o -d "${srcdir}/CVS" -o -d ".svn" -o -d "${srcdir}/.svn"; then
248   cvsbuild="yes"
249   optimize="no"
250   AC_SUBST(CVSBUILD,[[CVSBUILD=1]])
251 else
252   cvsbuild="no"
253   optimize="yes"
254 fi
255
256 dnl===-----------------------------------------------------------------------===
257 dnl===
258 dnl=== SECTION 3: Command line arguments for the configure script.
259 dnl===
260 dnl===-----------------------------------------------------------------------===
261
262 dnl --enable-optimized : check whether they want to do an optimized build:
263 AC_ARG_ENABLE(optimized, AS_HELP_STRING(
264  [--enable-optimized,Compile with optimizations enabled (default is NO)]),,enableval=$optimize)
265 if test ${enableval} = "no" ; then
266   AC_SUBST(ENABLE_OPTIMIZED,[[]])
267 else
268   AC_SUBST(ENABLE_OPTIMIZED,[[ENABLE_OPTIMIZED=1]])
269 fi
270
271 dnl --enable-assertions : check whether they want to turn on assertions or not:
272 AC_ARG_ENABLE(assertions,AS_HELP_STRING(
273   [--enable-assertions,Compile with assertion checks enabled (default is YES)]),, enableval="yes")
274 if test ${enableval} = "yes" ; then
275   AC_SUBST(DISABLE_ASSERTIONS,[[]])
276 else
277   AC_SUBST(DISABLE_ASSERTIONS,[[DISABLE_ASSERTIONS=1]])
278 fi
279
280 dnl --enable-expensive-checks : check whether they want to turn on expensive debug checks:
281 AC_ARG_ENABLE(expensive-checks,AS_HELP_STRING(
282   [--enable-expensive-checks,Compile with expensive debug checks enabled (default is NO)]),, enableval="no")
283 if test ${enableval} = "yes" ; then
284   AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[ENABLE_EXPENSIVE_CHECKS=1]])
285   AC_SUBST(EXPENSIVE_CHECKS,[[yes]])
286 else
287   AC_SUBST(ENABLE_EXPENSIVE_CHECKS,[[]])
288   AC_SUBST(EXPENSIVE_CHECKS,[[no]])
289 fi
290
291 dnl --enable-debug-runtime : should runtime libraries have debug symbols?
292 AC_ARG_ENABLE(debug-runtime,
293    AS_HELP_STRING([--enable-debug-runtime,Build runtime libs with debug symbols (default is NO)]),,enableval=no)
294 if test ${enableval} = "no" ; then
295   AC_SUBST(DEBUG_RUNTIME,[[]])
296 else
297   AC_SUBST(DEBUG_RUNTIME,[[DEBUG_RUNTIME=1]])
298 fi
299
300 dnl --enable-jit: check whether they want to enable the jit
301 AC_ARG_ENABLE(jit,
302   AS_HELP_STRING(--enable-jit,
303                  [Enable Just In Time Compiling (default is YES)]),,
304   enableval=default)
305 if test ${enableval} = "no"
306 then
307   AC_SUBST(JIT,[[]])
308 else
309   case "$llvm_cv_target_arch" in
310     x86)     AC_SUBST(TARGET_HAS_JIT,1) ;;
311     Sparc)   AC_SUBST(TARGET_HAS_JIT,0) ;;
312     PowerPC) AC_SUBST(TARGET_HAS_JIT,1) ;;
313     x86_64)  AC_SUBST(TARGET_HAS_JIT,1) ;;
314     Alpha)   AC_SUBST(TARGET_HAS_JIT,1) ;;
315     IA64)    AC_SUBST(TARGET_HAS_JIT,0) ;;
316     ARM)     AC_SUBST(TARGET_HAS_JIT,0) ;;
317     Mips)    AC_SUBST(TARGET_HAS_JIT,0) ;;
318     PIC16)   AC_SUBST(TARGET_HAS_JIT,0) ;;
319     *)       AC_SUBST(TARGET_HAS_JIT,0) ;;
320   esac
321 fi
322
323 dnl Allow enablement of doxygen generated documentation
324 AC_ARG_ENABLE(doxygen,
325               AS_HELP_STRING([--enable-doxygen],
326                              [Build doxygen documentation (default is NO)]),,
327                              enableval=default)
328 case "$enableval" in
329   yes) AC_SUBST(ENABLE_DOXYGEN,[1]) ;;
330   no)  AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
331   default) AC_SUBST(ENABLE_DOXYGEN,[0]) ;;
332   *) AC_MSG_ERROR([Invalid setting for --enable-doxygen. Use "yes" or "no"]) ;;
333 esac
334
335 dnl Allow disablement of threads
336 AC_ARG_ENABLE(threads,
337               AS_HELP_STRING([--enable-threads],
338                              [Use threads if available (default is YES)]),,
339                              enableval=default)
340 case "$enableval" in
341   yes) AC_SUBST(ENABLE_THREADS,[1]) ;;
342   no)  AC_SUBST(ENABLE_THREADS,[0]) ;;
343   default) AC_SUBST(ENABLE_THREADS,[1]) ;;
344   *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
345 esac
346 AC_DEFINE_UNQUOTED([ENABLE_THREADS],$ENABLE_THREADS,[Define if threads enabled])
347
348 dnl Allow building with position independent code
349 AC_ARG_ENABLE(pic,
350   AS_HELP_STRING([--enable-pic],
351                  [Build LLVM with Position Independent Code (default is NO)]),,
352                  enableval=default)
353 case "$enableval" in
354   yes) AC_SUBST(ENABLE_PIC,[1]) ;;
355   no)  AC_SUBST(ENABLE_PIC,[0]) ;;
356   default) AC_SUBST(ENABLE_PIC,[0]) ;;
357   *) AC_MSG_ERROR([Invalid setting for --enable-pic. Use "yes" or "no"]) ;;
358 esac
359 AC_DEFINE_UNQUOTED([ENABLE_PIC],$ENABLE_PIC,
360                    [Define if position independent code is enabled])
361
362 dnl Allow specific targets to be specified for building (or not)
363 TARGETS_TO_BUILD=""
364 AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
365     [Build specific host targets: all,host-only,{target-name} (default=all)]),,
366     enableval=all)
367 case "$enableval" in
368   all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha IA64 ARM Mips CellSPU PIC16 CBackend MSIL CppBackend" ;;
369   host-only)
370     case "$llvm_cv_target_arch" in
371       x86)     TARGETS_TO_BUILD="X86" ;;
372       x86_64)  TARGETS_TO_BUILD="X86" ;;
373       Sparc)   TARGETS_TO_BUILD="Sparc" ;;
374       PowerPC) TARGETS_TO_BUILD="PowerPC" ;;
375       Alpha)   TARGETS_TO_BUILD="Alpha" ;;
376       IA64)    TARGETS_TO_BUILD="IA64" ;;
377       ARM)     TARGETS_TO_BUILD="ARM" ;;
378       Mips)    TARGETS_TO_BUILD="Mips" ;;
379       CellSPU|SPU) TARGETS_TO_BUILD="CellSPU" ;;
380       PIC16)   TARGETS_TO_BUILD="PIC16" ;;
381       *)       AC_MSG_ERROR([Can not set target to build]) ;;
382     esac
383     ;;
384   *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do
385       case "$a_target" in
386         x86)     TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
387         x86_64)  TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;;
388         sparc)   TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;;
389         powerpc) TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
390         alpha)   TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;;
391         ia64)    TARGETS_TO_BUILD="IA64 $TARGETS_TO_BUILD" ;;
392         arm)     TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
393         mips)    TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;;
394         spu)     TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;;
395         pic16)   TARGETS_TO_BUILD="PIC16 $TARGETS_TO_BUILD" ;;
396         cbe)     TARGETS_TO_BUILD="CBackend $TARGETS_TO_BUILD" ;;
397         msil)    TARGETS_TO_BUILD="MSIL $TARGETS_TO_BUILD" ;;
398         cpp)     TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;;
399         *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
400       esac
401   done
402   ;;
403 esac
404 AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD)
405
406 dnl Prevent the CBackend from using printf("%a") for floating point so older
407 dnl C compilers that cannot deal with the 0x0p+0 hex floating point format
408 dnl can still compile the CBE's output
409 AC_ARG_ENABLE([cbe-printf-a],AS_HELP_STRING([--enable-cbe-printf-a],
410   [Enable C Backend output with hex floating point via %a  (default is YES)]),,
411   enableval=default)
412 case "$enableval" in
413   yes) AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
414   no)  AC_SUBST(ENABLE_CBE_PRINTF_A,[0]) ;;
415   default)  AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
416   *) AC_MSG_ERROR([Invalid setting for --enable-cbe-printf-a. Use "yes" or "no"]) ;;
417 esac
418 AC_DEFINE_UNQUOTED([ENABLE_CBE_PRINTF_A],$ENABLE_CBE_PRINTF_A,
419                    [Define if CBE is enabled for printf %a output])
420
421 dnl Allow a specific llvm-gcc/llvm-g++ pair to be used with this LLVM config.
422 AC_ARG_WITH(llvmgccdir,
423   AS_HELP_STRING([--with-llvmgccdir],
424     [Specify location of llvm-gcc install dir (default searches PATH)]),,
425     withval=default)
426 case "$withval" in
427   default) WITH_LLVMGCCDIR=default ;;
428   /* | [[A-Za-z]]:[[\\/]]*)      WITH_LLVMGCCDIR=$withval ;;
429   *) AC_MSG_ERROR([Invalid path for --with-llvmgccdir. Provide full path]) ;;
430 esac
431
432 dnl Allow a specific llvm-gcc compiler to be used with this LLVM config.
433 AC_ARG_WITH(llvmgcc,
434   AS_HELP_STRING([--with-llvmgcc],
435     [Specify location of llvm-gcc driver (default searches PATH)]),
436     LLVMGCC=$with_llvmgcc
437       WITH_LLVMGCCDIR="",)
438
439 dnl Allow a specific llvm-g++ compiler to be used with this LLVM config.
440 AC_ARG_WITH(llvmgxx,
441   AS_HELP_STRING([--with-llvmgxx],
442     [Specify location of llvm-g++ driver (default searches PATH)]),
443     LLVMGXX=$with_llvmgxx
444     WITH_LLVMGCCDIR="",)
445
446 if test -n "$LLVMGCC" && test -z "$LLVMGXX"; then
447    AC_MSG_ERROR([Invalid llvm-g++. Use --with-llvmgxx when --with-llvmgcc is used]);
448 fi
449
450 if test -n "$LLVMGXX" && test -z "$LLVMGCC"; then
451    AC_MSG_ERROR([Invalid llvm-gcc. Use --with-llvmgcc when --with-llvmgxx is used]);
452 fi
453
454 dnl Specify extra build options
455 AC_ARG_WITH(extra-options,
456   AS_HELP_STRING([--with-extra-options],
457                  [Specify addtional options to compile LLVM with]),,
458                  withval=default)
459 case "$withval" in
460   default) EXTRA_OPTIONS= ;;
461   *) EXTRA_OPTIONS=$withval ;;
462 esac
463 AC_SUBST(EXTRA_OPTIONS,$EXTRA_OPTIONS)
464
465 dnl Allow specific bindings to be specified for building (or not)
466 AC_ARG_ENABLE([bindings],AS_HELP_STRING([--enable-bindings],
467     [Build specific language bindings: all,auto,none,{binding-name} (default=auto)]),,
468     enableval=default)
469 BINDINGS_TO_BUILD=""
470 case "$enableval" in
471   yes | default | auto) BINDINGS_TO_BUILD="auto" ;;
472   all ) BINDINGS_TO_BUILD="ocaml" ;;
473   none | no) BINDINGS_TO_BUILD="" ;;
474   *)for a_binding in `echo $enableval|sed -e 's/,/ /g' ` ; do
475       case "$a_binding" in
476         ocaml) BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD" ;;
477         *) AC_MSG_ERROR([Unrecognized binding $a_binding]) ;;
478       esac
479   done
480   ;;
481 esac
482
483 dnl Allow the ocaml libdir to be overridden. This could go in a configure
484 dnl script for bindings/ocaml/configure, except that its auto value depends on
485 dnl OCAMLC, which is found here to support tests.
486 AC_ARG_WITH([ocaml-libdir],
487   [AS_HELP_STRING([--with-ocaml-libdir],
488     [Specify install location for ocaml bindings (default is stdlib)])],
489   [],
490   [withval=auto])
491 case "$withval" in
492   auto) with_ocaml_libdir="$withval" ;;
493   /* | [[A-Za-z]]:[[\\/]]*) with_ocaml_libdir="$withval" ;;
494   *) AC_MSG_ERROR([Invalid path for --with-ocaml-libdir. Provide full path]) ;;
495 esac
496
497 dnl===-----------------------------------------------------------------------===
498 dnl===
499 dnl=== SECTION 4: Check for programs we need and that they are the right version
500 dnl===
501 dnl===-----------------------------------------------------------------------===
502
503 dnl Check for compilation tools
504 AC_PROG_CPP
505 AC_PROG_CC(gcc)
506 AC_PROG_CXX(g++)
507 AC_PROG_FLEX
508 AC_PROG_BISON
509
510 AC_PROG_NM
511 AC_SUBST(NM)
512
513 dnl Check for the tools that the makefiles require
514 AC_CHECK_GNU_MAKE
515 AC_PROG_LN_S
516 AC_PATH_PROG(CMP, [cmp], [cmp])
517 AC_PATH_PROG(CP, [cp], [cp])
518 AC_PATH_PROG(DATE, [date], [date])
519 AC_PATH_PROG(FIND, [find], [find])
520 AC_PATH_PROG(GREP, [grep], [grep])
521 AC_PATH_PROG(MKDIR,[mkdir],[mkdir])
522 AC_PATH_PROG(MV,   [mv],   [mv])
523 AC_PROG_RANLIB
524 AC_PATH_PROG(RM,   [rm],   [rm])
525 AC_PATH_PROG(SED,  [sed],  [sed])
526 AC_PATH_PROG(TAR,  [tar],  [gtar])
527 AC_PATH_PROG(BINPWD,[pwd],  [pwd])
528
529 dnl Looking for misc. graph plotting software
530 AC_PATH_PROG(GRAPHVIZ, [Graphviz], [echo Graphviz])
531 if test "$GRAPHVIZ" != "echo Graphviz" ; then
532   AC_DEFINE([HAVE_GRAPHVIZ],[1],[Define if the Graphviz program is available])
533   dnl If we're targeting for mingw we should emit windows paths, not msys
534   if test "$llvm_cv_os_type" = "MingW" ; then
535     GRAPHVIZ=`echo $GRAPHVIZ | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
536   fi
537   AC_DEFINE_UNQUOTED([LLVM_PATH_GRAPHVIZ],"$GRAPHVIZ${EXEEXT}",
538    [Define to path to Graphviz program if found or 'echo Graphviz' otherwise])
539 fi
540 AC_PATH_PROG(DOT, [dot], [echo dot])
541 if test "$DOT" != "echo dot" ; then
542   AC_DEFINE([HAVE_DOT],[1],[Define if the dot program is available])
543   dnl If we're targeting for mingw we should emit windows paths, not msys
544   if test "$llvm_cv_os_type" = "MingW" ; then
545     DOT=`echo $DOT | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
546   fi
547   AC_DEFINE_UNQUOTED([LLVM_PATH_DOT],"$DOT${EXEEXT}",
548    [Define to path to dot program if found or 'echo dot' otherwise])
549 fi
550 AC_PATH_PROGS(GV, [gv gsview32], [echo gv])
551 if test "$GV" != "echo gv" ; then
552   AC_DEFINE([HAVE_GV],[1],[Define if the gv program is available])
553   dnl If we're targeting for mingw we should emit windows paths, not msys
554   if test "$llvm_cv_os_type" = "MingW" ; then
555     GV=`echo $GV | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
556   fi
557   AC_DEFINE_UNQUOTED([LLVM_PATH_GV],"$GV${EXEEXT}",
558    [Define to path to gv program if found or 'echo gv' otherwise])
559 fi
560 AC_PATH_PROG(DOTTY, [dotty], [echo dotty])
561 if test "$DOTTY" != "echo dotty" ; then
562   AC_DEFINE([HAVE_DOTTY],[1],[Define if the dotty program is available])
563   dnl If we're targeting for mingw we should emit windows paths, not msys
564   if test "$llvm_cv_os_type" = "MingW" ; then
565     DOTTY=`echo $DOTTY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
566   fi
567   AC_DEFINE_UNQUOTED([LLVM_PATH_DOTTY],"$DOTTY${EXEEXT}",
568    [Define to path to dotty program if found or 'echo dotty' otherwise])
569 fi
570
571 dnl Look for a sufficiently recent version of Perl.
572 LLVM_PROG_PERL([5.006])
573 AC_SUBST(PERL)
574 if test x"$PERL" = xnone; then
575    AC_SUBST(HAVE_PERL,0)
576    AC_MSG_ERROR([perl is required but was not found, please install it])
577 else
578    AC_SUBST(HAVE_PERL,1)
579 fi
580
581 dnl Find the install program
582 AC_PROG_INSTALL
583
584 dnl Checks for documentation and testing tools that we can do without. If these
585 dnl are not found then they are set to "true" which always succeeds but does
586 dnl nothing. This just lets the build output show that we could have done
587 dnl something if the tool was available.
588 AC_PATH_PROG(BZIP2, [bzip2])
589 AC_PATH_PROG(DOXYGEN, [doxygen])
590 AC_PATH_PROG(GROFF, [groff])
591 AC_PATH_PROG(GZIP, [gzip])
592 AC_PATH_PROG(POD2HTML, [pod2html])
593 AC_PATH_PROG(POD2MAN, [pod2man])
594 AC_PATH_PROG(RUNTEST, [runtest])
595 DJ_AC_PATH_TCLSH
596 AC_PATH_PROG(ZIP, [zip])
597 AC_PATH_PROGS(OCAMLC, [ocamlc.opt ocamlc])
598 AC_PATH_PROGS(OCAMLOPT, [ocamlopt.opt ocamlopt])
599 AC_PATH_PROGS(OCAMLDEP, [ocamldep.opt ocamldep])
600 AC_PATH_PROGS(OCAMLDOC, [ocamldoc.opt ocamldoc])
601
602 dnl Determine if the linker supports the -R option.
603 AC_LINK_USE_R
604
605 dnl Check for libtool and the library that has dlopen function (which must come
606 dnl before the AC_PROG_LIBTOOL check in order to enable dlopening libraries with
607 dnl libtool).
608 AC_LIBTOOL_DLOPEN
609 AC_LIB_LTDL
610 AC_PROG_LIBTOOL
611
612 if test "$lt_cv_dlopen_self" = "yes" ; then
613   AC_DEFINE([CAN_DLOPEN_SELF],[1],
614               [Define if dlopen(0) will open the symbols of the program])
615 fi
616
617 if test "$WITH_LLVMGCCDIR" = "default" ; then
618   LLVMGCC="llvm-gcc${EXEEXT}"
619   LLVMGXX="llvm-g++${EXEEXT}"
620   AC_PATH_PROG(LLVMGCC, $LLVMGCC, [])
621   AC_PATH_PROG(LLVMGXX, $LLVMGXX, [])
622 else
623   if test -z "$LLVMGCC"; then
624     LLVMGCC="$WITH_LLVMGCCDIR/bin/llvm-gcc${EXEEXT}"
625   fi
626   if test -z "$LLVMGXX"; then
627     LLVMGXX="$WITH_LLVMGCCDIR/bin/llvm-g++${EXEEXT}"
628   fi
629   AC_SUBST(LLVMGCC,$LLVMGCC)
630   AC_SUBST(LLVMGXX,$LLVMGXX)
631 fi
632
633 AC_MSG_CHECKING([tool compatibility])
634
635 dnl Ensure that compilation tools are GCC or a GNU compatible compiler such as
636 dnl ICC; we use GCC specific options in the makefiles so the compiler needs
637 dnl to support those options.
638 dnl "icc" emits gcc signatures
639 dnl "icc -no-gcc" emits no gcc signature BUT is still compatible
640 ICC=no
641 IXX=no
642 case $CC in
643   icc*|icpc*)
644     ICC=yes
645     IXX=yes
646     ;;
647    *)
648     ;;
649 esac
650
651 if test "$GCC" != "yes" && test "$ICC" != "yes"
652 then
653   AC_MSG_ERROR([gcc|icc required but not found])
654 fi
655
656 dnl Ensure that compilation tools are GCC; we use GCC specific extensions
657 if test "$GXX" != "yes" && test "$IXX" != "yes"
658 then
659   AC_MSG_ERROR([g++|icc required but not found])
660 fi
661
662 dnl Verify that GCC is version 3.0 or higher
663 if test "$GCC" = "yes"
664 then
665   AC_COMPILE_IFELSE([[#if !defined(__GNUC__) || __GNUC__ < 3
666 #error Unsupported GCC version
667 #endif
668 ]], [], [AC_MSG_ERROR([gcc 3.x required, but you have a lower version])])
669 fi
670
671 dnl Check for GNU Make.  We use its extensions, so don't build without it
672 if test -z "$llvm_cv_gnu_make_command"
673 then
674   AC_MSG_ERROR([GNU Make required but not found])
675 fi
676
677 dnl Tool compatibility is okay if we make it here.
678 AC_MSG_RESULT([ok])
679
680 dnl===-----------------------------------------------------------------------===
681 dnl===
682 dnl=== SECTION 5: Check for libraries
683 dnl===
684 dnl===-----------------------------------------------------------------------===
685
686 dnl libelf is for sparc only; we can ignore it if we don't have it
687 AC_CHECK_LIB(elf, elf_begin)
688 AC_CHECK_LIB(m,sin)
689 if test "$llvm_cv_os_type" = "MingW" ; then
690   AC_CHECK_LIB(imagehlp, main)
691   AC_CHECK_LIB(psapi, main)
692 fi
693
694 dnl dlopen() is required for plugin support.
695 AC_SEARCH_LIBS(dlopen,dl,AC_DEFINE([HAVE_DLOPEN],[1],
696                [Define if dlopen() is available on this platform.]),
697                AC_MSG_WARN([dlopen() not found - disabling plugin support]))
698
699 dnl mallinfo is optional; the code can compile (minus features) without it
700 AC_SEARCH_LIBS(mallinfo,malloc,AC_DEFINE([HAVE_MALLINFO],[1],
701                [Define if mallinfo() is available on this platform.]))
702
703 dnl pthread locking functions are optional - but llvm will not be thread-safe
704 dnl without locks.
705 if test "$ENABLE_THREADS" -eq 1 ; then
706   AC_CHECK_LIB(pthread,pthread_mutex_init)
707   AC_SEARCH_LIBS(pthread_mutex_lock,pthread,
708                  AC_DEFINE([HAVE_PTHREAD_MUTEX_LOCK],[1],
709                            [Have pthread_mutex_lock]))
710 fi
711
712 dnl Allow extra x86-disassembler library
713 AC_ARG_WITH(udis86,
714   AS_HELP_STRING([--with-udis86=<path>],
715     [Use udis86 external x86 disassembler library]),
716     [
717       AC_SUBST(USE_UDIS86, [1])
718       case "$withval" in
719         /usr/lib|yes) ;;
720         *) LDFLAGS="$LDFLAGS -L${withval}" ;;
721       esac
722       AC_CHECK_LIB(udis86, ud_init, [], [
723         echo "Error! You need to have libudis86 around."
724         exit -1
725       ])
726     ],
727     AC_SUBST(USE_UDIS86, [0]))
728 AC_DEFINE_UNQUOTED([USE_UDIS86],$USE_UDIS86,
729                    [Define if use udis86 library])
730
731 dnl===-----------------------------------------------------------------------===
732 dnl===
733 dnl=== SECTION 6: Check for header files
734 dnl===
735 dnl===-----------------------------------------------------------------------===
736
737 dnl First, use autoconf provided macros for specific headers that we need
738 dnl We don't check for ancient stuff or things that are guaranteed to be there
739 dnl by the C++ standard. We always use the <cfoo> versions of <foo.h> C headers.
740 dnl Generally we're looking for POSIX headers.
741 AC_HEADER_DIRENT
742 AC_HEADER_MMAP_ANONYMOUS
743 AC_HEADER_STAT
744 AC_HEADER_STDC
745 AC_HEADER_SYS_WAIT
746 AC_HEADER_TIME
747
748 AC_CHECK_HEADERS([dlfcn.h execinfo.h fcntl.h inttypes.h limits.h link.h])
749 AC_CHECK_HEADERS([malloc.h setjmp.h signal.h stdint.h unistd.h utime.h])
750 AC_CHECK_HEADERS([windows.h])
751 AC_CHECK_HEADERS([sys/mman.h sys/param.h sys/resource.h sys/time.h])
752 AC_CHECK_HEADERS([sys/types.h malloc/malloc.h mach/mach.h])
753 if test "$ENABLE_THREADS" -eq 1 ; then
754   AC_CHECK_HEADERS(pthread.h,
755                   AC_SUBST(HAVE_PTHREAD, 1),
756                    AC_SUBST(HAVE_PTHREAD, 0))
757 else
758   AC_SUBST(HAVE_PTHREAD, 0)
759 fi
760
761 dnl===-----------------------------------------------------------------------===
762 dnl===
763 dnl=== SECTION 7: Check for types and structures
764 dnl===
765 dnl===-----------------------------------------------------------------------===
766
767 AC_HUGE_VAL_CHECK
768 AC_TYPE_PID_T
769 AC_TYPE_SIZE_T
770 AC_TYPE_SIGNAL
771 AC_STRUCT_TM
772 AC_CHECK_TYPES([int64_t],,AC_MSG_ERROR([Type int64_t required but not found]))
773 AC_CHECK_TYPES([uint64_t],,
774          AC_CHECK_TYPES([u_int64_t],,
775          AC_MSG_ERROR([Type uint64_t or u_int64_t required but not found])))
776
777 dnl===-----------------------------------------------------------------------===
778 dnl===
779 dnl=== SECTION 8: Check for specific functions needed
780 dnl===
781 dnl===-----------------------------------------------------------------------===
782
783 AC_CHECK_FUNCS([backtrace ceilf floorf roundf rintf nearbyintf getcwd ])
784 AC_CHECK_FUNCS([powf fmodf strtof round ])
785 AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ])
786 AC_CHECK_FUNCS([isatty mkdtemp mkstemp ])
787 AC_CHECK_FUNCS([mktemp realpath sbrk setrlimit strdup strerror strerror_r ])
788 AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
789 AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp])
790 AC_C_PRINTF_A
791 AC_FUNC_ALLOCA
792 AC_FUNC_RAND48
793
794 dnl Check for variations in the Standard C++ library and STL. These macros are
795 dnl provided by LLVM in the autoconf/m4 directory.
796 AC_CXX_HAVE_HASH_MAP
797 AC_CXX_HAVE_HASH_SET
798 AC_CXX_HAVE_STD_ITERATOR
799 AC_CXX_HAVE_BI_ITERATOR
800 AC_CXX_HAVE_FWD_ITERATOR
801 AC_FUNC_ISNAN
802 AC_FUNC_ISINF
803
804 dnl Check for mmap support.We also need to know if /dev/zero is required to
805 dnl be opened for allocating RWX memory.
806 dnl Make sure we aren't attempting to configure for an unknown system
807 if test "$llvm_cv_platform_type" = "Unix" ; then
808   AC_FUNC_MMAP
809   AC_FUNC_MMAP_FILE
810   AC_NEED_DEV_ZERO_FOR_MMAP
811
812   if test "$ac_cv_func_mmap_fixed_mapped" = "no"
813   then
814     AC_MSG_WARN([mmap() of a fixed address required but not supported])
815   fi
816   if test "$ac_cv_func_mmap_file" = "no"
817   then
818     AC_MSG_WARN([mmap() of files required but not found])
819   fi
820 fi
821
822 dnl===-----------------------------------------------------------------------===
823 dnl===
824 dnl=== SECTION 9: Additional checks, variables, etc.
825 dnl===
826 dnl===-----------------------------------------------------------------------===
827
828 dnl Check, whether __dso_handle is present
829 AC_CHECK_FUNCS([__dso_handle])
830
831 dnl See if the llvm-gcc executable can compile to LLVM assembly
832 AC_CACHE_CHECK([whether llvm-gcc is sane],[llvm_cv_llvmgcc_sanity],
833 [llvm_cv_llvmgcc_sanity="no"
834 if test -x "$LLVMGCC" ; then
835   cp /dev/null conftest.c
836   "$LLVMGCC" -emit-llvm -S -o - conftest.c | \
837       grep 'target datalayout =' > /dev/null 2>&1
838   if test $? -eq 0 ; then
839     llvm_cv_llvmgcc_sanity="yes"
840   fi
841   rm conftest.c
842 fi])
843
844 dnl Since we have a sane llvm-gcc, identify it and its sub-tools
845 if test "$llvm_cv_llvmgcc_sanity" = "yes" ; then
846   AC_MSG_CHECKING([llvm-gcc component support])
847   llvmcc1path=`"$LLVMGCC" --print-prog-name=cc1`
848   AC_SUBST(LLVMCC1,$llvmcc1path)
849   llvmcc1pluspath=`"$LLVMGCC" --print-prog-name=cc1plus`
850   AC_SUBST(LLVMCC1PLUS,$llvmcc1pluspath)
851   llvmgccdir=`echo "$llvmcc1path" | sed 's,/libexec/.*,,'`
852   AC_SUBST(LLVMGCCDIR,$llvmgccdir)
853   llvmgcclibexec=`echo "$llvmcc1path" | sed 's,/cc1,,'`
854   AC_SUBST(LLVMGCCLIBEXEC,$llvmgcclibexec)
855   llvmgccversion=[`"$LLVMGCC" -dumpversion 2>&1 | sed 's/^\([0-9.]*\).*/\1/'`]
856   llvmgccmajvers=[`echo $llvmgccversion | sed 's/^\([0-9]\).*/\1/'`]
857   AC_SUBST(LLVMGCC_VERSION,$llvmgccversion)
858   AC_SUBST(LLVMGCC_MAJVERS,$llvmgccmajvers)
859   llvmgcclangs=[`"$LLVMGCC" -v --help 2>&1 | grep '^Configured with:' | sed 's/^.*--enable-languages=\([^ -]*\).*/\1/'`]
860   AC_SUBST(LLVMGCC_LANGS,$llvmgcclangs)
861   AC_MSG_RESULT([ok])
862 fi
863
864 dnl Propagate the shared library extension that the libltdl checks did to
865 dnl the Makefiles so we can use it there too
866 AC_SUBST(SHLIBEXT,$libltdl_cv_shlibext)
867
868 # Translate the various configuration directories and other basic
869 # information into substitutions that will end up in Makefile.config.in
870 # that these configured values can be used by the makefiles
871 if test "${prefix}" = "NONE" ; then
872   prefix="/usr/local"
873 fi
874 eval LLVM_PREFIX="${prefix}";
875 eval LLVM_BINDIR="${prefix}/bin";
876 eval LLVM_LIBDIR="${prefix}/lib";
877 eval LLVM_DATADIR="${prefix}/share/llvm";
878 eval LLVM_DOCSDIR="${prefix}/docs/llvm";
879 eval LLVM_ETCDIR="${prefix}/etc/llvm";
880 eval LLVM_INCLUDEDIR="${prefix}/include";
881 eval LLVM_INFODIR="${prefix}/info";
882 eval LLVM_MANDIR="${prefix}/man";
883 LLVM_CONFIGTIME=`date`
884 AC_SUBST(LLVM_PREFIX)
885 AC_SUBST(LLVM_BINDIR)
886 AC_SUBST(LLVM_LIBDIR)
887 AC_SUBST(LLVM_DATADIR)
888 AC_SUBST(LLVM_DOCSDIR)
889 AC_SUBST(LLVM_ETCDIR)
890 AC_SUBST(LLVM_INCLUDEDIR)
891 AC_SUBST(LLVM_INFODIR)
892 AC_SUBST(LLVM_MANDIR)
893 AC_SUBST(LLVM_CONFIGTIME)
894
895 # Place the various directores into the config.h file as #defines so that we
896 # can know about the installation paths within LLVM.
897 AC_DEFINE_UNQUOTED(LLVM_PREFIX,"$LLVM_PREFIX",
898                    [Installation prefix directory])
899 AC_DEFINE_UNQUOTED(LLVM_BINDIR, "$LLVM_BINDIR",
900                    [Installation directory for binary executables])
901 AC_DEFINE_UNQUOTED(LLVM_LIBDIR, "$LLVM_LIBDIR",
902                    [Installation directory for libraries])
903 AC_DEFINE_UNQUOTED(LLVM_DATADIR, "$LLVM_DATADIR",
904                    [Installation directory for data files])
905 AC_DEFINE_UNQUOTED(LLVM_DOCSDIR, "$LLVM_DOCSDIR",
906                    [Installation directory for documentation])
907 AC_DEFINE_UNQUOTED(LLVM_ETCDIR, "$LLVM_ETCDIR",
908                    [Installation directory for config files])
909 AC_DEFINE_UNQUOTED(LLVM_INCLUDEDIR, "$LLVM_INCLUDEDIR",
910                    [Installation directory for include files])
911 AC_DEFINE_UNQUOTED(LLVM_INFODIR, "$LLVM_INFODIR",
912                    [Installation directory for .info files])
913 AC_DEFINE_UNQUOTED(LLVM_MANDIR, "$LLVM_MANDIR",
914                    [Installation directory for man pages])
915 AC_DEFINE_UNQUOTED(LLVM_CONFIGTIME, "$LLVM_CONFIGTIME",
916                    [Time at which LLVM was configured])
917 AC_DEFINE_UNQUOTED(LLVM_HOSTTRIPLE, "$host",
918                    [Host triple we were built on])
919
920 # Determine which bindings to build.
921 if test "$BINDINGS_TO_BUILD" = auto ; then
922   BINDINGS_TO_BUILD=""
923   if test "x$OCAMLC" != x -a "x$OCAMLDEP" != x ; then
924     BINDINGS_TO_BUILD="ocaml $BINDINGS_TO_BUILD"
925   fi
926 fi
927 AC_SUBST(BINDINGS_TO_BUILD,$BINDINGS_TO_BUILD)
928
929 # This isn't really configurey, but it avoids having to repeat the list in
930 # other files.
931 AC_SUBST(ALL_BINDINGS,ocaml)
932
933 # Do any work necessary to ensure that bindings have what they need.
934 binding_prereqs_failed=0
935 for a_binding in $BINDINGS_TO_BUILD ; do
936   case "$a_binding" in
937   ocaml)
938     if test "x$OCAMLC" = x ; then
939       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlc not found. Try configure OCAMLC=/path/to/ocamlc])
940       binding_prereqs_failed=1
941     fi
942     if test "x$OCAMLDEP" = x ; then
943       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamldep not found. Try configure OCAMLDEP=/path/to/ocamldep])
944       binding_prereqs_failed=1
945     fi
946     if test "x$OCAMLOPT" = x ; then
947       AC_MSG_WARN([--enable-bindings=ocaml specified, but ocamlopt not found. Try configure OCAMLOPT=/path/to/ocamlopt])
948       dnl ocamlopt is optional!
949     fi
950     if test "x$with_ocaml_libdir" != xauto ; then
951       AC_SUBST(OCAML_LIBDIR,$with_ocaml_libdir)
952     else
953       ocaml_stdlib="`"$OCAMLC" -where`"
954       if test "$LLVM_PREFIX" '<' "$ocaml_stdlib" -a "$ocaml_stdlib" '<' "$LLVM_PREFIX~"
955       then
956         # ocaml stdlib is beneath our prefix; use stdlib
957         AC_SUBST(OCAML_LIBDIR,$ocaml_stdlib)
958       else
959         # ocaml stdlib is outside our prefix; use libdir/ocaml
960         AC_SUBST(OCAML_LIBDIR,$LLVM_LIBDIR/ocaml)
961       fi
962     fi
963     ;;
964   esac
965 done
966 if test "$binding_prereqs_failed" = 1 ; then
967   AC_MSG_ERROR([Prequisites for bindings not satisfied. Fix them or use configure --disable-bindings.])
968 fi
969
970
971 dnl===-----------------------------------------------------------------------===
972 dnl===
973 dnl=== SECTION 10: Specify the output files and generate it
974 dnl===
975 dnl===-----------------------------------------------------------------------===
976
977 dnl Configure header files
978 dnl WARNING: dnl If you add or remove any of the following config headers, then
979 dnl you MUST also update Makefile.rules so that the variable FilesToConfig
980 dnl contains the same list of files as AC_CONFIG_HEADERS below. This ensures the
981 dnl files can be updated automatically when their *.in sources change.
982 AC_CONFIG_HEADERS([include/llvm/Config/config.h])
983 AC_CONFIG_HEADERS([include/llvm/Support/DataTypes.h])
984 AC_CONFIG_HEADERS([include/llvm/ADT/hash_map.h])
985 AC_CONFIG_HEADERS([include/llvm/ADT/hash_set.h])
986 AC_CONFIG_HEADERS([include/llvm/ADT/iterator.h])
987
988 dnl Configure the makefile's configuration data
989 AC_CONFIG_FILES([Makefile.config])
990
991 dnl Configure the RPM spec file for LLVM
992 AC_CONFIG_FILES([llvm.spec])
993
994 dnl Configure doxygen's configuration file
995 AC_CONFIG_FILES([docs/doxygen.cfg])
996
997 dnl Do the first stage of configuration for llvm-config.in.
998 AC_CONFIG_FILES([tools/llvm-config/llvm-config.in])
999
1000 dnl Do special configuration of Makefiles
1001 AC_CONFIG_COMMANDS([setup],,[llvm_src="${srcdir}"])
1002 AC_CONFIG_MAKEFILE(Makefile)
1003 AC_CONFIG_MAKEFILE(Makefile.common)
1004 AC_CONFIG_MAKEFILE(examples/Makefile)
1005 AC_CONFIG_MAKEFILE(lib/Makefile)
1006 AC_CONFIG_MAKEFILE(runtime/Makefile)
1007 AC_CONFIG_MAKEFILE(test/Makefile)
1008 AC_CONFIG_MAKEFILE(test/Makefile.tests)
1009 AC_CONFIG_MAKEFILE(tools/Makefile)
1010 AC_CONFIG_MAKEFILE(utils/Makefile)
1011 AC_CONFIG_MAKEFILE(projects/Makefile)
1012 AC_CONFIG_MAKEFILE(bindings/Makefile)
1013 AC_CONFIG_MAKEFILE(bindings/ocaml/Makefile.ocaml)
1014
1015 dnl Finally, crank out the output
1016 AC_OUTPUT