From 5966c61add425d34b708ce9ea1da4f9398e989d0 Mon Sep 17 00:00:00 2001 From: Alex Lin Date: Thu, 2 Jun 2016 08:52:00 -0500 Subject: [PATCH] Build fails on Ubuntu 16.04 Created a configure time test to see if clang will compile ICG correctly. If the compilation fails, an error message telling the user to go download clang/llvm from llvm.org is show. refs #174 --- autoconf/configure.ac | 19 +++++++++++++++++++ configure | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/autoconf/configure.ac b/autoconf/configure.ac index 9b27630a..a9f47c62 100644 --- a/autoconf/configure.ac +++ b/autoconf/configure.ac @@ -16,6 +16,24 @@ AC_DEFUN([AX_LLVM_HOME],[ AC_SUBST([LLVM_HOME]) ]) +dnl Test if clang will link successfully. Some systems like Ubuntu 16.04 shipping with clang that does not work. +AC_DEFUN([AX_TEST_CLANG],[ + LLVM_INCLUDE_DIR=`$LLVM_CONFIG --includedir` + LLVM_ALL_LD_FLAGS=`$LLVM_CONFIG --ldflags --libs` + AS_IF([LLVM_SYSTEM_LD_FLAGS=`$LLVM_CONFIG --system-libs 2>/dev/null`],[],[]) + AC_LANG(C++) + AC_DEFINE([__STDC_CONSTANT_MACROS]) + AC_DEFINE([__STDC_FORMAT_MACROS]) + AC_DEFINE([__STDC_LIMIT_MACROS]) + AC_LANG_CONFTEST([AC_LANG_PROGRAM([[#include "llvm/Support/Host.h"]],[[llvm::sys::getDefaultTargetTriple(); return 0; ]])]) + AC_MSG_CHECKING([if clang works properly]) + ${CLANG}++ conftest.cpp --std=c++11 -I${LLVM_INCLUDE_DIR} ${LLVM_ALL_LD_FLAGS} ${LLVM_SYSTEM_LD_FLAGS} >&AS_MESSAGE_LOG_FD + AS_IF([test $? == 0 ],AC_MSG_RESULT([yes]), + [AC_MSG_ERROR([cannot use ${CLANG}. Download clang/llvm directly from http://llvm.org]) + ]) + /bin/rm -f a.out +]) + AC_DEFUN([AX_HDF5_HOME],[ AC_ARG_WITH([hdf5], AS_HELP_STRING([--with-hdf5@<:@=DIR@:>@], [HDF5 root directory]), @@ -199,6 +217,7 @@ AC_CHECK_FILE([$LLVM_LIB_DIR/libLLVMSupport.a], ) AC_PATH_PROG(CLANG, clang, noclang, "$LLVM_BIN_DIR:$LLVM_HOME/bin:/bin:/usr/bin:/usr/local/bin:/sw/bin") AS_IF([test "$ac_cv_path_CLANG" = "noclang"],AC_MSG_ERROR([could not find clang]),[]) +AX_TEST_CLANG dnl look for udunits in /usr/include and /usr/include/udunits2 AX_UDUNITS_HOME([]) diff --git a/configure b/configure index ceb503a6..d8c78b0b 100755 --- a/configure +++ b/configure @@ -2251,6 +2251,8 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + @@ -5749,6 +5751,47 @@ if test "$ac_cv_path_CLANG" = "noclang"; then : as_fn_error $? "could not find clang" "$LINENO" 5 fi + LLVM_INCLUDE_DIR=`$LLVM_CONFIG --includedir` + LLVM_ALL_LD_FLAGS=`$LLVM_CONFIG --ldflags --libs` + if LLVM_SYSTEM_LD_FLAGS=`$LLVM_CONFIG --system-libs 2>/dev/null`; then : + +fi + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + $as_echo "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h + + $as_echo "#define __STDC_FORMAT_MACROS 1" >>confdefs.h + + $as_echo "#define __STDC_LIMIT_MACROS 1" >>confdefs.h + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include "llvm/Support/Host.h" +int +main () +{ +llvm::sys::getDefaultTargetTriple(); return 0; + ; + return 0; +} +_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if clang works properly" >&5 +$as_echo_n "checking if clang works properly... " >&6; } + ${CLANG}++ conftest.cpp --std=c++11 -I${LLVM_INCLUDE_DIR} ${LLVM_ALL_LD_FLAGS} ${LLVM_SYSTEM_LD_FLAGS} >&5 + if test $? == 0 ; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + as_fn_error $? "cannot use ${CLANG}. Download clang/llvm directly from http://llvm.org" "$LINENO" 5 + +fi + /bin/rm -f a.out + + # Check whether --with-udunits was given.