[swig] Various bugfixes.

Adam Tkac atkac at fedoraproject.org
Tue Nov 15 10:37:59 UTC 2011


commit 74f8d948bcdab4972983c966bdf28da3607ffe11
Author: Adam Tkac <atkac at redhat.com>
Date:   Tue Nov 15 11:37:26 2011 +0100

    Various bugfixes.
    
    - backport r12814 from trunk (#753321)
    - use scm_to_utf8_string instead of SCM_STRING_CHARS in guile bindings (#752054)
    - improve Octave compatibility (#679948)
    
    Signed-off-by: Adam Tkac <atkac at redhat.com>

 swig.spec              |   17 +++-
 swig204-rh679948.patch |  273 ++++++++++++++++++++++++++++++++++++++++++++++++
 swig204-rh752054.patch |   23 ++++
 swig204-rh753321.patch |   27 +++++
 4 files changed, 337 insertions(+), 3 deletions(-)
---
diff --git a/swig.spec b/swig.spec
index 593e80b..7402482 100644
--- a/swig.spec
+++ b/swig.spec
@@ -4,13 +4,16 @@
 Summary: Connects C/C++/Objective C to some high-level programming languages
 Name: swig
 Version: 2.0.4
-Release: 2%{?dist}
+Release: 3%{?dist}
 License: GPLv3+ and BSD
 Group: Development/Tools
 URL: http://swig.sourceforge.net/
 Source: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
 Patch1: swig-1.3.23-pylib.patch
 Patch4: swig203-rh706140.patch
+Patch5: swig204-rh753321.patch
+Patch6: swig204-rh752054.patch
+Patch7: swig204-rh679948.patch
 
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: perl, python-devel, pcre-devel
@@ -20,7 +23,7 @@ BuildRequires: tcl-devel
 %if %{guile}
 BuildRequires: guile-devel
 %endif
-BuildRequires: autoconf, automake, gawk, dos2unix
+BuildRequires: autoconf, automake, gawk, dos2unix, octave-devel
 
 %description
 Simplified Wrapper and Interface Generator (SWIG) is a software
@@ -44,6 +47,9 @@ This package contains documentation for SWIG and useful examples
 %setup -q -n swig-%{version}
 %patch1 -p1 -b .pylib
 %patch4 -p1 -b .rh706140
+%patch5 -p0 -b .rh753321
+%patch6 -p1 -b .rh752054
+%patch7 -p0 -b .rh679948
 
 # as written on https://fedoraproject.org/wiki/Packaging_talk:Perl, section 2
 # (specific req/prov filtering). Before you remove this hack make sure you don't
@@ -72,7 +78,7 @@ done
 
 %build
 ./autogen.sh
-%configure
+%configure --with-octave=/usr/bin/octave
 make %{?_smp_mflags}
 
 # Test suite is currently broken
@@ -115,6 +121,11 @@ rm -rf %{buildroot}
 %doc Doc Examples LICENSE LICENSE-GPL LICENSE-UNIVERSITIES COPYRIGHT
 
 %changelog
+* Mon Nov 14 2011 Adam Tkac <atkac redhat com> 2.0.4-3
+- backport r12814 from trunk (#753321)
+- use scm_to_utf8_string instead of SCM_STRING_CHARS in guile bindings (#752054)
+- improve Octave compatibility (#679948)
+
 * Mon Aug 1 2011 Nick Bebout <nb at fedoraproject.org> 2.0.4-2
 - rebuild to fix 2.0.3 being tagged in over 2.0.4-1
 
diff --git a/swig204-rh679948.patch b/swig204-rh679948.patch
new file mode 100644
index 0000000..869d7f7
--- /dev/null
+++ b/swig204-rh679948.patch
@@ -0,0 +1,273 @@
+Index: configure.in
+===================================================================
+--- configure.in	(revision 12773)
++++ configure.in	(revision 12774)
+@@ -923,19 +923,20 @@
+ 
+ AC_MSG_CHECKING(for Octave header files)
+ if test -n "$OCTAVE"; then
+-	OCTAVEDIR="/usr/include"
++	OCTAVECONFIG=[`echo $OCTAVEBIN | sed 's|octave\([^/]*\)$|octave-config\1|'`]
++	if test -r "$OCTAVECONFIG"; then
++		OCTAVEDIR=`$OCTAVECONFIG -p OCTINCLUDEDIR | sed 's|/octave$||'`
++	else
++		OCTAVEDIR="/usr/include"
++	fi
+ 	if test "$OCTAVEDIR" != ""; then
+-		dirs="$OCTAVEDIR"
++		dirs="$OCTAVEDIR/octave $OCTAVEDIR"
+ 		OCTAVEEXT=""
+ 		for i in $dirs; do
+ 			if test -r $i/octave/oct.h; then
+ 				OCTAVEEXT="$i"
+ 				break;
+ 			fi
+-			if test -r $i/octave/octave/oct.h; then
+-				OCTAVEEXT="$i/octave"
+-				break;
+-			fi
+ 		done
+ 		if test "$OCTAVEEXT" = "" ; then
+ 			AC_MSG_RESULT(not found)
+Index: Lib/octave/octrun.swg
+===================================================================
+--- Lib/octave/octrun.swg	(revision 12773)
++++ Lib/octave/octrun.swg	(revision 12774)
+@@ -399,6 +399,10 @@
+ 	Swig::erase_rtdir(types[j].second.ptr);
+     }
+ 
++    dim_vector dims(void) const {
++      return dim_vector(1,1);
++    }
++
+     octave_value as_value() {
+       ++count;
+       return Swig::swig_value_ref(this);
+@@ -928,6 +932,9 @@
+     octave_base_value *empty_clone() const
+       { return new octave_swig_ref(0); }
+ 
++    dim_vector dims(void) const 
++      { return ptr->dims(); }
++
+     bool is_defined() const
+       { return ptr->is_defined(); }
+ 
+Index: Examples/octave/functor/Makefile
+===================================================================
+--- Examples/octave/functor/Makefile	(revision 12773)
++++ Examples/octave/functor/Makefile	(revision 12774)
+@@ -19,3 +19,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/pointer/Makefile
+===================================================================
+--- Examples/octave/pointer/Makefile	(revision 12773)
++++ Examples/octave/pointer/Makefile	(revision 12774)
+@@ -17,3 +17,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/funcptr/Makefile
+===================================================================
+--- Examples/octave/funcptr/Makefile	(revision 12773)
++++ Examples/octave/funcptr/Makefile	(revision 12774)
+@@ -17,3 +17,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/extend/Makefile
+===================================================================
+--- Examples/octave/extend/Makefile	(revision 12773)
++++ Examples/octave/extend/Makefile	(revision 12774)
+@@ -19,3 +19,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/simple/Makefile
+===================================================================
+--- Examples/octave/simple/Makefile	(revision 12773)
++++ Examples/octave/simple/Makefile	(revision 12774)
+@@ -17,3 +17,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/operator/runme.m
+===================================================================
+--- Examples/octave/operator/runme.m	(revision 12773)
++++ Examples/octave/operator/runme.m	(revision 12774)
+@@ -4,21 +4,21 @@
+ a = example.ComplexVal(2,3);
+ b = example.ComplexVal(-5,10);
+ 
+-printf("a   = %s\n",a);
+-printf("b   = %s\n",b);
++printf("a   = %s\n",disp(a));
++printf("b   = %s\n",disp(b));
+ 
+ c = a + b;
+-printf("c   = %s\n",c);
+-printf("a*b = %s\n",a*b);
+-printf("a-c = %s\n",a-c);
++printf("c   = %s\n",disp(c));
++printf("a*b = %s\n",disp(a*b));
++printf("a-c = %s\n",disp(a-c));
+ 
+ e = example.ComplexVal(a-c);
+-printf("e   = %s\n",e);
++printf("e   = %s\n",disp(e));
+ 
+ # Big expression
+ f = ((a+b)*(c+b*e)) + (-a);
+-printf("f   = %s\n",f);
++printf("f   = %s\n",disp(f));
+ 
+ # paren overloading
+-printf("a(3)= %s\n",a(3));
++printf("a(3)= %s\n",disp(a(3)));
+ 
+Index: Examples/octave/operator/example.i
+===================================================================
+--- Examples/octave/operator/example.i	(revision 12773)
++++ Examples/octave/operator/example.i	(revision 12774)
+@@ -10,13 +10,13 @@
+ 
+ /* An output method that turns a complex into a short string */
+ %extend ComplexVal {
+-   char *__str() {
++   char *__str__() {
+        static char temp[512];
+        sprintf(temp,"(%g,%g)", $self->re(), $self->im());
+        return temp;
+    }
+ 
+-   ComplexVal __paren(int j) {
++   ComplexVal __paren__(int j) {
+      return ComplexVal($self->re()*j,$self->im()*j);
+    }
+ };
+Index: Examples/octave/operator/Makefile
+===================================================================
+--- Examples/octave/operator/Makefile	(revision 12773)
++++ Examples/octave/operator/Makefile	(revision 12774)
+@@ -19,3 +19,4 @@
+ 	rm -f $(TARGET).m
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/callback/Makefile
+===================================================================
+--- Examples/octave/callback/Makefile	(revision 12773)
++++ Examples/octave/callback/Makefile	(revision 12774)
+@@ -19,3 +19,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/reference/Makefile
+===================================================================
+--- Examples/octave/reference/Makefile	(revision 12773)
++++ Examples/octave/reference/Makefile	(revision 12774)
+@@ -19,3 +19,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/funcptr2/Makefile
+===================================================================
+--- Examples/octave/funcptr2/Makefile	(revision 12773)
++++ Examples/octave/funcptr2/Makefile	(revision 12774)
+@@ -17,3 +17,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/enum/Makefile
+===================================================================
+--- Examples/octave/enum/Makefile	(revision 12773)
++++ Examples/octave/enum/Makefile	(revision 12774)
+@@ -19,3 +19,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/class/Makefile
+===================================================================
+--- Examples/octave/class/Makefile	(revision 12773)
++++ Examples/octave/class/Makefile	(revision 12774)
+@@ -19,3 +19,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/variables/Makefile
+===================================================================
+--- Examples/octave/variables/Makefile	(revision 12773)
++++ Examples/octave/variables/Makefile	(revision 12774)
+@@ -17,3 +17,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/template/Makefile
+===================================================================
+--- Examples/octave/template/Makefile	(revision 12773)
++++ Examples/octave/template/Makefile	(revision 12774)
+@@ -19,3 +19,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/constants/Makefile
+===================================================================
+--- Examples/octave/constants/Makefile	(revision 12773)
++++ Examples/octave/constants/Makefile	(revision 12774)
+@@ -19,3 +19,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/octave/contract/Makefile
+===================================================================
+--- Examples/octave/contract/Makefile	(revision 12773)
++++ Examples/octave/contract/Makefile	(revision 12774)
+@@ -17,3 +17,4 @@
+ 	rm -f $(TARGET).py
+ 
+ check: all
++	$(MAKE) -f $(TOP)/Makefile octave_run
+Index: Examples/Makefile.in
+===================================================================
+--- Examples/Makefile.in	(revision 12773)
++++ Examples/Makefile.in	(revision 12774)
+@@ -333,6 +333,7 @@
+ # Make sure these locate your Octave installation
+ OCTAVE_INCLUDE= $(DEFS) @OCTAVEEXT@
+ OCTAVE_LIB    =
++OCTAVE        = @OCTAVE@
+ 
+ # Extra Octave specific dynamic linking options
+ OCTAVE_DLNK   = @OCTAVEDYNAMICLINKING@
+@@ -359,6 +360,15 @@
+ 	$(CXXSHARED) -g $(CFLAGS) $(OBJS) $(IOBJS) $(OCTAVE_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(OCTAVE_SO)
+ 
+ # -----------------------------------------------------------------
++# Running an Octave example
++# -----------------------------------------------------------------
++
++OCTSCRIPT = runme.m
++
++octave_run: $(OCTSCRIPT)
++	env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH OCTAVEPATH=$(srcdir):$$OCTAVEPATH $(OCTAVE) $(OCTSCRIPT) >/dev/null
++
++# -----------------------------------------------------------------
+ # Cleaning the octave examples
+ # -----------------------------------------------------------------
+ 
diff --git a/swig204-rh752054.patch b/swig204-rh752054.patch
new file mode 100644
index 0000000..9b9ff43
--- /dev/null
+++ b/swig204-rh752054.patch
@@ -0,0 +1,23 @@
+diff -up swig-2.0.4/Lib/guile/guile_scm_run.swg.rh752054 swig-2.0.4/Lib/guile/guile_scm_run.swg
+--- swig-2.0.4/Lib/guile/guile_scm_run.swg.rh752054	2011-11-14 14:44:35.688597584 +0100
++++ swig-2.0.4/Lib/guile/guile_scm_run.swg	2011-11-14 14:45:15.879594778 +0100
+@@ -64,7 +64,7 @@ static swig_module_info *SWIG_Guile_GetM
+ SWIGINTERN char *
+ SWIG_Guile_scm2newstr(SCM str, size_t *len) {
+ #define FUNC_NAME "SWIG_Guile_scm2newstr"
+-  char *ret;
++  char *ret, *tmp;
+   size_t l;
+ 
+   SCM_ASSERT (SCM_STRINGP(str), str, 1, FUNC_NAME);
+@@ -73,7 +73,9 @@ SWIG_Guile_scm2newstr(SCM str, size_t *l
+   ret = (char *) SWIG_malloc( (l + 1) * sizeof(char));
+   if (!ret) return NULL;
+ 
+-  memcpy(ret, SCM_STRING_CHARS(str), l);
++  tmp = scm_to_utf8_string(str);
++  memcpy(ret, tmp, l);
++  free(tmp);
+   ret[l] = '\0';
+   if (len) *len = l;
+   return ret;
diff --git a/swig204-rh753321.patch b/swig204-rh753321.patch
new file mode 100644
index 0000000..2eca5c6
--- /dev/null
+++ b/swig204-rh753321.patch
@@ -0,0 +1,27 @@
+Index: Source/Swig/stype.c
+===================================================================
+--- Source/Swig/stype.c	(revision 12813)
++++ Source/Swig/stype.c	(revision 12814)
+@@ -823,7 +823,8 @@
+ 	Insert(result, 0, "(");
+ 	Append(result, ")");
+       }
+-      isreference = 1;
++      if (!isfunction)
++	isreference = 1;
+     } else if (SwigType_isarray(element)) {
+       DOH *size;
+       if (firstarray && !isreference) {
+@@ -869,10 +870,8 @@
+     cast = NewStringf("(%s)", result);
+   }
+   if (name) {
+-    if (!isfunction) {
+-      if (isreference) {
+-	Append(cast, "*");
+-      }
++    if (isreference) {
++      Append(cast, "*");
+     }
+     Append(cast, name);
+   }


More information about the scm-commits mailing list