From fa46c278c2405d4692da8638dc1de892c7c1141e Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 27 Jun 2014 15:48:00 +0200 Subject: [PATCH] ClangCodeModel: Fix qbs project file. Works now again for the mainstream UNIX case (relying on llvm-config). Change-Id: Ia928c363a43f54ca56d5371e755c00f4f10fe76f Reviewed-by: Joerg Bornemann --- src/plugins/clangcodemodel/clangcodemodel.qbs | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/plugins/clangcodemodel/clangcodemodel.qbs b/src/plugins/clangcodemodel/clangcodemodel.qbs index c2c8ed7034b..499f2e04928 100644 --- a/src/plugins/clangcodemodel/clangcodemodel.qbs +++ b/src/plugins/clangcodemodel/clangcodemodel.qbs @@ -1,5 +1,7 @@ import qbs import qbs.File +import qbs.Process +import QtcProcessOutputReader QtcPlugin { name: "ClangCodeModel" @@ -11,14 +13,12 @@ QtcPlugin { Depends { name: "TextEditor" } Depends { name: "Utils" } - property string llvmInstallDir: qbs.getEnv("LLVM_INSTALL_DIR") - condition: llvmInstallDir && !llvmInstallDir.isEmpty + property string llvmInstallDirFromEnv: qbs.getEnv("LLVM_INSTALL_DIR") property bool clangCompletion: true property bool clangHighlighting: true property bool clangIndexing: false - // Not used atm; we just rely on the LLVM_INSTALL_DIR environment variable. property string llvmConfig: { var llvmConfigVariants = [ "llvm-config", "llvm-config-3.2", "llvm-config-3.3", "llvm-config-3.4", @@ -26,10 +26,12 @@ QtcPlugin { ]; // Prefer llvm-config* from LLVM_INSTALL_DIR - for (var i = 0; i < llvmConfigVariants.length; ++i) { - var variant = llvmInstallDir + "/bin/" + llvmConfigVariants[i]; - if (File.exists(variant)) - return variant; + if (llvmInstallDirFromEnv) { + for (var i = 0; i < llvmConfigVariants.length; ++i) { + var variant = llvmInstallDirFromEnv + "/bin/" + llvmConfigVariants[i]; + if (File.exists(variant)) + return variant; + } } // Find llvm-config* in PATH @@ -44,20 +46,17 @@ QtcPlugin { } } - // Fallback - return "llvm-config"; + return undefined; } + condition: llvmConfig + + property string llvmIncludeDir: QtcProcessOutputReader.readOutput(llvmConfig, ["--includedir"]) + property string llvmLibDir: QtcProcessOutputReader.readOutput(llvmConfig, ["--libdir"]) + property string llvmVersion: QtcProcessOutputReader.readOutput(llvmConfig, ["--version"]) + .replace(/(\d+\.\d+).*/, "$1") - property string llvmIncludeDir: llvmInstallDir + "/include" cpp.includePaths: base.concat(llvmIncludeDir) - - property stringList llvmLibDirs: { - var list = [llvmInstallDir + "/lib"]; - if (qbs.targetOS.contains("windows")) - list.push(llvmInstallDir + "/bin"); - return list; - } - cpp.libraryPaths: base.concat(llvmLibDirs) + cpp.libraryPaths: base.concat(llvmLibDir) cpp.rpaths: cpp.libraryPaths property string llvmLib: "clang" @@ -65,6 +64,19 @@ QtcPlugin { ? ["advapi32", "shell32"] : [] cpp.dynamicLibraries: base.concat(llvmLib).concat(additionalLibraries) + cpp.defines: { + var defines = base; + defines.push('CLANG_VERSION="' + llvmVersion + '"'); + defines.push('CLANG_RESOURCE_DIR="' + llvmLibDir + '/clang/' + llvmVersion + '/include"'); + if (clangCompletion) + defines.push("CLANG_COMPLETION"); + if (clangHighlighting) + defines.push("CLANG_HIGHLIGHTING"); + if (clangIndexing) + defines.push("CLANG_INDEXING"); + return defines; + } + Group { name: "Completion support" condition: product.clangCompletion