diff generator/cppimplgenerator.cpp @ 384:d2f48c4cb3e3

Same behavior of shared libs on linux and windows. Minor build script fixes.
author Max Samukha <maxter@spambox.com>
date Fri, 16 Jul 2010 20:04:29 +0300
parents 1d56b2a2e10c
children 7dddafad5a20
line wrap: on
line diff
--- a/generator/cppimplgenerator.cpp	Mon Jul 12 22:50:58 2010 +0300
+++ b/generator/cppimplgenerator.cpp	Fri Jul 16 20:04:29 2010 +0300
@@ -39,6 +39,7 @@
 **
 ****************************************************************************/
 
+#include "global.h"
 #include "cppimplgenerator.h"
 #include "dgenerator.h"
 #include "reporthandler.h"
@@ -384,7 +385,7 @@
     QString s;
 
     if (options & CppImplGenerator::ExternC)
-        s += "QTD_EXTERN QTD_DLL_PUBLIC ";
+        s += "QTD_EXTERN QTD_EXPORT ";
 /* qtd
     if (options & CppImplGenerator::JNIExport)
         s += "Q_DECL_EXPORT ";
@@ -480,7 +481,7 @@
                 InterfaceTypeEntry *ite = static_cast<InterfaceTypeEntry*>(iface->typeEntry());
                 QString real_name = ite->origin()->qualifiedCppName();
 
-                s << "QTD_EXTERN QTD_DLL_PUBLIC " << real_name << "* qtd_" << java_class->name() << "_cast_to_" << iface->qualifiedCppName()
+                s << "QTD_EXTERN QTD_EXPORT " << real_name << "* qtd_" << java_class->name() << "_cast_to_" << iface->qualifiedCppName()
                   << "(" << java_class->qualifiedCppName() << " *ptr)" << endl << "{" << endl;
                 Indentation indent(INDENT);
                 s << INDENT << "return dynamic_cast<" << real_name << "*>(ptr);" << endl;
@@ -575,7 +576,7 @@
             writeShellVirtualFunction(s, function, java_class, pos);
         }
 
-        if (cpp_shared)
+        if (global.cppShared)
             writeInitCallbacks(s, java_class);
 
         // Functions in shell class
@@ -673,7 +674,7 @@
     if (java_class->isQObject())
     {
         s << endl << endl
-          << "QTD_EXTERN QTD_DLL_PUBLIC  void* qtd_" << java_class->name() << "_staticMetaObject() {" << endl
+          << "QTD_EXTERN QTD_EXPORT void* qtd_" << java_class->name() << "_staticMetaObject() {" << endl
           << "    return (void*)&" << java_class->name() << "::staticMetaObject;" << endl
           << "}" << endl;
     }
@@ -684,7 +685,7 @@
         {
             QString argName = "orig";
             s << endl << endl
-              << "QTD_EXTERN QTD_DLL_PUBLIC void qtd_" << java_class->name() << "_placed_copy(void* "
+              << "QTD_EXTERN QTD_EXPORT void qtd_" << java_class->name() << "_placed_copy(void* "
               << argName << ", void* place) {" << endl
               << QString("    const %1&  __qt_%2 = (const %1& ) *(%1 *)%2;").arg(shellClassName(java_class)).arg(argName) << endl
               << QString("    %1 *result = new (place) %1 (__qt_%2);").arg(java_class->qualifiedCppName()).arg(argName) << endl;
@@ -692,7 +693,7 @@
             s << "}";
 
             s << endl << endl
-              << "QTD_EXTERN QTD_DLL_PUBLIC void* qtd_" << java_class->name() << "_native_copy(void* " << argName << ") {" << endl
+              << "QTD_EXTERN QTD_EXPORT void* qtd_" << java_class->name() << "_native_copy(void* " << argName << ") {" << endl
               << QString("    const %1&  __qt_%2 = (const %1& ) *(%1 *)%2;").arg(shellClassName(java_class)).arg(argName) << endl
               << QString("    %1 *result = new %1 (__qt_%2);").arg(java_class->qualifiedCppName()).arg(argName) << endl
               << "    return result;" << endl;
@@ -707,11 +708,11 @@
 
 void CppImplGenerator::writeValueFunctions(QTextStream &s, const AbstractMetaClass *java_class)
 {
-    s << QString("QTD_EXTERN QTD_DLL_PUBLIC bool qtd_%1_QTypeInfo_isComplex() { return (bool) QTypeInfo<%2>::isComplex; }\n").arg(java_class->name()).arg(java_class->qualifiedCppName());
-    s << QString("QTD_EXTERN QTD_DLL_PUBLIC bool qtd_%1_QTypeInfo_isStatic() { return (bool) QTypeInfo<%2>::isStatic; }\n").arg(java_class->name()).arg(java_class->qualifiedCppName());
-    s << QString("QTD_EXTERN QTD_DLL_PUBLIC bool qtd_%1_QTypeInfo_isLarge() { return (bool) QTypeInfo<%2>::isLarge; }\n").arg(java_class->name()).arg(java_class->qualifiedCppName());
-    s << QString("QTD_EXTERN QTD_DLL_PUBLIC bool qtd_%1_QTypeInfo_isPointer() { return (bool) QTypeInfo<%2>::isPointer; }\n").arg(java_class->name()).arg(java_class->qualifiedCppName());
-    s << QString("QTD_EXTERN QTD_DLL_PUBLIC bool qtd_%1_QTypeInfo_isDummy() { return (bool) QTypeInfo<%2>::isDummy; }\n").arg(java_class->name()).arg(java_class->qualifiedCppName());
+    s << QString("QTD_EXTERN QTD_EXPORT bool qtd_%1_QTypeInfo_isComplex() { return (bool) QTypeInfo<%2>::isComplex; }\n").arg(java_class->name()).arg(java_class->qualifiedCppName());
+    s << QString("QTD_EXTERN QTD_EXPORT bool qtd_%1_QTypeInfo_isStatic() { return (bool) QTypeInfo<%2>::isStatic; }\n").arg(java_class->name()).arg(java_class->qualifiedCppName());
+    s << QString("QTD_EXTERN QTD_EXPORT bool qtd_%1_QTypeInfo_isLarge() { return (bool) QTypeInfo<%2>::isLarge; }\n").arg(java_class->name()).arg(java_class->qualifiedCppName());
+    s << QString("QTD_EXTERN QTD_EXPORT bool qtd_%1_QTypeInfo_isPointer() { return (bool) QTypeInfo<%2>::isPointer; }\n").arg(java_class->name()).arg(java_class->qualifiedCppName());
+    s << QString("QTD_EXTERN QTD_EXPORT bool qtd_%1_QTypeInfo_isDummy() { return (bool) QTypeInfo<%2>::isDummy; }\n").arg(java_class->name()).arg(java_class->qualifiedCppName());
 }
 
 void CppImplGenerator::writeVirtualDispatchFunction(QTextStream &s, const AbstractMetaFunction *function, const AbstractMetaClass *java_class, bool d_export)
@@ -723,10 +724,15 @@
     QString f_name = function->marshalledName(opts) + "_dispatch";
 
     if (d_export) {
-        QString qtdExtern = "extern(C)"; // TODO: should be settable via a generator switch
-        if (cpp_shared) {
-
-            s << qtdExtern << "{ extern export " << return_type << " function";
+        QString qtdExtern = "extern(C)";
+        QString qtdExport;
+        if (global.targetPlatform == Global::Win32Target)
+            qtdExport = "export ";
+
+
+        if (global.cppShared) {
+
+            s << qtdExtern << "{ extern " << qtdExport << return_type << " function";
             writeVirtualDispatchArguments(s, function, d_export);
             s << " qtd_" << f_name << "; }" << endl;
 
@@ -739,12 +745,12 @@
         }
     } else {
         QString module = packageToQtModule(java_class->package());
-        s << "QTD_EXPORT_DECL(" << module << ", " << return_type << ", " << f_name << ", ";
+        s << "QTD_FUNC_DECL(" << module << ", " << return_type << ", " << f_name << ", ";
         writeVirtualDispatchArguments(s, function, d_export);
         s << ")" << endl;
 
         if (function->declaringClass() == java_class) {
-            s << "QTD_EXPORT(" << module << ", " << f_name << ")" << endl;
+            s << "QTD_FUNC(" << module << ", " << f_name << ")" << endl;
         }
     }
 }
@@ -905,7 +911,7 @@
     if (java_class->name() == "QObject")
         initArgs += ", VoidFunc *sigs";
 
-    s << "QTD_EXTERN QTD_DLL_EXPORT void qtd_" << java_class->name()
+    s << "QTD_EXTERN QTD_EXPORT void qtd_" << java_class->name()
       << QString("_initCallBacks(%1) {").arg(initArgs) << endl;
 
     // virtual functions handlers
@@ -1290,7 +1296,7 @@
       << "    return -1;" << endl
       << "}" << endl << endl;
 */
-    s << "QTD_EXTERN QTD_DLL_PUBLIC void qtd_" << className << "_createEntity(void *nativeId, void* dId)" << endl
+    s << "QTD_EXTERN QTD_EXPORT void qtd_" << className << "_createEntity(void *nativeId, void* dId)" << endl
       << "{" << endl
       << "    new " << entityName << "((QObject*)nativeId, dId);" << endl
       << "}" << endl << endl;
@@ -1352,12 +1358,12 @@
 
     QString module = packageToQtModule(java_class->package());
 
-    s << "QTD_EXPORT_DECL(" << module << ", const QMetaObject*, QObject_metaObject_dispatch, (void *dId))" << endl
-      << "QTD_EXPORT_DECL(" << module << ", int, QObject_qt_metacall_dispatch, (void *dId, QMetaObject::Call _c, int _id, void **_a))" << endl;
+    s << "QTD_FUNC_DECL(" << module << ", const QMetaObject*, QObject_metaObject_dispatch, (void *dId))" << endl
+      << "QTD_FUNC_DECL(" << module << ", int, QObject_qt_metacall_dispatch, (void *dId, QMetaObject::Call _c, int _id, void **_a))" << endl;
 
     if (java_class->name() == "QObject") {
-        s << "QTD_EXPORT(" << module << ", QObject_metaObject_dispatch)" << endl
-          << "QTD_EXPORT(" << module << ", QObject_qt_metacall_dispatch)" << endl;
+        s << "QTD_FUNC(" << module << ", QObject_metaObject_dispatch)" << endl
+          << "QTD_FUNC(" << module << ", QObject_qt_metacall_dispatch)" << endl;
     }
 
     // TODO: QMetaObject should be included in the typesystem
@@ -1384,7 +1390,7 @@
       << "    return " << java_class->qualifiedCppName() << "::qt_metacall(_c, _id, _a);"
       << "}" << endl << endl
 
-      << "QTD_EXTERN QTD_DLL_PUBLIC int qtd_" << java_class->name() << "_qt_metacall(void* __this_nativeId, QMetaObject::Call _c, int _id, void **_a)"
+      << "QTD_EXTERN QTD_EXPORT int qtd_" << java_class->name() << "_qt_metacall(void* __this_nativeId, QMetaObject::Call _c, int _id, void **_a)"
       << "{" << endl
       << "    " << shellClassName(java_class) << " *__qt_this = (" << shellClassName(java_class) << " *) __this_nativeId;" << endl
       << "    return __qt_this->__override_qt_metacall(_c, _id, _a);" << endl
@@ -1803,7 +1809,7 @@
 
 void CppImplGenerator::writeQtdEntityFunction(QTextStream &s, const AbstractMetaClass *java_class)
 {
-    s << "QTD_EXTERN QTD_DLL_PUBLIC void *__" << java_class->name() << "_entity(void *q_ptr)" << endl;
+    s << "QTD_EXTERN QTD_EXPORT void *__" << java_class->name() << "_entity(void *q_ptr)" << endl;
     s << "{" << endl;
     {
         Indentation indent(INDENT);
@@ -2013,7 +2019,7 @@
                         s << translateType(argument->type(), EnumAsInts, d_export);
                 }
                 else if (d_type->name() == "QModelIndex") {
-                    if(d_export && dVersion == 2 && d_type->isConstant())
+                    if(d_export && global.dVersion == 2 && d_type->isConstant())
                         s << "const(QModelIndexAccessor)";
                     else
                         s << "QModelIndexAccessor";
@@ -2362,12 +2368,12 @@
 void CppImplGenerator::writeFinalDestructor(QTextStream &s, const AbstractMetaClass *cls)
 {
     if (cls->hasConstructors() && cls->isDestructorBase()) {
-        s << INDENT << "QTD_EXTERN QTD_DLL_PUBLIC void qtd_" << cls->name() << "_delete(void* nativeId)" << endl
+        s << INDENT << "QTD_EXTERN QTD_EXPORT void qtd_" << cls->name() << "_delete(void* nativeId)" << endl
           << INDENT << "{" << endl
           << INDENT << "    delete (" << shellClassName(cls) << "*)nativeId;" << endl
           << INDENT << "}" << endl << endl;
 
-        s << INDENT << "QTD_EXTERN QTD_DLL_PUBLIC void qtd_" << cls->name() << "_destroy(void* nativeId)" << endl
+        s << INDENT << "QTD_EXTERN QTD_EXPORT void qtd_" << cls->name() << "_destroy(void* nativeId)" << endl
           << INDENT << "{" << endl
           << INDENT << "    call_destructor((" << shellClassName(cls) << "*)nativeId);" << endl
           << INDENT << "}" << endl << endl;
@@ -3703,14 +3709,14 @@
         else
             return d_name + " "+ QString(java_type->actualIndirections(), '*');
     } else if (java_type->isNativePointer()) {
-        if (java_type->typeEntry()->isStructInD() && dVersion == 2 && java_type->isConstant() && d_export)
+        if (java_type->typeEntry()->isStructInD() && global.dVersion == 2 && java_type->isConstant() && d_export)
             return "const(" + d_name + QString(java_type->indirections()-1, '*') + ")*";
         else if (java_type->typeEntry()->isValue())
             return "void*";
         else if (java_type->typeEntry()->isEnum() && d_export)
             return "int" + QString(java_type->indirections(), '*');
         else {
-            if (java_type->isConstant() && dVersion == 2 && d_export)
+            if (java_type->isConstant() && global.dVersion == 2 && d_export)
                 return "const (" + d_name + QString(java_type->indirections(), '*') + ")";
             else
                 return d_name + QString(java_type->indirections(), '*');