forked from qt-creator/qt-creator
Clang: Clean up / Improve *clang*.{pri,pro}
clang_installation.pri * Remove pointless CLANG_COMPLETION, CLANG_HIGHLIGHTING defines * Remove auto-detection of llvm-config-* variants in PATH. This does not make any sense if the user has to provide LLVM_INSTALL_DIR. * If llvm-config is not found in LLVM_INSTALL_DIR, determine the clang version by looking into the lib dir (there should exist e.g. "clang/3.6.1") * Check paths for existence * Simplify logic * Do not call error() in helper functions clangcodemodel.pro * Print detected version * Sort HEADERS/SOURCES Change-Id: I020d2e78aea37ef01a337e6da658d7f5e56b3ac5 Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
This commit is contained in:
@@ -1,76 +1,72 @@
|
||||
include(../../qtcreatorplugin.pri)
|
||||
include(../../shared/clang/clang_installation.pri)
|
||||
|
||||
message("Building ClangCodeModel plugin with Clang from $$LLVM_INSTALL_DIR")
|
||||
message(" INCLUDEPATH += $$LLVM_INCLUDEPATH")
|
||||
message(" LIBS += $$LLVM_LIBS")
|
||||
|
||||
LIBS += $$LLVM_LIBS
|
||||
INCLUDEPATH += $$LLVM_INCLUDEPATH
|
||||
DEFINES += CLANGCODEMODEL_LIBRARY
|
||||
|
||||
# The following defines are used to determine the clang include path for intrinsics
|
||||
DEFINES += CLANG_VERSION=\\\"$${LLVM_VERSION}\\\"
|
||||
DEFINES += "\"CLANG_RESOURCE_DIR=\\\"$${LLVM_LIBDIR}/clang/$${LLVM_VERSION}/include\\\"\""
|
||||
|
||||
unix:QMAKE_LFLAGS += -Wl,-rpath,\'$$LLVM_LIBDIR\'
|
||||
|
||||
contains(DEFINES, CLANG_COMPLETION) {
|
||||
HEADERS += clangcompletion.h clangcompleter.h completionproposalsbuilder.h
|
||||
SOURCES += clangcompletion.cpp clangcompleter.cpp completionproposalsbuilder.cpp
|
||||
}
|
||||
|
||||
contains(DEFINES, CLANG_HIGHLIGHTING) {
|
||||
HEADERS += cppcreatemarkers.h
|
||||
SOURCES += cppcreatemarkers.cpp
|
||||
}
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/clangcodemodelplugin.cpp \
|
||||
$$PWD/clangcompleter.cpp \
|
||||
$$PWD/clangcompletion.cpp \
|
||||
$$PWD/clangeditordocumentparser.cpp \
|
||||
$$PWD/clangeditordocumentprocessor.cpp \
|
||||
$$PWD/sourcemarker.cpp \
|
||||
$$PWD/symbol.cpp \
|
||||
$$PWD/sourcelocation.cpp \
|
||||
$$PWD/unit.cpp \
|
||||
$$PWD/utils.cpp \
|
||||
$$PWD/utils_p.cpp \
|
||||
$$PWD/semanticmarker.cpp \
|
||||
$$PWD/clangmodelmanagersupport.cpp \
|
||||
$$PWD/clangprojectsettings.cpp \
|
||||
$$PWD/clangprojectsettingspropertiespage.cpp \
|
||||
$$PWD/clangutils.cpp \
|
||||
$$PWD/completionproposalsbuilder.cpp \
|
||||
$$PWD/cppcreatemarkers.cpp \
|
||||
$$PWD/cxprettyprinter.cpp \
|
||||
$$PWD/diagnostic.cpp \
|
||||
$$PWD/unsavedfiledata.cpp \
|
||||
$$PWD/fastindexer.cpp \
|
||||
$$PWD/pchinfo.cpp \
|
||||
$$PWD/pchmanager.cpp \
|
||||
$$PWD/clangprojectsettings.cpp \
|
||||
$$PWD/clangprojectsettingspropertiespage.cpp \
|
||||
$$PWD/raii/scopedclangoptions.cpp \
|
||||
$$PWD/clangmodelmanagersupport.cpp
|
||||
$$PWD/semanticmarker.cpp \
|
||||
$$PWD/sourcelocation.cpp \
|
||||
$$PWD/sourcemarker.cpp \
|
||||
$$PWD/symbol.cpp \
|
||||
$$PWD/unit.cpp \
|
||||
$$PWD/unsavedfiledata.cpp \
|
||||
$$PWD/utils.cpp \
|
||||
$$PWD/utils_p.cpp
|
||||
|
||||
HEADERS += \
|
||||
$$PWD/clangcodemodelplugin.h \
|
||||
$$PWD/clangcompleter.h \
|
||||
$$PWD/clangcompletion.h \
|
||||
$$PWD/clangeditordocumentparser.h \
|
||||
$$PWD/clangeditordocumentprocessor.h \
|
||||
$$PWD/clang_global.h \
|
||||
$$PWD/sourcemarker.h \
|
||||
$$PWD/clangmodelmanagersupport.h \
|
||||
$$PWD/clangprojectsettings.h \
|
||||
$$PWD/clangprojectsettingspropertiespage.h \
|
||||
$$PWD/clangutils.h \
|
||||
$$PWD/completionproposalsbuilder.h \
|
||||
$$PWD/constants.h \
|
||||
$$PWD/symbol.h \
|
||||
$$PWD/cppcreatemarkers.h \
|
||||
$$PWD/cxprettyprinter.h \
|
||||
$$PWD/cxraii.h \
|
||||
$$PWD/sourcelocation.h \
|
||||
$$PWD/unit.h \
|
||||
$$PWD/utils.h \
|
||||
$$PWD/utils_p.h \
|
||||
$$PWD/semanticmarker.h \
|
||||
$$PWD/diagnostic.h \
|
||||
$$PWD/unsavedfiledata.h \
|
||||
$$PWD/fastindexer.h \
|
||||
$$PWD/pchinfo.h \
|
||||
$$PWD/pchmanager.h \
|
||||
$$PWD/clangprojectsettings.h \
|
||||
$$PWD/clangprojectsettingspropertiespage.h \
|
||||
$$PWD/raii/scopedclangoptions.h \
|
||||
$$PWD/clangmodelmanagersupport.h
|
||||
|
||||
HEADERS += clangutils.h \
|
||||
cxprettyprinter.h
|
||||
|
||||
SOURCES += clangutils.cpp \
|
||||
cxprettyprinter.cpp
|
||||
$$PWD/semanticmarker.h \
|
||||
$$PWD/sourcelocation.h \
|
||||
$$PWD/sourcemarker.h \
|
||||
$$PWD/symbol.h \
|
||||
$$PWD/unit.h \
|
||||
$$PWD/unsavedfiledata.h \
|
||||
$$PWD/utils.h \
|
||||
$$PWD/utils_p.h
|
||||
|
||||
contains(DEFINES, CLANG_INDEXING) {
|
||||
HEADERS += \
|
||||
@@ -86,6 +82,8 @@ contains(DEFINES, CLANG_INDEXING) {
|
||||
# $$PWD/dependencygraph.cpp \
|
||||
}
|
||||
|
||||
FORMS += $$PWD/clangprojectsettingspropertiespage.ui
|
||||
|
||||
equals(TEST, 1) {
|
||||
RESOURCES += \
|
||||
$$PWD/test/clang_tests_database.qrc
|
||||
@@ -94,8 +92,8 @@ equals(TEST, 1) {
|
||||
$$PWD/test/completiontesthelper.h
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/test/completiontesthelper.cpp \
|
||||
$$PWD/test/clangcompletion_test.cpp
|
||||
$$PWD/test/clangcompletion_test.cpp \
|
||||
$$PWD/test/completiontesthelper.cpp
|
||||
|
||||
DISTFILES += \
|
||||
$$PWD/test/cxx_regression_1.cpp \
|
||||
@@ -110,14 +108,12 @@ equals(TEST, 1) {
|
||||
$$PWD/test/cxx_snippets_1.cpp \
|
||||
$$PWD/test/cxx_snippets_2.cpp \
|
||||
$$PWD/test/cxx_snippets_3.cpp \
|
||||
test/cxx_snippets_4.cpp \
|
||||
test/objc_messages_1.mm \
|
||||
test/objc_messages_2.mm \
|
||||
test/objc_messages_3.mm
|
||||
$$PWD/test/cxx_snippets_4.cpp \
|
||||
$$PWD/test/objc_messages_1.mm \
|
||||
$$PWD/test/objc_messages_2.mm \
|
||||
$$PWD/test/objc_messages_3.mm
|
||||
}
|
||||
|
||||
FORMS += $$PWD/clangprojectsettingspropertiespage.ui
|
||||
|
||||
macx {
|
||||
LIBCLANG_VERSION=3.3
|
||||
POSTL = install_name_tool -change "@executable_path/../lib/libclang.$${LIBCLANG_VERSION}.dylib" "$$LLVM_INSTALL_DIR/lib/libclang.$${LIBCLANG_VERSION}.dylib" "\"$${DESTDIR}/lib$${TARGET}.dylib\"" $$escape_expand(\\n\\t)
|
||||
|
||||
@@ -1,39 +1,29 @@
|
||||
isEmpty(LLVM_INSTALL_DIR):LLVM_INSTALL_DIR=$$(LLVM_INSTALL_DIR)
|
||||
LLVM_INSTALL_DIR = $$clean_path($$LLVM_INSTALL_DIR)
|
||||
isEmpty(LLVM_INSTALL_DIR): error("No LLVM_INSTALL_DIR provided")
|
||||
!exists($$LLVM_INSTALL_DIR): error("LLVM_INSTALL_DIR does not exist: $$LLVM_INSTALL_DIR")
|
||||
|
||||
DEFINES += CLANG_COMPLETION
|
||||
DEFINES += CLANG_HIGHLIGHTING
|
||||
#DEFINES += CLANG_INDEXING
|
||||
defineReplace(findLLVMVersionFromLibDir) {
|
||||
libdir = $$1
|
||||
version_dirs = $$files($$libdir/clang/*)
|
||||
for (version_dir, version_dirs) {
|
||||
fileName = $$basename(version_dir)
|
||||
version = $$find(fileName, ^(\\d+\\.\\d+\\.\\d+)$)
|
||||
!isEmpty(version): return($$version)
|
||||
}
|
||||
}
|
||||
|
||||
defineReplace(findLLVMConfig) {
|
||||
LLVM_CONFIG_VARIANTS = \
|
||||
llvm-config llvm-config-3.2 llvm-config-3.3 llvm-config-3.4 \
|
||||
llvm-config-3.5 llvm-config-3.6 llvm-config-4.0 llvm-config-4.1
|
||||
|
||||
# Prefer llvm-config* from LLVM_INSTALL_DIR
|
||||
!isEmpty(LLVM_INSTALL_DIR) {
|
||||
for(variant, LLVM_CONFIG_VARIANTS) {
|
||||
variant=$$LLVM_INSTALL_DIR/bin/$$variant
|
||||
exists($$variant) {
|
||||
return($$variant)
|
||||
}
|
||||
defineReplace(findClangLibInLibDir) {
|
||||
libdir = $$1
|
||||
exists ($${libdir}/libclang.*) {
|
||||
#message("LLVM was build with autotools")
|
||||
return("clang")
|
||||
} else {
|
||||
exists ($${libdir}/liblibclang.*) {
|
||||
#message("LLVM was build with CMake")
|
||||
return("libclang")
|
||||
}
|
||||
}
|
||||
|
||||
# Find llvm-config* in PATH
|
||||
ENV_PATH = $$(PATH)
|
||||
ENV_PATH = $$split(ENV_PATH, $$QMAKE_DIRLIST_SEP)
|
||||
for(variant, LLVM_CONFIG_VARIANTS) {
|
||||
for(path, ENV_PATH) {
|
||||
subvariant = $$path/$$variant
|
||||
exists($$subvariant) {
|
||||
return($$subvariant)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Fallback
|
||||
return(llvm-config)
|
||||
}
|
||||
|
||||
defineReplace(findClangOnWindows) {
|
||||
@@ -48,54 +38,41 @@ defineReplace(findClangOnWindows) {
|
||||
}
|
||||
}
|
||||
}
|
||||
error("Cannot find clang shared library at $${LLVM_INSTALL_DIR}")
|
||||
}
|
||||
|
||||
win32 {
|
||||
LLVM_INCLUDEPATH = "$$LLVM_INSTALL_DIR/include"
|
||||
CLANG_LIB_PATH = $$findClangOnWindows()
|
||||
CLANG_LIB = clang
|
||||
!exists("$${CLANG_LIB_PATH}/clang.*"):CLANG_LIB = libclang
|
||||
LLVM_LIBDIR = $$findClangOnWindows()
|
||||
isEmpty(LLVM_LIBDIR): error("Cannot find clang shared library at $${LLVM_INSTALL_DIR}")
|
||||
LLVM_VERSION = $$findLLVMVersionFromLibDir($$LLVM_LIBDIR)
|
||||
|
||||
LLVM_LIBS = -L"$${CLANG_LIB_PATH}" -l$${CLANG_LIB}
|
||||
clang_lib = clang
|
||||
!exists("$${LLVM_LIBDIR}/clang.*"): clang_lib = libclang
|
||||
|
||||
LLVM_LIBS = -L"$${LLVM_LIBDIR}" -l$${clang_lib}
|
||||
LLVM_LIBS += -ladvapi32 -lshell32
|
||||
LLVM_VERSION = 3.4
|
||||
}
|
||||
|
||||
unix {
|
||||
LLVM_CONFIG = $$findLLVMConfig()
|
||||
|
||||
LLVM_VERSION = $$system($$LLVM_CONFIG --version 2>/dev/null)
|
||||
LLVM_VERSION = $$replace(LLVM_VERSION, ^(\\d+\\.\\d+\\.\\d+).*$, \\1)
|
||||
message("... version $$LLVM_VERSION")
|
||||
|
||||
LLVM_INCLUDEPATH = $$system($$LLVM_CONFIG --includedir 2>/dev/null)
|
||||
isEmpty(LLVM_INCLUDEPATH):LLVM_INCLUDEPATH=$$LLVM_INSTALL_DIR/include
|
||||
LLVM_LIBDIR = $$system($$LLVM_CONFIG --libdir 2>/dev/null)
|
||||
isEmpty(LLVM_LIBDIR):LLVM_LIBDIR=$$LLVM_INSTALL_DIR/lib
|
||||
|
||||
exists ($${LLVM_LIBDIR}/libclang.*) {
|
||||
#message("LLVM was build with autotools")
|
||||
CLANG_LIB = clang
|
||||
llvm_config = $$LLVM_INSTALL_DIR/bin/llvm-config
|
||||
exists($$llvm_config) {
|
||||
#message("llvm-config found, querying it for paths and version")
|
||||
LLVM_LIBDIR = $$system($$llvm_config --libdir 2>/dev/null)
|
||||
LLVM_INCLUDEPATH = $$system($$llvm_config --includedir 2>/dev/null)
|
||||
output = $$system($$llvm_config --version 2>/dev/null)
|
||||
LLVM_VERSION = $$replace(output, ^(\\d+\\.\\d+\\.\\d+)$, \\1)
|
||||
} else {
|
||||
exists ($${LLVM_LIBDIR}/liblibclang.*) {
|
||||
#message("LLVM was build with CMake")
|
||||
CLANG_LIB = libclang
|
||||
} else {
|
||||
exists ($${LLVM_INSTALL_DIR}/lib/libclang.*) {
|
||||
#message("libclang placed separately from LLVM")
|
||||
CLANG_LIB = clang
|
||||
LLVM_LIBDIR = $${LLVM_INSTALL_DIR}/lib
|
||||
LLVM_INCLUDEPATH=$${LLVM_INSTALL_DIR}/include
|
||||
} else {
|
||||
error("Cannot find Clang shared library!")
|
||||
}
|
||||
}
|
||||
#message("llvm-config not found, concluding paths and version from LLVM_INSTALL_DIR")
|
||||
LLVM_INCLUDEPATH = $$LLVM_INSTALL_DIR/include
|
||||
LLVM_LIBDIR = $$LLVM_INSTALL_DIR/lib
|
||||
LLVM_VERSION = $$findLLVMVersionFromLibDir($$LLVM_LIBDIR)
|
||||
}
|
||||
|
||||
LLVM_LIBS = -L$${LLVM_LIBDIR}
|
||||
LLVM_LIBS += -l$${CLANG_LIB}
|
||||
}
|
||||
!exists($$LLVM_INCLUDEPATH): error("Cannot detect include dir for clang, candidate: $$LLVM_INCLUDEPATH")
|
||||
!exists($$LLVM_LIBDIR): error("Cannot detect lib dir for clang, candidate: $$LLVM_LIBDIR")
|
||||
isEmpty(LLVM_VERSION): error("Cannot determine clang version at $$LLVM_INSTALL_DIR")
|
||||
clang_lib = $$findClangLibInLibDir($$LLVM_LIBDIR)
|
||||
isEmpty(clang_lib): error("Cannot find Clang shared library in $$LLVM_LIBDIR")
|
||||
|
||||
DEFINES += CLANG_VERSION=\\\"$${LLVM_VERSION}\\\"
|
||||
DEFINES += "\"CLANG_RESOURCE_DIR=\\\"$${LLVM_LIBDIR}/clang/$${LLVM_VERSION}/include\\\"\""
|
||||
LLVM_LIBS = -L$${LLVM_LIBDIR} -l$${clang_lib}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user