From 00cff92a60dd32536478d4550bc01314d25081f1 Mon Sep 17 00:00:00 2001 From: Jitka Plesnikova Date: Mon, 13 Jun 2016 12:15:33 +0200 Subject: [PATCH] Update to 3.0.10 --- .gitignore | 2 + sources | 2 +- swig.spec | 22 +- swig308-Add-support-Go-1_6.patch | 217 ------------------ swig308-Fix-li_boost_array-test.patch | 12 - ...8-Python-Use-std-isfinite-under-C-11.patch | 15 -- ...aque-pointer-handling-regression-fix.patch | 215 ----------------- 7 files changed, 10 insertions(+), 475 deletions(-) delete mode 100644 swig308-Add-support-Go-1_6.patch delete mode 100644 swig308-Fix-li_boost_array-test.patch delete mode 100644 swig308-Python-Use-std-isfinite-under-C-11.patch delete mode 100644 swig308-Ruby-opaque-pointer-handling-regression-fix.patch diff --git a/.gitignore b/.gitignore index 064d225..bb71b7e 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,5 @@ swig-2.0.0.tar.gz /swig-3.0.6.tar.gz /swig-3.0.7.tar.gz /swig-3.0.8.tar.gz +/swig-3.0.9.tar.gz +/swig-3.0.10.tar.gz diff --git a/sources b/sources index d1aba81..f433af1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -c96a1d5ecb13d38604d7e92148c73c97 swig-3.0.8.tar.gz +bb4ab8047159469add7d00910e203124 swig-3.0.10.tar.gz diff --git a/swig.spec b/swig.spec index 00a01bc..bd92874 100644 --- a/swig.spec +++ b/swig.spec @@ -30,8 +30,8 @@ Summary: Connects C/C++/Objective C to some high-level programming languages Name: swig -Version: 3.0.8 -Release: 8%{?dist} +Version: 3.0.10 +Release: 1%{?dist} License: GPLv3+ and BSD URL: http://swig.sourceforge.net/ Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz @@ -41,14 +41,7 @@ Source2: description-ccache.h2m Source3: ccache-swig.sh Source4: ccache-swig.csh -# Fixed python test li_boost_array on arm, ppc, s390 -# The failure was caused because "char" is not equivalent to "signed char" -# on these arches -Patch0: swig308-Fix-li_boost_array-test.patch -Patch1: swig308-Do-not-use-isystem.patch -Patch2: swig308-Python-Use-std-isfinite-under-C-11.patch -Patch3: swig308-Add-support-Go-1_6.patch -Patch4: swig308-Ruby-opaque-pointer-handling-regression-fix.patch +Patch0: swig308-Do-not-use-isystem.patch BuildRequires: perl, python2-devel, pcre-devel BuildRequires: autoconf, automake, gawk, dos2unix @@ -126,11 +119,7 @@ This package contains documentation for SWIG and useful examples %prep %setup -q -n swig-%{version} -%patch0 -p1 -b .signed -%patch1 -p1 -b .isystem -%patch2 -p1 -b .isfinite -%patch3 -p1 -%patch4 -p1 -b .ruby +%patch0 -p1 -b .isystem for all in CHANGES README; do iconv -f ISO88591 -t UTF8 < $all > $all.new @@ -266,6 +255,9 @@ install -pm 644 %{SOURCE3} %{SOURCE4} %{buildroot}%{_sysconfdir}/profile.d %doc Doc Examples COPYRIGHT %changelog +* Mon Jun 13 2016 Jitka Plesnikova - 3.0.10-1 +- Update to 3.0.10 + * Wed May 25 2016 Jitka Plesnikova - 3.0.8-8 - Fix Ruby opaque pointer handling (bug #1299502) diff --git a/swig308-Add-support-Go-1_6.patch b/swig308-Add-support-Go-1_6.patch deleted file mode 100644 index c485a7b..0000000 --- a/swig308-Add-support-Go-1_6.patch +++ /dev/null @@ -1,217 +0,0 @@ -From 223c2a483563e5c9dd93067831a6a2af6252bcec Mon Sep 17 00:00:00 2001 -From: Ian Lance Taylor -Date: Sun, 17 Apr 2016 17:52:09 -0700 -Subject: [PATCH] [Go] Fixes for Go 1.6: avoid returning Go pointers from - directors that return string values; add a trailing 0 byte when treating Go - string as C char*. - ---- -# CHANGES.current | 5 +++++ - Examples/test-suite/apply_strings.i | 4 ++++ - Examples/test-suite/go_inout.i | 13 +++++++++++-- - Examples/test-suite/namespace_typemap.i | 6 +++++- - Lib/go/go.swg | 30 +++++++++++++++++++++++++++--- - Lib/go/goruntime.swg | 4 ++++ - Lib/go/std_string.i | 26 +++++++++++++++++++++++++- - 7 files changed, 81 insertions(+), 7 deletions(-) - -#diff --git a/CHANGES.current b/CHANGES.current -#index 8ab5627..c23a2d9 100644 -#--- a/CHANGES.current -#+++ b/CHANGES.current -#@@ -5,6 +5,11 @@ See the RELEASENOTES file for a summary of changes in each release. -# Version 3.0.9 (in progress) -# =========================== -# -#+2016-04-17: ianlancetaylor -#+ [Go] Fixes for Go 1.6: avoid returning Go pointers from -#+ directors that return string values; add a trailing 0 byte -#+ when treating Go string as C char*. -#+ -# 2016-04-06: smarchetto -# [Scilab] #552 Make Scilab runtime keep track of pointer types -# Instead of a Scilab pointer which has no type, SWIG Scilab maps a -diff --git a/Examples/test-suite/apply_strings.i b/Examples/test-suite/apply_strings.i -index 62b578b..695dd06 100644 ---- a/Examples/test-suite/apply_strings.i -+++ b/Examples/test-suite/apply_strings.i -@@ -68,6 +68,10 @@ TAscii *DigitsGlobalC; - // Director test - %feature("director"); - -+#if defined(SWIGGO) -+%typemap(godirectorout) CharPtr, CCharPtr "" -+#endif -+ - %inline %{ - struct DirectorTest { - virtual UCharPtr UCharFunction(UCharPtr str) { return str; } -diff --git a/Examples/test-suite/go_inout.i b/Examples/test-suite/go_inout.i -index 57e7bf2..a174246 100644 ---- a/Examples/test-suite/go_inout.i -+++ b/Examples/test-suite/go_inout.i -@@ -23,7 +23,7 @@ struct RetStruct { - - // Write a typemap that calls C++ by converting in and out of JSON. - --%go_import("encoding/json", "bytes", "encoding/binary") -+%go_import("encoding/json", "bytes", "encoding/binary", "reflect", "unsafe") - - %insert(go_header) - %{ -@@ -87,6 +87,10 @@ struct MyArray { - std::vector strings; - }; - -+void* Allocate(int n) { -+ return new char[n]; -+} -+ - static uint64_t getuint64(const char* s) { - uint64_t ret = 0; - for (int i = 0; i < 8; i++, s++) { -@@ -121,7 +125,12 @@ static void putuint64(std::string *s, size_t off, uint64_t v) { - buf.Write(b[:]) - buf.WriteString(s) - } -- str := buf.String() -+ bb := buf.Bytes() -+ p := Allocate(len(bb)) -+ copy((*[1<<15]byte)(unsafe.Pointer(p))[:len(bb)], bb) -+ var str string -+ (*reflect.StringHeader)(unsafe.Pointer(&str)).Data = uintptr(unsafe.Pointer(p)) -+ (*reflect.StringHeader)(unsafe.Pointer(&str)).Len = len(bb) - $result = &str - } - %} -diff --git a/Examples/test-suite/namespace_typemap.i b/Examples/test-suite/namespace_typemap.i -index 8ead78c..7f474bd 100644 ---- a/Examples/test-suite/namespace_typemap.i -+++ b/Examples/test-suite/namespace_typemap.i -@@ -109,7 +109,11 @@ namespace test { - #ifdef SWIGGO - %typemap(gotype) string_class * "string" - %typemap(in) string_class * { -- $1 = new string_class($input.p); -+ char* buf = new char[$input.n + 1]; -+ memcpy(buf, $input.p, $input.n); -+ buf[$input.n] = '\0'; -+ $1 = new string_class(buf); -+ delete[] buf; - } - %typemap(freearg) string_class * { - delete $1; -diff --git a/Lib/go/go.swg b/Lib/go/go.swg -index 24f1b73..40e2741 100644 ---- a/Lib/go/go.swg -+++ b/Lib/go/go.swg -@@ -435,10 +435,22 @@ - - %typemap(in) - char *, char[ANY], char[] --%{ $1 = ($1_ltype)$input.p; %} -+%{ -+ $1 = ($1_ltype)malloc($input.n + 1); -+ memcpy($1, $input.p, $input.n); -+ $1[$input.n] = '\0'; -+%} - - %typemap(in) char *& --%{ $1 = ($1_ltype)$input.p; %} -+%{ -+ $1 = ($1_ltype)malloc($input.n + 1); -+ memcpy($1, $input.p, $input.n); -+ $1[$input.n] = '\0'; -+%} -+ -+%typemap(freearg) -+ char *, char *&, char[ANY], char[] -+%{ free($1); %} - - %typemap(out,fragment="AllocateString") - char *, char *&, char[ANY], char[] -@@ -460,7 +472,19 @@ - $result = swigCopyString($input) - %} - --%typemap(directorout) -+%typemap(godirectorout) -+ char *, char *&, char[ANY], char[] -+%{ -+ { -+ p := Swig_malloc(len($input) + 1) -+ s := (*[1<<30]byte)(unsafe.Pointer(p))[:len($input) + 1] -+ copy(s, $input) -+ s[len($input)] = 0 -+ $result = *(*string)(unsafe.Pointer(&s)) -+ } -+%} -+ -+%typemap(directorout, warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) - char *, char *&, char[ANY], char[] - %{ $result = ($1_ltype)$input.p; %} - -diff --git a/Lib/go/goruntime.swg b/Lib/go/goruntime.swg -index e7a33ad..dc6193d 100644 ---- a/Lib/go/goruntime.swg -+++ b/Lib/go/goruntime.swg -@@ -8,6 +8,10 @@ - static void Swig_free(void* p) { - free(p); - } -+ -+static void* Swig_malloc(int c) { -+ return malloc(c); -+} - %} - - %insert(runtime) %{ -diff --git a/Lib/go/std_string.i b/Lib/go/std_string.i -index 068c688..099ae84 100644 ---- a/Lib/go/std_string.i -+++ b/Lib/go/std_string.i -@@ -24,8 +24,21 @@ class string; - %typemap(in) string - %{ $1.assign($input.p, $input.n); %} - -+%typemap(godirectorout) string -+%{ -+ { -+ p := Swig_malloc(len($input)) -+ s := (*[1<<30]byte)(unsafe.Pointer(p))[:len($input)] -+ copy(s, $input) -+ $result = *(*string)(unsafe.Pointer(&s)) -+ } -+%} -+ - %typemap(directorout) string --%{ $result.assign($input.p, $input.n); %} -+%{ -+ $result.assign($input.p, $input.n); -+ free($input.p); -+%} - - %typemap(out,fragment="AllocateString") string - %{ $result = Swig_AllocateString($1.data(), $1.length()); %} -@@ -45,10 +58,21 @@ class string; - $1 = &$1_str; - %} - -+%typemap(godirectorout) const string & -+%{ -+ { -+ p := Swig_malloc(len($input)) -+ s := (*[1<<30]byte)(unsafe.Pointer(p))[:len($input)] -+ copy(s, $input) -+ $result = *(*string)(unsafe.Pointer(&s)) -+ } -+%} -+ - %typemap(directorout,warning=SWIGWARN_TYPEMAP_THREAD_UNSAFE_MSG) const string & - %{ - static $*1_ltype $1_str; - $1_str.assign($input.p, $input.n); -+ free($input.p); - $result = &$1_str; - %} - diff --git a/swig308-Fix-li_boost_array-test.patch b/swig308-Fix-li_boost_array-test.patch deleted file mode 100644 index 6bdf65d..0000000 --- a/swig308-Fix-li_boost_array-test.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up swig-3.0.8/Examples/test-suite/li_boost_array.i.orig swig-3.0.8/Examples/test-suite/li_boost_array.i ---- swig-3.0.8/Examples/test-suite/li_boost_array.i.orig 2016-01-06 08:09:48.851786620 +0100 -+++ swig-3.0.8/Examples/test-suite/li_boost_array.i 2016-01-06 08:10:54.028471052 +0100 -@@ -31,7 +31,7 @@ namespace boost { - - %inline %{ - boost::array arrayOutVal() { -- const char carray[] = { -2, -1, 0, 0, 1, 2 }; -+ const signed char carray[] = { -2, -1, 0, 0, 1, 2 }; - boost::array myarray; - for (size_t i=0; i<6; ++i) { - myarray[i] = carray[i]; diff --git a/swig308-Python-Use-std-isfinite-under-C-11.patch b/swig308-Python-Use-std-isfinite-under-C-11.patch deleted file mode 100644 index a2b3695..0000000 --- a/swig308-Python-Use-std-isfinite-under-C-11.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -up swig-3.0.8/Lib/typemaps/fragments.swg.orig swig-3.0.8/Lib/typemaps/fragments.swg ---- swig-3.0.8/Lib/typemaps/fragments.swg.orig 2015-12-30 23:23:47.000000000 +0100 -+++ swig-3.0.8/Lib/typemaps/fragments.swg 2016-03-01 10:13:29.840682167 +0100 -@@ -168,8 +168,11 @@ - %fragment("SWIG_isfinite","header",fragment=",") %{ - /* Getting isfinite working pre C99 across multiple platforms is non-trivial. Users can provide SWIG_isfinite on older platforms. */ - #ifndef SWIG_isfinite -+/* isfinite() is a macro for C99, but a function in namespace std for C++11. */ - # if defined(isfinite) - # define SWIG_isfinite(X) (isfinite(X)) -+# elif defined __cplusplus && __cplusplus >= 201103L -+# define SWIG_isfinite(X) (std::isfinite(X)) - # elif defined(_MSC_VER) - # define SWIG_isfinite(X) (_finite(X)) - # elif defined(__sun) && defined(__SVR4) diff --git a/swig308-Ruby-opaque-pointer-handling-regression-fix.patch b/swig308-Ruby-opaque-pointer-handling-regression-fix.patch deleted file mode 100644 index 0ba834e..0000000 --- a/swig308-Ruby-opaque-pointer-handling-regression-fix.patch +++ /dev/null @@ -1,215 +0,0 @@ -From 763827c2e1fffd34e871c66d5d4c9e492c1cecec Mon Sep 17 00:00:00 2001 -From: William S Fulton -Date: Tue, 24 May 2016 07:33:25 +0100 -Subject: [PATCH] Ruby opaque pointer handling regression fix - -This bug was introduced in swig-3.0.8 in #146252 adding shared_ptr -support. An ObjectPreviouslyDeleted error was incorrectly thrown -when the pointer was used as a parameter after being set to zero -via a call to 'DATA_PTR(self) = 0'. - -It isn't clear to me which approach is better in this corner case, -so I've gone for backwards compatibility and restored the old behaviour. - -Closes #602 ---- - CHANGES.current | 6 ++ - Examples/test-suite/ruby/Makefile.in | 3 +- - .../test-suite/ruby/ruby_manual_proxy_runme.rb | 49 ++++++++++++++++ - Examples/test-suite/ruby_manual_proxy.i | 66 ++++++++++++++++++++++ - Lib/ruby/rubyrun.swg | 12 ++-- - 5 files changed, 131 insertions(+), 5 deletions(-) - create mode 100644 Examples/test-suite/ruby/ruby_manual_proxy_runme.rb - create mode 100644 Examples/test-suite/ruby_manual_proxy.i - -#diff --git a/CHANGES.current b/CHANGES.current -#index 6e347a7..f754e96 100644 -#--- a/CHANGES.current -#+++ b/CHANGES.current -#@@ -5,6 +5,12 @@ See the RELEASENOTES file for a summary of changes in each release. -# Version 3.0.9 (in progress) -# =========================== -# -#+2016-05-23: wsfulton -#+ [Ruby] Fix #602 - Error handling regression of opaque pointers introduced -#+ in swig-3.0.8 when C functions explicitly reset a pointer using 'DATA_PTR(self) = 0'. -#+ An ObjectPreviouslyDeleted error was incorrectly thrown when the pointer was used -#+ as a parameter. -#+ -# 2016-05-17: tamuratak -# [Ruby] Patch #651 - Correct overloaded function error message when function is -# using %newobject. -diff --git a/Examples/test-suite/ruby/Makefile.in b/Examples/test-suite/ruby/Makefile.in -index 847c959..d94ac70 100644 ---- a/Examples/test-suite/ruby/Makefile.in -+++ b/Examples/test-suite/ruby/Makefile.in -@@ -32,7 +32,8 @@ CPP_TEST_CASES = \ - - C_TEST_CASES += \ - li_cdata \ -- li_cstring -+ li_cstring \ -+ ruby_manual_proxy \ - - include $(srcdir)/../common.mk - -diff --git a/Examples/test-suite/ruby/ruby_manual_proxy_runme.rb b/Examples/test-suite/ruby/ruby_manual_proxy_runme.rb -new file mode 100644 -index 0000000..c1cee2d ---- /dev/null -+++ b/Examples/test-suite/ruby/ruby_manual_proxy_runme.rb -@@ -0,0 +1,49 @@ -+#!/usr/bin/env ruby -+# -+# The Subversion bindings use this manually written proxy class approach -+# to the Ruby bindings. Note that in C the struct svn_fs_t is an -+# opaque pointer and the Ruby FileSystem proxy class is hand written around it. -+# This testcase tests this and the C close function and subsequent error -+# handling. -+ -+require 'swig_assert' -+require 'ruby_manual_proxy' -+ -+module Svn -+ module Fs -+ module_function -+ def create(path) -+ f = Ruby_manual_proxy::svn_fs_create(path) -+ return f -+ end -+ -+ FileSystem = SWIG::TYPE_p_svn_fs_t -+ class FileSystem -+ class << self -+ def create(*args) -+ Fs.create(*args) -+ end -+ end -+ def path -+ Ruby_manual_proxy::svn_fs_path(self) -+ end -+ end -+ end -+end -+ -+f = Svn::Fs::FileSystem.create("/tmp/myfile") -+path = f.path -+f.close -+begin -+ # regression in swig-3.0.8 meant ObjectPreviouslyDeleted error was thrown instead -+ path = f.path -+ raise RuntimeError.new("IOError (1) not thrown") -+rescue IOError -+end -+ -+file = nil -+begin -+ path = Ruby_manual_proxy::svn_fs_path(file) -+ raise RuntimeError.new("IOError (2) not thrown") -+rescue IOError -+end -diff --git a/Examples/test-suite/ruby_manual_proxy.i b/Examples/test-suite/ruby_manual_proxy.i -new file mode 100644 -index 0000000..2cb154e ---- /dev/null -+++ b/Examples/test-suite/ruby_manual_proxy.i -@@ -0,0 +1,66 @@ -+%module ruby_manual_proxy -+ -+ -+%typemap(in, numinputs=0) SWIGTYPE ** ($*1_ltype temp) "$1 = &temp;"; -+ -+%typemap(argout) SWIGTYPE **OUTPARAM { -+ $result = SWIG_Ruby_AppendOutput($result, SWIG_NewPointerObj(*$1, $*1_descriptor, 0)); -+} -+ -+%apply SWIGTYPE **OUTPARAM { -+ svn_fs_t ** -+}; -+ -+%typemap(check) svn_fs_t * { -+ if (!$1) { -+ svn_swig_rb_raise_svn_fs_already_close(); -+ } -+} -+ -+%{ -+typedef struct svn_fs_t { -+ char path[256]; -+} svn_fs_t; -+ -+void svn_fs_create(svn_fs_t **fs_p, const char *path) { -+ svn_fs_t *fs = (svn_fs_t *)malloc(sizeof(svn_fs_t)); -+ strncpy(fs->path, path, 256); -+ *fs_p = fs; -+} -+const char *svn_fs_path(svn_fs_t *fs) { -+ return fs->path; -+} -+%} -+ -+typedef struct svn_fs_t svn_fs_t; -+void svn_fs_create(svn_fs_t **fs_p, const char *path); -+const char *svn_fs_path(svn_fs_t *fs); -+ -+%{ -+static void svn_swig_rb_raise_svn_fs_already_close(void) { -+ rb_raise(rb_eIOError, "already closed"); -+} -+ -+static VALUE svn_fs_swig_rb_close(VALUE self) { -+ if (!DATA_PTR(self)) { -+ svn_swig_rb_raise_svn_fs_already_close(); -+ } -+ -+ DATA_PTR(self) = NULL; -+ -+ return Qnil; -+} -+ -+static VALUE svn_fs_swig_rb_closed(VALUE self) { -+ return DATA_PTR(self) ? Qfalse : Qtrue; -+} -+%} -+ -+%insert("init") %{ -+ { -+ VALUE cSvnfs; -+ cSvnfs = rb_const_get(_mSWIG, rb_intern("TYPE_p_svn_fs_t")); -+ rb_define_method(cSvnfs, "close", -+ VALUEFUNC(svn_fs_swig_rb_close), 0); -+ } -+%} -diff --git a/Lib/ruby/rubyrun.swg b/Lib/ruby/rubyrun.swg -index e18208f..249494a 100644 ---- a/Lib/ruby/rubyrun.swg -+++ b/Lib/ruby/rubyrun.swg -@@ -305,6 +305,14 @@ SWIG_Ruby_ConvertPtrAndOwn(VALUE obj, void **ptr, swig_type_info *ty, int flags, - - /* Do type-checking if type info was provided */ - if (ty) { -+ if (ty->clientdata) { -+ if (rb_obj_is_kind_of(obj, ((swig_class *) (ty->clientdata))->klass)) { -+ if (vptr == 0) { -+ /* The object has already been deleted */ -+ return SWIG_ObjectPreviouslyDeletedError; -+ } -+ } -+ } - if ((c = SWIG_MangleStr(obj)) == NULL) { - return SWIG_ERROR; - } -@@ -312,10 +320,6 @@ SWIG_Ruby_ConvertPtrAndOwn(VALUE obj, void **ptr, swig_type_info *ty, int flags, - if (!tc) { - return SWIG_ERROR; - } else { -- if (vptr == 0) { -- /* The object has already been deleted */ -- return SWIG_ObjectPreviouslyDeletedError; -- } - if (ptr) { - if (tc->type == ty) { - *ptr = vptr; --- -2.5.5 -