diff --git a/SOURCES/swig-2.0.10-Support-octave-3.8.0.patch b/SOURCES/swig-2.0.10-Support-octave-3.8.0.patch new file mode 100644 index 0000000..df80543 --- /dev/null +++ b/SOURCES/swig-2.0.10-Support-octave-3.8.0.patch @@ -0,0 +1,281 @@ +From 5b167cc12daf9ea275c17fedaefc975450613ab2 Mon Sep 17 00:00:00 2001 +From: Karl Wette +Date: Mon, 13 Jan 2014 18:24:17 +1300 +Subject: [PATCH] octave: update support to Octave version 3.8.0 + +--- + CHANGES.current | 26 ++++++++++++ + Doc/Manual/Octave.html | 7 +--- + Lib/octave/octrun.swg | 104 ++++++++++++++++++++++++++++++++++++++-------- + Lib/octave/octruntime.swg | 14 +++---- + 4 files changed, 122 insertions(+), 29 deletions(-) + +SKIP diff --git a/CHANGES.current b/CHANGES.current +SKIP index a4fc5db..c711536 100644 +SKIP --- a/CHANGES.current +SKIP +++ b/CHANGES.current +SKIP @@ -5,6 +5,32 @@ See the RELEASENOTES file for a summary of changes in each release. +SKIP Version 3.0.0 (in progress) +SKIP ============================ +SKIP +SKIP +2014-01-13: kwwette +SKIP + [Octave] update support to Octave version 3.8.0 +SKIP + +SKIP + - Octave 3.8.0 no longer defines OCTAVE_API_VERSION_NUMBER, but 3.8.1 +SKIP + will define OCTAVE_{MAJOR,MINOR,PATCH}_VERSION instead: see +SKIP + http://hg.savannah.gnu.org/hgweb/octave/rev/b6b6e0dc700e +SKIP + So we now use a new macro SWIG_OCTAVE_PREREQ(major,minor,patch) to +SKIP + enable features requiring Octave version major.minor.patch or later. +SKIP + +SKIP + For Octave versions prior to 3.8.1, we reconstruct values for +SKIP + OCTAVE_{MAJOR,MINOR,PATCH}_VERSION based on OCTAVE_API_VERSION_NUMBER, +SKIP + extracted from Octave's ChangeLogs. An additional hack is needed to +SKIP + distinguish between Octave <= 3.2.x and 3.8.0, neither of which define +SKIP + OCTAVE_API_VERSION_NUMBER. +SKIP + +SKIP + - Octave 3.8.0 deprecates symbol_table::varref(), so remove its use +SKIP + for this and future versions of Octave. +SKIP + +SKIP + - Octave 3.8.0 removes octave_value::is_real_nd_array(), used in +SKIP + octave_swig_type::dims(). Its use is not required here, so remove it. +SKIP + +SKIP + - Retested against Octave versions 3.0.5, 3.2.4, 3.4.3, 3.6.4, and 3.8.0. +SKIP + +SKIP + - Updated Octave documentation with tested Octave versions, and added a +SKIP + warning against using versions <= 3.x.x, which are no longer tested. +SKIP + +SKIP 2014-01-11: wsfulton +SKIP Fix and document the naturalvar feature override behaviour - the naturalvar +SKIP feature attached to a variable name has precedence over the naturalvar +diff --git a/Doc/Manual/Octave.html b/Doc/Manual/Octave.html +index 84c0a0f..3e12ce6 100644 +--- a/Doc/Manual/Octave.html ++++ b/Doc/Manual/Octave.html +@@ -59,11 +59,8 @@ + + +

+-The SWIG implemention was first based on Octave 2.9.12, so this is the minimum version required. Testing has only been done on Linux. +-

+- +-

+-As of SWIG 2.0.7, the Octave module has been tested with Octave versions 3.0.5, 3.2.4, 3.4.3, and 3.6.1. ++As of SWIG 3.0.0, the Octave module has been tested with Octave versions 3.0.5, 3.2.4, 3.4.3, 3.6.4, and 3.8.0. ++Use of Octave versions older than 3.x.x is not recommended, as these versions are no longer tested with SWIG. +

+ +

30.2 Running SWIG

+diff --git a/Lib/octave/octrun.swg b/Lib/octave/octrun.swg +index 41d1c7a..2174a0f 100644 +--- a/Lib/octave/octrun.swg ++++ b/Lib/octave/octrun.swg +@@ -1,20 +1,88 @@ + + #include +-#ifndef OCTAVE_API_VERSION_NUMBER +- +- // Hack to distinguish between Octave 3.2 and earlier versions before OCTAVE_API_VERSION_NUMBER existed +- #define ComplexLU __ignore +- #include +- #undef ComplexLU +- #ifdef octave_Complex_LU_h +- # define OCTAVE_API_VERSION_NUMBER 36 +- #else +- # define OCTAVE_API_VERSION_NUMBER 37 +- #endif + +-#endif ++// Macro for enabling features which require Octave version >= major.minor.patch ++#define SWIG_OCTAVE_PREREQ(major, minor, patch) \ ++ ( (OCTAVE_MAJOR_VERSION<<16) + (OCTAVE_MINOR_VERSION<<8) + OCTAVE_PATCH_VERSION >= ((major)<<16) + ((minor)<<8) + (patch) ) ++ ++// Reconstruct Octave major, minor, and patch versions for releases prior to 3.8.1 ++#if !defined(OCTAVE_MAJOR_VERSION) ++ ++# if !defined(OCTAVE_API_VERSION_NUMBER) ++ ++// Hack to distinguish between Octave 3.8.0, which removed OCTAVE_API_VERSION_NUMBER but did not yet ++// introduce OCTAVE_MAJOR_VERSION, and Octave <= 3.2, which did not define OCTAVE_API_VERSION_NUMBER ++# include ++# if defined(octave_ov_h) ++# define OCTAVE_MAJOR_VERSION 3 ++# define OCTAVE_MINOR_VERSION 8 ++# define OCTAVE_PATCH_VERSION 0 ++# else ++ ++// Hack to distinguish between Octave 3.2 and earlier versions, before OCTAVE_API_VERSION_NUMBER existed ++# define ComplexLU __ignore ++# include ++# undef ComplexLU ++# if defined(octave_Complex_LU_h) ++ ++// We know only that this version is prior to Octave 3.2, i.e. OCTAVE_API_VERSION_NUMBER < 37 ++# define OCTAVE_MAJOR_VERSION 3 ++# define OCTAVE_MINOR_VERSION 1 ++# define OCTAVE_PATCH_VERSION 99 ++ ++# else ++ ++// OCTAVE_API_VERSION_NUMBER == 37 ++# define OCTAVE_MAJOR_VERSION 3 ++# define OCTAVE_MINOR_VERSION 2 ++# define OCTAVE_PATCH_VERSION 0 ++ ++# endif // defined(octave_Complex_LU_h) ++ ++# endif // defined(octave_ov_h) + +-#if OCTAVE_API_VERSION_NUMBER < 37 ++// Correlation between Octave API and version numbers extracted from Octave's ++// ChangeLogs; version is the *earliest* released Octave with that API number ++# elif OCTAVE_API_VERSION_NUMBER >= 48 ++# define OCTAVE_MAJOR_VERSION 3 ++# define OCTAVE_MINOR_VERSION 6 ++# define OCTAVE_PATCH_VERSION 0 ++ ++# elif OCTAVE_API_VERSION_NUMBER >= 45 ++# define OCTAVE_MAJOR_VERSION 3 ++# define OCTAVE_MINOR_VERSION 4 ++# define OCTAVE_PATCH_VERSION 1 ++ ++# elif OCTAVE_API_VERSION_NUMBER >= 42 ++# define OCTAVE_MAJOR_VERSION 3 ++# define OCTAVE_MINOR_VERSION 3 ++# define OCTAVE_PATCH_VERSION 54 ++ ++# elif OCTAVE_API_VERSION_NUMBER >= 41 ++# define OCTAVE_MAJOR_VERSION 3 ++# define OCTAVE_MINOR_VERSION 3 ++# define OCTAVE_PATCH_VERSION 53 ++ ++# elif OCTAVE_API_VERSION_NUMBER >= 40 ++# define OCTAVE_MAJOR_VERSION 3 ++# define OCTAVE_MINOR_VERSION 3 ++# define OCTAVE_PATCH_VERSION 52 ++ ++# elif OCTAVE_API_VERSION_NUMBER >= 39 ++# define OCTAVE_MAJOR_VERSION 3 ++# define OCTAVE_MINOR_VERSION 3 ++# define OCTAVE_PATCH_VERSION 51 ++ ++# else // OCTAVE_API_VERSION_NUMBER == 38 ++# define OCTAVE_MAJOR_VERSION 3 ++# define OCTAVE_MINOR_VERSION 3 ++# define OCTAVE_PATCH_VERSION 50 ++ ++# endif // !defined(OCTAVE_API_VERSION_NUMBER) ++ ++#endif // !defined(OCTAVE_MAJOR_VERSION) ++ ++#if !SWIG_OCTAVE_PREREQ(3,2,0) + #define SWIG_DEFUN(cname, wname, doc) DEFUNX_DLD(#cname, wname, FS ## cname, args, nargout, doc) + #else + #define SWIG_DEFUN(cname, wname, doc) DEFUNX_DLD(#cname, wname, G ## cname, args, nargout, doc) +@@ -427,7 +495,7 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own); + if (error_state) return dim_vector(1,1); + } + return d; +- } else if (out.is_matrix_type() || out.is_real_nd_array() || out.is_numeric_type() ) { ++ } else if (out.is_matrix_type() || out.is_numeric_type() ) { + if (out.rows()==1 || out.columns()==1) { + Array a = out.int_vector_value(); + if (error_state) return dim_vector(1,1); +@@ -746,7 +814,7 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own); + return outarg(0).string_value(); + } + +-#if OCTAVE_API_VERSION_NUMBER >= 40 ++#if SWIG_OCTAVE_PREREQ(3,3,52) + virtual octave_map map_value() const { + return octave_map(); + } +@@ -982,7 +1050,7 @@ SWIGRUNTIME void swig_acquire_ownership_obj(void *vptr, int own); + virtual std::string string_value(bool force = false) const + { return ptr->string_value(force); } + +-#if OCTAVE_API_VERSION_NUMBER >= 40 ++#if SWIG_OCTAVE_PREREQ(3,3,52) + virtual octave_map map_value() const + { return ptr->map_value(); } + #else +@@ -1293,10 +1361,12 @@ SWIGRUNTIME void SWIG_Octave_SetGlobalValue(std::string name, const octave_value + } + + SWIGRUNTIME void SWIG_Octave_LinkGlobalValue(std::string name) { +-#if OCTAVE_API_VERSION_NUMBER < 37 ++#if !SWIG_OCTAVE_PREREQ(3,2,0) + link_to_global_variable(curr_sym_tab->lookup(name, true)); + #else ++#if !SWIG_OCTAVE_PREREQ(3,8,0) + symbol_table::varref(name); ++#endif + symbol_table::mark_global(name); + #endif + } +diff --git a/Lib/octave/octruntime.swg b/Lib/octave/octruntime.swg +index 43313c3..fbf2007 100644 +--- a/Lib/octave/octruntime.swg ++++ b/Lib/octave/octruntime.swg +@@ -25,7 +25,7 @@ static bool SWIG_init_user(octave_swig_type* module_ns); + SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) { + bool retn; + { +-#if OCTAVE_API_VERSION_NUMBER < 38 ++#if !SWIG_OCTAVE_PREREQ(3,3,50) + unwind_protect::begin_frame("SWIG_Octave_LoadModule"); + unwind_protect_int(error_state); + unwind_protect_int(warning_state); +@@ -44,7 +44,7 @@ SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) { + discard_warning_messages = true; + feval(name, octave_value_list(), 0); + retn = (error_state == 0); +-#if OCTAVE_API_VERSION_NUMBER < 38 ++#if !SWIG_OCTAVE_PREREQ(3,3,50) + unwind_protect::run_frame("SWIG_Octave_LoadModule"); + #endif + } +@@ -57,7 +57,7 @@ SWIGINTERN bool SWIG_Octave_LoadModule(std::string name) { + SWIGINTERN bool SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::string name) { + bool retn; + { +-#if OCTAVE_API_VERSION_NUMBER < 38 ++#if !SWIG_OCTAVE_PREREQ(3,3,50) + unwind_protect::begin_frame("SWIG_Octave_InstallFunction"); + unwind_protect_int(error_state); + unwind_protect_int(warning_state); +@@ -80,7 +80,7 @@ SWIGINTERN bool SWIG_Octave_InstallFunction(octave_function *octloadfcn, std::st + error_state = 0; + feval("autoload", args, 0); + retn = (error_state == 0); +-#if OCTAVE_API_VERSION_NUMBER < 38 ++#if !SWIG_OCTAVE_PREREQ(3,3,50) + unwind_protect::run_frame("SWIG_Octave_InstallFunction"); + #endif + } +@@ -196,7 +196,7 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) { + // definitely affects version 3.2.*, not sure about 3.3.*, seems to be fixed in + // version 3.4.* and above. can be turned off with macro definition. + #ifndef SWIG_OCTAVE_NO_SEGFAULT_HACK +-#if 36 < OCTAVE_API_VERSION_NUMBER && OCTAVE_API_VERSION_NUMBER < 45 ++#if SWIG_OCTAVE_PREREQ(3,2,0) && !SWIG_OCTAVE_PREREQ(3,4,1) + octave_exit = ::_Exit; + #endif + #endif +@@ -212,7 +212,7 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) { + + // workaround bug in octave where installing global variable of custom type and then + // exiting without explicitly clearing the variable causes octave to segfault. +-#if OCTAVE_API_VERSION_NUMBER > 36 ++#if SWIG_OCTAVE_PREREQ(3,2,0) + octave_value_list eval_args; + eval_args.append("base"); + eval_args.append("function __swig_atexit__; " +@@ -297,7 +297,7 @@ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) { + } + } + +-#if OCTAVE_API_VERSION_NUMBER < 37 ++#if !SWIG_OCTAVE_PREREQ(3,2,0) + mlock(me->name()); + #else + mlock(); diff --git a/SOURCES/swig207-setools.patch b/SOURCES/swig207-setools.patch deleted file mode 100644 index ef465f7..0000000 --- a/SOURCES/swig207-setools.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff -up swig-2.0.7/Source/Swig/naming.c.setools swig-2.0.7/Source/Swig/naming.c ---- swig-2.0.7/Source/Swig/naming.c.setools 2011-12-11 17:29:51.000000000 +0100 -+++ swig-2.0.7/Source/Swig/naming.c 2012-06-27 16:21:21.248375130 +0200 -@@ -215,11 +215,11 @@ String *Swig_name_member(const_String_or - Append(r, f); - } - cname = Char(rclassname); -- if ((strncmp(cname, "struct ", 7) == 0) || ((strncmp(cname, "class ", 6) == 0)) || ((strncmp(cname, "union ", 6) == 0))) { -- cname = strchr(cname, ' ') + 1; -- } - replace_nspace(r, nspace); - Replace(r, "%c", cname, DOH_REPLACE_ANY); -+ if ((strncmp(cname, "struct ", 7) == 0) || ((strncmp(cname, "class ", 6) == 0)) || ((strncmp(cname, "union ", 6) == 0))) { -+ Replace(r, " ", "_", DOH_REPLACE_FIRST); -+ } - Replace(r, "%m", membername, DOH_REPLACE_ANY); - /* name_mangle(r); */ - Delete(rclassname); diff --git a/SPECS/swig.spec b/SPECS/swig.spec index 671ee73..f0749e4 100644 --- a/SPECS/swig.spec +++ b/SPECS/swig.spec @@ -13,15 +13,15 @@ Summary: Connects C/C++/Objective C to some high-level programming languages Name: swig Version: 2.0.10 -Release: 4%{?dist} +Release: 5%{?dist} License: GPLv3+ and BSD Group: Development/Tools URL: http://swig.sourceforge.net/ Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz Source1: swig.1 -Patch1: swig207-setools.patch # Fix the failure on arch x390 during testing -Patch2: swig-2.0.10-Fix-x390-build.patch +Patch1: swig-2.0.10-Fix-x390-build.patch +Patch2: swig-2.0.10-Support-octave-3.8.0.patch BuildRequires: perl, python-devel, pcre-devel %if %{tcl} @@ -60,8 +60,8 @@ This package contains documentation for SWIG and useful examples %prep %setup -q -n swig-%{version} -%patch1 -p1 -b .setools -%patch2 -p1 -b .x390 +%patch1 -p1 -b .x390 +%patch2 -p1 -b .octave # 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 @@ -133,6 +133,10 @@ gzip %{buildroot}%{_mandir}/man1/$(basename %{SOURCE1}) %doc Doc Examples LICENSE LICENSE-GPL LICENSE-UNIVERSITIES COPYRIGHT %changelog +* Wed Mar 16 2016 Jitka Plesnikova - 2.0.10-5 +- Remove setools patch (bug #1263740) +- Add support for Octave 3.8 (bug #1136487) + * Fri Jan 24 2014 Daniel Mach - 2.0.10-4 - Mass rebuild 2014-01-24