aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2017-05-12 18:50:50 -0700
committerJake Petroules <jake.petroules@qt.io>2017-06-13 15:47:18 +0000
commit8b5e5af31e7c0860f8cf4f8fa50e7b322cadca62 (patch)
tree36a7e2fc38c7571cdf7e4c6b6449754e39cb993c
parentd5dc7a2571027168d1a74cbb2578848dc843e20e (diff)
Transform the scanner plugin manager into a true generic plugin manager
...and fit the generator plugins into this new plugin structure. Plugins are now handled entirely by the build system in a generic manner and no part of qbscore (code or build files) has a direct reference to any plugin regardless of whether qbs is being built as shared or static libraries. Change-Id: I4a20546ce275df71083ee22c2cb67f781c4de764 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--qbs.pro1
-rw-r--r--src/lib/corelib/api/project.cpp15
-rw-r--r--src/lib/corelib/buildgraph/qtmocscanner.cpp1
-rw-r--r--src/lib/corelib/corelib.qbs7
-rw-r--r--src/lib/corelib/generators/clangcompilationdb/clangcompilationdb.pri5
-rw-r--r--src/lib/corelib/generators/clangcompilationdb/clangcompilationdb.qbs19
-rw-r--r--src/lib/corelib/generators/generatableprojectiterator.h2
-rw-r--r--src/lib/corelib/generators/generator.h10
-rw-r--r--src/lib/corelib/generators/generatordata.h6
-rw-r--r--src/lib/corelib/generators/generators.pri3
-rw-r--r--src/lib/corelib/generators/generators.qbs8
-rw-r--r--src/lib/corelib/tools/filesaver.h4
-rw-r--r--src/lib/corelib/tools/projectgeneratormanager.cpp20
-rw-r--r--src/lib/corelib/tools/projectgeneratormanager.h6
-rw-r--r--src/lib/corelib/tools/qbspluginmanager.cpp145
-rw-r--r--src/lib/corelib/tools/qbspluginmanager.h96
-rw-r--r--src/lib/corelib/tools/scannerpluginmanager.cpp66
-rw-r--r--src/lib/corelib/tools/scannerpluginmanager.h24
-rw-r--r--src/lib/corelib/tools/tools.pri3
-rw-r--r--src/lib/libs.qbs1
-rw-r--r--src/plugins/generator/clangcompilationdb/clangcompilationdb.pro12
-rw-r--r--src/plugins/generator/clangcompilationdb/clangcompilationdb.qbs11
-rw-r--r--src/plugins/generator/clangcompilationdb/clangcompilationdbgenerator.cpp (renamed from src/lib/corelib/generators/clangcompilationdb/clangcompilationdbgenerator.cpp)0
-rw-r--r--src/plugins/generator/clangcompilationdb/clangcompilationdbgenerator.h (renamed from src/lib/corelib/generators/clangcompilationdb/clangcompilationdbgenerator.h)0
-rw-r--r--src/plugins/generator/clangcompilationdb/clangcompilationdbgeneratorplugin.cpp64
-rw-r--r--src/plugins/generator/generator.pro2
-rw-r--r--src/plugins/generator/visualstudio/io/msbuildprojectwriter.cpp (renamed from src/lib/corelib/generators/visualstudio/io/msbuildprojectwriter.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/io/msbuildprojectwriter.h (renamed from src/lib/corelib/generators/visualstudio/io/msbuildprojectwriter.h)0
-rw-r--r--src/plugins/generator/visualstudio/io/visualstudiosolutionwriter.cpp (renamed from src/lib/corelib/generators/visualstudio/io/visualstudiosolutionwriter.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/io/visualstudiosolutionwriter.h (renamed from src/lib/corelib/generators/visualstudio/io/visualstudiosolutionwriter.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/imsbuildgroup.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/imsbuildgroup.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/imsbuildgroup.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/imsbuildgroup.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/imsbuildnode.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/imsbuildnode.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/imsbuildnode.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/imsbuildnode.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/imsbuildnodevisitor.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/imsbuildnodevisitor.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/imsbuildproperty.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/imsbuildproperty.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/imsbuildproperty.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/imsbuildproperty.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildclcompile.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclcompile.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildclcompile.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclcompile.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildclinclude.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclinclude.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildclinclude.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclinclude.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildfileitem.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfileitem.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildfileitem.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfileitem.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildfilter.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfilter.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildfilter.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfilter.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildlink.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildlink.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildlink.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildlink.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildnone.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildnone.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/items/msbuildnone.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/items/msbuildnone.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuildimport.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuildimport.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuildimport.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuildimport.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuildimportgroup.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuildimportgroup.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuildimportgroup.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuildimportgroup.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuilditem.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuilditem.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuilditem.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuilditem.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuilditemdefinitiongroup.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuilditemdefinitiongroup.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuilditemdefinitiongroup.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuilditemdefinitiongroup.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuilditemgroup.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuilditemgroup.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuilditemgroup.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuilditemgroup.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuilditemmetadata.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuilditemmetadata.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuilditemmetadata.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuilditemmetadata.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuildproject.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuildproject.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuildproject.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuildproject.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuildproperty.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuildproperty.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuildproperty.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuildproperty.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuildpropertygroup.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuildpropertygroup.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuild/msbuildpropertygroup.h (renamed from src/lib/corelib/generators/visualstudio/msbuild/msbuildpropertygroup.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildfiltersproject.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuildfiltersproject.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildfiltersproject.h (renamed from src/lib/corelib/generators/visualstudio/msbuildfiltersproject.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildqbsgenerateproject.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuildqbsgenerateproject.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildqbsgenerateproject.h (renamed from src/lib/corelib/generators/visualstudio/msbuildqbsgenerateproject.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildqbsproductproject.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildqbsproductproject.h (renamed from src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildsharedsolutionpropertiesproject.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildsharedsolutionpropertiesproject.h (renamed from src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildsolutionpropertiesproject.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildsolutionpropertiesproject.h (renamed from src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildtargetproject.cpp (renamed from src/lib/corelib/generators/visualstudio/msbuildtargetproject.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildtargetproject.h (renamed from src/lib/corelib/generators/visualstudio/msbuildtargetproject.h)0
-rw-r--r--src/plugins/generator/visualstudio/msbuildutils.h (renamed from src/lib/corelib/generators/visualstudio/msbuildutils.h)0
-rw-r--r--src/plugins/generator/visualstudio/solution/ivisualstudiosolutionproject.cpp (renamed from src/lib/corelib/generators/visualstudio/solution/ivisualstudiosolutionproject.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/solution/ivisualstudiosolutionproject.h (renamed from src/lib/corelib/generators/visualstudio/solution/ivisualstudiosolutionproject.h)0
-rw-r--r--src/plugins/generator/visualstudio/solution/visualstudiosolution.cpp (renamed from src/lib/corelib/generators/visualstudio/solution/visualstudiosolution.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/solution/visualstudiosolution.h (renamed from src/lib/corelib/generators/visualstudio/solution/visualstudiosolution.h)0
-rw-r--r--src/plugins/generator/visualstudio/solution/visualstudiosolutionfileproject.cpp (renamed from src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfileproject.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/solution/visualstudiosolutionfileproject.h (renamed from src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfileproject.h)0
-rw-r--r--src/plugins/generator/visualstudio/solution/visualstudiosolutionfolderproject.cpp (renamed from src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfolderproject.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/solution/visualstudiosolutionfolderproject.h (renamed from src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfolderproject.h)0
-rw-r--r--src/plugins/generator/visualstudio/solution/visualstudiosolutionglobalsection.cpp (renamed from src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionglobalsection.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/solution/visualstudiosolutionglobalsection.h (renamed from src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionglobalsection.h)0
-rw-r--r--src/plugins/generator/visualstudio/visualstudio.pro (renamed from src/lib/corelib/generators/visualstudio/visualstudio.pri)7
-rw-r--r--src/plugins/generator/visualstudio/visualstudio.qbs (renamed from src/lib/corelib/generators/visualstudio/visualstudio.qbs)12
-rw-r--r--src/plugins/generator/visualstudio/visualstudiogenerator.cpp (renamed from src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp)10
-rw-r--r--src/plugins/generator/visualstudio/visualstudiogenerator.h (renamed from src/lib/corelib/generators/visualstudio/visualstudiogenerator.h)2
-rw-r--r--src/plugins/generator/visualstudio/visualstudiogeneratorplugin.cpp67
-rw-r--r--src/plugins/generator/visualstudio/visualstudioguidpool.cpp (renamed from src/lib/corelib/generators/visualstudio/visualstudioguidpool.cpp)0
-rw-r--r--src/plugins/generator/visualstudio/visualstudioguidpool.h (renamed from src/lib/corelib/generators/visualstudio/visualstudioguidpool.h)0
-rw-r--r--src/plugins/plugins.pri3
-rw-r--r--src/plugins/plugins.pro2
-rw-r--r--src/plugins/plugins.qbs2
-rw-r--r--src/plugins/qbsplugin.qbs (renamed from src/plugins/scanner/scannerplugin.qbs)5
-rw-r--r--src/plugins/scanner/cpp/cpp.qbs4
-rw-r--r--src/plugins/scanner/cpp/cpp_global.h2
-rw-r--r--src/plugins/scanner/cpp/cppscanner.cpp19
-rw-r--r--src/plugins/scanner/qt/qt.qbs4
-rw-r--r--src/plugins/scanner/qt/qtscanner.cpp20
-rw-r--r--src/plugins/scanner/scanner.h2
107 files changed, 481 insertions, 211 deletions
diff --git a/qbs.pro b/qbs.pro
index 43c668c98..5d59d8733 100644
--- a/qbs.pro
+++ b/qbs.pro
@@ -36,6 +36,7 @@ src_app.subdir = src/app
src_app.depends = setupqtprofilelib
src_libexec.subdir = src/libexec
src_plugins.subdir = src/plugins
+CONFIG(shared, static|shared): src_plugins.depends = corelib
tests.depends = corelib src_plugins
SUBDIRS += \
corelib\
diff --git a/src/lib/corelib/api/project.cpp b/src/lib/corelib/api/project.cpp
index fba895e2f..f06a0126e 100644
--- a/src/lib/corelib/api/project.cpp
+++ b/src/lib/corelib/api/project.cpp
@@ -71,7 +71,7 @@
#include <tools/installoptions.h>
#include <tools/preferences.h>
#include <tools/processresult.h>
-#include <tools/scannerpluginmanager.h>
+#include <tools/qbspluginmanager.h>
#include <tools/scripttools.h>
#include <tools/setupprojectparameters.h>
#include <tools/qbsassert.h>
@@ -83,11 +83,6 @@
#include <mutex>
-#ifdef QBS_STATIC_LIB
-extern "C" ScannerPlugin *cppScanners[];
-extern "C" ScannerPlugin *qtScanners[];
-#endif
-
namespace qbs {
namespace Internal {
@@ -111,11 +106,9 @@ static void loadPlugins(const QStringList &_pluginPaths, const Logger &logger)
pluginPaths << pluginPath;
}
}
- ScannerPluginManager::instance()->loadPlugins(pluginPaths, logger);
-#ifdef QBS_STATIC_LIB
- ScannerPluginManager::instance()->loadPlugins(cppScanners);
- ScannerPluginManager::instance()->loadPlugins(qtScanners);
-#endif
+ auto pluginManager = QbsPluginManager::instance();
+ pluginManager->loadStaticPlugins();
+ pluginManager->loadPlugins(pluginPaths, logger);
qRegisterMetaType<ErrorInfo>("qbs::ErrorInfo");
qRegisterMetaType<ProcessResult>("qbs::ProcessResult");
diff --git a/src/lib/corelib/buildgraph/qtmocscanner.cpp b/src/lib/corelib/buildgraph/qtmocscanner.cpp
index ccb959a0f..bc3df54f5 100644
--- a/src/lib/corelib/buildgraph/qtmocscanner.cpp
+++ b/src/lib/corelib/buildgraph/qtmocscanner.cpp
@@ -46,6 +46,7 @@
#include "rawscanresults.h"
#include <language/scriptengine.h>
#include <logging/translator.h>
+#include <plugins/scanner/scanner.h>
#include <tools/fileinfo.h>
#include <tools/scannerpluginmanager.h>
#include <tools/scripttools.h>
diff --git a/src/lib/corelib/corelib.qbs b/src/lib/corelib/corelib.qbs
index f534cf239..eac9e709c 100644
--- a/src/lib/corelib/corelib.qbs
+++ b/src/lib/corelib/corelib.qbs
@@ -1,14 +1,11 @@
import qbs 1.0
QbsLibrary {
- Depends { name: "clangcompilationdbgenerator" }
- Depends { name: "visualstudiogenerator" }
Depends { name: "cpp" }
Depends { name: "Qt"; submodules: ["core-private", "network", "script", "xml"] }
Depends { condition: qbsbuildconfig.enableProjectFileUpdates; name: "Qt.gui" }
Depends { condition: qbsbuildconfig.enableUnitTests; name: "Qt.testlib" }
- Depends { condition: Qt.core.staticBuild; name: "qbs_cpp_scanner" }
- Depends { condition: Qt.core.staticBuild; name: "qbs_qt_scanner" }
+ Depends { condition: Qt.core.staticBuild; productTypes: ["qbsplugin"] }
name: "qbscore"
cpp.includePaths: base.concat([
".",
@@ -386,6 +383,8 @@ QbsLibrary {
"projectgeneratormanager.cpp",
"qbsassert.cpp",
"qbsassert.h",
+ "qbspluginmanager.cpp",
+ "qbspluginmanager.h",
"qbsprocess.cpp",
"qbsprocess.h",
"qttools.cpp",
diff --git a/src/lib/corelib/generators/clangcompilationdb/clangcompilationdb.pri b/src/lib/corelib/generators/clangcompilationdb/clangcompilationdb.pri
deleted file mode 100644
index 61dc8f19e..000000000
--- a/src/lib/corelib/generators/clangcompilationdb/clangcompilationdb.pri
+++ /dev/null
@@ -1,5 +0,0 @@
-HEADERS += \
- $$PWD/clangcompilationdbgenerator.h
-
-SOURCES += \
- $$PWD/clangcompilationdbgenerator.cpp
diff --git a/src/lib/corelib/generators/clangcompilationdb/clangcompilationdb.qbs b/src/lib/corelib/generators/clangcompilationdb/clangcompilationdb.qbs
deleted file mode 100644
index c8f626190..000000000
--- a/src/lib/corelib/generators/clangcompilationdb/clangcompilationdb.qbs
+++ /dev/null
@@ -1,19 +0,0 @@
-import qbs
-
-QbsLibrary {
- type: ["staticlibrary"]
- name: "clangcompilationdbgenerator"
- install: false
-
- cpp.includePaths: base.concat([
- "../..",
- ])
-
- Depends { name: "cpp" }
- Depends { name: "Qt.core" }
-
- files: [
- "clangcompilationdbgenerator.cpp",
- "clangcompilationdbgenerator.h"
- ]
-}
diff --git a/src/lib/corelib/generators/generatableprojectiterator.h b/src/lib/corelib/generators/generatableprojectiterator.h
index 295ed6d17..793627512 100644
--- a/src/lib/corelib/generators/generatableprojectiterator.h
+++ b/src/lib/corelib/generators/generatableprojectiterator.h
@@ -45,7 +45,7 @@
namespace qbs {
-class GeneratableProjectIterator {
+class QBS_EXPORT GeneratableProjectIterator {
GeneratableProject project;
public:
diff --git a/src/lib/corelib/generators/generator.h b/src/lib/corelib/generators/generator.h
index 9155f2c09..3ba436c0f 100644
--- a/src/lib/corelib/generators/generator.h
+++ b/src/lib/corelib/generators/generator.h
@@ -93,14 +93,4 @@ private:
} // namespace qbs
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef qbs::ProjectGenerator **(*getGenerators_f)();
-
-#ifdef __cplusplus
-}
-#endif
-
#endif // GENERATORPLUGIN_H
diff --git a/src/lib/corelib/generators/generatordata.h b/src/lib/corelib/generators/generatordata.h
index 1d4685433..47f4acb93 100644
--- a/src/lib/corelib/generators/generatordata.h
+++ b/src/lib/corelib/generators/generatordata.h
@@ -52,14 +52,14 @@ typedef QMap<QString, Project> GeneratableProjectMap;
typedef QMap<QString, ProjectData> GeneratableProjectDataMap;
typedef QMap<QString, ProductData> GeneratableProductDataMap;
-struct GeneratableProductData {
+struct QBS_EXPORT GeneratableProductData {
GeneratableProductDataMap data;
QString name() const;
CodeLocation location() const;
QStringList dependencies() const;
};
-struct GeneratableProjectData {
+struct QBS_EXPORT GeneratableProjectData {
struct Id {
private:
friend struct GeneratableProjectData;
@@ -78,7 +78,7 @@ struct GeneratableProjectData {
Id uniqueName() const;
};
-struct GeneratableProject : public GeneratableProjectData {
+struct QBS_EXPORT GeneratableProject : public GeneratableProjectData {
GeneratableProjectMap projects;
QMap<QString, QVariantMap> buildConfigurations;
QMap<QString, QStringList> commandLines;
diff --git a/src/lib/corelib/generators/generators.pri b/src/lib/corelib/generators/generators.pri
index 935419c1f..d90ad4274 100644
--- a/src/lib/corelib/generators/generators.pri
+++ b/src/lib/corelib/generators/generators.pri
@@ -8,6 +8,3 @@ HEADERS += \
$$PWD/generator.h \
$$PWD/generatordata.h \
$$PWD/igeneratableprojectvisitor.h
-
-include(clangcompilationdb/clangcompilationdb.pri)
-include(visualstudio/visualstudio.pri)
diff --git a/src/lib/corelib/generators/generators.qbs b/src/lib/corelib/generators/generators.qbs
deleted file mode 100644
index b6f40ec8c..000000000
--- a/src/lib/corelib/generators/generators.qbs
+++ /dev/null
@@ -1,8 +0,0 @@
-import qbs
-
-Project {
- references: [
- "clangcompilationdb/clangcompilationdb.qbs",
- "visualstudio/visualstudio.qbs",
- ]
-}
diff --git a/src/lib/corelib/tools/filesaver.h b/src/lib/corelib/tools/filesaver.h
index 38228ed0c..07ba5ac25 100644
--- a/src/lib/corelib/tools/filesaver.h
+++ b/src/lib/corelib/tools/filesaver.h
@@ -40,6 +40,8 @@
#ifndef FILESAVER_H
#define FILESAVER_H
+#include "qbs_export.h"
+
#include <QtCore/qbuffer.h>
#include <QtCore/qbytearray.h>
#include <QtCore/qscopedpointer.h>
@@ -51,7 +53,7 @@ namespace Internal {
/*!
* QSaveFile wrapper which doesn't update the target file if the contents are unchanged.
*/
-class FileSaver {
+class QBS_EXPORT FileSaver {
public:
FileSaver(const QString &filePath, bool overwriteIfUnchanged = false);
diff --git a/src/lib/corelib/tools/projectgeneratormanager.cpp b/src/lib/corelib/tools/projectgeneratormanager.cpp
index 9d2e1ae7c..3991adfb9 100644
--- a/src/lib/corelib/tools/projectgeneratormanager.cpp
+++ b/src/lib/corelib/tools/projectgeneratormanager.cpp
@@ -47,10 +47,6 @@
#include <QtCore/qcoreapplication.h>
#include <QtCore/qdiriterator.h>
-#include <QtCore/qlibrary.h>
-
-#include "generators/clangcompilationdb/clangcompilationdbgenerator.h"
-#include "generators/visualstudio/visualstudiogenerator.h"
namespace qbs {
@@ -58,10 +54,6 @@ using namespace Internal;
ProjectGeneratorManager::~ProjectGeneratorManager()
{
- for (QLibrary * const lib : qAsConst(m_libs)) {
- lib->unload();
- delete lib;
- }
}
ProjectGeneratorManager *ProjectGeneratorManager::instance()
@@ -72,12 +64,6 @@ ProjectGeneratorManager *ProjectGeneratorManager::instance()
ProjectGeneratorManager::ProjectGeneratorManager()
{
- std::vector<std::shared_ptr<ProjectGenerator> > generators;
- generators.push_back(std::make_shared<ClangCompilationDatabaseGenerator>());
- const auto vsGenerators = qbs::VisualStudioGenerator::createGeneratorList();
- std::copy(vsGenerators.cbegin(), vsGenerators.cend(), std::back_inserter(generators));
- for (const auto &generator : qAsConst(generators))
- m_generators[generator->generatorName()] = generator;
}
QStringList ProjectGeneratorManager::loadedGeneratorNames()
@@ -90,4 +76,10 @@ std::shared_ptr<ProjectGenerator> ProjectGeneratorManager::findGenerator(const Q
return instance()->m_generators.value(generatorName);
}
+void ProjectGeneratorManager::registerGenerator(const std::shared_ptr<ProjectGenerator> &generator)
+{
+ if (!findGenerator(generator->generatorName()))
+ instance()->m_generators.insert(generator->generatorName(), generator);
+}
+
} // namespace qbs
diff --git a/src/lib/corelib/tools/projectgeneratormanager.h b/src/lib/corelib/tools/projectgeneratormanager.h
index d1796ccc6..d9f997fa7 100644
--- a/src/lib/corelib/tools/projectgeneratormanager.h
+++ b/src/lib/corelib/tools/projectgeneratormanager.h
@@ -48,10 +48,6 @@
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
-QT_BEGIN_NAMESPACE
-class QLibrary;
-QT_END_NAMESPACE
-
namespace qbs {
class ProjectGenerator;
namespace Internal {
@@ -65,12 +61,12 @@ public:
static ProjectGeneratorManager *instance();
static QStringList loadedGeneratorNames();
static std::shared_ptr<ProjectGenerator> findGenerator(const QString &generatorName);
+ static void registerGenerator(const std::shared_ptr<ProjectGenerator> &generator);
private:
ProjectGeneratorManager();
private:
- QList<QLibrary *> m_libs;
QMap<QString, std::shared_ptr<ProjectGenerator> > m_generators;
};
diff --git a/src/lib/corelib/tools/qbspluginmanager.cpp b/src/lib/corelib/tools/qbspluginmanager.cpp
new file mode 100644
index 000000000..9635f2bac
--- /dev/null
+++ b/src/lib/corelib/tools/qbspluginmanager.cpp
@@ -0,0 +1,145 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qbs.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qbspluginmanager.h"
+
+#include <logging/logger.h>
+#include <logging/translator.h>
+#include <tools/hostosinfo.h>
+#include <tools/qbsassert.h>
+#include <tools/qttools.h>
+
+#include <QtCore/qdiriterator.h>
+#include <QtCore/qlibrary.h>
+
+#include <mutex>
+
+namespace qbs {
+namespace Internal {
+
+QbsPluginManager::QbsPluginManager()
+{
+}
+
+QbsPluginManager::~QbsPluginManager()
+{
+ unloadStaticPlugins();
+
+ for (QLibrary * const lib : qAsConst(m_libs)) {
+ QbsPluginUnloadFunction unload = reinterpret_cast<QbsPluginUnloadFunction>(
+ lib->resolve("QbsPluginUnload"));
+ if (unload)
+ unload();
+ lib->unload();
+ delete lib;
+ }
+}
+
+QbsPluginManager *QbsPluginManager::instance()
+{
+ static QbsPluginManager instance;
+ return &instance;
+}
+
+void QbsPluginManager::registerStaticPlugin(QbsPluginLoadFunction load,
+ QbsPluginUnloadFunction unload)
+{
+ auto begin = m_staticPlugins.cbegin(), end = m_staticPlugins.cend();
+ if (std::find_if(begin, end, [&load](const QbsPlugin &p) { return p.load == load; }) == end)
+ m_staticPlugins.push_back(QbsPlugin { load, unload, false });
+}
+
+void QbsPluginManager::loadStaticPlugins()
+{
+ for (const auto &plugin : m_staticPlugins) {
+ if (!plugin.loaded && plugin.load)
+ plugin.load();
+ }
+}
+
+void QbsPluginManager::unloadStaticPlugins()
+{
+ for (auto &plugin : m_staticPlugins) {
+ if (plugin.loaded && plugin.unload)
+ plugin.unload();
+ }
+
+ m_staticPlugins.clear();
+}
+
+void QbsPluginManager::loadPlugins(const QStringList &pluginPaths, const Logger &logger)
+{
+ QStringList filters;
+
+ if (HostOsInfo::isWindowsHost())
+ filters << QLatin1String("*.dll");
+ else if (HostOsInfo::isMacosHost())
+ filters << QLatin1String("*.dylib");
+ else
+ filters << QLatin1String("*.so");
+
+ for (const QString &pluginPath : pluginPaths) {
+ logger.qbsTrace() << QString::fromLatin1("plugin manager: loading plugins from '%1'.")
+ .arg(QDir::toNativeSeparators(pluginPath));
+ QDirIterator it(pluginPath, filters, QDir::Files);
+ while (it.hasNext()) {
+ const QString fileName = it.next();
+ QScopedPointer<QLibrary> lib(new QLibrary(fileName));
+ if (!lib->load()) {
+ logger.qbsWarning() << Tr::tr("plugin manager: Cannot load plugin '%1': %2")
+ .arg(QDir::toNativeSeparators(fileName), lib->errorString());
+ continue;
+ }
+
+ QbsPluginLoadFunction load = reinterpret_cast<QbsPluginLoadFunction>(
+ lib->resolve("QbsPluginLoad"));
+ if (load) {
+ load();
+ logger.qbsTrace() << QString::fromLatin1("pluginmanager: plugin '%1' loaded.")
+ .arg(QDir::toNativeSeparators(fileName));
+ m_libs.push_back(lib.take());
+ } else {
+ logger.qbsWarning() << Tr::tr("plugin manager: not a qbs plugin");
+ }
+ }
+ }
+}
+
+} // namespace Internal
+} // namespace qbs
diff --git a/src/lib/corelib/tools/qbspluginmanager.h b/src/lib/corelib/tools/qbspluginmanager.h
new file mode 100644
index 000000000..96d5082e3
--- /dev/null
+++ b/src/lib/corelib/tools/qbspluginmanager.h
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qbs.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QBS_PLUGINS_H
+#define QBS_PLUGINS_H
+
+#include <language/filetags.h>
+
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+class QLibrary;
+QT_END_NAMESPACE
+
+namespace qbs {
+namespace Internal {
+class Logger;
+
+typedef void (*QbsPluginLoadFunction)();
+typedef void (*QbsPluginUnloadFunction)();
+
+class QBS_EXPORT QbsPluginManager
+{
+public:
+ ~QbsPluginManager();
+ static QbsPluginManager *instance();
+ void registerStaticPlugin(QbsPluginLoadFunction, QbsPluginUnloadFunction);
+ void loadStaticPlugins();
+ void unloadStaticPlugins();
+ void loadPlugins(const QStringList &paths, const Logger &logger);
+
+protected:
+ QbsPluginManager();
+
+private:
+ struct QbsPlugin {
+ QbsPluginLoadFunction load;
+ QbsPluginUnloadFunction unload;
+ bool loaded;
+ };
+ std::vector<QbsPlugin> m_staticPlugins;
+ std::vector<QLibrary *> m_libs;
+};
+
+} // namespace Internal
+} // namespace qbs
+
+#ifdef QBS_STATIC_LIB
+#define QBS_REGISTER_STATIC_PLUGIN(exportmacro, name, load, unload) \
+ static auto qbs_static_plugin_register##name = [] { \
+ qbs::Internal::QbsPluginManager::instance()->registerStaticPlugin(load, unload); \
+ return true; \
+ }();
+#else
+#define QBS_REGISTER_STATIC_PLUGIN(exportmacro, name, load, unload) \
+ exportmacro void QbsPluginLoad() { load(); } \
+ exportmacro void QbsPluginUnload() { unload(); }
+#endif
+
+#endif
diff --git a/src/lib/corelib/tools/scannerpluginmanager.cpp b/src/lib/corelib/tools/scannerpluginmanager.cpp
index c6ce3327b..cc929cad4 100644
--- a/src/lib/corelib/tools/scannerpluginmanager.cpp
+++ b/src/lib/corelib/tools/scannerpluginmanager.cpp
@@ -39,26 +39,11 @@
#include "scannerpluginmanager.h"
-#include <logging/logger.h>
-#include <logging/translator.h>
-#include <tools/hostosinfo.h>
-#include <tools/qttools.h>
-
-#include <QtCore/qcoreapplication.h>
-#include <QtCore/qdiriterator.h>
-#include <QtCore/qlibrary.h>
+#include <plugins/scanner/scanner.h>
namespace qbs {
namespace Internal {
-ScannerPluginManager::~ScannerPluginManager()
-{
- for (QLibrary * const lib : qAsConst(m_libs)) {
- lib->unload();
- delete lib;
- }
-}
-
ScannerPluginManager *ScannerPluginManager::instance()
{
static ScannerPluginManager scannerPlugin;
@@ -74,7 +59,7 @@ QList<ScannerPlugin *> ScannerPluginManager::scannersForFileTag(const FileTag &f
return instance()->m_scannerPlugins.value(fileTag);
}
-void ScannerPluginManager::loadPlugins(ScannerPlugin **plugins)
+void ScannerPluginManager::registerPlugins(ScannerPlugin **plugins)
{
for (int i = 0; plugins[i] != 0; ++i) {
const FileTags &fileTags = FileTags::fromStringList(
@@ -84,52 +69,5 @@ void ScannerPluginManager::loadPlugins(ScannerPlugin **plugins)
}
}
-void ScannerPluginManager::loadPlugins(const QStringList &pluginPaths, const Logger &logger)
-{
- QStringList filters;
-
- if (HostOsInfo::isWindowsHost())
- filters << QLatin1String("*.dll");
- else if (HostOsInfo::isMacosHost())
- filters << QLatin1String("*.dylib");
- else
- filters << QLatin1String("*.so");
-
- for (const QString &pluginPath : pluginPaths) {
- logger.qbsTrace() << QString::fromLatin1("pluginmanager: loading plugins from '%1'.")
- .arg(QDir::toNativeSeparators(pluginPath));
- QDirIterator it(pluginPath, filters, QDir::Files);
- while (it.hasNext()) {
- const QString fileName = it.next();
- QScopedPointer<QLibrary> lib(new QLibrary(fileName));
- if (!lib->load()) {
- logger.qbsWarning() << Tr::tr("Pluginmanager: Cannot load plugin '%1': %2")
- .arg(QDir::toNativeSeparators(fileName), lib->errorString());
- continue;
- }
-
- getScanners_f getScanners = reinterpret_cast<getScanners_f>(lib->resolve("getScanners"));
- if (!getScanners) {
- logger.qbsWarning() << Tr::tr("Pluginmanager: Cannot resolve "
- "symbol in '%1'.").arg(QDir::toNativeSeparators(fileName));
- continue;
- }
-
- ScannerPlugin **plugins = getScanners();
- if (plugins == 0) {
- logger.qbsWarning() << Tr::tr("pluginmanager: no scanners "
- "returned from '%1'.").arg(QDir::toNativeSeparators(fileName));
- continue;
- }
-
- logger.qbsTrace() << QString::fromLatin1("pluginmanager: scanner plugin '%1' loaded.")
- .arg(QDir::toNativeSeparators(fileName));
-
- loadPlugins(plugins);
- m_libs.append(lib.take());
- }
- }
-}
-
} // namespace Internal
} // namespace qbs
diff --git a/src/lib/corelib/tools/scannerpluginmanager.h b/src/lib/corelib/tools/scannerpluginmanager.h
index a5e1ef88c..380d38a76 100644
--- a/src/lib/corelib/tools/scannerpluginmanager.h
+++ b/src/lib/corelib/tools/scannerpluginmanager.h
@@ -37,41 +37,33 @@
**
****************************************************************************/
-#ifndef QBS_PLUGINS_H
-#define QBS_PLUGINS_H
+#ifndef QBS_PLUGINS_SCANNER_H
+#define QBS_PLUGINS_SCANNER_H
+
+#include "qbs_export.h"
#include <language/filetags.h>
-#include <plugins/scanner/scanner.h>
#include <QtCore/qhash.h>
-#include <QtCore/qstring.h>
-QT_BEGIN_NAMESPACE
-class QLibrary;
-QT_END_NAMESPACE
+class ScannerPlugin;
namespace qbs {
namespace Internal {
-class Logger;
-class ScannerPluginManager
+class QBS_EXPORT ScannerPluginManager
{
public:
- ~ScannerPluginManager();
static ScannerPluginManager *instance();
static QList<ScannerPlugin *> scannersForFileTag(const FileTag &fileTag);
- void loadPlugins(ScannerPlugin **plugins);
- void loadPlugins(const QStringList &paths, const Logger &logger);
+ void registerPlugins(ScannerPlugin **plugins);
private:
ScannerPluginManager();
-
-private:
- QList<QLibrary *> m_libs;
QHash<FileTag, QList<ScannerPlugin*> > m_scannerPlugins;
};
} // namespace Internal
} // namespace qbs
-#endif
+#endif // QBS_PLUGINS_SCANNER_H
diff --git a/src/lib/corelib/tools/tools.pri b/src/lib/corelib/tools/tools.pri
index 0fa91147b..ed0942294 100644
--- a/src/lib/corelib/tools/tools.pri
+++ b/src/lib/corelib/tools/tools.pri
@@ -34,6 +34,7 @@ HEADERS += \
$$PWD/processutils.h \
$$PWD/progressobserver.h \
$$PWD/projectgeneratormanager.h \
+ $$PWD/qbspluginmanager.h \
$$PWD/qbsprocess.h \
$$PWD/shellutils.h \
$$PWD/stlutils.h \
@@ -82,6 +83,7 @@ SOURCES += \
$$PWD/profiling.cpp \
$$PWD/progressobserver.cpp \
$$PWD/projectgeneratormanager.cpp \
+ $$PWD/qbspluginmanager.cpp \
$$PWD/qbsprocess.cpp \
$$PWD/shellutils.cpp \
$$PWD/buildoptions.cpp \
@@ -124,6 +126,7 @@ qbs_enable_unit_tests {
$$PWD/generateoptions.h \
$$PWD/generatorpluginmanager.h \
$$PWD/installoptions.h \
+ $$PWD/qbspluginmanager.h \
$$PWD/setupprojectparameters.h \
$$PWD/toolchains.h
tools_headers.path = $${QBS_INSTALL_PREFIX}/include/qbs/tools
diff --git a/src/lib/libs.qbs b/src/lib/libs.qbs
index b9756b447..e31dd463d 100644
--- a/src/lib/libs.qbs
+++ b/src/lib/libs.qbs
@@ -3,7 +3,6 @@ import qbs
Project {
references: [
"corelib/corelib.qbs",
- "corelib/generators/generators.qbs",
"qtprofilesetup/qtprofilesetup.qbs",
]
}
diff --git a/src/plugins/generator/clangcompilationdb/clangcompilationdb.pro b/src/plugins/generator/clangcompilationdb/clangcompilationdb.pro
new file mode 100644
index 000000000..030051271
--- /dev/null
+++ b/src/plugins/generator/clangcompilationdb/clangcompilationdb.pro
@@ -0,0 +1,12 @@
+include(../../plugins.pri)
+
+TARGET = clangcompilationdbgenerator
+
+QT = core
+
+HEADERS += \
+ $$PWD/clangcompilationdbgenerator.h
+
+SOURCES += \
+ $$PWD/clangcompilationdbgenerator.cpp \
+ $$PWD/clangcompilationdbgeneratorplugin.cpp
diff --git a/src/plugins/generator/clangcompilationdb/clangcompilationdb.qbs b/src/plugins/generator/clangcompilationdb/clangcompilationdb.qbs
new file mode 100644
index 000000000..741d6dbf0
--- /dev/null
+++ b/src/plugins/generator/clangcompilationdb/clangcompilationdb.qbs
@@ -0,0 +1,11 @@
+import qbs
+import "../../qbsplugin.qbs" as QbsPlugin
+
+QbsPlugin {
+ name: "clangcompilationdbgenerator"
+ files: [
+ "clangcompilationdbgenerator.cpp",
+ "clangcompilationdbgenerator.h",
+ "clangcompilationdbgeneratorplugin.cpp"
+ ]
+}
diff --git a/src/lib/corelib/generators/clangcompilationdb/clangcompilationdbgenerator.cpp b/src/plugins/generator/clangcompilationdb/clangcompilationdbgenerator.cpp
index a3407cb09..a3407cb09 100644
--- a/src/lib/corelib/generators/clangcompilationdb/clangcompilationdbgenerator.cpp
+++ b/src/plugins/generator/clangcompilationdb/clangcompilationdbgenerator.cpp
diff --git a/src/lib/corelib/generators/clangcompilationdb/clangcompilationdbgenerator.h b/src/plugins/generator/clangcompilationdb/clangcompilationdbgenerator.h
index 5a8505073..5a8505073 100644
--- a/src/lib/corelib/generators/clangcompilationdb/clangcompilationdbgenerator.h
+++ b/src/plugins/generator/clangcompilationdb/clangcompilationdbgenerator.h
diff --git a/src/plugins/generator/clangcompilationdb/clangcompilationdbgeneratorplugin.cpp b/src/plugins/generator/clangcompilationdb/clangcompilationdbgeneratorplugin.cpp
new file mode 100644
index 000000000..ab0e713aa
--- /dev/null
+++ b/src/plugins/generator/clangcompilationdb/clangcompilationdbgeneratorplugin.cpp
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qbs.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "clangcompilationdbgenerator.h"
+
+#include <tools/projectgeneratormanager.h>
+#include <tools/qbspluginmanager.h>
+
+static void QbsClangDbGeneratorPluginLoad()
+{
+ qbs::ProjectGeneratorManager::registerGenerator(
+ std::make_shared<qbs::ClangCompilationDatabaseGenerator>());
+}
+
+static void QbsClangDbGeneratorPluginUnload()
+{
+}
+
+#ifndef GENERATOR_EXPORT
+#if defined(WIN32) || defined(_WIN32)
+#define GENERATOR_EXPORT __declspec(dllexport)
+#else
+#define GENERATOR_EXPORT __attribute__((visibility("default")))
+#endif
+#endif
+
+QBS_REGISTER_STATIC_PLUGIN(extern "C" GENERATOR_EXPORT, QbsClangDbGeneratorPlugin,
+ QbsClangDbGeneratorPluginLoad, QbsClangDbGeneratorPluginUnload)
diff --git a/src/plugins/generator/generator.pro b/src/plugins/generator/generator.pro
new file mode 100644
index 000000000..955e3f84f
--- /dev/null
+++ b/src/plugins/generator/generator.pro
@@ -0,0 +1,2 @@
+TEMPLATE = subdirs
+SUBDIRS = clangcompilationdb visualstudio
diff --git a/src/lib/corelib/generators/visualstudio/io/msbuildprojectwriter.cpp b/src/plugins/generator/visualstudio/io/msbuildprojectwriter.cpp
index f912f3a19..f912f3a19 100644
--- a/src/lib/corelib/generators/visualstudio/io/msbuildprojectwriter.cpp
+++ b/src/plugins/generator/visualstudio/io/msbuildprojectwriter.cpp
diff --git a/src/lib/corelib/generators/visualstudio/io/msbuildprojectwriter.h b/src/plugins/generator/visualstudio/io/msbuildprojectwriter.h
index c70889971..c70889971 100644
--- a/src/lib/corelib/generators/visualstudio/io/msbuildprojectwriter.h
+++ b/src/plugins/generator/visualstudio/io/msbuildprojectwriter.h
diff --git a/src/lib/corelib/generators/visualstudio/io/visualstudiosolutionwriter.cpp b/src/plugins/generator/visualstudio/io/visualstudiosolutionwriter.cpp
index 99180e2e2..99180e2e2 100644
--- a/src/lib/corelib/generators/visualstudio/io/visualstudiosolutionwriter.cpp
+++ b/src/plugins/generator/visualstudio/io/visualstudiosolutionwriter.cpp
diff --git a/src/lib/corelib/generators/visualstudio/io/visualstudiosolutionwriter.h b/src/plugins/generator/visualstudio/io/visualstudiosolutionwriter.h
index d5b0107f0..d5b0107f0 100644
--- a/src/lib/corelib/generators/visualstudio/io/visualstudiosolutionwriter.h
+++ b/src/plugins/generator/visualstudio/io/visualstudiosolutionwriter.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildgroup.cpp b/src/plugins/generator/visualstudio/msbuild/imsbuildgroup.cpp
index c51f0e517..c51f0e517 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildgroup.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/imsbuildgroup.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildgroup.h b/src/plugins/generator/visualstudio/msbuild/imsbuildgroup.h
index 4d2436e52..4d2436e52 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildgroup.h
+++ b/src/plugins/generator/visualstudio/msbuild/imsbuildgroup.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildnode.cpp b/src/plugins/generator/visualstudio/msbuild/imsbuildnode.cpp
index 4c70405c2..4c70405c2 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildnode.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/imsbuildnode.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildnode.h b/src/plugins/generator/visualstudio/msbuild/imsbuildnode.h
index 67fb10081..67fb10081 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildnode.h
+++ b/src/plugins/generator/visualstudio/msbuild/imsbuildnode.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildnodevisitor.h b/src/plugins/generator/visualstudio/msbuild/imsbuildnodevisitor.h
index fe75c23f9..fe75c23f9 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildnodevisitor.h
+++ b/src/plugins/generator/visualstudio/msbuild/imsbuildnodevisitor.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildproperty.cpp b/src/plugins/generator/visualstudio/msbuild/imsbuildproperty.cpp
index 6e54f1e43..6e54f1e43 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildproperty.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/imsbuildproperty.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildproperty.h b/src/plugins/generator/visualstudio/msbuild/imsbuildproperty.h
index a1a7676e6..a1a7676e6 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/imsbuildproperty.h
+++ b/src/plugins/generator/visualstudio/msbuild/imsbuildproperty.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclcompile.cpp b/src/plugins/generator/visualstudio/msbuild/items/msbuildclcompile.cpp
index d8a587454..d8a587454 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclcompile.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildclcompile.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclcompile.h b/src/plugins/generator/visualstudio/msbuild/items/msbuildclcompile.h
index 745c3ed7f..745c3ed7f 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclcompile.h
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildclcompile.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclinclude.cpp b/src/plugins/generator/visualstudio/msbuild/items/msbuildclinclude.cpp
index d9c61bece..d9c61bece 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclinclude.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildclinclude.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclinclude.h b/src/plugins/generator/visualstudio/msbuild/items/msbuildclinclude.h
index cfe31022f..cfe31022f 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildclinclude.h
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildclinclude.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfileitem.cpp b/src/plugins/generator/visualstudio/msbuild/items/msbuildfileitem.cpp
index bce7488b4..bce7488b4 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfileitem.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildfileitem.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfileitem.h b/src/plugins/generator/visualstudio/msbuild/items/msbuildfileitem.h
index d6e4d485b..d6e4d485b 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfileitem.h
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildfileitem.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfilter.cpp b/src/plugins/generator/visualstudio/msbuild/items/msbuildfilter.cpp
index 3a5d98a98..3a5d98a98 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfilter.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildfilter.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfilter.h b/src/plugins/generator/visualstudio/msbuild/items/msbuildfilter.h
index 344783a1e..344783a1e 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildfilter.h
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildfilter.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildlink.cpp b/src/plugins/generator/visualstudio/msbuild/items/msbuildlink.cpp
index cae1a63a3..cae1a63a3 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildlink.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildlink.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildlink.h b/src/plugins/generator/visualstudio/msbuild/items/msbuildlink.h
index caf125440..caf125440 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildlink.h
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildlink.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildnone.cpp b/src/plugins/generator/visualstudio/msbuild/items/msbuildnone.cpp
index a590c6e9f..a590c6e9f 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildnone.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildnone.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildnone.h b/src/plugins/generator/visualstudio/msbuild/items/msbuildnone.h
index 98dac7a76..98dac7a76 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/items/msbuildnone.h
+++ b/src/plugins/generator/visualstudio/msbuild/items/msbuildnone.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuildimport.cpp b/src/plugins/generator/visualstudio/msbuild/msbuildimport.cpp
index a0c693aff..a0c693aff 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuildimport.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/msbuildimport.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuildimport.h b/src/plugins/generator/visualstudio/msbuild/msbuildimport.h
index 352616e1b..352616e1b 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuildimport.h
+++ b/src/plugins/generator/visualstudio/msbuild/msbuildimport.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuildimportgroup.cpp b/src/plugins/generator/visualstudio/msbuild/msbuildimportgroup.cpp
index 56c48049e..56c48049e 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuildimportgroup.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/msbuildimportgroup.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuildimportgroup.h b/src/plugins/generator/visualstudio/msbuild/msbuildimportgroup.h
index c2f0b8fc7..c2f0b8fc7 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuildimportgroup.h
+++ b/src/plugins/generator/visualstudio/msbuild/msbuildimportgroup.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditem.cpp b/src/plugins/generator/visualstudio/msbuild/msbuilditem.cpp
index 9a2ffb734..9a2ffb734 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditem.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/msbuilditem.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditem.h b/src/plugins/generator/visualstudio/msbuild/msbuilditem.h
index ca411c715..ca411c715 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditem.h
+++ b/src/plugins/generator/visualstudio/msbuild/msbuilditem.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemdefinitiongroup.cpp b/src/plugins/generator/visualstudio/msbuild/msbuilditemdefinitiongroup.cpp
index 5228e850e..5228e850e 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemdefinitiongroup.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/msbuilditemdefinitiongroup.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemdefinitiongroup.h b/src/plugins/generator/visualstudio/msbuild/msbuilditemdefinitiongroup.h
index a96f0fff8..a96f0fff8 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemdefinitiongroup.h
+++ b/src/plugins/generator/visualstudio/msbuild/msbuilditemdefinitiongroup.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemgroup.cpp b/src/plugins/generator/visualstudio/msbuild/msbuilditemgroup.cpp
index 7a9bd122b..7a9bd122b 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemgroup.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/msbuilditemgroup.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemgroup.h b/src/plugins/generator/visualstudio/msbuild/msbuilditemgroup.h
index 02ac6b082..02ac6b082 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemgroup.h
+++ b/src/plugins/generator/visualstudio/msbuild/msbuilditemgroup.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemmetadata.cpp b/src/plugins/generator/visualstudio/msbuild/msbuilditemmetadata.cpp
index daaa4c6b3..daaa4c6b3 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemmetadata.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/msbuilditemmetadata.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemmetadata.h b/src/plugins/generator/visualstudio/msbuild/msbuilditemmetadata.h
index 7a42f1736..7a42f1736 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuilditemmetadata.h
+++ b/src/plugins/generator/visualstudio/msbuild/msbuilditemmetadata.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuildproject.cpp b/src/plugins/generator/visualstudio/msbuild/msbuildproject.cpp
index c872622b9..c872622b9 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuildproject.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/msbuildproject.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuildproject.h b/src/plugins/generator/visualstudio/msbuild/msbuildproject.h
index fc1a0f1f4..fc1a0f1f4 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuildproject.h
+++ b/src/plugins/generator/visualstudio/msbuild/msbuildproject.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuildproperty.cpp b/src/plugins/generator/visualstudio/msbuild/msbuildproperty.cpp
index 410e2a694..410e2a694 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuildproperty.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/msbuildproperty.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuildproperty.h b/src/plugins/generator/visualstudio/msbuild/msbuildproperty.h
index 310fcc044..310fcc044 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuildproperty.h
+++ b/src/plugins/generator/visualstudio/msbuild/msbuildproperty.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuildpropertygroup.cpp b/src/plugins/generator/visualstudio/msbuild/msbuildpropertygroup.cpp
index 4f9c72939..4f9c72939 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuildpropertygroup.cpp
+++ b/src/plugins/generator/visualstudio/msbuild/msbuildpropertygroup.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuild/msbuildpropertygroup.h b/src/plugins/generator/visualstudio/msbuild/msbuildpropertygroup.h
index 33fa07b3e..33fa07b3e 100644
--- a/src/lib/corelib/generators/visualstudio/msbuild/msbuildpropertygroup.h
+++ b/src/plugins/generator/visualstudio/msbuild/msbuildpropertygroup.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuildfiltersproject.cpp b/src/plugins/generator/visualstudio/msbuildfiltersproject.cpp
index 45a09236a..45a09236a 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildfiltersproject.cpp
+++ b/src/plugins/generator/visualstudio/msbuildfiltersproject.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuildfiltersproject.h b/src/plugins/generator/visualstudio/msbuildfiltersproject.h
index 521a6e610..521a6e610 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildfiltersproject.h
+++ b/src/plugins/generator/visualstudio/msbuildfiltersproject.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuildqbsgenerateproject.cpp b/src/plugins/generator/visualstudio/msbuildqbsgenerateproject.cpp
index 51c72ecd3..51c72ecd3 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildqbsgenerateproject.cpp
+++ b/src/plugins/generator/visualstudio/msbuildqbsgenerateproject.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuildqbsgenerateproject.h b/src/plugins/generator/visualstudio/msbuildqbsgenerateproject.h
index 433bd31a1..433bd31a1 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildqbsgenerateproject.h
+++ b/src/plugins/generator/visualstudio/msbuildqbsgenerateproject.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.cpp b/src/plugins/generator/visualstudio/msbuildqbsproductproject.cpp
index fc9187ae2..fc9187ae2 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.cpp
+++ b/src/plugins/generator/visualstudio/msbuildqbsproductproject.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.h b/src/plugins/generator/visualstudio/msbuildqbsproductproject.h
index 7fb9e2a39..7fb9e2a39 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildqbsproductproject.h
+++ b/src/plugins/generator/visualstudio/msbuildqbsproductproject.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.cpp b/src/plugins/generator/visualstudio/msbuildsharedsolutionpropertiesproject.cpp
index d8389817f..d8389817f 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.cpp
+++ b/src/plugins/generator/visualstudio/msbuildsharedsolutionpropertiesproject.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.h b/src/plugins/generator/visualstudio/msbuildsharedsolutionpropertiesproject.h
index f3848ce24..f3848ce24 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildsharedsolutionpropertiesproject.h
+++ b/src/plugins/generator/visualstudio/msbuildsharedsolutionpropertiesproject.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.cpp b/src/plugins/generator/visualstudio/msbuildsolutionpropertiesproject.cpp
index b0572e2e0..b0572e2e0 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.cpp
+++ b/src/plugins/generator/visualstudio/msbuildsolutionpropertiesproject.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.h b/src/plugins/generator/visualstudio/msbuildsolutionpropertiesproject.h
index 1c49f7901..1c49f7901 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildsolutionpropertiesproject.h
+++ b/src/plugins/generator/visualstudio/msbuildsolutionpropertiesproject.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuildtargetproject.cpp b/src/plugins/generator/visualstudio/msbuildtargetproject.cpp
index 9a1d00476..9a1d00476 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildtargetproject.cpp
+++ b/src/plugins/generator/visualstudio/msbuildtargetproject.cpp
diff --git a/src/lib/corelib/generators/visualstudio/msbuildtargetproject.h b/src/plugins/generator/visualstudio/msbuildtargetproject.h
index 13d890d72..13d890d72 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildtargetproject.h
+++ b/src/plugins/generator/visualstudio/msbuildtargetproject.h
diff --git a/src/lib/corelib/generators/visualstudio/msbuildutils.h b/src/plugins/generator/visualstudio/msbuildutils.h
index 3eceeba2e..3eceeba2e 100644
--- a/src/lib/corelib/generators/visualstudio/msbuildutils.h
+++ b/src/plugins/generator/visualstudio/msbuildutils.h
diff --git a/src/lib/corelib/generators/visualstudio/solution/ivisualstudiosolutionproject.cpp b/src/plugins/generator/visualstudio/solution/ivisualstudiosolutionproject.cpp
index f3a6a0cbd..f3a6a0cbd 100644
--- a/src/lib/corelib/generators/visualstudio/solution/ivisualstudiosolutionproject.cpp
+++ b/src/plugins/generator/visualstudio/solution/ivisualstudiosolutionproject.cpp
diff --git a/src/lib/corelib/generators/visualstudio/solution/ivisualstudiosolutionproject.h b/src/plugins/generator/visualstudio/solution/ivisualstudiosolutionproject.h
index 17de66e73..17de66e73 100644
--- a/src/lib/corelib/generators/visualstudio/solution/ivisualstudiosolutionproject.h
+++ b/src/plugins/generator/visualstudio/solution/ivisualstudiosolutionproject.h
diff --git a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolution.cpp b/src/plugins/generator/visualstudio/solution/visualstudiosolution.cpp
index a6d572425..a6d572425 100644
--- a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolution.cpp
+++ b/src/plugins/generator/visualstudio/solution/visualstudiosolution.cpp
diff --git a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolution.h b/src/plugins/generator/visualstudio/solution/visualstudiosolution.h
index 16f06f9e9..16f06f9e9 100644
--- a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolution.h
+++ b/src/plugins/generator/visualstudio/solution/visualstudiosolution.h
diff --git a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfileproject.cpp b/src/plugins/generator/visualstudio/solution/visualstudiosolutionfileproject.cpp
index d66f47cf7..d66f47cf7 100644
--- a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfileproject.cpp
+++ b/src/plugins/generator/visualstudio/solution/visualstudiosolutionfileproject.cpp
diff --git a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfileproject.h b/src/plugins/generator/visualstudio/solution/visualstudiosolutionfileproject.h
index fafafa494..fafafa494 100644
--- a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfileproject.h
+++ b/src/plugins/generator/visualstudio/solution/visualstudiosolutionfileproject.h
diff --git a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfolderproject.cpp b/src/plugins/generator/visualstudio/solution/visualstudiosolutionfolderproject.cpp
index d59d1e1ed..d59d1e1ed 100644
--- a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfolderproject.cpp
+++ b/src/plugins/generator/visualstudio/solution/visualstudiosolutionfolderproject.cpp
diff --git a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfolderproject.h b/src/plugins/generator/visualstudio/solution/visualstudiosolutionfolderproject.h
index a7fd180cc..a7fd180cc 100644
--- a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionfolderproject.h
+++ b/src/plugins/generator/visualstudio/solution/visualstudiosolutionfolderproject.h
diff --git a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionglobalsection.cpp b/src/plugins/generator/visualstudio/solution/visualstudiosolutionglobalsection.cpp
index 1e4f5fd01..1e4f5fd01 100644
--- a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionglobalsection.cpp
+++ b/src/plugins/generator/visualstudio/solution/visualstudiosolutionglobalsection.cpp
diff --git a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionglobalsection.h b/src/plugins/generator/visualstudio/solution/visualstudiosolutionglobalsection.h
index dd821fce0..dd821fce0 100644
--- a/src/lib/corelib/generators/visualstudio/solution/visualstudiosolutionglobalsection.h
+++ b/src/plugins/generator/visualstudio/solution/visualstudiosolutionglobalsection.h
diff --git a/src/lib/corelib/generators/visualstudio/visualstudio.pri b/src/plugins/generator/visualstudio/visualstudio.pro
index e7615d8cd..7f464f1ce 100644
--- a/src/lib/corelib/generators/visualstudio/visualstudio.pri
+++ b/src/plugins/generator/visualstudio/visualstudio.pro
@@ -1,3 +1,9 @@
+include(../../plugins.pri)
+
+TARGET = visualstudiogenerator
+
+QT = core
+
HEADERS += \
$$PWD/msbuildfiltersproject.h \
$$PWD/msbuildqbsgenerateproject.h \
@@ -17,6 +23,7 @@ SOURCES += \
$$PWD/msbuildsolutionpropertiesproject.cpp \
$$PWD/msbuildtargetproject.cpp \
$$PWD/visualstudiogenerator.cpp \
+ $$PWD/visualstudiogeneratorplugin.cpp \
$$PWD/visualstudioguidpool.cpp
HEADERS += \
diff --git a/src/lib/corelib/generators/visualstudio/visualstudio.qbs b/src/plugins/generator/visualstudio/visualstudio.qbs
index 44694d8d2..cb22ea5d9 100644
--- a/src/lib/corelib/generators/visualstudio/visualstudio.qbs
+++ b/src/plugins/generator/visualstudio/visualstudio.qbs
@@ -1,16 +1,10 @@
import qbs
+import "../../qbsplugin.qbs" as QbsPlugin
-QbsLibrary {
- type: ["staticlibrary"]
+QbsPlugin {
name: "visualstudiogenerator"
- install: false
- cpp.includePaths: base.concat([
- "../..",
- ])
-
- Depends { name: "cpp" }
- Depends { name: "Qt.core" }
+ files: ["visualstudiogeneratorplugin.cpp"]
Group {
name: "Visual Studio generator"
diff --git a/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp b/src/plugins/generator/visualstudio/visualstudiogenerator.cpp
index e2f2c2ddc..4b3667140 100644
--- a/src/lib/corelib/generators/visualstudio/visualstudiogenerator.cpp
+++ b/src/plugins/generator/visualstudio/visualstudiogenerator.cpp
@@ -293,16 +293,6 @@ void VisualStudioGenerator::generate()
d->reset();
}
-std::vector<std::shared_ptr<ProjectGenerator> > VisualStudioGenerator::createGeneratorList()
-{
- std::vector<std::shared_ptr<ProjectGenerator> > result;
- for (const auto &info : VisualStudioVersionInfo::knownVersions()) {
- if (info.usesMsBuild())
- result.push_back(std::make_shared<VisualStudioGenerator>(info));
- }
- return result;
-}
-
void VisualStudioGenerator::visitProject(const GeneratableProject &project)
{
addPropertySheets(project);
diff --git a/src/lib/corelib/generators/visualstudio/visualstudiogenerator.h b/src/plugins/generator/visualstudio/visualstudiogenerator.h
index 5c1d37695..8e120d5cc 100644
--- a/src/lib/corelib/generators/visualstudio/visualstudiogenerator.h
+++ b/src/plugins/generator/visualstudio/visualstudiogenerator.h
@@ -61,8 +61,6 @@ public:
QString generatorName() const override;
void generate() override;
- static std::vector<std::shared_ptr<ProjectGenerator> > createGeneratorList();
-
private:
virtual void visitProject(const GeneratableProject &project) override;
virtual void visitProjectData(const GeneratableProject &project,
diff --git a/src/plugins/generator/visualstudio/visualstudiogeneratorplugin.cpp b/src/plugins/generator/visualstudio/visualstudiogeneratorplugin.cpp
new file mode 100644
index 000000000..9907c27f7
--- /dev/null
+++ b/src/plugins/generator/visualstudio/visualstudiogeneratorplugin.cpp
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qbs.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "visualstudiogenerator.h"
+
+#include <tools/projectgeneratormanager.h>
+#include <tools/qbspluginmanager.h>
+
+static void QbsVisualStudioGeneratorPluginLoad()
+{
+ for (const auto &info : qbs::Internal::VisualStudioVersionInfo::knownVersions()) {
+ if (info.usesMsBuild())
+ qbs::ProjectGeneratorManager::registerGenerator(
+ std::make_shared<qbs::VisualStudioGenerator>(info));
+ }
+}
+
+static void QbsVisualStudioGeneratorPluginUnload()
+{
+}
+
+#ifndef GENERATOR_EXPORT
+#if defined(WIN32) || defined(_WIN32)
+#define GENERATOR_EXPORT __declspec(dllexport)
+#else
+#define GENERATOR_EXPORT __attribute__((visibility("default")))
+#endif
+#endif
+
+QBS_REGISTER_STATIC_PLUGIN(extern "C" GENERATOR_EXPORT, QbsVisualStudioGeneratorPlugin,
+ QbsVisualStudioGeneratorPluginLoad, QbsVisualStudioGeneratorPluginUnload)
diff --git a/src/lib/corelib/generators/visualstudio/visualstudioguidpool.cpp b/src/plugins/generator/visualstudio/visualstudioguidpool.cpp
index 543d64063..543d64063 100644
--- a/src/lib/corelib/generators/visualstudio/visualstudioguidpool.cpp
+++ b/src/plugins/generator/visualstudio/visualstudioguidpool.cpp
diff --git a/src/lib/corelib/generators/visualstudio/visualstudioguidpool.h b/src/plugins/generator/visualstudio/visualstudioguidpool.h
index a21bb1f94..a21bb1f94 100644
--- a/src/lib/corelib/generators/visualstudio/visualstudioguidpool.h
+++ b/src/plugins/generator/visualstudio/visualstudioguidpool.h
diff --git a/src/plugins/plugins.pri b/src/plugins/plugins.pri
index 050d1ceb5..b0eede442 100644
--- a/src/plugins/plugins.pri
+++ b/src/plugins/plugins.pri
@@ -10,7 +10,8 @@ DESTDIR = $${destdirPrefix}/qbs/plugins
CONFIG(static, static|shared) {
DEFINES += QBS_STATIC_LIB
} else {
- DEFINES += QBS_LIBRARY
+ isEmpty(QBSLIBDIR): QBSLIBDIR = $$OUT_PWD/../../../../$${QBS_LIBRARY_DIRNAME}
+ include($${PWD}/../lib/corelib/use_corelib.pri)
}
TEMPLATE = lib
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index d3823ae3e..9fe2e6b5b 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -1,2 +1,2 @@
TEMPLATE = subdirs
-SUBDIRS = scanner
+SUBDIRS = generator scanner
diff --git a/src/plugins/plugins.qbs b/src/plugins/plugins.qbs
index eb2fb3610..2eb3670f2 100644
--- a/src/plugins/plugins.qbs
+++ b/src/plugins/plugins.qbs
@@ -3,6 +3,8 @@ import qbs
Project {
name: "qbs plugins"
references: [
+ "generator/clangcompilationdb/clangcompilationdb.qbs",
+ "generator/visualstudio/visualstudio.qbs",
"scanner/cpp/cpp.qbs",
"scanner/qt/qt.qbs"
]
diff --git a/src/plugins/scanner/scannerplugin.qbs b/src/plugins/qbsplugin.qbs
index ae87ca980..44638b7b3 100644
--- a/src/plugins/scanner/scannerplugin.qbs
+++ b/src/plugins/qbsplugin.qbs
@@ -5,9 +5,12 @@ QbsProduct {
Depends { name: "bundle"; condition: qbs.targetOS.contains("darwin") }
Depends { name: "Qt.core" }
Depends { name: "qbsbuildconfig" }
- type: Qt.core.staticBuild ? ["staticlibrary"] : ["dynamiclibrary"]
+ Depends { name: "qbscore"; condition: !Qt.core.staticBuild }
+ type: (Qt.core.staticBuild ? ["staticlibrary"] : ["dynamiclibrary"]).concat(["qbsplugin"])
cpp.defines: base.concat(type.contains("staticlibrary") ? ["QBS_STATIC_LIB"] : ["QBS_LIBRARY"])
cpp.cxxLanguageVersion: "c++11"
+ cpp.includePaths: base.concat(["../../../lib/corelib"])
+ cpp.visibility: "hidden"
destinationDirectory: qbsbuildconfig.libDirName + "/qbs/plugins"
Group {
fileTagsFilter: ["dynamiclibrary"]
diff --git a/src/plugins/scanner/cpp/cpp.qbs b/src/plugins/scanner/cpp/cpp.qbs
index 33b576253..93a64e7cd 100644
--- a/src/plugins/scanner/cpp/cpp.qbs
+++ b/src/plugins/scanner/cpp/cpp.qbs
@@ -1,7 +1,7 @@
import qbs 1.0
-import "../scannerplugin.qbs" as ScannerPlugin
+import "../../qbsplugin.qbs" as QbsPlugin
-ScannerPlugin {
+QbsPlugin {
cpp.defines: base.concat(["CPLUSPLUS_NO_PARSER"])
name: "qbs_cpp_scanner"
files: [
diff --git a/src/plugins/scanner/cpp/cpp_global.h b/src/plugins/scanner/cpp/cpp_global.h
index 7ffa6e46d..80b101457 100644
--- a/src/plugins/scanner/cpp/cpp_global.h
+++ b/src/plugins/scanner/cpp/cpp_global.h
@@ -43,7 +43,7 @@
#if defined(WIN32) || defined(_WIN32)
#define CPPSCANNER_EXPORT __declspec(dllexport)
#else
-#define CPPSCANNER_EXPORT
+#define CPPSCANNER_EXPORT __attribute__((visibility("default")))
#endif
#endif // CPP_GLOBAL_H
diff --git a/src/plugins/scanner/cpp/cppscanner.cpp b/src/plugins/scanner/cpp/cppscanner.cpp
index 46d16e2f1..2d652b9e2 100644
--- a/src/plugins/scanner/cpp/cppscanner.cpp
+++ b/src/plugins/scanner/cpp/cppscanner.cpp
@@ -43,6 +43,9 @@
using namespace CPlusPlus;
+#include <tools/qbspluginmanager.h>
+#include <tools/scannerpluginmanager.h>
+
#ifdef Q_OS_UNIX
#include <sys/types.h>
#include <sys/stat.h>
@@ -295,8 +298,6 @@ static const char **additionalFileTags(void *opaq, int *size)
return 0;
}
-extern "C" {
-
ScannerPlugin includeScanner =
{
"include_scanner",
@@ -310,11 +311,15 @@ ScannerPlugin includeScanner =
ScannerPlugin *cppScanners[] = { &includeScanner, NULL };
-#ifndef QBS_STATIC_LIB
-CPPSCANNER_EXPORT ScannerPlugin **getScanners()
+static void QbsCppScannerPluginLoad()
{
- return cppScanners;
+ qbs::Internal::ScannerPluginManager::instance()->registerPlugins(cppScanners);
}
-#endif
-} // extern "C"
+static void QbsCppScannerPluginUnload()
+{
+}
+
+QBS_REGISTER_STATIC_PLUGIN(extern "C" CPPSCANNER_EXPORT, QbsCppScannerPlugin,
+ QbsCppScannerPluginLoad, QbsCppScannerPluginUnload)
+
diff --git a/src/plugins/scanner/qt/qt.qbs b/src/plugins/scanner/qt/qt.qbs
index ecc71f8cf..a6aea1c33 100644
--- a/src/plugins/scanner/qt/qt.qbs
+++ b/src/plugins/scanner/qt/qt.qbs
@@ -1,7 +1,7 @@
import qbs 1.0
-import "../scannerplugin.qbs" as ScannerPlugin
+import "../../qbsplugin.qbs" as QbsPlugin
-ScannerPlugin {
+QbsPlugin {
name: "qbs_qt_scanner"
files: [
"../scanner.h",
diff --git a/src/plugins/scanner/qt/qtscanner.cpp b/src/plugins/scanner/qt/qtscanner.cpp
index c53a69fd1..408a65220 100644
--- a/src/plugins/scanner/qt/qtscanner.cpp
+++ b/src/plugins/scanner/qt/qtscanner.cpp
@@ -40,11 +40,14 @@
#if defined(WIN32) || defined(_WIN32)
#define SCANNER_EXPORT __declspec(dllexport)
#else
-#define SCANNER_EXPORT
+#define SCANNER_EXPORT __attribute__((visibility("default")))
#endif
#include "../scanner.h"
+#include <tools/qbspluginmanager.h>
+#include <tools/scannerpluginmanager.h>
+
#include <QtCore/qglobal.h>
#ifdef Q_OS_UNIX
@@ -171,8 +174,6 @@ static const char **additionalFileTagsQrc(void *, int *size)
return 0;
}
-extern "C" {
-
ScannerPlugin qrcScanner =
{
"qt_qrc_scanner",
@@ -186,11 +187,14 @@ ScannerPlugin qrcScanner =
ScannerPlugin *qtScanners[] = {&qrcScanner, NULL};
-#ifndef QBS_STATIC_LIB
-SCANNER_EXPORT ScannerPlugin **getScanners()
+static void QbsQtScannerPluginLoad()
+{
+ qbs::Internal::ScannerPluginManager::instance()->registerPlugins(qtScanners);
+}
+
+static void QbsQtScannerPluginUnload()
{
- return qtScanners;
}
-#endif
-} // extern "C"
+QBS_REGISTER_STATIC_PLUGIN(extern "C" SCANNER_EXPORT, QbsQtScannerPlugin,
+ QbsQtScannerPluginLoad, QbsQtScannerPluginUnload)
diff --git a/src/plugins/scanner/scanner.h b/src/plugins/scanner/scanner.h
index 7843ceec5..0d62a2ea2 100644
--- a/src/plugins/scanner/scanner.h
+++ b/src/plugins/scanner/scanner.h
@@ -100,8 +100,6 @@ public:
int flags;
};
-typedef ScannerPlugin **(*getScanners_f)();
-
#ifdef __cplusplus
}
#endif