##// END OF EJS Templates
Updated meson build files and force plugin unload when closing app...
jeandet -
r72:a0c89a70c83c
parent child
Show More
@@ -17,6 +17,7 Q_DECLARE_LOGGING_CATEGORY(LOG_PluginManager)
17 17 class SCIQLOP_CORE_EXPORT PluginManager {
18 18 public:
19 19 explicit PluginManager();
20 ~PluginManager();
20 21
21 22 /**
22 23 * Loads plugins into SciQlop. The loaded plugins are those located in the directory passed in
@@ -1,7 +1,7
1 1
2 2 catalogicpp_dep = dependency('catalogicpp', required : true, fallback:['catalogicpp','catalogicpp_dep'])
3 3 pybind11_dep = dependency('pybind11', required : true, fallback:['pybind11','pybind11_dep'])
4
4 timeseries_dep = dependency('TimeSeries', required : true, fallback:['TimeSeries','time_series_dep'])
5 5
6 6 core_moc_headers = [
7 7 './include/Common/containers.h',
@@ -16,24 +16,15 core_moc_headers = [
16 16 './include/Common/MetaTypes.h',
17 17 './include/Common/cpp_utils.h',
18 18 './include/Common/SortUtils.h',
19 './include/Data/DataSeries.h',
20 './include/Data/DataSeriesIterator.h',
21 19 './include/Data/DateTimeRangeHelper.h',
22 './include/Data/SpectrogramSeries.h',
20 './include/Data/ScalarTimeSerie.h',
23 21 './include/Data/DateTimeRange.h',
24 './include/Data/VectorSeries.h',
25 22 './include/Data/DataProviderParameters.h',
26 './include/Data/ArrayData.h',
27 './include/Data/Unit.h',
28 './include/Data/ScalarSeries.h',
23 './include/Data/VectorTimeSerie.h',
29 24 './include/Data/SqpIterator.h',
30 25 './include/Data/IDataProvider.h',
31 './include/Data/DataSeriesUtils.h',
32 './include/Data/OptionalAxis.h',
33 './include/Data/IDataSeries.h',
26 './include/Data/SpectrogramTimeSerie.h',
34 27 './include/Data/DataSeriesType.h',
35 './include/Data/ArrayDataIterator.h',
36 './include/Data/DataSeriesMergeHelper.h',
37 28 './include/CoreGlobal.h',
38 29 './include/Network/NetworkController.h',
39 30 './include/Network/Response.h',
@@ -50,16 +41,11 core_moc_headers = [
50 41 './include/Catalogue/CatalogueController.h',
51 42 './include/Plugin/IPlugin.h',
52 43 './include/Variable/VariableModel2.h',
53 './include/Variable/Variable.h',
54 './include/Variable/VariableCacheStrategy.h',
55 44 './include/Variable/VariableController2.h',
56 './include/Variable/VariableCacheStrategyFactory.h',
45 './include/Variable/Variable2.h',
57 46 './include/Variable/VariableSynchronizationGroup2.h',
58 './include/Variable/ProportionalCacheStrategy.h',
59 47 './include/Variable/private/VCTransaction.h',
60 './include/Variable/SingleThresholdCacheStrategy.h',
61 './include/Visualization/VisualizationController.h'
62 ]
48 './include/Visualization/VisualizationController.h']
63 49
64 50
65 51 core_moc_sources = ['src/Network/Downloader.cpp']
@@ -72,13 +58,6 core_sources = [
72 58 './src/Common/SignalWaiter.cpp',
73 59 './src/Common/DateUtils.cpp',
74 60 './src/Common/StringUtils.cpp',
75 './src/Data/VectorSeries.cpp',
76 './src/Data/ScalarSeries.cpp',
77 './src/Data/OptionalAxis.cpp',
78 './src/Data/DataSeriesIterator.cpp',
79 './src/Data/SpectrogramSeries.cpp',
80 './src/Data/ArrayDataIterator.cpp',
81 './src/Data/DataSeriesUtils.cpp',
82 61 './src/Network/Downloader.cpp',
83 62 './src/Network/NetworkController.cpp',
84 63 './src/Settings/SqpSettingsDefs.cpp',
@@ -88,13 +67,10 core_sources = [
88 67 './src/DataSource/DataSourceController.cpp',
89 68 './src/Time/TimeController.cpp',
90 69 './src/PluginManager/PluginManager.cpp',
91 './src/pybind11_wrappers/CatalogWrappers.cpp',
92 #'./src/pybind11_wrappers/QtWrappers.cpp',
93 #'./src/pybind11_wrappers/CoreWrappers.cpp',
94 70 './src/Version.cpp',
95 71 './src/Catalogue/CatalogueController.cpp',
96 './src/Variable/Variable.cpp',
97 72 './src/Variable/VariableSynchronizationGroup2.cpp',
73 './src/Variable/Variable2.cpp',
98 74 './src/Variable/VariableController2.cpp',
99 75 './src/Variable/VariableModel2.cpp',
100 76 './src/Visualization/VisualizationController.cpp']
@@ -107,16 +83,22 sciqlop_core_lib = library('sciqlopcore',
107 83 core_moc_files,
108 84 cpp_args : '-DCORE_LIB',
109 85 include_directories : core_inc,
110 dependencies : [qt5core, qt5network, catalogicpp_dep, pybind11_dep],
86 dependencies : [qt5core, qt5network, catalogicpp_dep, pybind11_dep, timeseries_dep],
111 87 install : true
112 88 )
113 89
114 90
115 91 sciqlop_core = declare_dependency(link_with : sciqlop_core_lib,
116 92 include_directories : core_inc,
117 dependencies : [qt5core, qt5network, catalogicpp_dep, pybind11_dep])
93 dependencies : [qt5core, qt5network, catalogicpp_dep, pybind11_dep, timeseries_dep])
118 94
119 95
96 [
97 './src/pybind11_wrappers/CatalogWrappers.cpp',
98 './src/pybind11_wrappers/QtWrappers.cpp',
99 './src/pybind11_wrappers/CoreWrappers.cpp'
100 ]
101
120 102
121 103 subdir('tests')
122 104
@@ -78,9 +78,10 struct PluginManager::PluginManagerPrivate {
78 78 loadState.setError(QObject::tr("name '%1' already registered").arg(pluginName));
79 79 }
80 80 else {
81 if (auto pluginInstance = qobject_cast<IPlugin *>(pluginLoader.instance())) {
82 pluginInstance->initialize();
81 if (auto plugin = pluginLoader.instance()) {
82 qobject_cast<IPlugin *>(plugin)->initialize();
83 83 m_RegisteredPlugins.insert(pluginName, pluginPath);
84 m_LoadedPlugins.insert(pluginName, plugin);
84 85 }
85 86 else {
86 87 loadState.setError(QObject::tr("the file is not a Sciqlop plugin"));
@@ -100,17 +101,33 struct PluginManager::PluginManagerPrivate {
100 101 for (QObject *plugin : QPluginLoader::staticInstances()) {
101 102 qobject_cast<IPlugin *>(plugin)->initialize();
102 103 m_RegisteredPlugins.insert(plugin->metaObject()->className(), "StaticPlugin");
104 m_LoadedPlugins.insert(plugin->metaObject()->className(), plugin);
103 105 }
104 106 }
107 void clearAllPlugins()
108 {
109 for(auto plugin:m_LoadedPlugins)
110 {
111 delete plugin;
112 }
113 m_LoadedPlugins.clear();
114 m_RegisteredPlugins.clear();
115 }
105 116
106 117 /// Registered plugins (key: plugin name, value: plugin path)
107 118 QHash<QString, QString> m_RegisteredPlugins;
119 QHash<QString,QObject*> m_LoadedPlugins;
108 120 };
109 121
110 122 PluginManager::PluginManager() : impl{spimpl::make_unique_impl<PluginManagerPrivate>()}
111 123 {
112 124 }
113 125
126 PluginManager::~PluginManager()
127 {
128 impl->clearAllPlugins();
129 }
130
114 131 void PluginManager::loadPlugins(const QDir &pluginDir)
115 132 {
116 133 // Load plugins
@@ -7,17 +7,6 TestUtils_dep = declare_dependency(link_with : TestUtils,
7 7 dependencies : [sciqlop_core, qt5test])
8 8
9 9
10 DataSeriesTestsUtils = library('DataSeriesTestsUtils', 'Data/DataSeriesBuilders.h', 'Data/DataSeriesBuilders.cpp',
11 'Data/DataSeriesTestsUtils.h',
12 'Data/DataSeriesTestsUtils.cpp',
13 dependencies : [sciqlop_core, qt5test]
14 )
15
16
17 DataSeriesTestsUtils_dep = declare_dependency(link_with : DataSeriesTestsUtils,
18 dependencies : [sciqlop_core, qt5test])
19
20
21 10
22 11 tests = [
23 12 {
@@ -41,47 +30,6 tests = [
41 30 'deps': [sciqlop_core, qt5test]
42 31 },
43 32 {
44 'name':'TestDataSeriesUtils',
45 'sources': ['Data/TestDataSeriesUtils.cpp'],
46 'deps': [sciqlop_core, qt5test]
47 },
48 {
49 'name':'TestOptionalAxis',
50 'sources': ['Data/TestOptionalAxis.cpp'],
51 'deps': [sciqlop_core, qt5test]
52 },
53 {
54 'name':'TestSpectrogramSeries',
55 'sources': [
56 'Data/TestSpectrogramSeries.cpp',
57 ],
58 'deps': [sciqlop_core, qt5test, DataSeriesTestsUtils_dep]
59 },
60 {
61 'name':'TestOneDimArrayData',
62 'sources': ['Data/TestOneDimArrayData.cpp'],
63 'deps': [sciqlop_core, qt5test]
64 },
65 {
66 'name':'TestScalarSeries',
67 'sources': [
68 'Data/TestScalarSeries.cpp',
69 ],
70 'deps': [sciqlop_core, qt5test, DataSeriesTestsUtils_dep]
71 },
72 {
73 'name':'TestTwoDimArrayData',
74 'sources': ['Data/TestTwoDimArrayData.cpp'],
75 'deps': [sciqlop_core, qt5test]
76 },
77 {
78 'name':'TestVectorSeries',
79 'sources': [
80 'Data/TestVectorSeries.cpp',
81 ],
82 'deps': [sciqlop_core, qt5test, DataSeriesTestsUtils_dep]
83 },
84 {
85 33 'name':'TestDataSourceController',
86 34 'sources': [
87 35 'DataSource/TestDataSourceController.cpp',
General Comments 0
You need to be logged in to leave comments. Login now