From 74f8d948bcdab4972983c966bdf28da3607ffe11 Mon Sep 17 00:00:00 2001 From: Adam Tkac Date: Tue, 15 Nov 2011 11:37:26 +0100 Subject: [PATCH] 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 --- swig.spec | 17 ++- swig204-rh679948.patch | 273 +++++++++++++++++++++++++++++++++++++++++ swig204-rh752054.patch | 23 ++++ swig204-rh753321.patch | 27 ++++ 4 files changed, 337 insertions(+), 3 deletions(-) create mode 100644 swig204-rh679948.patch create mode 100644 swig204-rh752054.patch create mode 100644 swig204-rh753321.patch 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 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 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); + }