aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo Lima <hugo.lima@openbossa.org>2009-11-23 16:51:01 -0200
committerMarcelo Lira <marcelo.lira@openbossa.org>2009-11-24 10:39:25 -0300
commit302029e093c88fb46cea8d6131726b82731110f9 (patch)
treee1eb77ccfd40fdf060599490e3e0af5ed6903a49
parent04b6a05df40f88e1a62e522fb65264b932a904d5 (diff)
Change the getGenerators signature, because on some platforms a function exported as a C function
can't return a C++ type by value. All generators plugins *MUST* be recompiled. Reviewed by Luciano Wolf <luciano.wolf@openbossa.org>
-rw-r--r--generator.h4
-rw-r--r--generatorrunnermacros.h6
-rw-r--r--main.cpp4
3 files changed, 8 insertions, 6 deletions
diff --git a/generator.h b/generator.h
index ee51cb87a..53e05e8c5 100644
--- a/generator.h
+++ b/generator.h
@@ -35,9 +35,9 @@ class AbstractMetaBuilder;
class QFile;
#define EXPORT_GENERATOR_PLUGIN(X)\
-extern "C" GENRUNNER_API GeneratorList getGenerators()\
+extern "C" GENRUNNER_EXPORT void getGenerators(GeneratorList* list)\
{\
- return GeneratorList() << X;\
+ *list << X;\
}\
GENRUNNER_API
diff --git a/generatorrunnermacros.h b/generatorrunnermacros.h
index 4c1c9df90..c68f328d3 100644
--- a/generatorrunnermacros.h
+++ b/generatorrunnermacros.h
@@ -26,16 +26,18 @@
// GENRUNNER_API is used for the public API symbols.
#if defined _WIN32 || defined __CYGWIN__
+ #define GENRUNNER_EXPORT __declspec(dllexport)
#if GENRUNNER_BUILD
- #define GENRUNNER_API __declspec(dllexport)
+ #define GENRUNNER_API GENRUNNER_EXPORT
#else
#define GENRUNNER_API __declspec(dllimport)
#endif
// dont worry about deprecated functions under windows
#define GENRUNNER_DEPRECATED
#else
+ #define GENRUNNER_EXPORT __attribute__ ((visibility("default")))
#if __GNUC__ >= 4
- #define GENRUNNER_API __attribute__ ((visibility("default")))
+ #define GENRUNNER_API GENRUNNER_EXPORT
#else
#define GENRUNNER_API
#endif
diff --git a/main.cpp b/main.cpp
index af0609345..7c690294d 100644
--- a/main.cpp
+++ b/main.cpp
@@ -48,7 +48,7 @@ static void printOptions(QTextStream& s, const QMap<QString, QString>& options)
}
}
-typedef QLinkedList<Generator*> (*getGeneratorsFunc)();
+typedef void (*getGeneratorsFunc)(QLinkedList<Generator*>*);
QMap<QString, QString> getCommandLineArgs(int argc, char** argv)
{
@@ -129,7 +129,7 @@ int main(int argc, char *argv[])
QLibrary plugin(generatorFile);
getGeneratorsFunc getGenerators = (getGeneratorsFunc)plugin.resolve("getGenerators");
if (getGenerators)
- generators = getGenerators();
+ getGenerators(&generators);
else {
std::cerr << argv[0] << ": Error loading generatorset plugin: " << qPrintable(plugin.errorString()) << std::endl;
return EXIT_FAILURE;