[SCM] Packaging for pytango branch, master, updated. debian/8.0.3-1-1-g001d7d8

Picca Frédéric-Emmanuel picca at debian.org
Sun Jul 21 08:54:41 UTC 2013


The following commit has been merged in the master branch:
commit 001d7d8f36eae5e893f9f81c5e088de88a278426
Author: Picca Frédéric-Emmanuel <picca at debian.org>
Date:   Sun Jul 21 08:51:48 2013 +0200

    Fix the s390 FTBFS (Closes: #711761)
    
    debian/patch
      - 0001-fix-from-upstream-FTBFS-s390.patch (new)

diff --git a/debian/changelog b/debian/changelog
index aef44bd..7ecfb77 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+pytango (8.0.3-2) unstable; urgency=low
+
+  * debian/patch
+    + 0001-fix-from-upstream-FTBFS-s390.patch (Closes: #711761)
+
+ -- Picca Frédéric-Emmanuel <picca at debian.org>  Sun, 21 Jul 2013 08:48:11 +0200
+
 pytango (8.0.3-1) unstable; urgency=low
 
   * Imported Upstream version 8.0.3
diff --git a/debian/patches/0001-fix-from-upstream-FTBFS-s390.patch b/debian/patches/0001-fix-from-upstream-FTBFS-s390.patch
new file mode 100644
index 0000000..917ab9a
--- /dev/null
+++ b/debian/patches/0001-fix-from-upstream-FTBFS-s390.patch
@@ -0,0 +1,346 @@
+From: =?UTF-8?q?Picca=20Fr=C3=A9d=C3=A9ric-Emmanuel?= <picca at debian.org>
+Date: Sun, 21 Jul 2013 08:44:52 +0200
+Subject: fix from upstream FTBFS s390
+
+---
+ doc/revision.rst                           |  5 ++
+ src/boost/cpp/defs.h                       |  1 +
+ src/boost/cpp/device_attribute.cpp         | 54 ++++++++++++++++++-
+ src/boost/cpp/device_attribute_numpy.hpp   | 12 +++--
+ src/boost/cpp/device_data.cpp              |  1 +
+ src/boost/cpp/server/encoded_attribute.cpp |  3 ++
+ src/boost/cpp/server/tango_util.cpp        |  2 +-
+ src/boost/cpp/server/wattribute.cpp        | 83 ++++++++++++++++++++++++++++++
+ src/boost/python/release.py                |  2 +-
+ 9 files changed, 155 insertions(+), 8 deletions(-)
+
+diff --git a/doc/revision.rst b/doc/revision.rst
+index 939582e..95a1758 100644
+--- a/doc/revision.rst
++++ b/doc/revision.rst
+@@ -71,6 +71,8 @@ History of modifications:
+ +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
+ | 20/05/13 | `8.16 <http://www.tango-controls.org/static/PyTango/v803/doc/html/index.html>`_  | Update to PyTango 8.0.3                             | T\. Coutinho          |
+ +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
++| 09/07/13 | `8.17 <http://www.tango-controls.org/static/PyTango/v804/doc/html/index.html>`_  | Update to PyTango 8.0.4                             | T\. Coutinho          |
+++----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
+ 
+ .. _version-history:
+ 
+@@ -80,6 +82,9 @@ Version history
+ +------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+ | version    | Changes                                                                                                                                                                      |
+ +============+==============================================================================================================================================================================+
++| 8.0.4      | Bug fixes:                                                                                                                                                                   |
++|            |         - `598: [pytango][8.0.3] failed to build from source on s390 <https://sourceforge.net/p/tango-cs/bugs/598/>`_                                                        |
+++------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+ | 8.0.3      | Features:                                                                                                                                                                    |
+ |            |     - from sourceforge:                                                                                                                                                      |
+ |            |         - `88: Implement Util::server_set_event_loop method in python <https://sourceforge.net/p/tango-cs/feature-requests/88>`_                                             |
+diff --git a/src/boost/cpp/defs.h b/src/boost/cpp/defs.h
+index 4f20c7c..8e1e5e2 100644
+--- a/src/boost/cpp/defs.h
++++ b/src/boost/cpp/defs.h
+@@ -56,6 +56,7 @@ namespace PyTango
+         ExtractAsTuple,
+         ExtractAsList,
+         ExtractAsString,
++        ExtractAsPyTango3,
+         ExtractAsNothing
+     };
+     
+diff --git a/src/boost/cpp/device_attribute.cpp b/src/boost/cpp/device_attribute.cpp
+index c61ff74..810421d 100644
+--- a/src/boost/cpp/device_attribute.cpp
++++ b/src/boost/cpp/device_attribute.cpp
+@@ -400,6 +400,48 @@ namespace PyDeviceAttribute
+         }
+     }
+ 
++    template<long tangoTypeConst>
++    static inline void _update_array_values_as_pytango3(Tango::DeviceAttribute &self, bool isImage, object py_value)
++    {
++        typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
++        typedef typename TANGO_const2arraytype(tangoTypeConst) TangoArrayType;
++
++        // Extract the actual data from Tango::DeviceAttribute (self)
++        TangoArrayType* value_ptr = 0;
++        try {
++            self >> value_ptr;
++        } catch (Tango::DevFailed &e ) {
++            if (strcmp(e.errors[0].reason.in(),"API_EmptyDeviceAttribute") != 0)
++                throw;
++        }
++        std::auto_ptr<TangoArrayType> guard_value_ptr(value_ptr);
++
++        if (value_ptr == 0) {
++            // Empty device attribute
++            py_value.attr(value_attr_name) = boost::python::list();
++            py_value.attr(w_value_attr_name) = object();
++            return;
++        }
++
++        TangoScalarType* buffer = value_ptr->get_buffer();
++
++        long sz = value_ptr->length();
++        boost::python::list res;
++        for (long x =0; x<sz; ++x) {
++            res.append(python_tangocpp<tangoTypeConst>::to_python(buffer[x]));
++        }
++
++        py_value.attr(value_attr_name) = res;
++        py_value.attr(w_value_attr_name) = object();
++    }
++
++    template<>
++    inline void _update_array_values_as_pytango3<Tango::DEV_ENCODED>(Tango::DeviceAttribute &self, bool isImage, object py_value)
++    {
++        /// @todo DevEncoded didn't even exist in PyTango3...
++        _update_array_values_as_tuples<Tango::DEV_ENCODED>(self, isImage, py_value);
++    }
++
+     template<long tangoTypeConst> static void
+     _update_array_values_as_tuples(Tango::DeviceAttribute &self, bool isImage,
+                                    bopy::object py_value)
+@@ -534,6 +576,11 @@ namespace PyDeviceAttribute
+                             TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(data_type,
+                                 _update_value_as_string, self, py_value);
+                             break;
++                        case PyTango::ExtractAsPyTango3:
++                            TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(data_type,
++                                _update_scalar_values, self, py_value);
++                            py_value.attr("w_scalar_value") = py_value.attr(w_value_attr_name);
++                            break;
+                         case PyTango::ExtractAsNothing:
+                             break;
+                     }
+@@ -579,6 +626,10 @@ namespace PyDeviceAttribute
+                         TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(data_type,
+                             _update_value_as_string, self, py_value);
+                         break;
++                    case PyTango::ExtractAsPyTango3:
++                        TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(data_type,
++                            _update_array_values_as_pytango3, self, is_image, py_value);
++
+                     case PyTango::ExtractAsNothing:
+                         break;
+                 }
+@@ -624,7 +675,8 @@ namespace PyDeviceAttribute
+         if (isImage) {
+             for(CORBA::ULong y = 0; y < dim_y; ++y) {
+                 object py_sub = py_value[y];
+-                if (len(py_sub) != dim_x)
++                CORBA::ULong len_py_sub = static_cast<CORBA::ULong>(boost::python::len(py_sub));
++                if (len_py_sub != dim_x)
+                     raise_(PyExc_TypeError, non_valid_image);
+                 for(CORBA::ULong x = 0; x < dim_x; ++x) {
+                     python_tangocpp<tangoTypeConst>::to_cpp(py_sub[x], buffer[x + y*dim_x]);
+diff --git a/src/boost/cpp/device_attribute_numpy.hpp b/src/boost/cpp/device_attribute_numpy.hpp
+index 9932620..b770771 100644
+--- a/src/boost/cpp/device_attribute_numpy.hpp
++++ b/src/boost/cpp/device_attribute_numpy.hpp
+@@ -239,16 +239,18 @@ namespace PyDeviceAttribute {
+             // x and y position it corresponded! Yes, 'iter' has a coordinates
+             // field, but it was always [0,0], never updated!!
+             npy_intp coordinates[2];
+-            Py_ssize_t &x = coordinates[1];
+-            Py_ssize_t &y = coordinates[0];
+-            for (y=0; y < dim_y; ++y) {
+-                for (x=0; x < dim_x; ++x) {
++            npy_intp &x = coordinates[1];
++            npy_intp &y = coordinates[0];
++            npy_intp ndim_x = static_cast<npy_intp>(dim_x);
++            npy_intp ndim_y = static_cast<npy_intp>(dim_y);
++            for (y=0; y < ndim_y; ++y) {
++                for (x=0; x < ndim_x; ++x) {
+                     PyArray_ITER_GOTO(iter, coordinates);
+ 
+                     PyObject* dataObj = PyArray_GETITEM(array, iter->dataptr);
+                     const object py_data = object( handle<>( dataObj ) );
+ 
+-                    buffer[y*dim_x + x] = extract<TangoScalarType>(py_data);
++                    buffer[y*ndim_x + x] = extract<TangoScalarType>(py_data);
+                 }
+             }
+         } else {
+diff --git a/src/boost/cpp/device_data.cpp b/src/boost/cpp/device_data.cpp
+index 4d0a0bb..63f18ac 100644
+--- a/src/boost/cpp/device_data.cpp
++++ b/src/boost/cpp/device_data.cpp
+@@ -146,6 +146,7 @@ namespace PyDeviceData {
+                     return to_py_numpy<tangoArrayTypeConst>(tmp_ptr, py_self);
+ #                 endif
+                 case PyTango::ExtractAsList:
++                case PyTango::ExtractAsPyTango3:
+                     return to_py_list(tmp_ptr);
+                 case PyTango::ExtractAsTuple:
+                     return to_py_tuple(tmp_ptr);
+diff --git a/src/boost/cpp/server/encoded_attribute.cpp b/src/boost/cpp/server/encoded_attribute.cpp
+index bafa5d0..ade7d9c 100644
+--- a/src/boost/cpp/server/encoded_attribute.cpp
++++ b/src/boost/cpp/server/encoded_attribute.cpp
+@@ -844,6 +844,7 @@ namespace PyEncodedAttribute
+                 delete [] buffer;
+                 break;
+             }
++            case PyTango::ExtractAsPyTango3:
+             case PyTango::ExtractAsList:
+             {
+                 ret = PyList_New(height);
+@@ -981,6 +982,7 @@ namespace PyEncodedAttribute
+                 delete [] buffer;
+                 break;
+             }
++            case PyTango::ExtractAsPyTango3:
+             case PyTango::ExtractAsList:
+             {
+                 ret = PyList_New(height);
+@@ -1138,6 +1140,7 @@ namespace PyEncodedAttribute
+                 delete [] buffer;
+                 break;
+             }
++            case PyTango::ExtractAsPyTango3:
+             case PyTango::ExtractAsList:
+             {
+                 ret = PyList_New(height);
+diff --git a/src/boost/cpp/server/tango_util.cpp b/src/boost/cpp/server/tango_util.cpp
+index 506ad42..2513606 100644
+--- a/src/boost/cpp/server/tango_util.cpp
++++ b/src/boost/cpp/server/tango_util.cpp
+@@ -177,7 +177,7 @@ namespace PyUtil
+                                       boost::python::object& py_event_loop)
+     {
+         PYTANGO_MOD
+-        if (py_event_loop.is_none())
++        if (py_event_loop.ptr() == Py_None)
+         {
+             self.server_set_event_loop(NULL);
+             pytango.attr("_server_event_loop") = py_event_loop;
+diff --git a/src/boost/cpp/server/wattribute.cpp b/src/boost/cpp/server/wattribute.cpp
+index e12f4be..a85377f 100644
+--- a/src/boost/cpp/server/wattribute.cpp
++++ b/src/boost/cpp/server/wattribute.cpp
+@@ -436,6 +436,51 @@ namespace PyWAttribute
+ /// @name get_write_value
+ /// @{ 
+ 
++    //
++    // PyTango 3 compatibility
++    //
++
++    template<long tangoTypeConst>
++    void __get_write_value_pytango3(Tango::WAttribute &att, boost::python::list &seq)
++    {
++        typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
++
++        const TangoScalarType *ptr;
++
++        long length = att.get_write_value_length();
++
++        att.get_write_value(ptr);
++
++        for (long l = 0; l < length; ++l)
++        {
++            seq.append(ptr[l]);
++        }
++    }
++
++    template<>
++    void __get_write_value_pytango3<Tango::DEV_STRING>(Tango::WAttribute &att,
++                                              boost::python::list &seq)
++    {
++        const Tango::ConstDevString *ptr;
++
++        long length = att.get_write_value_length();
++
++        att.get_write_value(ptr);
++
++        for (long l = 0; l < length; ++l)
++        {
++            seq.append(ptr[l]);
++        }
++    }
++
++    inline void get_write_value_pytango3(Tango::WAttribute &att,
++                                boost::python::list &value)
++    {
++        long type = att.get_data_type();
++        TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(type, __get_write_value_pytango3, att, value);
++    }
++
++
+     template<long tangoTypeConst>
+     void __get_write_value_scalar(Tango::WAttribute &att, boost::python::object* obj)
+     {
+@@ -455,6 +500,32 @@ namespace PyWAttribute
+     }
+ 
+     template<long tangoTypeConst>
++    void __get_write_value_array_pytango3(Tango::WAttribute &att, boost::python::object* obj)
++    {
++        typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
++
++        const TangoScalarType * buffer;
++        att.get_write_value(buffer);
++        size_t length = att.get_write_value_length();
++        
++        boost::python::list o;
++        for (size_t n = 0; n < length; ++n)
++            o.append(buffer[n]);
++        *obj = o;
++    }
++
++    template<>
++    void __get_write_value_array_pytango3<Tango::DEV_STRING>(Tango::WAttribute &att, boost::python::object* obj)
++    {
++        const Tango::ConstDevString *ptr;
++        long length = att.get_write_value_length();
++        att.get_write_value(ptr);
++        boost::python::list o;
++        for (long l = 0; l < length; ++l)
++            o.append(ptr[l]);
++    }
++
++    template<long tangoTypeConst>
+     void __get_write_value_array_lists(Tango::WAttribute &att, boost::python::object* obj)
+     {
+         typedef typename TANGO_const2type(tangoTypeConst) TangoScalarType;
+@@ -534,6 +605,11 @@ namespace PyWAttribute
+             TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(type, __get_write_value_scalar, att, &value);
+         } else {
+             switch (extract_as) {
++                case PyTango::ExtractAsPyTango3: {
++                    TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(type,
++                        __get_write_value_array_pytango3, att, &value);
++                    break;
++                }
+                 case PyTango::ExtractAsNumpy: {
+ #               ifndef DISABLE_PYTANGO_NUMPY
+                     TANGO_CALL_ON_ATTRIBUTE_DATA_TYPE_ID(type,
+@@ -587,6 +663,13 @@ void export_wattribute()
+         .def("set_write_value",
+             (void (*) (Tango::WAttribute &, boost::python::object &, long, long))
+             &PyWAttribute::set_write_value)
++
++        // old style get_write_value
++        .def("get_write_value",
++            &PyWAttribute::get_write_value_pytango3,
++            ( arg_("self"), arg_("empty_list")))
++
++        // new style get_write_value
+         .def("get_write_value",
+             &PyWAttribute::get_write_value,
+             ( arg_("self"), arg_("extract_as")=PyTango::ExtractAsNumpy ))
+diff --git a/src/boost/python/release.py b/src/boost/python/release.py
+index 40e8af4..1280fd2 100644
+--- a/src/boost/python/release.py
++++ b/src/boost/python/release.py
+@@ -52,7 +52,7 @@ class Release:
+             - keywords : (seq<str>) list of keywords
+             - license : (str) the license"""
+     name = 'PyTango'
+-    version_info = (8, 0, 3, 'final', 0)
++    version_info = (8, 0, 4, 'final', 0)
+     version = '.'.join(map(str, version_info[:3]))
+     version_long = version + ''.join(map(str, version_info[3:]))
+     version_description = 'This version implements the C++ Tango 8.0 API.'
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..dca3b75
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1 @@
+0001-fix-from-upstream-FTBFS-s390.patch

-- 
Packaging for pytango



More information about the debian-science-commits mailing list