[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