[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    [PyKDE] PyKDE compling woes with current snapshots
From:       Gordon Tyler <gordon () doxxx ! net>
Date:       2003-04-24 6:32:47
[Download RAW message or body]

Hi all,

I'm trying to compile PyKDE 3.5-2 (plus patches, see below) using the latest 
snapshots of sip and PyQt: sip-x11-gpl-snapshot-20030423 and 
PyQt-x11-gpl-snapshot-20030423.

Patches attached:
 * sipName: sipName changes for Phil's changes upcoming sip 3.6.
 * subclass: My subclass map in KMainWindow, with correct sipNames.
 * ListToArray: I just copied the code from PyQt, there's probably a better 
way of doing this.
 *pyArgvToC: Ditto.
 * kurl: The sip generated code was already calling sipParseArgs. This seems 
to be the way that PyQt code does it. Is there a way of improving the naming 
of the parsed args produced by the sip generated code, so that one could use 
'idx' instead of 'a0' for instance in the hand-written code?

Now I've run into a compile error that has me stumped:

sipkpartsKPartsPart.cpp: In method `void 
sipKParts_MainWindow::setInstance(KInstance *)':
sipkpartsKPartsPart.cpp:1817: no matching function for call to 
`sipKParts_PartBase::sipVH_setInstance (sipMethodCache *, sipThisType *&, 
KInstance *&)'
sipkpartsKPartsPartBase.h:59: candidates are: static void 
sipKParts_PartBase::sipVH_setInstance(const sipMethodCache *, sipThisType *, 
KInstance *, bool)
sipkpartsKPartsFactory.cpp: In method `void 
sipKParts_DockMainWindow::setInstance(KInstance *)':
sipkpartsKPartsFactory.cpp:2363: no matching function for call to 
`sipKParts_PartBase::sipVH_setInstance (sipMethodCache *, sipThisType *&, 
KInstance *&)'
sipkpartsKPartsFactory.cpp:1723: candidates are: static void 
sipKParts_PartBase::sipVH_setInstance(const sipMethodCache *, sipThisType *, 
KInstance *, bool)

Any ideas?

Ciao,
Gordon

["PyKDE-3.5-2_kurl.patch" (text/x-diff)]

diff -ru PyKDE-3.5-2.orig/sip/kurl.sip PyKDE-3.5-2/sip/kurl.sip
--- PyKDE-3.5-2.orig/sip/kurl.sip	2003-03-27 03:50:58.000000000 -0500
+++ PyKDE-3.5-2/sip/kurl.sip	2003-04-24 00:04:07.000000000 -0400
@@ -201,50 +201,35 @@
 %MemberCode
 //returns (int)
 //takes
-        KURL::List *ptr;
-        if (sipParseArgs(&sipArgsParsed,sipArgs,"n",&sipSelfObj,sipClass_KURL_List,&ptr))
                
-            return PyInt_FromLong(ptr -> count());
+        return PyInt_FromLong(sipCpp -> count());
 %End

         QString              __getitem__ (int) /NonLazy/;
 %MemberCode
 //returns (QString)
 //takes a0 (int)
-        KURL::List *ptr;
-        int idx;
-
-        if (sipParseArgs(&sipArgsParsed,sipArgs,"ni",&sipSelfObj,sipClass_KURL_List,&ptr,&idx))
 +        if (a0 < 0 || a0 >= sipCpp -> count())
         {
-            if (idx < 0 || idx >= ptr -> count())
-            {
-                PyErr_Format(PyExc_IndexError,"KURL::List index out of range");
-                return NULL;
-            }
-
-            return sipMapCppToSelf(&(*ptr)[idx],sipClass_QString);
+            PyErr_Format(PyExc_IndexError,"KURL::List index out of range");
+            return NULL;
         }
+
+        return sipMapCppToSelf(&(*sipCpp)[a0],sipClass_QString);
 %End
 
         bool                 __contains__ (QString) /NonLazy/;
 %MemberCode
 //returns (bool)
 //takes a0 (QString)
-        QString *qs;
-        int isTemp = 0;
-        KURL::List *ptr;
+        int res;
+        Py_BEGIN_ALLOW_THREADS
+        res = (sipCpp -> findIndex(*a0) >= 0);
+        Py_END_ALLOW_THREADS

-        if (sipParseArgs(&sipArgsParsed,sipArgs,"nM1",&sipSelfObj,sipClass_KURL_List,&ptr,sipConvertTo_QString,&qs,&isTemp))
                
-        {
-            int res;
-            Py_BEGIN_ALLOW_THREADS
-            res = (ptr -> findIndex(*qs) >= 0);
-            Py_END_ALLOW_THREADS
-
-            if (isTemp)
-                delete qs;
+        if (a0IsTemp)
+            delete a0;

-            return sipConvertFromBool(res);
-        }
+        return sipConvertFromBool(res);
 %End


["PyKDE-3.5-2_subclass.patch" (text/x-diff)]

diff -ru PyKDE-3.5-2.orig/sip/kmainwindow.sip PyKDE-3.5-2/sip/kmainwindow.sip
--- PyKDE-3.5-2.orig/sip/kmainwindow.sip	2003-04-08 13:52:20.000000000 -0400
+++ PyKDE-3.5-2/sip/kmainwindow.sip	2003-04-24 01:25:01.000000000 -0400
@@ -32,6 +32,22 @@


 public:
+
+%ConvertToSubClassCode
+	// The table of Python class objects indexed by their names.  The table
+	// must be sorted by name.
+
+	static sipStringTypeClassMap map[] = {
+		{sipName_KMenuBar,		&sipClass_KMenuBar},
+		{sipName_KPopupMenu,		&sipClass_KPopupMenu},
+		{sipName_KStatusBar,		&sipClass_KStatusBar},
+		{sipName_KToolBar,		&sipClass_KToolBar},
+	};
+
+	sipClass = sipMapStringToClass(sipCpp -> className(),map,
+				       sizeof (map)/sizeof (map[0]));
+%End
+
                          KMainWindow (QWidget*/TransferThis/ = 0, const char* = 0, \
                WFlags = WType_TopLevel|WDestructiveClose);
     KPopupMenu*          helpMenu (const QString& = QString::null, bool = 1);
     KPopupMenu*          customHelpMenu (bool = 1);


["PyKDE-3.5-2_sipName.patch" (text/x-diff)]

diff -ru PyKDE-3.5-2.orig/sip/kdatetbl.sip PyKDE-3.5-2/sip/kdatetbl.sip
--- PyKDE-3.5-2.orig/sip/kdatetbl.sip	2003-03-27 03:51:47.000000000 -0500
+++ PyKDE-3.5-2/sip/kdatetbl.sip	2003-04-23 22:48:28.000000000 -0400
@@ -236,7 +236,7 @@
             goto releaseLock;
         }

-        sipBadVirtualResultType(sipName_kdeui_KDateValidator,sipName_kdeui_validate);
+        sipBadVirtualResultType(sipName_KDateValidator,sipName_validate);
     }

 reperr:
diff -ru PyKDE-3.5-2.orig/sip/klistview.sip PyKDE-3.5-2/sip/klistview.sip
--- PyKDE-3.5-2.orig/sip/klistview.sip	2003-04-01 19:52:54.000000000 -0500
+++ PyKDE-3.5-2/sip/klistview.sip	2003-04-23 22:48:43.000000000 -0400
@@ -248,7 +248,7 @@

         if (rc) goto releaseLock;

-        sipBadVirtualResultType(sipName_kdeui_KListView,sipName_kdeui_findDrop);
+        sipBadVirtualResultType(sipName_KListView,sipName_findDrop);
     }

 reperr:
diff -ru PyKDE-3.5-2.orig/sip/knumvalidator.sip PyKDE-3.5-2/sip/knumvalidator.sip
--- PyKDE-3.5-2.orig/sip/knumvalidator.sip	2003-03-27 03:51:58.000000000 -0500
+++ PyKDE-3.5-2/sip/knumvalidator.sip	2003-04-23 22:49:30.000000000 -0400
@@ -83,7 +83,7 @@
             goto releaseLock;
         }

-        sipBadVirtualResultType(sipName_kdeui_KIntValidator,sipName_kdeui_validate);
+        sipBadVirtualResultType(sipName_KIntValidator,sipName_validate);
     }

 reperr:
@@ -169,7 +169,7 @@
             goto releaseLock;
         }

-        sipBadVirtualResultType(sipName_kdeui_KFloatValidator,sipName_kdeui_validate);
+        sipBadVirtualResultType(sipName_KFloatValidator,sipName_validate);
     }

 reperr:
@@ -260,7 +260,7 @@
             goto releaseLock;
         }

-        sipBadVirtualResultType(sipName_kdeui_KDoubleValidator,sipName_kdeui_validate);
+        sipBadVirtualResultType(sipName_KDoubleValidator,sipName_validate);
     }

 reperr:
diff -ru PyKDE-3.5-2.orig/sip/kstringvalidator.sip PyKDE-3.5-2/sip/kstringvalidator.sip
--- PyKDE-3.5-2.orig/sip/kstringvalidator.sip	2003-03-27 03:52:04.000000000 -0500
+++ PyKDE-3.5-2/sip/kstringvalidator.sip	2003-04-23 22:49:56.000000000 -0400
@@ -87,7 +87,7 @@
             goto releaseLock;
         }

-        sipBadVirtualResultType(sipName_kdeui_KStringListValidator,sipName_kdeui_validate);
+        sipBadVirtualResultType(sipName_KStringListValidator,sipName_validate);
     }

 reperr:
@@ -178,7 +178,7 @@
             goto releaseLock;
         }

-        sipBadVirtualResultType(sipName_kdeui_KMimeTypeValidator,sipName_kdeui_validate);
+        sipBadVirtualResultType(sipName_KMimeTypeValidator,sipName_validate);
     }

 reperr:

["PyKDE-3.5-2_ListToArray.patch" (text/x-diff)]

diff -ru PyKDE-3.5-2.orig/sip/keditlistbox.sip PyKDE-3.5-2/sip/keditlistbox.sip
--- PyKDE-3.5-2.orig/sip/keditlistbox.sip	2003-04-02 01:59:53.000000000 -0500
+++ PyKDE-3.5-2/sip/keditlistbox.sip	2003-04-24 01:48:12.000000000 -0400
@@ -101,7 +101,7 @@
 
         const char **strings;
 
-        if ((strings = PyQtListToArray(slist)) == NULL)
+        if ((strings = PyQt_qt_ListToArray(slist)) == NULL)
             return NULL;
 
         Py_BEGIN_ALLOW_THREADS
@@ -153,3 +153,41 @@
 
 };  // class KEditListBox
 
+%HeaderCode
+const char **PyQt_qt_ListToArray(PyObject *lst);
+%End
+
+
+%C++Code
+// Convert a list of strings to an array of strings on the heap.  Also used by
+// QPixmap.
+const char **PyQt_qt_ListToArray(PyObject *lst)
+{
+        int nstr;
+        const char **str, **sp;
+
+        nstr = PyList_Size(lst);
+
+        if ((str = (const char **)sipMalloc(nstr * sizeof (char *))) == NULL)
+                return NULL;
+
+        // Convert the list.
+        sp = str;
+
+        for (int i = 0; i < nstr; ++i)
+        {
+                char *s;
+
+                if ((s = PyString_AsString(PyList_GetItem(lst,i))) == NULL)
+                {
+                        sipFree((ANY *)str);
+                        return NULL;
+                }
+
+                *sp++ = s;
+        }
+
+        return str;
+}
+%End
+

["PyKDE-3.5-2_pyArgvToC.patch" (text/x-diff)]

diff -ru PyKDE-3.5-2.orig/sip/kapp.sip PyKDE-3.5-2/sip/kapp.sip
--- PyKDE-3.5-2.orig/sip/kapp.sip	2003-03-27 03:24:03.000000000 -0500
+++ PyKDE-3.5-2/sip/kapp.sip	2003-04-24 01:27:17.000000000 -0400
@@ -62,7 +62,7 @@

         // Convert the list.

-        if ((argv = PyQtPyArgvToC(argvlist,&argc)) == NULL)
+        if ((argv = pyArgvToC(argvlist,&argc)) == NULL)
             return NULL;

         // Create it now the arguments are right.
@@ -85,7 +85,7 @@
             delete a0;

         // Now modify the original list.
-        PyQtUpdatePyArgv(argvlist,argc,argv);
+        updatePyArgv(argvlist,argc,argv);
     }
 %End
 
diff -ru PyKDE-3.5-2.orig/sip/kapplication.sip PyKDE-3.5-2/sip/kapplication.sip
--- PyKDE-3.5-2.orig/sip/kapplication.sip	2003-03-31 00:09:00.000000000 -0500
+++ PyKDE-3.5-2/sip/kapplication.sip	2003-04-24 00:44:38.000000000 -0400
@@ -62,7 +62,7 @@
 
         // Convert the list.
 
-        if ((argv = PyQtPyArgvToC(argvlist,&argc)) == NULL)
+        if ((argv = pyArgvToC(argvlist,&argc)) == NULL)
             return NULL;
 
         // Create it now the arguments are right.
@@ -84,7 +84,7 @@
 
         // Now modify the original list.
 
-        PyQtUpdatePyArgv(argvlist,argc,argv);
+        updatePyArgv(argvlist,argc,argv);
 
 //        Py_INCREF(Py_None);
 //        return Py_None;
diff -ru PyKDE-3.5-2.orig/sip/kcmdlineargs.sip PyKDE-3.5-2/sip/kcmdlineargs.sip
--- PyKDE-3.5-2.orig/sip/kcmdlineargs.sip	2003-03-27 03:50:44.000000000 -0500
+++ PyKDE-3.5-2/sip/kcmdlineargs.sip	2003-04-24 00:30:45.000000000 -0400
@@ -71,7 +71,7 @@
 
         // Convert the list.
 
-        if ((argv = PyQtPyArgvToC(argvlist,&argc)) == NULL)
+        if ((argv = pyArgvToC(argvlist,&argc)) == NULL)
             return NULL;

         // Create it now the arguments are right.
@@ -83,7 +83,7 @@
 
         // Now modify the original list.
 
-        PyQtUpdatePyArgv(argvlist,argc,argv);
+        updatePyArgv(argvlist,argc,argv);
 
         Py_INCREF(Py_None);
         return Py_None;
@@ -108,7 +108,7 @@
 
         // Convert the list.
 
-        if ((argv = PyQtPyArgvToC(argvlist, &argc)) == NULL)
+        if ((argv = pyArgvToC(argvlist, &argc)) == NULL)
             return NULL;
 
         // Create it now the arguments are right.
@@ -120,7 +120,7 @@
 
         // Now modify the original list.
 
-        PyQtUpdatePyArgv(argvlist,argc,argv);
+        updatePyArgv(argvlist,argc,argv);

         Py_INCREF(Py_None);
         return Py_None;
@@ -242,5 +242,58 @@
                          KCmdLineArgs (const KCmdLineOptions*, const char*, const char*);
                          ~KCmdLineArgs ();

+%C++Code
+#include <string.h>
+
+// Convert a Python argv list to a conventional C argc count and argv array.
+static char **pyArgvToC(PyObject *argvlist,int *argcp)
+{
+        int argc;
+        char **argv;
+
+        argc = PyList_Size(argvlist);
+
+        // Allocate space for two copies of the argument pointers, plus the
+        // terminating NULL.
+        if ((argv = (char **)sipMalloc(2 * (argc + 1) * sizeof (char *))) == NULL)
+                return NULL;
+
+        // Convert the list.
+        for (int a = 0; a < argc; ++a)
+        {
+                char *arg;
+
+                // Get the argument and allocate memory for it.
+                if ((arg = PyString_AsString(PyList_GetItem(argvlist,a))) == NULL ||
+                    (argv[a] = (char *)sipMalloc(strlen(arg) + 1)) == NULL)
+                        return NULL;
+
+                // Copy the argument and save a pointer to it.
+                strcpy(argv[a],arg);
+                argv[a + argc + 1] = argv[a];
+        }
+
+        argv[argc + argc + 1] = argv[argc] = NULL;
+
+        *argcp = argc;
+
+        return argv;
+}
+
+// Remove arguments from the Python argv list that have been removed from the
+// C argv array.
+static void updatePyArgv(PyObject *argvlist,int argc,char **argv)
+{
+        for (int a = 0, na = 0; a < argc; ++a)
+        {
+                // See if it was removed.
+                if (argv[na] == argv[a + argc + 1])
+                        ++na;
+                else
+                        PyList_SetSlice(argvlist,na,na + 1,NULL);
+        }
+}
+%End
+
 };  // class KCmdLineArgs
 

_______________________________________________
PyKDE mailing list    PyKDE@mats.gmd.de
http://mats.gmd.de/mailman/listinfo/pykde

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic