From b5e32ea4f620a0f7e3e2ee6bba741b0f08686312 Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Wed, 12 Jan 2011 21:35:36 -0300 Subject: GeneratorRunner looks for loadable generator modules in many places. Besides loading generator modules given as full file paths, and placed in the place where GeneratorRunner was installed, the modules are also looked for in paths added via QT_PLUGIN_PATH. --- generatorrunnerconfig.h.in | 3 +++ main.cpp | 25 ++++++++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/generatorrunnerconfig.h.in b/generatorrunnerconfig.h.in index 93b6bb011..d291fcc53 100644 --- a/generatorrunnerconfig.h.in +++ b/generatorrunnerconfig.h.in @@ -7,4 +7,7 @@ // generatorrunner plugin dir #define GENERATORRUNNER_PLUGIN_DIR "@generator_plugin_DIR@" +// module extension +#define MODULE_EXTENSION "@CMAKE_SHARED_LIBRARY_SUFFIX@" + #endif diff --git a/main.cpp b/main.cpp index 88e4eabd9..9397ba87c 100644 --- a/main.cpp +++ b/main.cpp @@ -127,15 +127,30 @@ int main(int argc, char *argv[]) if (!generatorSet.isEmpty()) { QFileInfo generatorFile(generatorSet); - if (generatorFile.baseName() == generatorSet) - generatorFile.setFile(QDir(GENERATORRUNNER_PLUGIN_DIR), generatorSet + "_generator"); + if (!generatorFile.exists()) { + QString generatorSetName(generatorSet + "_generator" + MODULE_EXTENSION); + + // More library paths may be added via the QT_PLUGIN_PATH environment variable. + QCoreApplication::addLibraryPath(GENERATORRUNNER_PLUGIN_DIR); + foreach (const QString& path, QCoreApplication::libraryPaths()) { + generatorFile.setFile(QDir(path), generatorSetName); + if (generatorFile.exists()) + break; + } + } + + if (!generatorFile.exists()) { + std::cerr << argv[0] << ": Error loading generator-set plugin: "; + std::cerr << qPrintable(generatorFile.baseName()) << " module not found." << std::endl; + return EXIT_FAILURE; + } QLibrary plugin(generatorFile.filePath()); getGeneratorsFunc getGenerators = (getGeneratorsFunc)plugin.resolve("getGenerators"); - if (getGenerators) + if (getGenerators) { getGenerators(&generators); - else { - std::cerr << argv[0] << ": Error loading generatorset plugin: " << qPrintable(plugin.errorString()) << std::endl; + } else { + std::cerr << argv[0] << ": Error loading generator-set plugin: " << qPrintable(plugin.errorString()) << std::endl; return EXIT_FAILURE; } } else if (!args.contains("help")) { -- cgit v1.2.3