Update doc to reflect changes I am about to install to fix PR 888.
[oota-llvm.git] / autoconf / configure.ac
index 4526c48dbe84875419a4d605a40791868536a076..293406160c1188a6cb3bb3e78358f0911b5ee34a 100644 (file)
@@ -31,12 +31,12 @@ dnl===
 dnl===-----------------------------------------------------------------------===
 dnl Initialize autoconf and define the package name, version number and
 dnl email address for reporting bugs.
 dnl===-----------------------------------------------------------------------===
 dnl Initialize autoconf and define the package name, version number and
 dnl email address for reporting bugs.
-AC_INIT([[llvm]],[[1.9cvs]],[llvmbugs@cs.uiuc.edu])
+AC_INIT([[llvm]],[[2.0cvs]],[llvmbugs@cs.uiuc.edu])
 
 dnl Provide a copyright substitution and ensure the copyright notice is included
 dnl in the output of --version option of the generated configure script.
 
 dnl Provide a copyright substitution and ensure the copyright notice is included
 dnl in the output of --version option of the generated configure script.
-AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2005 University of Illinois at Urbana-Champaign."])
-AC_COPYRIGHT([Copyright (c) 2003-2005 University of Illinois at Urbana-Champaign.])
+AC_SUBST(LLVM_COPYRIGHT,["Copyright (c) 2003-2007 University of Illinois at Urbana-Champaign."])
+AC_COPYRIGHT([Copyright (c) 2003-2007 University of Illinois at Urbana-Champaign.])
 
 dnl Indicate that we require autoconf 2.59 or later. Ths is needed because we
 dnl use some autoconf macros only available in 2.59.
 
 dnl Indicate that we require autoconf 2.59 or later. Ths is needed because we
 dnl use some autoconf macros only available in 2.59.
@@ -66,17 +66,17 @@ for i in `ls ${srcdir}/projects`
 do
   if test -d ${srcdir}/projects/${i} ; then
     case ${i} in
 do
   if test -d ${srcdir}/projects/${i} ; then
     case ${i} in
-      "CVS") ;;
-      "sample")       AC_CONFIG_SUBDIRS([projects/sample])    ;;
-      "Stacker")      AC_CONFIG_SUBDIRS([projects/Stacker])   ;;
-      "privbracket")  AC_CONFIG_SUBDIRS([projects/privbracket]) ;;
-      "llvm-test")    AC_CONFIG_SUBDIRS([projects/llvm-test]) ;;
-      "llvm-reopt")   AC_CONFIG_SUBDIRS([projects/llvm-reopt]);;
-      "llvm-gcc")     AC_CONFIG_SUBDIRS([projects/llvm-gcc])  ;;
-      "llvm-java")    AC_CONFIG_SUBDIRS([projects/llvm-java]) ;;
-      "llvm-tv")      AC_CONFIG_SUBDIRS([projects/llvm-tv])   ;;
-      "llvm-poolalloc") AC_CONFIG_SUBDIRS([projects/llvm-poolalloc]) ;;
-      "llvm-kernel")  AC_CONFIG_SUBDIRS([projects/llvm-kernel]) ;;
+      CVS) ;;
+      sample)       AC_CONFIG_SUBDIRS([projects/sample])    ;;
+      privbracket)  AC_CONFIG_SUBDIRS([projects/privbracket]) ;;
+      llvm-stacker) AC_CONFIG_SUBDIRS([projects/llvm-stacker]) ;;
+      llvm-test)    AC_CONFIG_SUBDIRS([projects/llvm-test]) ;;
+      llvm-reopt)   AC_CONFIG_SUBDIRS([projects/llvm-reopt]);;
+      llvm-gcc)     AC_CONFIG_SUBDIRS([projects/llvm-gcc])  ;;
+      llvm-java)    AC_CONFIG_SUBDIRS([projects/llvm-java]) ;;
+      llvm-tv)      AC_CONFIG_SUBDIRS([projects/llvm-tv])   ;;
+      llvm-poolalloc) AC_CONFIG_SUBDIRS([projects/llvm-poolalloc]) ;;
+      llvm-kernel)  AC_CONFIG_SUBDIRS([projects/llvm-kernel]) ;;
       *)              
         AC_MSG_WARN([Unknown project (${i}) won't be configured automatically])
         ;;
       *)              
         AC_MSG_WARN([Unknown project (${i}) won't be configured automatically])
         ;;
@@ -102,39 +102,73 @@ AC_CACHE_CHECK([type of operating system we're going to host on],
                [llvm_cv_os_type],
 [case $host in
   *-*-aix*) 
                [llvm_cv_os_type],
 [case $host in
   *-*-aix*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
     llvm_cv_os_type="AIX" 
     llvm_cv_platform_type="Unix" ;;
     llvm_cv_os_type="AIX" 
     llvm_cv_platform_type="Unix" ;;
+  *-*-irix*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
+    llvm_cv_os_type="IRIX" 
+    llvm_cv_platform_type="Unix" ;;
   *-*-cygwin*) 
   *-*-cygwin*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
     llvm_cv_os_type="Cygwin" 
     llvm_cv_platform_type="Unix" ;;
   *-*-darwin*) 
     llvm_cv_os_type="Cygwin" 
     llvm_cv_platform_type="Unix" ;;
   *-*-darwin*) 
+    llvm_cv_link_all_option="-Wl,-all_load"
+    llvm_cv_link_all_option="-Wl,-noall_load"
     llvm_cv_os_type="Darwin"
     llvm_cv_platform_type="Unix" ;;
   *-*-freebsd*) 
     llvm_cv_os_type="Darwin"
     llvm_cv_platform_type="Unix" ;;
   *-*-freebsd*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
     llvm_cv_os_type="FreeBSD" 
     llvm_cv_platform_type="Unix" ;;
   *-*-openbsd*) 
     llvm_cv_os_type="FreeBSD" 
     llvm_cv_platform_type="Unix" ;;
   *-*-openbsd*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
     llvm_cv_os_type="OpenBSD" 
     llvm_cv_platform_type="Unix" ;;
     llvm_cv_os_type="OpenBSD" 
     llvm_cv_platform_type="Unix" ;;
+  *-*-netbsd*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
+    llvm_cv_os_type="NetBSD" 
+    llvm_cv_platform_type="Unix" ;;
   *-*-hpux*) 
   *-*-hpux*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
     llvm_cv_os_type="HP-UX" 
     llvm_cv_platform_type="Unix" ;;
   *-*-interix*) 
     llvm_cv_os_type="HP-UX" 
     llvm_cv_platform_type="Unix" ;;
   *-*-interix*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
     llvm_cv_os_type="Interix"
     llvm_cv_platform_type="Unix" ;;
   *-*-linux*) 
     llvm_cv_os_type="Interix"
     llvm_cv_platform_type="Unix" ;;
   *-*-linux*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
     llvm_cv_os_type="Linux"
     llvm_cv_platform_type="Unix" ;;
   *-*-solaris*) 
     llvm_cv_os_type="Linux"
     llvm_cv_platform_type="Unix" ;;
   *-*-solaris*) 
+    llvm_cv_link_all_option="-Wl,-z,allextract"
+    llvm_cv_no_link_all_option="-Wl,-z,defaultextract"
     llvm_cv_os_type="SunOS"
     llvm_cv_platform_type="Unix" ;;
   *-*-win32*) 
     llvm_cv_os_type="SunOS"
     llvm_cv_platform_type="Unix" ;;
   *-*-win32*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
     llvm_cv_os_type="Win32"
     llvm_cv_platform_type="Win32" ;;
   *-*-mingw*) 
     llvm_cv_os_type="Win32"
     llvm_cv_platform_type="Win32" ;;
   *-*-mingw*) 
+    llvm_cv_link_all_option="-Wl,--whole-archive"
+    llvm_cv_no_link_all_option="-Wl,--no-whole-archive"
     llvm_cv_os_type="MingW" 
     llvm_cv_platform_type="Win32" ;;
   *) 
     llvm_cv_os_type="MingW" 
     llvm_cv_platform_type="Win32" ;;
   *) 
+    llvm_cv_link_all_option="" 
+    llvm_cv_no_link_all_option=""
     llvm_cv_os_type="Unknown" 
     llvm_cv_platform_type="Unknown" ;;
 esac])
     llvm_cv_os_type="Unknown" 
     llvm_cv_platform_type="Unknown" ;;
 esac])
@@ -148,6 +182,10 @@ dnl Set the "OS" Makefile variable based on the platform type so the
 dnl makefile can configure itself to specific build hosts
 AC_SUBST(OS,$llvm_cv_os_type)
 
 dnl makefile can configure itself to specific build hosts
 AC_SUBST(OS,$llvm_cv_os_type)
 
+dnl Set the LINKALL and NOLINKALL Makefile variables based on the platform
+AC_SUBST(LINKALL,$llvm_cv_link_all_option)
+AC_SUBST(NOLINKALL,$llvm_cv_no_link_all_option)
+
 dnl Set the "LLVM_ON_*" variables based on llvm_cvs_platform_type
 dnl This is used by lib/System to determine the basic kind of implementation
 dnl to use.
 dnl Set the "LLVM_ON_*" variables based on llvm_cvs_platform_type
 dnl This is used by lib/System to determine the basic kind of implementation
 dnl to use.
@@ -175,6 +213,7 @@ AC_CACHE_CHECK([target architecture],[llvm_cv_target_arch],
   powerpc*-*)             llvm_cv_target_arch="PowerPC" ;;
   alpha*-*)               llvm_cv_target_arch="Alpha" ;;
   ia64-*)                 llvm_cv_target_arch="IA64" ;;
   powerpc*-*)             llvm_cv_target_arch="PowerPC" ;;
   alpha*-*)               llvm_cv_target_arch="Alpha" ;;
   ia64-*)                 llvm_cv_target_arch="IA64" ;;
+  arm-*)                  llvm_cv_target_arch="ARM" ;;
   *)                      llvm_cv_target_arch="Unknown" ;;
 esac])
 
   *)                      llvm_cv_target_arch="Unknown" ;;
 esac])
 
@@ -196,13 +235,13 @@ else
   AC_SUBST(LLVM_CROSS_COMPILING, [0])
 fi
 
   AC_SUBST(LLVM_CROSS_COMPILING, [0])
 fi
 
-dnl Check to see if there's a "CVS" directory indicating that this build is
-dnl being done from a CVS checkout. This sets up several defaults for the
+dnl Check to see if there's a "CVS" (or .svn) directory indicating that this 
+dnl build is being done from a checkout. This sets up several defaults for the
 dnl command line switches. When we build with a CVS directory, we get a 
 dnl debug with assertions turned on. Without, we assume a source release and we
 dnl get an optimized build without assertions. See --enable-optimized and
 dnl --enable-assertions below
 dnl command line switches. When we build with a CVS directory, we get a 
 dnl debug with assertions turned on. Without, we assume a source release and we
 dnl get an optimized build without assertions. See --enable-optimized and
 dnl --enable-assertions below
-if test -d "CVS" -o -d "${srcdir}/CVS"; then
+if test -d "CVS" -o -d "${srcdir}/CVS" -o -d ".svn" -o -d "${srcdir}/.svn"; then
   cvsbuild="yes"
   optimize="no"
   AC_SUBST(CVSBUILD,[[CVSBUILD=1]])
   cvsbuild="yes"
   optimize="no"
   AC_SUBST(CVSBUILD,[[CVSBUILD=1]])
@@ -255,11 +294,12 @@ then
 else
   case "$llvm_cv_target_arch" in
     x86)     AC_SUBST(TARGET_HAS_JIT,1) ;;
 else
   case "$llvm_cv_target_arch" in
     x86)     AC_SUBST(TARGET_HAS_JIT,1) ;;
-    Sparc)   AC_SUBST(TARGET_HAS_JIT,1) ;;
+    Sparc)   AC_SUBST(TARGET_HAS_JIT,0) ;;
     PowerPC) AC_SUBST(TARGET_HAS_JIT,1) ;;
     PowerPC) AC_SUBST(TARGET_HAS_JIT,1) ;;
-    x86_64)  AC_SUBST(TARGET_HAS_JIT,0) ;;
+    x86_64)  AC_SUBST(TARGET_HAS_JIT,1) ;;
     Alpha)   AC_SUBST(TARGET_HAS_JIT,1) ;;
     IA64)    AC_SUBST(TARGET_HAS_JIT,0) ;;
     Alpha)   AC_SUBST(TARGET_HAS_JIT,1) ;;
     IA64)    AC_SUBST(TARGET_HAS_JIT,0) ;;
+    ARM)     AC_SUBST(TARGET_HAS_JIT,0) ;;
     *)       AC_SUBST(TARGET_HAS_JIT,0) ;;
   esac
 fi
     *)       AC_SUBST(TARGET_HAS_JIT,0) ;;
   esac
 fi
@@ -280,14 +320,29 @@ dnl Allow disablement of threads
 AC_ARG_ENABLE(threads,
               AS_HELP_STRING([--enable-threads],
                              [Use threads if available (default is YES)]),,
 AC_ARG_ENABLE(threads,
               AS_HELP_STRING([--enable-threads],
                              [Use threads if available (default is YES)]),,
-                             enableval=yes)
+                             enableval=default)
 case "$enableval" in
   yes) AC_SUBST(ENABLE_THREADS,[1]) ;;
   no)  AC_SUBST(ENABLE_THREADS,[0]) ;;
 case "$enableval" in
   yes) AC_SUBST(ENABLE_THREADS,[1]) ;;
   no)  AC_SUBST(ENABLE_THREADS,[0]) ;;
+  default) AC_SUBST(ENABLE_THREADS,[1]) ;;
   *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
 esac
 AC_DEFINE_UNQUOTED([ENABLE_THREADS],$ENABLE_THREADS,[Define if threads enabled])
 
   *) AC_MSG_ERROR([Invalid setting for --enable-threads. Use "yes" or "no"]) ;;
 esac
 AC_DEFINE_UNQUOTED([ENABLE_THREADS],$ENABLE_THREADS,[Define if threads enabled])
 
+dnl Allow building with position independent code
+AC_ARG_ENABLE(pic,
+  AS_HELP_STRING([--enable-pic],
+                 [Build LLVM with Position Independent Code (default is NO)]),,
+                 enableval=default)
+case "$enableval" in
+  yes) AC_SUBST(ENABLE_PIC,[1]) ;;
+  no)  AC_SUBST(ENABLE_PIC,[0]) ;;
+  default) AC_SUBST(ENABLE_PIC,[0]) ;;
+  *) AC_MSG_ERROR([Invalid setting for --enable-pic. Use "yes" or "no"]) ;;
+esac
+AC_DEFINE_UNQUOTED([ENABLE_PIC],$ENABLE_PIC,
+                   [Define if position independent code is enabled])
+
 dnl Allow specific targets to be specified for building (or not)
 TARGETS_TO_BUILD=""
 AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
 dnl Allow specific targets to be specified for building (or not)
 TARGETS_TO_BUILD=""
 AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
@@ -303,6 +358,7 @@ case "$enableval" in
       PowerPC) TARGETS_TO_BUILD="PowerPC" ;;
       Alpha)   TARGETS_TO_BUILD="Alpha" ;;
       IA64)    TARGETS_TO_BUILD="IA64" ;;
       PowerPC) TARGETS_TO_BUILD="PowerPC" ;;
       Alpha)   TARGETS_TO_BUILD="Alpha" ;;
       IA64)    TARGETS_TO_BUILD="IA64" ;;
+      ARM)     TARGETS_TO_BUILD="ARM" ;;
       *)       AC_MSG_ERROR([Can not set target to build]) ;;
     esac 
     ;;
       *)       AC_MSG_ERROR([Can not set target to build]) ;;
     esac 
     ;;
@@ -314,14 +370,30 @@ case "$enableval" in
         powerpc) TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
         alpha)   TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;;
         ia64)    TARGETS_TO_BUILD="IA64 $TARGETS_TO_BUILD" ;;
         powerpc) TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;;
         alpha)   TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;;
         ia64)    TARGETS_TO_BUILD="IA64 $TARGETS_TO_BUILD" ;;
+        arm)     TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;;
         *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
       esac
   done 
   ;;
 esac
         *) AC_MSG_ERROR([Unrecognized target $a_target]) ;;
       esac
   done 
   ;;
 esac
-TARGETS_TO_BUILD="CBackend $TARGETS_TO_BUILD"
+TARGETS_TO_BUILD="CBackend MSIL $TARGETS_TO_BUILD"
 AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD)
 
 AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD)
 
+dnl Prevent the CBackend from using printf("%a") for floating point so older
+dnl C compilers that cannot deal with the 0x0p+0 hex floating point format
+dnl can still compile the CBE's output
+AC_ARG_ENABLE([cbe-printf-a],AS_HELP_STRING([--enable-cbe-printf-a],
+  [Enable C Backend output with hex floating point via %a  (default is YES)]),,
+  enableval=default)
+case "$enableval" in
+  yes) AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
+  no)  AC_SUBST(ENABLE_CBE_PRINTF_A,[0]) ;;
+  default)  AC_SUBST(ENABLE_CBE_PRINTF_A,[1]) ;;
+  *) AC_MSG_ERROR([Invalid setting for --enable-cbe-printf-a. Use "yes" or "no"]) ;;
+esac
+AC_DEFINE_UNQUOTED([ENABLE_CBE_PRINTF_A],$ENABLE_CBE_PRINTF_A,
+                   [Define if CBE is enabled for printf %a output])
+
 dnl Allow a specific llvm-gcc/llvm-g++ pair to be used with this LLVM config.
 AC_ARG_WITH(llvmgccdir,
   AS_HELP_STRING([--with-llvmgccdir],
 dnl Allow a specific llvm-gcc/llvm-g++ pair to be used with this LLVM config.
 AC_ARG_WITH(llvmgccdir,
   AS_HELP_STRING([--with-llvmgccdir],
@@ -381,7 +453,7 @@ AC_PATH_PROG(GRAPHVIZ, [Graphviz], [echo Graphviz])
 if test "$GRAPHVIZ" != "echo Graphviz" ; then
   AC_DEFINE([HAVE_GRAPHVIZ],[1],[Define if the Graphviz program is available])
   dnl If we're targeting for mingw we should emit windows paths, not msys
 if test "$GRAPHVIZ" != "echo Graphviz" ; then
   AC_DEFINE([HAVE_GRAPHVIZ],[1],[Define if the Graphviz program is available])
   dnl If we're targeting for mingw we should emit windows paths, not msys
-  if test "$llvm_cv_os_type" == "MingW" ; then
+  if test "$llvm_cv_os_type" = "MingW" ; then
     GRAPHVIZ=`echo $GRAPHVIZ | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
   fi
   AC_DEFINE_UNQUOTED([LLVM_PATH_GRAPHVIZ],"$GRAPHVIZ${EXEEXT}",
     GRAPHVIZ=`echo $GRAPHVIZ | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
   fi
   AC_DEFINE_UNQUOTED([LLVM_PATH_GRAPHVIZ],"$GRAPHVIZ${EXEEXT}",
@@ -391,7 +463,7 @@ AC_PATH_PROG(DOT, [dot], [echo dot])
 if test "$DOT" != "echo dot" ; then
   AC_DEFINE([HAVE_DOT],[1],[Define if the dot program is available])
   dnl If we're targeting for mingw we should emit windows paths, not msys
 if test "$DOT" != "echo dot" ; then
   AC_DEFINE([HAVE_DOT],[1],[Define if the dot program is available])
   dnl If we're targeting for mingw we should emit windows paths, not msys
-  if test "$llvm_cv_os_type" == "MingW" ; then
+  if test "$llvm_cv_os_type" = "MingW" ; then
     DOT=`echo $DOT | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
   fi
   AC_DEFINE_UNQUOTED([LLVM_PATH_DOT],"$DOT${EXEEXT}",
     DOT=`echo $DOT | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
   fi
   AC_DEFINE_UNQUOTED([LLVM_PATH_DOT],"$DOT${EXEEXT}",
@@ -401,7 +473,7 @@ AC_PATH_PROGS(GV, [gv gsview32], [echo gv])
 if test "$GV" != "echo gv" ; then
   AC_DEFINE([HAVE_GV],[1],[Define if the gv program is available])
   dnl If we're targeting for mingw we should emit windows paths, not msys
 if test "$GV" != "echo gv" ; then
   AC_DEFINE([HAVE_GV],[1],[Define if the gv program is available])
   dnl If we're targeting for mingw we should emit windows paths, not msys
-  if test "$llvm_cv_os_type" == "MingW" ; then
+  if test "$llvm_cv_os_type" = "MingW" ; then
     GV=`echo $GV | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
   fi
   AC_DEFINE_UNQUOTED([LLVM_PATH_GV],"$GV${EXEEXT}",
     GV=`echo $GV | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
   fi
   AC_DEFINE_UNQUOTED([LLVM_PATH_GV],"$GV${EXEEXT}",
@@ -411,7 +483,7 @@ AC_PATH_PROG(DOTTY, [dotty], [echo dotty])
 if test "$DOTTY" != "echo dotty" ; then
   AC_DEFINE([HAVE_DOTTY],[1],[Define if the dotty program is available])
   dnl If we're targeting for mingw we should emit windows paths, not msys
 if test "$DOTTY" != "echo dotty" ; then
   AC_DEFINE([HAVE_DOTTY],[1],[Define if the dotty program is available])
   dnl If we're targeting for mingw we should emit windows paths, not msys
-  if test "$llvm_cv_os_type" == "MingW" ; then
+  if test "$llvm_cv_os_type" = "MingW" ; then
     DOTTY=`echo $DOTTY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
   fi
   AC_DEFINE_UNQUOTED([LLVM_PATH_DOTTY],"$DOTTY${EXEEXT}",
     DOTTY=`echo $DOTTY | sed 's/^\/\([[A-Za-z]]\)\//\1:\//' `
   fi
   AC_DEFINE_UNQUOTED([LLVM_PATH_DOTTY],"$DOTTY${EXEEXT}",
@@ -436,7 +508,6 @@ dnl nothing. This just lets the build output show that we could have done
 dnl something if the tool was available. 
 AC_PATH_PROG(BZIP2,[bzip2],[echo "Skipped: bzip2 not found"])
 AC_PATH_PROG(DOXYGEN,[doxygen],[echo "Skipped: doxygen not found"])
 dnl something if the tool was available. 
 AC_PATH_PROG(BZIP2,[bzip2],[echo "Skipped: bzip2 not found"])
 AC_PATH_PROG(DOXYGEN,[doxygen],[echo "Skipped: doxygen not found"])
-AC_PATH_PROG(ETAGS,[etags],[echo "Skipped: etags not found"])
 AC_PATH_PROG(GROFF,[groff],[echo "Skipped: groff not found"])
 AC_PATH_PROG(GZIP,[gzip],[echo "Skipped: gzip not found"])
 AC_PATH_PROG(POD2HTML,[pod2html],[echo "Skipped: pod2html not found"])
 AC_PATH_PROG(GROFF,[groff],[echo "Skipped: groff not found"])
 AC_PATH_PROG(GZIP,[gzip],[echo "Skipped: gzip not found"])
 AC_PATH_PROG(POD2HTML,[pod2html],[echo "Skipped: pod2html not found"])
@@ -538,7 +609,7 @@ dnl===-----------------------------------------------------------------------===
 dnl libelf is for sparc only; we can ignore it if we don't have it
 AC_CHECK_LIB(elf, elf_begin)
 AC_CHECK_LIB(m,sin)
 dnl libelf is for sparc only; we can ignore it if we don't have it
 AC_CHECK_LIB(elf, elf_begin)
 AC_CHECK_LIB(m,sin)
-if test "$llvm_cv_os_type" == "MingW" ; then
+if test "$llvm_cv_os_type" = "MingW" ; then
   AC_CHECK_LIB(imagehlp, main)
   AC_CHECK_LIB(psapi, main)
 fi
   AC_CHECK_LIB(imagehlp, main)
   AC_CHECK_LIB(psapi, main)
 fi
@@ -567,6 +638,25 @@ if test "$ENABLE_THREADS" -eq 1 ; then
                            [Have pthread_mutex_lock]))
 fi
 
                            [Have pthread_mutex_lock]))
 fi
 
+dnl Allow extra x86-disassembler library
+AC_ARG_WITH(udis86,
+  AS_HELP_STRING([--with-udis86=<path>],
+    [Use udis86 external x86 disassembler library]),
+    [
+      AC_SUBST(USE_UDIS86, [1])
+      case "$withval" in
+        /usr/lib|yes) ;;
+        *) LDFLAGS="$LDFLAGS -L${withval}" ;;
+      esac
+      AC_CHECK_LIB(udis86, ud_init, [], [
+        echo "Error! You need to have libudis86 around."
+        exit -1
+      ])
+    ],
+    AC_SUBST(USE_UDIS86, [0]))
+AC_DEFINE_UNQUOTED([USE_UDIS86],$USE_UDIS86,
+                   [Define if use udis86 library])
+
 dnl===-----------------------------------------------------------------------===
 dnl===
 dnl=== SECTION 6: Check for header files
 dnl===-----------------------------------------------------------------------===
 dnl===
 dnl=== SECTION 6: Check for header files
@@ -587,9 +677,13 @@ AC_HEADER_TIME
 AC_CHECK_HEADERS([dlfcn.h execinfo.h fcntl.h inttypes.h limits.h link.h])
 AC_CHECK_HEADERS([malloc.h setjmp.h signal.h stdint.h unistd.h utime.h])
 AC_CHECK_HEADERS([windows.h sys/mman.h sys/param.h sys/resource.h sys/time.h])
 AC_CHECK_HEADERS([dlfcn.h execinfo.h fcntl.h inttypes.h limits.h link.h])
 AC_CHECK_HEADERS([malloc.h setjmp.h signal.h stdint.h unistd.h utime.h])
 AC_CHECK_HEADERS([windows.h sys/mman.h sys/param.h sys/resource.h sys/time.h])
-AC_CHECK_HEADERS([sys/types.h malloc/malloc.h])
+AC_CHECK_HEADERS([sys/types.h malloc/malloc.h mach/mach.h])
 if test "$ENABLE_THREADS" -eq 1 ; then
 if test "$ENABLE_THREADS" -eq 1 ; then
-  AC_CHECK_HEADERS(pthread.h)
+  AC_CHECK_HEADER(pthread.h,
+                  AC_SUBST(HAVE_PTHREAD, 1),
+                  AC_SUBST(HAVE_PTHREAD, 0))
+else
+  AC_SUBST(HAVE_PTHREAD, 0)
 fi
 
 dnl===-----------------------------------------------------------------------===
 fi
 
 dnl===-----------------------------------------------------------------------===
@@ -598,6 +692,7 @@ dnl=== SECTION 7: Check for types and structures
 dnl===
 dnl===-----------------------------------------------------------------------===
 
 dnl===
 dnl===-----------------------------------------------------------------------===
 
+AC_HUGE_VAL_CHECK
 AC_TYPE_PID_T
 AC_TYPE_SIZE_T
 AC_TYPE_SIGNAL
 AC_TYPE_PID_T
 AC_TYPE_SIZE_T
 AC_TYPE_SIGNAL
@@ -614,10 +709,11 @@ dnl===
 dnl===-----------------------------------------------------------------------===
 
 AC_CHECK_FUNCS([backtrace ceilf floorf roundf rintf nearbyintf getcwd ])
 dnl===-----------------------------------------------------------------------===
 
 AC_CHECK_FUNCS([backtrace ceilf floorf roundf rintf nearbyintf getcwd ])
-AC_CHECK_FUNCS([getpagesize getrusage gettimeofday isatty mkdtemp mkstemp ])
+AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday])
+AC_CHECK_FUNCS([isatty mkdtemp mkstemp ])
 AC_CHECK_FUNCS([mktemp realpath sbrk setrlimit strdup strerror strerror_r ])
 AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
 AC_CHECK_FUNCS([mktemp realpath sbrk setrlimit strdup strerror strerror_r ])
 AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
-AC_CHECK_FUNCS([_setjmp _longjmp setjmp longjmp sigsetjmp siglongjmp])
+AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp])
 AC_C_PRINTF_A
 AC_FUNC_ALLOCA
 AC_FUNC_RAND48
 AC_C_PRINTF_A
 AC_FUNC_ALLOCA
 AC_FUNC_RAND48
@@ -632,22 +728,22 @@ AC_CXX_HAVE_FWD_ITERATOR
 AC_FUNC_ISNAN
 AC_FUNC_ISINF
 
 AC_FUNC_ISNAN
 AC_FUNC_ISINF
 
-dnl Check for mmap and mprotect support. We need both to do the JIT and for
-dnl bytecode loading, etc. We also need to know if /dev/zero is required to
-dnl be opened for allocating RWX memory.
-AC_FUNC_MMAP
-AC_FUNC_MMAP_FILE
-AC_NEED_DEV_ZERO_FOR_MMAP
-AC_CHECK_FUNC(mprotect,,
-              AC_MSG_ERROR([Function mprotect() required but not found]))
+dnl Check for mmap support.We also need to know if /dev/zero is required to 
+dnl be opened for allocating RWX memory.  
+dnl Make sure we aren't attempting to configure for an unknown system
+if test "$llvm_cv_platform_type" = "Unix" ; then
+  AC_FUNC_MMAP 
+  AC_FUNC_MMAP_FILE
+  AC_NEED_DEV_ZERO_FOR_MMAP
 
 
-if test "$ac_cv_func_mmap_fixed_mapped" = "no"
-then
-  AC_MSG_WARN([mmap() of a fixed address required but not supported])
-fi
-if test "$ac_cv_func_mmap_file" = "no"
-then
-  AC_MSG_WARN([mmap() of files required but not found])
+  if test "$ac_cv_func_mmap_fixed_mapped" = "no"
+  then
+    AC_MSG_WARN([mmap() of a fixed address required but not supported])
+  fi
+  if test "$ac_cv_func_mmap_file" = "no"
+  then
+    AC_MSG_WARN([mmap() of files required but not found])
+  fi
 fi
 
 dnl===-----------------------------------------------------------------------===
 fi
 
 dnl===-----------------------------------------------------------------------===
@@ -661,7 +757,8 @@ AC_CACHE_CHECK([whether llvm-gcc is sane],[llvm_cv_llvmgcc_sanity],
 [llvm_cv_llvmgcc_sanity="no"
 if test -x "$LLVMGCC" ; then
   cp /dev/null conftest.c
 [llvm_cv_llvmgcc_sanity="no"
 if test -x "$LLVMGCC" ; then
   cp /dev/null conftest.c
-  "$LLVMGCC" -emit-llvm -S -o - conftest.c | grep implementation > /dev/null 2>&1
+  "$LLVMGCC" -emit-llvm -S -o - conftest.c | \
+      grep 'target datalayout =' > /dev/null 2>&1
   if test $? -eq 0 ; then
     llvm_cv_llvmgcc_sanity="yes"
   fi
   if test $? -eq 0 ; then
     llvm_cv_llvmgcc_sanity="yes"
   fi
@@ -670,16 +767,22 @@ fi])
 
 dnl Since we have a sane llvm-gcc, identify it and its sub-tools 
 if test "$llvm_cv_llvmgcc_sanity" = "yes" ; then
 
 dnl Since we have a sane llvm-gcc, identify it and its sub-tools 
 if test "$llvm_cv_llvmgcc_sanity" = "yes" ; then
+  AC_MSG_CHECKING([llvm-gcc component support])
   llvmcc1path=`"$LLVMGCC" --print-prog-name=cc1`
   AC_SUBST(LLVMCC1,$llvmcc1path)
   llvmcc1pluspath=`"$LLVMGCC" --print-prog-name=cc1plus`
   AC_SUBST(LLVMCC1PLUS,$llvmcc1pluspath)
   llvmgccdir=`echo "$llvmcc1path" | sed 's,/libexec/.*,,'`
   AC_SUBST(LLVMGCCDIR,$llvmgccdir)
   llvmcc1path=`"$LLVMGCC" --print-prog-name=cc1`
   AC_SUBST(LLVMCC1,$llvmcc1path)
   llvmcc1pluspath=`"$LLVMGCC" --print-prog-name=cc1plus`
   AC_SUBST(LLVMCC1PLUS,$llvmcc1pluspath)
   llvmgccdir=`echo "$llvmcc1path" | sed 's,/libexec/.*,,'`
   AC_SUBST(LLVMGCCDIR,$llvmgccdir)
+  llvmgcclibexec=`echo "$llvmcc1path" | sed 's,/cc1,,'`
+  AC_SUBST(LLVMGCCLIBEXEC,$llvmgcclibexec)
   llvmgccversion=[`"$LLVMGCC" -dumpversion 2>&1 | sed 's/^\([0-9.]*\).*/\1/'`]
   llvmgccmajvers=[`echo $llvmgccversion | sed 's/^\([0-9]\).*/\1/'`]
   AC_SUBST(LLVMGCC_VERSION,$llvmgccversion)
   AC_SUBST(LLVMGCC_MAJVERS,$llvmgccmajvers)
   llvmgccversion=[`"$LLVMGCC" -dumpversion 2>&1 | sed 's/^\([0-9.]*\).*/\1/'`]
   llvmgccmajvers=[`echo $llvmgccversion | sed 's/^\([0-9]\).*/\1/'`]
   AC_SUBST(LLVMGCC_VERSION,$llvmgccversion)
   AC_SUBST(LLVMGCC_MAJVERS,$llvmgccmajvers)
+  llvmgcclangs=[`"$LLVMGCC" -v --help 2>&1 | grep '^Configured with:' | sed 's/^.*--enable-languages=\([^ -]*\).*/\1/'`]
+  AC_SUBST(LLVMGCC_LANGS,$llvmgcclangs)
+  AC_MSG_RESULT([ok])
 fi
 
 dnl Propagate the shared library extension that the libltdl checks did to 
 fi
 
 dnl Propagate the shared library extension that the libltdl checks did to 
@@ -689,7 +792,7 @@ AC_SUBST(SHLIBEXT,$libltdl_cv_shlibext)
 # Translate the various configuration directories and other basic
 # information into substitutions that will end up in Makefile.config.in 
 # that these configured values can be used by the makefiles
 # Translate the various configuration directories and other basic
 # information into substitutions that will end up in Makefile.config.in 
 # that these configured values can be used by the makefiles
-if test "${prefix}" == "NONE" ; then
+if test "${prefix}" = "NONE" ; then
   prefix="/usr/local"
 fi
 eval LLVM_PREFIX="${prefix}";
   prefix="/usr/local"
 fi
 eval LLVM_PREFIX="${prefix}";
@@ -756,6 +859,9 @@ AC_CONFIG_HEADERS([include/llvm/ADT/iterator])
 dnl Configure the makefile's configuration data
 AC_CONFIG_FILES([Makefile.config])
 
 dnl Configure the makefile's configuration data
 AC_CONFIG_FILES([Makefile.config])
 
+dnl Configure the RPM spec file for LLVM
+AC_CONFIG_FILES([llvm.spec])
+
 dnl Configure doxygen's configuration file
 AC_CONFIG_FILES([docs/doxygen.cfg])
 
 dnl Configure doxygen's configuration file
 AC_CONFIG_FILES([docs/doxygen.cfg])
 
@@ -778,11 +884,3 @@ AC_CONFIG_MAKEFILE(projects/Makefile)
 dnl Finally, crank out the output
 AC_OUTPUT
 
 dnl Finally, crank out the output
 AC_OUTPUT
 
-dnl Warn loudly if llvm-gcc was not obviously working
-if test "$llvm_cv_llvmgcc_sanity" = "no" ; then
- AC_MSG_WARN([***** llvm-gcc/llvm-g++ was not found, or does not appear to be ])
- AC_MSG_WARN([***** working. Please make sure you have llvmgcc and llvmg++ in])
- AC_MSG_WARN([***** your path before configuring LLVM. The runtime libraries])
- AC_MSG_WARN([***** (llvm/runtime) will not be built but you should be able to])
- AC_MSG_WARN([***** build the llvm tools.])
-fi