dnl Act as a single handler point for LLVM options
dnl Assigns enable_llvm, system_llvm, llvm_linking, and llvmver variables
dnl Assigns llvmoptserrmsg variable on error

dnl Determine if LLVM is requested (or auto, reassigned if system-llvm specified)
dnl Overrides "auto" with "yes" if a system-llvm is specified
AC_ARG_ENABLE([llvm],AC_HELP_STRING([--enable-llvm],
[enable 'llvm' JIT/verifier support @<:@default=auto@:>@]),
[enable_llvm=$enableval], [enable_llvm="auto"])

if test "$enable_llvm" != "no"; then

dnl Determine whether to user built in LLVM or to use system-specified LLVM
dnl locate the llvmconfig program
AC_ARG_WITH([system-llvm], AC_HELP_STRING([--with-system-llvm],
[Specify system llvm location or to use old package, uses full path to llvm-config or bin directory
     (default=search PATH environment variable)]),
[system_llvm=$withval; if test "$enable_llvm" = "auto"; then enable_llvm="yes"; fi], [system_llvm="yes"])

case "$system_llvm" in
  yes)
     AC_PATH_PROG([llvmconfig], [llvm-config])
     if test "x$llvmconfig" = "x"; then
         llvmoptserrmsg="llvm-config cannot be found within PATH"
     fi
     ;;
  no) ;;
  *)
     if test -d "$withval"; then
         AC_PATH_PROG([llvmconfig], [llvm-config], [], [$withval/bin])
     else
         llvmconfig=$withval
         if test ! -x "$llvmconfig"; then
             llvmconfig=""
         fi
     fi

     if test "x$llvmconfig" = "x"; then
         llvmoptserrmsg="llvm-config does not exist at $withval"
     fi
     ;;
esac

if test "x$llvmconfig" != "x"; then

dnl Determine linking method to external LLVM, built-in only does static linking
AC_ARG_WITH([llvm-linking], [AC_HELP_STRING([--with-llvm-linking],
[specifies method to linking llvm @<:@static|dynamic@:>@, only valid with --with-system-llvm])],
[if test "x$llvmconfig" = "x"; then
   AC_MSG_ERROR([Failed to configure LLVM, and LLVM linking was specified without valid llvm-config])
else
   case "$withval" in
     static)
         llvm_linking="static"
         ;;
     dynamic)
         llvm_linking="dynamic"
         ;;
     *)
         AC_MSG_ERROR([Invalid argument to --with-llvm-linking])
   esac
fi
], [llvm_linking=""])

llvmver=`$llvmconfig --version`

else dnl test "x$llvmconfig" != "x"

llvmver="2.8"
system_llvm="internal"

fi dnl test "x$llvmconfig" != "x"

fi dnl test "enable_llvm" != "no