From f418adbc0dd94362187d4249caf90b5d1ccfabdc Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Fri, 23 Nov 2012 21:43:29 +0100 Subject: [PATCH] configure.ac: check if TargetInfo::CreateTargetInfo takes TargetOptions pointer Newer versions of clang take a pointer, while older versions take a reference. Signed-off-by: Sven Verdoolaege --- configure.ac | 7 +++++++ interface/extract_interface.cc | 26 +++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 5ec7f7b8..a0a37914 100644 --- a/configure.ac +++ b/configure.ac @@ -167,6 +167,13 @@ system) AC_CHECK_HEADER([clang/Basic/DiagnosticOptions.h], [AC_DEFINE([HAVE_BASIC_DIAGNOSTICOPTIONS_H], [], [Define if clang/Basic/DiagnosticOptions.h exists])]) + AC_TRY_COMPILE([#include ], [ + using namespace clang; + TargetOptions *TO; + DiagnosticsEngine *Diags; + TargetInfo::CreateTargetInfo(*Diags, TO); + ], [AC_DEFINE([CREATETARGETINFO_TAKES_POINTER], [], + [Define if TargetInfo::CreateTargetInfo takes pointer])]) AC_LANG_POP CPPFLAGS="$SAVE_CPPFLAGS" diff --git a/interface/extract_interface.cc b/interface/extract_interface.cc index f39febc9..db593420 100644 --- a/interface/extract_interface.cc +++ b/interface/extract_interface.cc @@ -210,6 +210,28 @@ static TextDiagnosticPrinter *construct_printer(void) #endif +#ifdef CREATETARGETINFO_TAKES_POINTER + +static TargetInfo *create_target_info(CompilerInstance *Clang, + DiagnosticsEngine &Diags) +{ + TargetOptions &TO = Clang->getTargetOpts(); + TO.Triple = llvm::sys::getDefaultTargetTriple(); + return TargetInfo::CreateTargetInfo(Diags, &TO); +} + +#else + +static TargetInfo *create_target_info(CompilerInstance *Clang, + DiagnosticsEngine &Diags) +{ + TargetOptions &TO = Clang->getTargetOpts(); + TO.Triple = llvm::sys::getDefaultTargetTriple(); + return TargetInfo::CreateTargetInfo(Diags, TO); +} + +#endif + int main(int argc, char *argv[]) { llvm::cl::ParseCommandLineOptions(argc, argv); @@ -224,9 +246,7 @@ int main(int argc, char *argv[]) Clang->setInvocation(invocation); Clang->createFileManager(); Clang->createSourceManager(Clang->getFileManager()); - TargetOptions &TO = Clang->getTargetOpts(); - TO.Triple = llvm::sys::getDefaultTargetTriple(); - TargetInfo *target = TargetInfo::CreateTargetInfo(Diags, TO); + TargetInfo *target = create_target_info(Clang, Diags); Clang->setTarget(target); CompilerInvocation::setLangDefaults(Clang->getLangOpts(), IK_C, LangStandard::lang_unspecified); -- 2.11.4.GIT