[Dcmlib] Swig + forbidden namespace gdcm

Mathieu Malaterre mathieu.malaterre at kitware.com
Mon Oct 18 20:10:04 CEST 2004


Eric Boix wrote:
> 	Salut Mathieu,
> 
> Lorsque Swig wrappe le code (i.e. pour un %include) d'une classe A faisant
> reference a une autre classe B (par exemple dans une methode) qui elle
> EST wrappe'e, alors le code wrappe' de A utilise le namespace gdcm::.
> Exemple: dans gdcm_wrap.cxx le wrapping de Document::SetShaDict( Dict* )
>          est le suivant
> 
>     static PyObject *_wrap_Document_SetShaDict(PyObject *self, PyObject *args)
>     {
>        PyObject *resultobj;
>        gdcm::Document *arg1 = (gdcm::Document *) 0 ;
>        gdcm::Dict *arg2 = (gdcm::Dict *) 0 ;    <---- y'a bien gdcm::
>     ...
> 
> Par contre, lorsque la classe B N'est PAS wrappe' par Swig, le code
> wrappe' de A ne fait pas reference au namespace gdcm. En admettant que
> gdcm::Dict ne soit donc pas wrappe' (par de %include "gdcmDict.h"),
> l'exemple ci-dessus deviendrait:
> 
>     static PyObject *_wrap_Document_SetShaDict(PyObject *self, PyObject *args)
>    {
>        PyObject *resultobj;
>        gdcm::Document *arg1 = (gdcm::Document *) 0 ;
>        Dict *arg2 = (gdcm::Dict *) 0 ;    <---- il N'y a PAS gdcm::
>     ...
> 
> et donc la compilation de gdcm_wrap.cxx echouera car en l'absence d'un
> "using namespace gdcm" le type Dict est inconnu.
> 
> Deux solutions:
>   1/ wrapper toutes les classes necessaires pour que Swig passe.
>   2/ utiliser un "using namespace gdcm" dans gdcmPython/gdcm.i
> 
> La solution 1/ comporte les inconvenients:
>   * de generer un gros code wrappe' et donc une grosse librairie dynamique
>     que Python devra loader,
>   * d'exporte inutilement des classes internes de gdcm (i.e. sans pouvoir
>     se limiter a l'API),
>   * de compliquer l'ecriture de gdcmPython/gdcm.i, ou comme tu le sais
>     l'ordre des %include importe. Ajouter un nouvelle classe prends parfois
>     du temps (j'ai perdu une bonne heure, avant de comprendre que le premier
>     %include doit etre celui de gdcmCommon.h).
> La solution 2/ (qui etait possible avant le passage au namespace) casserait
> la compilation sous Cygwin en contrevenat a l'interdiction de l'usage
> du namespace gdcm.

En fait t'as verifie' que sous cygwin ca passe pas ? A mon avis si on 
limite au warp python (sans vtk) on n'incluera pas les header windows.h 
et co qui redefinisse les symboles. En gros avec de la chance gdcm 
python (pure sans vtk) n'inclue rien des system header

je verifie ca se soir, mais met deja le 'using namespace gdcm' ca 
dervait passer sur tous les nightlies

HTH
Mathieu
Ps: j'ai toujours rien compris au namespace gdcm et swig, je comprends 
mal pourquoi il fait le travail a moitie'. En plus ma version sur fedora 
ne marche pas alors que sur ma debian testing c'est ok ...





More information about the Dcmlib mailing list