Trunk build fails with SIP 4.10.1 (API 7.1)

Latest SIP changes [1] completely broke compilation with SIP 4.10.1. I’ve tried to find an easy fix, but gave up for now because I don’t know SIP API well

GCC 4.4.3 error output:

In file included from /home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:4:
/usr/include/python2.6/sip.h:556: warning: comma at end of enumerator list
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In static member function ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&)’:
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:154: error: ‘const struct sipAPIDef’ has no member named ‘api_convert_from_instance’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In static member function ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(T*)’:
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:178: error: ‘const struct sipAPIDef’ has no member named ‘api_convert_from_instance’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In static member function ‘static void* QClass_converters::QClass_from_PyQt(PyObject*)’:
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:198: error: ‘const struct sipAPIDef’ has no member named ‘api_wrapper_check’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:208: error: ‘const struct sipAPIDef’ has no member named ‘api_transfer’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:221: error: ‘struct sipWrapper’ has no member named ‘u’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In static member function ‘static PyObject* QList_QAction_to_python_list_PyQt::convert(const QList<QAction*>&)’:
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:262: error: ‘const struct _sipAPIDef’ has no member named ‘api_convert_from_instance’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In function ‘PyObject* toPyQt(T*)’:
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:400: error: ‘const struct sipAPIDef’ has no member named ‘api_convert_from_instance’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: At global scope:
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QObject]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QObject, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QObject, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QObject]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:437: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QWidget]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QWidget, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QWidget, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QWidget]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:438: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QAction]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QAction, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QAction, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QAction]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:439: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QDockWidget]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QDockWidget, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QDockWidget, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QDockWidget]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:440: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QUndoCommand]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QUndoCommand, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QUndoCommand, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QUndoCommand]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:441: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QUndoStack]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QUndoStack, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QUndoStack, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QUndoStack]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:442: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QPoint]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QPoint, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QPoint, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QPoint]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:443: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QColor]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QColor, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QColor, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QColor]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:444: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QMouseEvent]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QMouseEvent, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QMouseEvent, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QMouseEvent]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:445: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QWheelEvent]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QWheelEvent, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QWheelEvent, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QWheelEvent]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:446: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QSettings]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QSettings, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QSettings, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QSettings]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:447: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp: In instantiation of ‘static PyObject* QClass_converters::QClass_to_PyQt::convert(const T&) [with T = QActionGroup]’:
/usr/include/boost/python/converter/as_to_python_function.hpp:27: instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = QActionGroup, ToPython = QClass_converters::QClass_to_PyQt]’
/usr/include/boost/python/to_python_converter.hpp:87: instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = QActionGroup, Conversion = QClass_converters::QClass_to_PyQt, bool has_get_pytype = false]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:234: instantiated from ‘QClass_converters::QClass_converters() [with T = QActionGroup]’
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:448: instantiated from here
/home/kostya/projects/avogadro/libavogadro/src/python/sip.cpp:141: warning: unused parameter ‘object’

[1] http://review.source.kitware.com/#change,742


Regards,
Konstantin

On Mon, Jan 31, 2011 at 8:07 AM, Konstantin Tokarev annulen@yandex.ru wrote:

Latest SIP changes [1] completely broke compilation with SIP 4.10.1. I’ve tried to find an easy fix, but gave up for now because I don’t know SIP API well

I will take a look at this. For such a small piece of code this has
required the most maintenance. I think I have a good handle on this,
but it would be great to get a dashboard up and running with the
oldest SIP we claim to support. Same goes for oldest Qt we claim to
support, etc, etc.

Marcus

31.01.2011, 18:14, “Marcus D. Hanwell” mhanwell@gmail.com:

On Mon, Jan 31, 2011 at 8:07 AM, Konstantin Tokarev annulen@yandex.ru; wrote:

Latest SIP changes [1] completely broke compilation with SIP 4.10.1. I’ve tried to find an easy fix, but gave up for now because I don’t know SIP API well

I will take a look at this. For such a small piece of code this has
required the most maintenance. I think I have a good handle on this,
but it would be great to get a dashboard up and running with the
oldest SIP we claim to support.

AFAIU, this problem is caused from treating SIP 4.10.1 as “old” API when it has
“new” methods. SIP 4.10.1 was working before your change

Also, IIRC, SIP 4.8 worked fine too before.

Isn’t it possible to workaround this fragile APIs someway?


Regards,
Konstantin

2011/1/31 Konstantin Tokarev annulen@yandex.ru:

31.01.2011, 18:14, “Marcus D. Hanwell” mhanwell@gmail.com:

On Mon, Jan 31, 2011 at 8:07 AM, Konstantin Tokarev annulen@yandex.ru; wrote:

Latest SIP changes [1] completely broke compilation with SIP 4.10.1. I’ve tried to find an easy fix, but gave up for now because I don’t know SIP API well

I will take a look at this. For such a small piece of code this has
required the most maintenance. I think I have a good handle on this,
but it would be great to get a dashboard up and running with the
oldest SIP we claim to support.

AFAIU, this problem is caused from treating SIP 4.10.1 as “old” API when it has
“new” methods. SIP 4.10.1 was working before your change

Also, IIRC, SIP 4.8 worked fine too before.

Isn’t it possible to workaround this fragile APIs someway?

I began using their #define for the API versions, which is much more
robust than what we did before. I didn’t have all versions of SIP
installed though, and so it is likely there was a flaw in the logic. I
can dig through and check where things broke down.

Marcus

31.01.2011, 18:49, “Marcus D. Hanwell” mhanwell@gmail.com:

2011/1/31 Konstantin Tokarev annulen@yandex.ru;:

31.01.2011, 18:14, “Marcus D. Hanwell” mhanwell@gmail.com;:

On Mon, Jan 31, 2011 at 8:07 AM, Konstantin Tokarev annulen@yandex.ru;; wrote:

Latest SIP changes [1] completely broke compilation with SIP 4.10.1. I’ve tried to find an easy fix, but gave up for now because I don’t know SIP API well
I will take a look at this. For such a small piece of code this has
required the most maintenance. I think I have a good handle on this,
but it would be great to get a dashboard up and running with the
oldest SIP we claim to support.
AFAIU, this problem is caused from treating SIP 4.10.1 as “old” API when it has
“new” methods. SIP 4.10.1 was working before your change

Also, IIRC, SIP 4.8 worked fine too before.

Isn’t it possible to workaround this fragile APIs someway?

I began using their #define for the API versions, which is much more
robust than what we did before. I didn’t have all versions of SIP
installed though, and so it is likely there was a flaw in the logic. I
can dig through and check where things broke down.

Marcus

Constructions like these a not very understandable:

#if defined(SIP_API_MAJOR_NR) && SIP_API_MAJOR_NR == 8
sipSimpleWrapper wrapper = reinterpret_cast<sipSimpleWrapper>(obj_ptr);

if defined(SIP_API_MINOR_NR) && SIP_API_MINOR_NR >= 1

return sip_API->api_get_address(wrapper);

else

return wrapper->data;

endif

Probably these macros can make things clearer:

// Helper macro which makes easier to compare SIP API versions
#if defined(SIP_API_MAJOR_NR) && defined(SIP_API_MINOR_NR)

#define SIP_VERSION_CHECK(major, minor) ((major<<8)|(minor))
#define SIP_VERSION ((SIP_API_MAJOR_NR<<8)|(SIP_API_MINOR_NR))

#else

// For very old versions (is it really needed?)
#define SIP_VERSION_CHECK(major,minor) 1
#define SIP_VERSION 0

#endif

(the same trick as OB_VERSION_CHECK and AVOGADRO_VERSION_CHECK)

than

#if SIP_VERSION >= SIP_VERSION_CHECK(8,1)

#elif SIP_VERSION >= SIP_VERSION_CHECK(8,0)

#elif


Regards,
Konstantin

2011/1/31 Konstantin Tokarev annulen@yandex.ru:

31.01.2011, 18:49, “Marcus D. Hanwell” mhanwell@gmail.com:

2011/1/31 Konstantin Tokarev annulen@yandex.ru;:

31.01.2011, 18:14, “Marcus D. Hanwell” mhanwell@gmail.com;:

On Mon, Jan 31, 2011 at 8:07 AM, Konstantin Tokarev annulen@yandex.ru;; wrote:

Latest SIP changes [1] completely broke compilation with SIP 4.10.1. I’ve tried to find an easy fix, but gave up for now because I don’t know SIP API well
I will take a look at this. For such a small piece of code this has
required the most maintenance. I think I have a good handle on this,
but it would be great to get a dashboard up and running with the
oldest SIP we claim to support.
AFAIU, this problem is caused from treating SIP 4.10.1 as “old” API when it has
“new” methods. SIP 4.10.1 was working before your change

Also, IIRC, SIP 4.8 worked fine too before.

Isn’t it possible to workaround this fragile APIs someway?

I began using their #define for the API versions, which is much more
robust than what we did before. I didn’t have all versions of SIP
installed though, and so it is likely there was a flaw in the logic. I
can dig through and check where things broke down.

Marcus

Constructions like these a not very understandable:

#if defined(SIP_API_MAJOR_NR) && SIP_API_MAJOR_NR == 8
sipSimpleWrapper wrapper = reinterpret_cast<sipSimpleWrapper>(obj_ptr);

if defined(SIP_API_MINOR_NR) && SIP_API_MINOR_NR >= 1

return sip_API->api_get_address(wrapper);

else

return wrapper->data;

endif

I disagree, this is a nested if, with indentation following the
preprocessor standard. It is only one level deep, and clearly
expresses the change made in the last SIP API. I just got the mapping
from API versions to SIP versions wrong. There is a simple fix I
should be able to push in shortly to remedy that.

I have a clone of SIP and will be testing this out with a few versions of SIP.

Marcus

On Mon, Jan 31, 2011 at 1:10 PM, Marcus D. Hanwell
mhanwell@gmail.com wrote:

2011/1/31 Konstantin Tokarev annulen@yandex.ru:

31.01.2011, 18:49, “Marcus D. Hanwell” mhanwell@gmail.com:

2011/1/31 Konstantin Tokarev annulen@yandex.ru;:

31.01.2011, 18:14, “Marcus D. Hanwell” mhanwell@gmail.com;:

On Mon, Jan 31, 2011 at 8:07 AM, Konstantin Tokarev annulen@yandex.ru;; wrote:

Latest SIP changes [1] completely broke compilation with SIP 4.10.1. I’ve tried to find an easy fix, but gave up for now because I don’t know SIP API well
I will take a look at this. For such a small piece of code this has
required the most maintenance. I think I have a good handle on this,
but it would be great to get a dashboard up and running with the
oldest SIP we claim to support.
AFAIU, this problem is caused from treating SIP 4.10.1 as “old” API when it has
“new” methods. SIP 4.10.1 was working before your change

Also, IIRC, SIP 4.8 worked fine too before.

Isn’t it possible to workaround this fragile APIs someway?

I began using their #define for the API versions, which is much more
robust than what we did before. I didn’t have all versions of SIP
installed though, and so it is likely there was a flaw in the logic. I
can dig through and check where things broke down.

Marcus

Constructions like these a not very understandable:

#if defined(SIP_API_MAJOR_NR) && SIP_API_MAJOR_NR == 8
sipSimpleWrapper wrapper = reinterpret_cast<sipSimpleWrapper>(obj_ptr);

if defined(SIP_API_MINOR_NR) && SIP_API_MINOR_NR >= 1

return sip_API->api_get_address(wrapper);

else

return wrapper->data;

endif

I disagree, this is a nested if, with indentation following the
preprocessor standard. It is only one level deep, and clearly
expresses the change made in the last SIP API. I just got the mapping
from API versions to SIP versions wrong. There is a simple fix I
should be able to push in shortly to remedy that.

I have a clone of SIP and will be testing this out with a few versions of SIP.

OK, I pushed a change that should address it. I just used the wrong
major API number, and then messed up the logic a little in one place.
I tested this with a large number of SIP header versions and it worked
well. With the stream of API changes, this code is becoming more and
more difficult to test.

I think we should probably bump the SIP and Qt versions to versions we
are actually building against in master at least.

Marcus

Marcus D. Hanwell, Ph.D.
R&D Engineer, Kitware Inc.
(518) 881-4937