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(../../qtcreatorplugin.pri)
|
||||||
include(../../shared/clang/clang_installation.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
|
LIBS += $$LLVM_LIBS
|
||||||
INCLUDEPATH += $$LLVM_INCLUDEPATH
|
INCLUDEPATH += $$LLVM_INCLUDEPATH
|
||||||
DEFINES += CLANGCODEMODEL_LIBRARY
|
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\'
|
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 += \
|
SOURCES += \
|
||||||
$$PWD/clangcodemodelplugin.cpp \
|
$$PWD/clangcodemodelplugin.cpp \
|
||||||
|
$$PWD/clangcompleter.cpp \
|
||||||
|
$$PWD/clangcompletion.cpp \
|
||||||
$$PWD/clangeditordocumentparser.cpp \
|
$$PWD/clangeditordocumentparser.cpp \
|
||||||
$$PWD/clangeditordocumentprocessor.cpp \
|
$$PWD/clangeditordocumentprocessor.cpp \
|
||||||
$$PWD/sourcemarker.cpp \
|
$$PWD/clangmodelmanagersupport.cpp \
|
||||||
$$PWD/symbol.cpp \
|
$$PWD/clangprojectsettings.cpp \
|
||||||
$$PWD/sourcelocation.cpp \
|
$$PWD/clangprojectsettingspropertiespage.cpp \
|
||||||
$$PWD/unit.cpp \
|
$$PWD/clangutils.cpp \
|
||||||
$$PWD/utils.cpp \
|
$$PWD/completionproposalsbuilder.cpp \
|
||||||
$$PWD/utils_p.cpp \
|
$$PWD/cppcreatemarkers.cpp \
|
||||||
$$PWD/semanticmarker.cpp \
|
$$PWD/cxprettyprinter.cpp \
|
||||||
$$PWD/diagnostic.cpp \
|
$$PWD/diagnostic.cpp \
|
||||||
$$PWD/unsavedfiledata.cpp \
|
|
||||||
$$PWD/fastindexer.cpp \
|
$$PWD/fastindexer.cpp \
|
||||||
$$PWD/pchinfo.cpp \
|
$$PWD/pchinfo.cpp \
|
||||||
$$PWD/pchmanager.cpp \
|
$$PWD/pchmanager.cpp \
|
||||||
$$PWD/clangprojectsettings.cpp \
|
|
||||||
$$PWD/clangprojectsettingspropertiespage.cpp \
|
|
||||||
$$PWD/raii/scopedclangoptions.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 += \
|
HEADERS += \
|
||||||
$$PWD/clangcodemodelplugin.h \
|
$$PWD/clangcodemodelplugin.h \
|
||||||
|
$$PWD/clangcompleter.h \
|
||||||
|
$$PWD/clangcompletion.h \
|
||||||
$$PWD/clangeditordocumentparser.h \
|
$$PWD/clangeditordocumentparser.h \
|
||||||
$$PWD/clangeditordocumentprocessor.h \
|
$$PWD/clangeditordocumentprocessor.h \
|
||||||
$$PWD/clang_global.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/constants.h \
|
||||||
$$PWD/symbol.h \
|
$$PWD/cppcreatemarkers.h \
|
||||||
|
$$PWD/cxprettyprinter.h \
|
||||||
$$PWD/cxraii.h \
|
$$PWD/cxraii.h \
|
||||||
$$PWD/sourcelocation.h \
|
|
||||||
$$PWD/unit.h \
|
|
||||||
$$PWD/utils.h \
|
|
||||||
$$PWD/utils_p.h \
|
|
||||||
$$PWD/semanticmarker.h \
|
|
||||||
$$PWD/diagnostic.h \
|
$$PWD/diagnostic.h \
|
||||||
$$PWD/unsavedfiledata.h \
|
|
||||||
$$PWD/fastindexer.h \
|
$$PWD/fastindexer.h \
|
||||||
$$PWD/pchinfo.h \
|
$$PWD/pchinfo.h \
|
||||||
$$PWD/pchmanager.h \
|
$$PWD/pchmanager.h \
|
||||||
$$PWD/clangprojectsettings.h \
|
|
||||||
$$PWD/clangprojectsettingspropertiespage.h \
|
|
||||||
$$PWD/raii/scopedclangoptions.h \
|
$$PWD/raii/scopedclangoptions.h \
|
||||||
$$PWD/clangmodelmanagersupport.h
|
$$PWD/semanticmarker.h \
|
||||||
|
$$PWD/sourcelocation.h \
|
||||||
HEADERS += clangutils.h \
|
$$PWD/sourcemarker.h \
|
||||||
cxprettyprinter.h
|
$$PWD/symbol.h \
|
||||||
|
$$PWD/unit.h \
|
||||||
SOURCES += clangutils.cpp \
|
$$PWD/unsavedfiledata.h \
|
||||||
cxprettyprinter.cpp
|
$$PWD/utils.h \
|
||||||
|
$$PWD/utils_p.h
|
||||||
|
|
||||||
contains(DEFINES, CLANG_INDEXING) {
|
contains(DEFINES, CLANG_INDEXING) {
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
@@ -86,6 +82,8 @@ contains(DEFINES, CLANG_INDEXING) {
|
|||||||
# $$PWD/dependencygraph.cpp \
|
# $$PWD/dependencygraph.cpp \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FORMS += $$PWD/clangprojectsettingspropertiespage.ui
|
||||||
|
|
||||||
equals(TEST, 1) {
|
equals(TEST, 1) {
|
||||||
RESOURCES += \
|
RESOURCES += \
|
||||||
$$PWD/test/clang_tests_database.qrc
|
$$PWD/test/clang_tests_database.qrc
|
||||||
@@ -94,8 +92,8 @@ equals(TEST, 1) {
|
|||||||
$$PWD/test/completiontesthelper.h
|
$$PWD/test/completiontesthelper.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
$$PWD/test/completiontesthelper.cpp \
|
$$PWD/test/clangcompletion_test.cpp \
|
||||||
$$PWD/test/clangcompletion_test.cpp
|
$$PWD/test/completiontesthelper.cpp
|
||||||
|
|
||||||
DISTFILES += \
|
DISTFILES += \
|
||||||
$$PWD/test/cxx_regression_1.cpp \
|
$$PWD/test/cxx_regression_1.cpp \
|
||||||
@@ -110,14 +108,12 @@ equals(TEST, 1) {
|
|||||||
$$PWD/test/cxx_snippets_1.cpp \
|
$$PWD/test/cxx_snippets_1.cpp \
|
||||||
$$PWD/test/cxx_snippets_2.cpp \
|
$$PWD/test/cxx_snippets_2.cpp \
|
||||||
$$PWD/test/cxx_snippets_3.cpp \
|
$$PWD/test/cxx_snippets_3.cpp \
|
||||||
test/cxx_snippets_4.cpp \
|
$$PWD/test/cxx_snippets_4.cpp \
|
||||||
test/objc_messages_1.mm \
|
$$PWD/test/objc_messages_1.mm \
|
||||||
test/objc_messages_2.mm \
|
$$PWD/test/objc_messages_2.mm \
|
||||||
test/objc_messages_3.mm
|
$$PWD/test/objc_messages_3.mm
|
||||||
}
|
}
|
||||||
|
|
||||||
FORMS += $$PWD/clangprojectsettingspropertiespage.ui
|
|
||||||
|
|
||||||
macx {
|
macx {
|
||||||
LIBCLANG_VERSION=3.3
|
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)
|
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)
|
isEmpty(LLVM_INSTALL_DIR):LLVM_INSTALL_DIR=$$(LLVM_INSTALL_DIR)
|
||||||
LLVM_INSTALL_DIR = $$clean_path($$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
|
defineReplace(findLLVMVersionFromLibDir) {
|
||||||
DEFINES += CLANG_HIGHLIGHTING
|
libdir = $$1
|
||||||
#DEFINES += CLANG_INDEXING
|
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) {
|
defineReplace(findClangLibInLibDir) {
|
||||||
LLVM_CONFIG_VARIANTS = \
|
libdir = $$1
|
||||||
llvm-config llvm-config-3.2 llvm-config-3.3 llvm-config-3.4 \
|
exists ($${libdir}/libclang.*) {
|
||||||
llvm-config-3.5 llvm-config-3.6 llvm-config-4.0 llvm-config-4.1
|
#message("LLVM was build with autotools")
|
||||||
|
return("clang")
|
||||||
# Prefer llvm-config* from LLVM_INSTALL_DIR
|
} else {
|
||||||
!isEmpty(LLVM_INSTALL_DIR) {
|
exists ($${libdir}/liblibclang.*) {
|
||||||
for(variant, LLVM_CONFIG_VARIANTS) {
|
#message("LLVM was build with CMake")
|
||||||
variant=$$LLVM_INSTALL_DIR/bin/$$variant
|
return("libclang")
|
||||||
exists($$variant) {
|
|
||||||
return($$variant)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# 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) {
|
defineReplace(findClangOnWindows) {
|
||||||
@@ -48,54 +38,41 @@ defineReplace(findClangOnWindows) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
error("Cannot find clang shared library at $${LLVM_INSTALL_DIR}")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
LLVM_INCLUDEPATH = "$$LLVM_INSTALL_DIR/include"
|
LLVM_INCLUDEPATH = "$$LLVM_INSTALL_DIR/include"
|
||||||
CLANG_LIB_PATH = $$findClangOnWindows()
|
LLVM_LIBDIR = $$findClangOnWindows()
|
||||||
CLANG_LIB = clang
|
isEmpty(LLVM_LIBDIR): error("Cannot find clang shared library at $${LLVM_INSTALL_DIR}")
|
||||||
!exists("$${CLANG_LIB_PATH}/clang.*"):CLANG_LIB = libclang
|
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_LIBS += -ladvapi32 -lshell32
|
||||||
LLVM_VERSION = 3.4
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unix {
|
unix {
|
||||||
LLVM_CONFIG = $$findLLVMConfig()
|
llvm_config = $$LLVM_INSTALL_DIR/bin/llvm-config
|
||||||
|
exists($$llvm_config) {
|
||||||
LLVM_VERSION = $$system($$LLVM_CONFIG --version 2>/dev/null)
|
#message("llvm-config found, querying it for paths and version")
|
||||||
LLVM_VERSION = $$replace(LLVM_VERSION, ^(\\d+\\.\\d+\\.\\d+).*$, \\1)
|
LLVM_LIBDIR = $$system($$llvm_config --libdir 2>/dev/null)
|
||||||
message("... version $$LLVM_VERSION")
|
LLVM_INCLUDEPATH = $$system($$llvm_config --includedir 2>/dev/null)
|
||||||
|
output = $$system($$llvm_config --version 2>/dev/null)
|
||||||
LLVM_INCLUDEPATH = $$system($$LLVM_CONFIG --includedir 2>/dev/null)
|
LLVM_VERSION = $$replace(output, ^(\\d+\\.\\d+\\.\\d+)$, \\1)
|
||||||
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
|
|
||||||
} else {
|
} else {
|
||||||
exists ($${LLVM_LIBDIR}/liblibclang.*) {
|
#message("llvm-config not found, concluding paths and version from LLVM_INSTALL_DIR")
|
||||||
#message("LLVM was build with CMake")
|
LLVM_INCLUDEPATH = $$LLVM_INSTALL_DIR/include
|
||||||
CLANG_LIB = libclang
|
LLVM_LIBDIR = $$LLVM_INSTALL_DIR/lib
|
||||||
} else {
|
LLVM_VERSION = $$findLLVMVersionFromLibDir($$LLVM_LIBDIR)
|
||||||
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!")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVM_LIBS = -L$${LLVM_LIBDIR}
|
!exists($$LLVM_INCLUDEPATH): error("Cannot detect include dir for clang, candidate: $$LLVM_INCLUDEPATH")
|
||||||
LLVM_LIBS += -l$${CLANG_LIB}
|
!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}\\\"
|
LLVM_LIBS = -L$${LLVM_LIBDIR} -l$${clang_lib}
|
||||||
DEFINES += "\"CLANG_RESOURCE_DIR=\\\"$${LLVM_LIBDIR}/clang/$${LLVM_VERSION}/include\\\"\""
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user