From 3e2d224722dc4eb88e990aa8d980d71e6de5ac0b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 24 Nov 2020 11:56:45 +0100 Subject: [PATCH] clang: Support user-provided llvm-config ... in the qmake and qbs builds. (The look-up mechanism in the cmake build is completely different.) Fixes: QTCREATORBUG-20592 Change-Id: I049740795108060aeada62dd030e82390e07fe48 Reviewed-by: Christian Stenger --- qbs/modules/libclang/functions.js | 3 ++ qbs/modules/libclang/libclang.qbs | 2 +- src/shared/clang/clang_installation.pri | 47 +++++++++++++------------ 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/qbs/modules/libclang/functions.js b/qbs/modules/libclang/functions.js index 77690ab47a9..c1cd5c237e9 100644 --- a/qbs/modules/libclang/functions.js +++ b/qbs/modules/libclang/functions.js @@ -35,6 +35,9 @@ function isSuitableLLVMConfig(llvmConfigCandidate, qtcFunctions) function llvmConfig(hostOS, qtcFunctions) { + var llvmConfigFromEnv = Environment.getEnv("LLVM_CONFIG"); + if (llvmConfigFromEnv) + return llvmConfigFromEnv; var llvmInstallDirFromEnv = Environment.getEnv("LLVM_INSTALL_DIR") var llvmConfigVariants = [ // CLANG-UPGRADE-CHECK: Adapt once we require a new minimum version. diff --git a/qbs/modules/libclang/libclang.qbs b/qbs/modules/libclang/libclang.qbs index 94142e57d88..98c28719e19 100644 --- a/qbs/modules/libclang/libclang.qbs +++ b/qbs/modules/libclang/libclang.qbs @@ -69,7 +69,7 @@ Module { validate: { if (!clangProbe.found) { console.warn("No usable libclang version found." - + " Set LLVM_INSTALL_DIR to build the Clang Code Model." + + " Set LLVM_CONFIG to build the Clang Code Model." + " For details, see" + " doc/src/editors/creator-only/creator-clang-codemodel.qdoc."); throw new Error(); diff --git a/src/shared/clang/clang_installation.pri b/src/shared/clang/clang_installation.pri index 28c2d0d3263..b33e0724a26 100644 --- a/src/shared/clang/clang_installation.pri +++ b/src/shared/clang/clang_installation.pri @@ -1,16 +1,21 @@ -isEmpty(LLVM_INSTALL_DIR):LLVM_INSTALL_DIR=$$(LLVM_INSTALL_DIR) -LLVM_INSTALL_DIR = $$clean_path($$LLVM_INSTALL_DIR) +isEmpty(LLVM_CONFIG): LLVM_CONFIG=$$(LLVM_CONFIG) +llvm_config = $$clean_path($$LLVM_CONFIG) +!isEmpty(llvm_config):!exists($$llvm_config) { + error("Explicitly given LLVM_CONFIG does not exist: $$llvm_config") +} -!isEmpty(LLVM_INSTALL_DIR):!exists($$LLVM_INSTALL_DIR) { - error("Explicitly given LLVM_INSTALL_DIR does not exist: $$LLVM_INSTALL_DIR") +isEmpty(LLVM_CONFIG) { + isEmpty(LLVM_INSTALL_DIR):LLVM_INSTALL_DIR=$$(LLVM_INSTALL_DIR) + LLVM_INSTALL_DIR = $$clean_path($$LLVM_INSTALL_DIR) + !isEmpty(LLVM_INSTALL_DIR):!exists($$LLVM_INSTALL_DIR) { + error("Explicitly given LLVM_INSTALL_DIR does not exist: $$LLVM_INSTALL_DIR") + } } defineReplace(llvmWarningOrError) { warningText = $$1 - errorText = $$2 - isEmpty(errorText): errorText = $$warningText - isEmpty(LLVM_INSTALL_DIR): warning($$warningText) - else: error($$errorText) + isEmpty(llvm_config): warning($$warningText) + else: error($$warningText) return(false) } @@ -134,19 +139,17 @@ defineReplace(extractWarnings) { BIN_EXTENSION = win32: BIN_EXTENSION = .exe -isEmpty(LLVM_INSTALL_DIR) { - unix { - llvm_config = $$system(which llvm-config-11) - isEmpty(llvm_config): llvm_config = $$system(which llvm-config-10) - isEmpty(llvm_config): llvm_config = $$system(which llvm-config-9) - } - isEmpty(llvm_config): llvm_config = llvm-config -} else { - exists($$LLVM_INSTALL_DIR/bin/llvm-config-11$$BIN_EXTENSION) { - llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config-11) +isEmpty(llvm_config) { + isEmpty(LLVM_INSTALL_DIR) { + unix: llvm_config = $$system(which llvm-config-11) + isEmpty(llvm_config): llvm_config = llvm-config } else { - llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config) - requires(exists($$llvm_config$$BIN_EXTENSION)) + exists($$LLVM_INSTALL_DIR/bin/llvm-config-11$$BIN_EXTENSION) { + llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config-11) + } else { + llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config) + requires(exists($$llvm_config$$BIN_EXTENSION)) + } } } @@ -154,9 +157,7 @@ output = $$system($$llvm_config --version, lines) LLVM_VERSION = $$extractVersion($$output) isEmpty(LLVM_VERSION) { - $$llvmWarningOrError(\ - "Cannot determine clang version. Set LLVM_INSTALL_DIR to build the Clang Code Model",\ - "LLVM_INSTALL_DIR does not contain a valid llvm-config, candidate: $$llvm_config") + $$llvmWarningOrError("Cannot determine clang version. Set LLVM_CONFIG to build the Clang Code Model") } else:!versionIsAtLeast($$LLVM_VERSION, 9, 0, 0): { # CLANG-UPGRADE-CHECK: Adapt minimum version numbers. $$llvmWarningOrError(\