diff options
author | Jake Petroules <jake.petroules@qt.io> | 2017-05-12 18:50:50 -0700 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2017-06-13 15:47:18 +0000 |
commit | 8b5e5af31e7c0860f8cf4f8fa50e7b322cadca62 (patch) | |
tree | 36a7e2fc38c7571cdf7e4c6b6449754e39cb993c | |
parent | d5dc7a2571027168d1a74cbb2578848dc843e20e (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.pro | 1 | ||||
-rw-r--r-- | src/lib/corelib/api/project.cpp | 15 | ||||
-rw-r--r-- | src/lib/corelib/buildgraph/qtmocscanner.cpp | 1 | ||||
-rw-r--r-- | src/lib/corelib/corelib.qbs | 7 | ||||
-rw-r--r-- | src/lib/corelib/generators/clangcompilationdb/clangcompilationdb.pri | 5 | ||||
-rw-r--r-- | src/lib/corelib/generators/clangcompilationdb/clangcompilationdb.qbs | 19 | ||||
-rw-r--r-- | src/lib/corelib/generators/generatableprojectiterator.h | 2 | ||||
-rw-r--r-- | src/lib/corelib/generators/generator.h | 10 | ||||
-rw-r--r-- | src/lib/corelib/generators/generatordata.h | 6 | ||||
-rw-r--r-- | src/lib/corelib/generators/generators.pri | 3 | ||||
-rw-r--r-- | src/lib/corelib/generators/generators.qbs | 8 | ||||
-rw-r--r-- | src/lib/corelib/tools/filesaver.h | 4 | ||||
-rw-r--r-- | src/lib/corelib/tools/projectgeneratormanager.cpp | 20 | ||||
-rw-r--r-- | src/lib/corelib/tools/projectgeneratormanager.h | 6 | ||||
-rw-r--r-- | src/lib/corelib/tools/qbspluginmanager.cpp | 145 | ||||
-rw-r--r-- | src/lib/corelib/tools/qbspluginmanager.h | 96 | ||||
-rw-r--r-- | src/lib/corelib/tools/scannerpluginmanager.cpp | 66 | ||||
-rw-r--r-- | src/lib/corelib/tools/scannerpluginmanager.h | 24 | ||||
-rw-r--r-- | src/lib/corelib/tools/tools.pri | 3 | ||||
-rw-r--r-- | src/lib/libs.qbs | 1 | ||||
-rw-r--r-- | src/plugins/generator/clangcompilationdb/clangcompilationdb.pro | 12 | ||||
-rw-r--r-- | src/plugins/generator/clangcompilationdb/clangcompilationdb.qbs | 11 | ||||
-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.cpp | 64 | ||||
-rw-r--r-- | src/plugins/generator/generator.pro | 2 | ||||
-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.cpp | 67 | ||||
-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.pri | 3 | ||||
-rw-r--r-- | src/plugins/plugins.pro | 2 | ||||
-rw-r--r-- | src/plugins/plugins.qbs | 2 | ||||
-rw-r--r-- | src/plugins/qbsplugin.qbs (renamed from src/plugins/scanner/scannerplugin.qbs) | 5 | ||||
-rw-r--r-- | src/plugins/scanner/cpp/cpp.qbs | 4 | ||||
-rw-r--r-- | src/plugins/scanner/cpp/cpp_global.h | 2 | ||||
-rw-r--r-- | src/plugins/scanner/cpp/cppscanner.cpp | 19 | ||||
-rw-r--r-- | src/plugins/scanner/qt/qt.qbs | 4 | ||||
-rw-r--r-- | src/plugins/scanner/qt/qtscanner.cpp | 20 | ||||
-rw-r--r-- | src/plugins/scanner/scanner.h | 2 |
107 files changed, 481 insertions, 211 deletions
@@ -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 |