Merged update from upstream sources
This is an automated DistroBaker update from upstream sources. If you do not know what this is about or would like to opt out, contact the OSCI team. Source: https://src.fedoraproject.org/rpms/swig.git#b84ce888c2e7b014e4812696d9dcb24dfdab9429
This commit is contained in:
parent
3bb60e0623
commit
fabef13566
82
swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch
Normal file
82
swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch
Normal file
@ -0,0 +1,82 @@
|
||||
From b7dedecfdd708c5323addc1b28e16cc727e01980 Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Thu, 18 Mar 2021 10:53:58 +1300
|
||||
Subject: [PATCH] php: Fix char* typecheck typemap to accept Null
|
||||
|
||||
The corresponding in typemap already does.
|
||||
|
||||
Fixes #1655, reported by CJSlominski.
|
||||
---
|
||||
CHANGES.current | 4 ++++
|
||||
Examples/test-suite/overload_polymorphic.i | 3 +++
|
||||
.../test-suite/php/overload_polymorphic_runme.php | 14 ++++++++++++++
|
||||
Lib/php/php.swg | 5 ++++-
|
||||
4 files changed, 25 insertions(+), 1 deletion(-)
|
||||
create mode 100644 Examples/test-suite/php/overload_polymorphic_runme.php
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index 58fd05a56..f287e3d60 100644
|
||||
#--- a/CHANGES.current
|
||||
#+++ b/CHANGES.current
|
||||
#@@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||
# Version 4.1.0 (in progress)
|
||||
# ===========================
|
||||
#
|
||||
#+2021-03-18: olly
|
||||
#+ #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the
|
||||
#+ corresponding in typemap does.
|
||||
#+
|
||||
# 2021-03-18: olly
|
||||
# #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with
|
||||
# non-void return.
|
||||
diff --git a/Examples/test-suite/overload_polymorphic.i b/Examples/test-suite/overload_polymorphic.i
|
||||
index ac004f948..72aabd840 100644
|
||||
--- a/Examples/test-suite/overload_polymorphic.i
|
||||
+++ b/Examples/test-suite/overload_polymorphic.i
|
||||
@@ -23,4 +23,7 @@ class Unknown;
|
||||
int test2(Unknown* unknown) { return 0; }
|
||||
int test2(Base* base) { return 1; }
|
||||
|
||||
+int test3(const char*, const Base* = 0, bool = false) { return 0; }
|
||||
+int test3(Base&, const char* = 0, const Base* = 0, bool = false) { return 1; }
|
||||
+
|
||||
%}
|
||||
diff --git a/Examples/test-suite/php/overload_polymorphic_runme.php b/Examples/test-suite/php/overload_polymorphic_runme.php
|
||||
new file mode 100644
|
||||
index 000000000..0afe16808
|
||||
--- /dev/null
|
||||
+++ b/Examples/test-suite/php/overload_polymorphic_runme.php
|
||||
@@ -0,0 +1,14 @@
|
||||
+<?php
|
||||
+
|
||||
+require "tests.php";
|
||||
+require "overload_polymorphic.php";
|
||||
+
|
||||
+$t = new Derived();
|
||||
+
|
||||
+check::equal(overload_polymorphic::test($t), 0, "test(Derived)");
|
||||
+check::equal(overload_polymorphic::test(1), 1, "test(1)");
|
||||
+check::equal(overload_polymorphic::test2($t), 1, "test2(Derived)");
|
||||
+check::equal(overload_polymorphic::test3($t, null, $t), 1, "test3(Derived, null, Derived)");
|
||||
+
|
||||
+check::done();
|
||||
+?>
|
||||
diff --git a/Lib/php/php.swg b/Lib/php/php.swg
|
||||
index 4eba6be2a..ccfd371ab 100644
|
||||
--- a/Lib/php/php.swg
|
||||
+++ b/Lib/php/php.swg
|
||||
@@ -465,7 +465,10 @@
|
||||
%php_typecheck(double,SWIG_TYPECHECK_DOUBLE,IS_DOUBLE)
|
||||
%php_typecheck(char,SWIG_TYPECHECK_CHAR,IS_STRING)
|
||||
|
||||
-%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char *, char *&, char []
|
||||
+%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char *, char *&
|
||||
+ " $1 = (Z_TYPE($input) == IS_STRING || Z_TYPE($input) == IS_NULL); "
|
||||
+
|
||||
+%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) char []
|
||||
" $1 = (Z_TYPE($input) == IS_STRING); "
|
||||
|
||||
%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE
|
||||
--
|
||||
2.26.3
|
||||
|
@ -0,0 +1,101 @@
|
||||
From 2e7da86b2ced479e48741cc8713479dee426be61 Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Wed, 9 Dec 2020 09:48:55 +1300
|
||||
Subject: [PATCH] php: Fix overloaded directed methods with non-void return
|
||||
|
||||
We were treating such methods like constructors and assigning to the
|
||||
internal _cPtr, which just seems bizarrely wrong.
|
||||
|
||||
Fixes #1900
|
||||
---
|
||||
CHANGES.current | 4 ++++
|
||||
Examples/test-suite/director_overload.i | 11 ++++++++++-
|
||||
.../test-suite/php/director_overload_runme.php | 18 ++++++++++++++++++
|
||||
Source/Modules/php.cxx | 4 ++--
|
||||
4 files changed, 34 insertions(+), 3 deletions(-)
|
||||
create mode 100644 Examples/test-suite/php/director_overload_runme.php
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index acaea3aea..58fd05a56 100644
|
||||
#--- a/CHANGES.current
|
||||
#+++ b/CHANGES.current
|
||||
#@@ -7,6 +7,10 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||
# Version 4.1.0 (in progress)
|
||||
# ===========================
|
||||
#
|
||||
#+2021-03-18: olly
|
||||
#+ #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with
|
||||
#+ non-void return.
|
||||
#+
|
||||
# 2021-03-11: murillo128
|
||||
# #1498 [Javascript] Support type conversion.
|
||||
#
|
||||
diff --git a/Examples/test-suite/director_overload.i b/Examples/test-suite/director_overload.i
|
||||
index 604ffe5ca..d6feb122b 100644
|
||||
--- a/Examples/test-suite/director_overload.i
|
||||
+++ b/Examples/test-suite/director_overload.i
|
||||
@@ -47,5 +47,14 @@ public:
|
||||
virtual void notover(int *p) const {}
|
||||
};
|
||||
|
||||
-%}
|
||||
+class OverloadedGetSet
|
||||
+{
|
||||
+ int v;
|
||||
+public:
|
||||
+ OverloadedGetSet() : v(42) { }
|
||||
+ virtual ~OverloadedGetSet() { }
|
||||
+ virtual int rw() const { return v; }
|
||||
+ virtual void rw(int new_v) { v = new_v; }
|
||||
+};
|
||||
|
||||
+%}
|
||||
diff --git a/Examples/test-suite/php/director_overload_runme.php b/Examples/test-suite/php/director_overload_runme.php
|
||||
new file mode 100644
|
||||
index 000000000..f5fc56b65
|
||||
--- /dev/null
|
||||
+++ b/Examples/test-suite/php/director_overload_runme.php
|
||||
@@ -0,0 +1,18 @@
|
||||
+
|
||||
+<?php
|
||||
+
|
||||
+require "tests.php";
|
||||
+require "director_overload.php";
|
||||
+
|
||||
+check::functions(array('new_overloadedClass','new_overloadedPointers','new_overloadedGetSet','overloadedclass_method1','overloadedclass_method3','overloadedclass_method2','overloadedpointers_method','overloadedpointers_notover','overloadedgetset_rw'));
|
||||
+
|
||||
+check::classes(array('OverloadedClass','OverloadedPointers','OverloadedGetSet'));
|
||||
+check::globals(array());
|
||||
+
|
||||
+$o = new OverloadedGetSet;
|
||||
+check::equal($o->rw(), 42, "get_set() initial value not 42");
|
||||
+check::equal($o->rw(7), null, "get_set() failed to set");
|
||||
+check::equal($o->rw(), 7, "get_set() didn't return back set value");
|
||||
+
|
||||
+check::done();
|
||||
+?>
|
||||
diff --git a/Source/Modules/php.cxx b/Source/Modules/php.cxx
|
||||
index 1edbd874c..eaae32d63 100644
|
||||
--- a/Source/Modules/php.cxx
|
||||
+++ b/Source/Modules/php.cxx
|
||||
@@ -1566,7 +1566,7 @@ public:
|
||||
Printf(prepare, "case %d: ", ++last_handled_i);
|
||||
}
|
||||
if (non_void_return) {
|
||||
- if ((!directorsEnabled() || !Swig_directorclass(n)) && !constructor) {
|
||||
+ if (!constructor) {
|
||||
Append(prepare, "$r=");
|
||||
} else if (wrapperType == staticmemberfn || wrapperType == staticmembervar) {
|
||||
Append(prepare, "$r=");
|
||||
@@ -1590,7 +1590,7 @@ public:
|
||||
if (had_a_case)
|
||||
Printf(prepare, "default: ");
|
||||
if (non_void_return) {
|
||||
- if ((!directorsEnabled() || !Swig_directorclass(n)) && !constructor) {
|
||||
+ if (!constructor) {
|
||||
Append(prepare, "$r=");
|
||||
} else if (wrapperType == staticmemberfn || wrapperType == staticmembervar) {
|
||||
Append(prepare, "$r=");
|
||||
--
|
||||
2.26.3
|
||||
|
82
swig-4.0.2-Improve-PHP-object-creation.patch
Normal file
82
swig-4.0.2-Improve-PHP-object-creation.patch
Normal file
@ -0,0 +1,82 @@
|
||||
From 71475b0af9677deeaf6fe55c0c5f53fec9f730d2 Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Thu, 18 Mar 2021 15:50:52 +1300
|
||||
Subject: [PATCH] Improve PHP object creation
|
||||
|
||||
Reportedly the code we were using in the directorin case gave segfaults
|
||||
in PHP 7.2 and later - we've been unable to reproduce these, but the new
|
||||
approach is also simpler and should be bit faster too.
|
||||
|
||||
Fixes #1527, #1975
|
||||
---
|
||||
CHANGES.current | 6 ++++++
|
||||
Lib/php/phprun.swg | 14 +++++---------
|
||||
2 files changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index f287e3d60..79d41001f 100644
|
||||
#--- a/CHANGES.current
|
||||
#+++ b/CHANGES.current
|
||||
#@@ -7,6 +7,12 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||
# Version 4.1.0 (in progress)
|
||||
# ===========================
|
||||
#
|
||||
#+2021-03-19: olly
|
||||
#+ #1527 [PHP] Improve PHP object creation in directorin case.
|
||||
#+ Reportedly the code we were using in this case gave segfaults in
|
||||
#+ PHP 7.2 and later - we've been unable to reproduce these, but the
|
||||
#+ new approach is also simpler and should be bit faster too.
|
||||
#+
|
||||
# 2021-03-18: olly
|
||||
# #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the
|
||||
# corresponding in typemap does.
|
||||
diff --git a/Lib/php/phprun.swg b/Lib/php/phprun.swg
|
||||
index a07a1b9f8..f3a4e6ad1 100644
|
||||
--- a/Lib/php/phprun.swg
|
||||
+++ b/Lib/php/phprun.swg
|
||||
@@ -90,15 +90,13 @@ SWIG_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject) {
|
||||
} else {
|
||||
/*
|
||||
* Wrap the resource in an object, the resource will be accessible
|
||||
- * via the "_cPtr" member. This is currently only used by
|
||||
+ * via the "_cPtr" property. This code path is currently only used by
|
||||
* directorin typemaps.
|
||||
*/
|
||||
- zval resource;
|
||||
zend_class_entry *ce = NULL;
|
||||
const char *type_name = type->name+3; /* +3 so: _p_Foo -> Foo */
|
||||
size_t type_name_len;
|
||||
const char * p;
|
||||
- HashTable * ht;
|
||||
|
||||
/* Namespace__Foo -> Foo */
|
||||
/* FIXME: ugly and goes wrong for classes with __ in their names. */
|
||||
@@ -107,7 +105,6 @@ SWIG_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject) {
|
||||
}
|
||||
type_name_len = strlen(type_name);
|
||||
|
||||
- ZVAL_RES(&resource, zend_register_resource(value, *(int *)(type->clientdata)));
|
||||
if (SWIG_PREFIX_LEN > 0) {
|
||||
zend_string * classname = zend_string_alloc(SWIG_PREFIX_LEN + type_name_len, 0);
|
||||
memcpy(classname->val, SWIG_PREFIX, SWIG_PREFIX_LEN);
|
||||
@@ -121,13 +118,12 @@ SWIG_SetPointerZval(zval *z, void *ptr, swig_type_info *type, int newobject) {
|
||||
}
|
||||
if (ce == NULL) {
|
||||
/* class does not exist */
|
||||
- ce = zend_standard_class_def;
|
||||
+ object_init(z);
|
||||
+ } else {
|
||||
+ object_init_ex(z, ce);
|
||||
}
|
||||
|
||||
- ALLOC_HASHTABLE(ht);
|
||||
- zend_hash_init(ht, 1, NULL, NULL, 0);
|
||||
- zend_hash_str_update(ht, "_cPtr", sizeof("_cPtr") - 1, &resource);
|
||||
- object_and_properties_init(z, ce, ht);
|
||||
+ add_property_resource_ex(z, "_cPtr", sizeof("_cPtr") - 1, zend_register_resource(value, *(int *)(type->clientdata)));
|
||||
}
|
||||
return;
|
||||
}
|
||||
--
|
||||
2.26.3
|
||||
|
409
swig-4.0.2-Support-PHP8.patch
Normal file
409
swig-4.0.2-Support-PHP8.patch
Normal file
@ -0,0 +1,409 @@
|
||||
From 3584c7d49cb598ce79d5e285d6c17b2dedfe3ecb Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Wed, 17 Mar 2021 12:45:17 +1300
|
||||
Subject: [PATCH 1/4] Add initial support for PHP8
|
||||
|
||||
Testcase director_overload2 is failing, but the rest of the testsuite
|
||||
passes.
|
||||
---
|
||||
.travis.yml | 4 ++
|
||||
Doc/Manual/Php.html | 6 +-
|
||||
Doc/Manual/Preprocessor.html | 2 +-
|
||||
Doc/Manual/SWIG.html | 2 +-
|
||||
Examples/Makefile.in | 6 +-
|
||||
.../php/evil_diamond_prop_runme.php | 2 +-
|
||||
Lib/cdata.i | 2 +-
|
||||
Lib/exception.i | 2 +-
|
||||
Lib/php/phprun.swg | 8 ++-
|
||||
Source/Modules/php.cxx | 55 +++++++++++++++----
|
||||
configure.ac | 10 ++--
|
||||
11 files changed, 72 insertions(+), 27 deletions(-)
|
||||
|
||||
#diff --git a/.travis.yml b/.travis.yml
|
||||
#index 8c293c2f9fb..9477bed946f 100644
|
||||
#--- a/.travis.yml
|
||||
#+++ b/.travis.yml
|
||||
#@@ -154,6 +154,10 @@ matrix:
|
||||
# os: linux
|
||||
# env: SWIGLANG=php VER=7.4
|
||||
# dist: xenial
|
||||
#+ - compiler: gcc
|
||||
#+ os: linux
|
||||
#+ env: SWIGLANG=php VER=8.0
|
||||
#+ dist: xenial
|
||||
# - compiler: gcc
|
||||
# os: linux
|
||||
# env: SWIGLANG=python # 2.7
|
||||
diff --git a/Doc/Manual/Php.html b/Doc/Manual/Php.html
|
||||
index 09c514e944a..4b91958894a 100644
|
||||
--- a/Doc/Manual/Php.html
|
||||
+++ b/Doc/Manual/Php.html
|
||||
@@ -51,12 +51,12 @@ <H1><a name="Php">32 SWIG and PHP</a></H1>
|
||||
|
||||
<p>
|
||||
In this chapter, we discuss SWIG's support of PHP. SWIG currently supports
|
||||
-generating wrappers for PHP7. Support for PHP5 was removed in SWIG 4.0.0
|
||||
-and support for PHP4 was removed in SWIG 1.3.37.
|
||||
+generating wrappers for PHP7 and PHP8. Support for PHP5 was removed in SWIG
|
||||
+4.0.0 and support for PHP4 was removed in SWIG 1.3.37.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
-Currently any PHP7 release should work.
|
||||
+Currently any PHP7 or PHP8 release should work.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
diff --git a/Doc/Manual/Preprocessor.html b/Doc/Manual/Preprocessor.html
|
||||
index 51cc0637836..0c704bde959 100644
|
||||
--- a/Doc/Manual/Preprocessor.html
|
||||
+++ b/Doc/Manual/Preprocessor.html
|
||||
@@ -123,7 +123,7 @@ <H2><a name="Preprocessor_condition_compilation">11.3 Conditional Compilation</a
|
||||
SWIGOCTAVE Defined when using Octave
|
||||
SWIGPERL Defined when using Perl
|
||||
SWIGPHP Defined when using PHP (any version)
|
||||
-SWIGPHP7 Defined when using PHP7
|
||||
+SWIGPHP7 Defined when using PHP 7 or later
|
||||
SWIGPYTHON Defined when using Python
|
||||
SWIGR Defined when using R
|
||||
SWIGRUBY Defined when using Ruby
|
||||
diff --git a/Doc/Manual/SWIG.html b/Doc/Manual/SWIG.html
|
||||
index c54d117e018..f4884256536 100644
|
||||
--- a/Doc/Manual/SWIG.html
|
||||
+++ b/Doc/Manual/SWIG.html
|
||||
@@ -127,7 +127,7 @@ <H2><a name="SWIG_nn2">5.1 Running SWIG</a></H2>
|
||||
-lua - Generate Lua wrappers
|
||||
-octave - Generate Octave wrappers
|
||||
-perl5 - Generate Perl 5 wrappers
|
||||
- -php7 - Generate PHP 7 wrappers
|
||||
+ -php7 - Generate PHP 7 or later wrappers
|
||||
-python - Generate Python wrappers
|
||||
-r - Generate R (aka GNU S) wrappers
|
||||
-ruby - Generate Ruby wrappers
|
||||
diff --git a/Examples/Makefile.in b/Examples/Makefile.in
|
||||
index 3f6140b5e79..3978a959836 100644
|
||||
--- a/Examples/Makefile.in
|
||||
+++ b/Examples/Makefile.in
|
||||
@@ -1045,7 +1045,7 @@ ruby_clean:
|
||||
rm -f *.@OBJEXT@ *$(RUBY_SO)
|
||||
|
||||
##################################################################
|
||||
-##### PHP7 ######
|
||||
+##### PHP ######
|
||||
##################################################################
|
||||
|
||||
PHP = @PHP@
|
||||
@@ -1058,7 +1058,7 @@ PHP_SCRIPT = $(SRCDIR)$(RUNME).php
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
php: $(SRCDIR_SRCS)
|
||||
- $(SWIG) -php7 $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH)
|
||||
+ $(SWIG) -php $(SWIGOPT) -o $(ISRCS) $(INTERFACEPATH)
|
||||
$(CC) -c $(CCSHARED) $(CPPFLAGS) $(CFLAGS) $(SRCDIR_SRCS) $(ISRCS) $(INCLUDES) $(PHP_INCLUDE)
|
||||
$(LDSHARED) $(CFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(LIBS) -o $(LIBPREFIX)$(TARGET)$(PHP_SO)
|
||||
|
||||
@@ -1067,7 +1067,7 @@ php: $(SRCDIR_SRCS)
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
php_cpp: $(SRCDIR_SRCS)
|
||||
- $(SWIG) -php7 -c++ $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH)
|
||||
+ $(SWIG) -php -c++ $(SWIGOPT) -o $(ICXXSRCS) $(INTERFACEPATH)
|
||||
$(CXX) -c $(CCSHARED) $(CPPFLAGS) $(CXXFLAGS) $(SRCDIR_SRCS) $(SRCDIR_CXXSRCS) $(ICXXSRCS) $(INCLUDES) $(PHP_INCLUDE)
|
||||
$(CXXSHARED) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(IOBJS) $(LIBS) $(CPP_DLLIBS) -o $(LIBPREFIX)$(TARGET)$(PHP_SO)
|
||||
|
||||
diff --git a/Examples/test-suite/php/evil_diamond_prop_runme.php b/Examples/test-suite/php/evil_diamond_prop_runme.php
|
||||
index 9bdb7435f1c..645328affda 100644
|
||||
--- a/Examples/test-suite/php/evil_diamond_prop_runme.php
|
||||
+++ b/Examples/test-suite/php/evil_diamond_prop_runme.php
|
||||
@@ -31,7 +31,7 @@
|
||||
check::equal(1,$spam->_foo,"1==spam->_foo");
|
||||
check::equal(2,$spam->_bar,"2==spam->_bar");
|
||||
// multiple inheritance not supported in PHP
|
||||
-set_error_handler(NULL, 0); // Don't complain that _baz is unknown.
|
||||
+set_error_handler(function () {return true;}, E_NOTICE|E_WARNING); // Don't complain that _baz is unknown.
|
||||
check::equal(null,$spam->_baz,"null==spam->_baz");
|
||||
restore_error_handler();
|
||||
check::equal(4,$spam->_spam,"4==spam->_spam");
|
||||
diff --git a/Lib/cdata.i b/Lib/cdata.i
|
||||
index f18ed4af53c..cd15266431e 100644
|
||||
--- a/Lib/cdata.i
|
||||
+++ b/Lib/cdata.i
|
||||
@@ -21,7 +21,7 @@ typedef struct SWIGCDATA {
|
||||
}
|
||||
%typemap(in) (const void *indata, int inlen) = (char *STRING, int LENGTH);
|
||||
|
||||
-#elif SWIGPHP7
|
||||
+#elif SWIGPHP
|
||||
|
||||
%typemap(out) SWIGCDATA {
|
||||
ZVAL_STRINGL($result, $1.data, $1.len);
|
||||
diff --git a/Lib/exception.i b/Lib/exception.i
|
||||
index ee9ce9bc632..3d6eeccdf2e 100644
|
||||
--- a/Lib/exception.i
|
||||
+++ b/Lib/exception.i
|
||||
@@ -12,7 +12,7 @@
|
||||
%insert("runtime") "swigerrors.swg"
|
||||
|
||||
|
||||
-#ifdef SWIGPHP7
|
||||
+#ifdef SWIGPHP
|
||||
%{
|
||||
#include "zend_exceptions.h"
|
||||
#define SWIG_exception(code, msg) do { zend_throw_exception(NULL, (char*)msg, code); goto thrown; } while (0)
|
||||
diff --git a/Lib/php/phprun.swg b/Lib/php/phprun.swg
|
||||
index f3a4e6ad1a9..04919878743 100644
|
||||
--- a/Lib/php/phprun.swg
|
||||
+++ b/Lib/php/phprun.swg
|
||||
@@ -12,8 +12,8 @@ extern "C" {
|
||||
#include "zend_exceptions.h"
|
||||
#include "php.h"
|
||||
|
||||
-#if PHP_MAJOR_VERSION != 7
|
||||
-# error These bindings need PHP7 - to generate PHP5 bindings use: SWIG < 4.0.0 and swig -php5
|
||||
+#if PHP_MAJOR_VERSION < 7
|
||||
+# error These bindings need PHP 7 or later - to generate PHP5 bindings use: SWIG < 4.0.0 and swig -php5
|
||||
#endif
|
||||
|
||||
#include "ext/standard/php_string.h"
|
||||
@@ -200,7 +200,11 @@ SWIG_ConvertPtr(zval *z, void **ptr, swig_type_info *ty, int flags) {
|
||||
|
||||
switch (Z_TYPE_P(z)) {
|
||||
case IS_OBJECT: {
|
||||
+#if PHP_MAJOR_VERSION < 8
|
||||
HashTable * ht = Z_OBJ_HT_P(z)->get_properties(z);
|
||||
+#else
|
||||
+ HashTable * ht = Z_OBJ_HT_P(z)->get_properties(Z_OBJ_P(z));
|
||||
+#endif
|
||||
if (ht) {
|
||||
zval * _cPtr = zend_hash_str_find(ht, "_cPtr", sizeof("_cPtr") - 1);
|
||||
if (_cPtr) {
|
||||
diff --git a/Source/Modules/php.cxx b/Source/Modules/php.cxx
|
||||
index eaae32d633b..d8ee75b45fb 100644
|
||||
--- a/Source/Modules/php.cxx
|
||||
+++ b/Source/Modules/php.cxx
|
||||
@@ -473,6 +473,20 @@ class PHP : public Language {
|
||||
s_arginfo = NewString("/* arginfo subsection */\n");
|
||||
arginfo_used = NewHash();
|
||||
|
||||
+ // Add arginfo we'll definitely need for *_alter_newobject and *_get_newobject.
|
||||
+ SetFlag(arginfo_used, "1");
|
||||
+ Append(s_arginfo,
|
||||
+ "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_1, 0, 0, 0)\n"
|
||||
+ " ZEND_ARG_INFO(0,arg1)\n"
|
||||
+ "ZEND_END_ARG_INFO()\n");
|
||||
+
|
||||
+ SetFlag(arginfo_used, "2");
|
||||
+ Append(s_arginfo,
|
||||
+ "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_2, 0, 0, 0)\n"
|
||||
+ " ZEND_ARG_INFO(0,arg1)\n"
|
||||
+ " ZEND_ARG_INFO(0,arg2)\n"
|
||||
+ "ZEND_END_ARG_INFO()\n");
|
||||
+
|
||||
/* start the function entry section */
|
||||
s_entry = NewString("/* entry subsection */\n");
|
||||
|
||||
@@ -653,8 +667,8 @@ class PHP : public Language {
|
||||
}
|
||||
Printv(f_begin, s_vdecl, s_wrappers, NIL);
|
||||
Printv(f_begin, all_cs_entry, "\n\n", s_arginfo, "\n\n", s_entry,
|
||||
- " SWIG_ZEND_NAMED_FE(swig_", module, "_alter_newobject,_wrap_swig_", module, "_alter_newobject,NULL)\n"
|
||||
- " SWIG_ZEND_NAMED_FE(swig_", module, "_get_newobject,_wrap_swig_", module, "_get_newobject,NULL)\n"
|
||||
+ " SWIG_ZEND_NAMED_FE(swig_", module, "_alter_newobject,_wrap_swig_", module, "_alter_newobject,swig_arginfo_2)\n"
|
||||
+ " SWIG_ZEND_NAMED_FE(swig_", module, "_get_newobject,_wrap_swig_", module, "_get_newobject,swig_arginfo_1)\n"
|
||||
" ZEND_FE_END\n};\n\n", NIL);
|
||||
Printv(f_begin, s_init, NIL);
|
||||
Delete(s_header);
|
||||
@@ -689,25 +703,46 @@ class PHP : public Language {
|
||||
|
||||
// We want to only emit each different arginfo once, as that reduces the
|
||||
// size of both the generated source code and the compiled extension
|
||||
- // module. To do this, we name the arginfo to encode the number of
|
||||
- // parameters and which (if any) are passed by reference by using a
|
||||
- // sequence of 0s (for non-reference) and 1s (for by references).
|
||||
+ // module. The parameters at this level are just named arg1, arg2, etc
|
||||
+ // so we generate an arginfo name with the number of parameters and a
|
||||
+ // bitmap value saying which (if any) are passed by reference.
|
||||
ParmList *l = Getattr(n, "parms");
|
||||
- String * arginfo_code = NewStringEmpty();
|
||||
+ unsigned long bitmap = 0, bit = 1;
|
||||
+ int n_params = 0;
|
||||
+ bool overflowed = false;
|
||||
for (Parm *p = l; p; p = Getattr(p, "tmap:in:next")) {
|
||||
/* Ignored parameters */
|
||||
if (checkAttribute(p, "tmap:in:numinputs", "0")) {
|
||||
continue;
|
||||
}
|
||||
- Append(arginfo_code, GetFlag(p, "tmap:in:byref") ? "1" : "0");
|
||||
+ ++n_params;
|
||||
+ if (GetFlag(p, "tmap:in:byref")) {
|
||||
+ bitmap |= bit;
|
||||
+ if (bit == 0) overflowed = true;
|
||||
+ }
|
||||
+ bit <<= 1;
|
||||
+ }
|
||||
+ String * arginfo_code;
|
||||
+ if (overflowed) {
|
||||
+ // We overflowed the bitmap so just generate a unique name - this only
|
||||
+ // happens for a function with more parameters than bits in a long
|
||||
+ // where a high numbered parameter is passed by reference, so should be
|
||||
+ // rare in practice.
|
||||
+ static int overflowed_counter = 0;
|
||||
+ arginfo_code = NewStringf("z%d", ++overflowed_counter);
|
||||
+ } else if (bitmap == 0) {
|
||||
+ // No parameters passed by reference.
|
||||
+ arginfo_code = NewStringf("%d", n_params);
|
||||
+ } else {
|
||||
+ arginfo_code = NewStringf("%d_%lx", n_params, bitmap);
|
||||
}
|
||||
|
||||
if (!GetFlag(arginfo_used, arginfo_code)) {
|
||||
- // Not had this one before, so emit it.
|
||||
+ // Not had this one before so emit it.
|
||||
SetFlag(arginfo_used, arginfo_code);
|
||||
Printf(s_arginfo, "ZEND_BEGIN_ARG_INFO_EX(swig_arginfo_%s, 0, 0, 0)\n", arginfo_code);
|
||||
- for (const char * p = Char(arginfo_code); *p; ++p) {
|
||||
- Printf(s_arginfo, " ZEND_ARG_PASS_INFO(%c)\n", *p);
|
||||
+ for (Parm *p = l; p; p = Getattr(p, "tmap:in:next")) {
|
||||
+ Printf(s_arginfo, " ZEND_ARG_INFO(%d,%s)\n", GetFlag(p, "tmap:in:byref"), Getattr(p, "lname"));
|
||||
}
|
||||
Printf(s_arginfo, "ZEND_END_ARG_INFO()\n");
|
||||
}
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 7d5824a06b5..1894001c521 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -2021,7 +2021,7 @@ AC_SUBST(RUBYSO)
|
||||
AC_SUBST(RUBYDYNAMICLINKING)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
-# Look for PHP7
|
||||
+# Look for PHP
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
PHPBIN=
|
||||
@@ -2035,7 +2035,7 @@ if test x"${PHPBIN}" = xno; then
|
||||
PHP=
|
||||
else
|
||||
if test "x$PHPBIN" = xyes; then
|
||||
- AC_CHECK_PROGS(PHP, [php7.3 php7.2 php7.1 php7.0 php])
|
||||
+ AC_CHECK_PROGS(PHP, [php8.0 php7.4 php7.3 php7.2 php7.1 php7.0 php])
|
||||
else
|
||||
PHP=$PHPBIN
|
||||
fi
|
||||
@@ -2046,12 +2046,14 @@ else
|
||||
case $PHP in
|
||||
*7.*)
|
||||
PHPCONFIG=`echo "$PHP"|sed 's/7\...*$/-config&/'` ;;
|
||||
+ *8.*)
|
||||
+ PHPCONFIG=`echo "$PHP"|sed 's/8\...*$/-config&/'` ;;
|
||||
*)
|
||||
PHPCONFIG=$PHP-config ;;
|
||||
esac
|
||||
php_version=`$PHPCONFIG --version 2>/dev/null`
|
||||
case $php_version in
|
||||
- 7.*)
|
||||
+ 7.*|8.*)
|
||||
PHPINC=`$PHPCONFIG --includes 2>/dev/null`
|
||||
if test -n "$PHPINC"; then
|
||||
AC_MSG_RESULT($PHPINC)
|
||||
@@ -2062,7 +2064,7 @@ else
|
||||
"")
|
||||
AC_MSG_RESULT([could not find $PHPCONFIG or obtain PHP version from it]) ;;
|
||||
*)
|
||||
- AC_MSG_RESULT([found PHP $php_version - not PHP 7]) ;;
|
||||
+ AC_MSG_RESULT([found PHP $php_version - not PHP 7 or 8]) ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
From fd96627b2fc65353c03b160efd60fdce864d386c Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Wed, 17 Mar 2021 13:00:02 +1300
|
||||
Subject: [PATCH 2/4] Temporary hack so testsuite passes for PHP8
|
||||
|
||||
---
|
||||
Examples/test-suite/director_overload2.i | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/Examples/test-suite/director_overload2.i b/Examples/test-suite/director_overload2.i
|
||||
index e467c18cea6..ddfa65bb4d3 100644
|
||||
--- a/Examples/test-suite/director_overload2.i
|
||||
+++ b/Examples/test-suite/director_overload2.i
|
||||
@@ -14,11 +14,15 @@ struct OverloadDerived1 : OverloadBase {
|
||||
virtual void nnn(int vvv) {}
|
||||
#if defined(__SUNPRO_CC)
|
||||
virtual void nnn() {}
|
||||
+#elif defined(SWIGPHP) // FIXME: Hack to stop director_overload2 failing for PHP8
|
||||
+ virtual void nnn() {}
|
||||
#endif
|
||||
};
|
||||
struct OverloadDerived2 : OverloadBase {
|
||||
#if defined(__SUNPRO_CC)
|
||||
virtual void nnn(int vvv) {}
|
||||
+#elif defined(SWIGPHP) // FIXME: Hack to stop director_overload2 failing for PHP8
|
||||
+ virtual void nnn(int vvv) {}
|
||||
#endif
|
||||
virtual void nnn() {}
|
||||
};
|
||||
|
||||
From 4c3e85fbd47f804b5956bf37f0073795296ddde2 Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Sun, 21 Mar 2021 10:43:06 +1300
|
||||
Subject: [PATCH 3/4] Clarify what SWIGPHP7 means
|
||||
|
||||
---
|
||||
Doc/Manual/Preprocessor.html | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Doc/Manual/Preprocessor.html b/Doc/Manual/Preprocessor.html
|
||||
index 0c704bde959..7611ea40c2b 100644
|
||||
--- a/Doc/Manual/Preprocessor.html
|
||||
+++ b/Doc/Manual/Preprocessor.html
|
||||
@@ -123,7 +123,7 @@ <H2><a name="Preprocessor_condition_compilation">11.3 Conditional Compilation</a
|
||||
SWIGOCTAVE Defined when using Octave
|
||||
SWIGPERL Defined when using Perl
|
||||
SWIGPHP Defined when using PHP (any version)
|
||||
-SWIGPHP7 Defined when using PHP 7 or later
|
||||
+SWIGPHP7 Defined when using PHP 7 or later (with a compatible C API)
|
||||
SWIGPYTHON Defined when using Python
|
||||
SWIGR Defined when using R
|
||||
SWIGRUBY Defined when using Ruby
|
||||
|
||||
From d18f98c24d9ee0e15457e0e91de2689ad591d1db Mon Sep 17 00:00:00 2001
|
||||
From: Olly Betts <olly@survex.com>
|
||||
Date: Sun, 21 Mar 2021 10:54:17 +1300
|
||||
Subject: [PATCH 4/4] Update CHANGES.current and RELEASENOTES re PHP8
|
||||
|
||||
---
|
||||
CHANGES.current | 3 +++
|
||||
RELEASENOTES | 3 +++
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
#diff --git a/CHANGES.current b/CHANGES.current
|
||||
#index 79d41001f0a..6ae5689ee37 100644
|
||||
#--- a/CHANGES.current
|
||||
#+++ b/CHANGES.current
|
||||
#@@ -7,6 +7,9 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
||||
# Version 4.1.0 (in progress)
|
||||
# ===========================
|
||||
#
|
||||
#+2021-03-21: olly
|
||||
#+ #1929, #1978 [PHP] Add support for PHP 8.
|
||||
#+
|
||||
# 2021-03-19: olly
|
||||
# #1527 [PHP] Improve PHP object creation in directorin case.
|
||||
# Reportedly the code we were using in this case gave segfaults in
|
||||
diff --git a/RELEASENOTES b/RELEASENOTES
|
||||
index cc3ba07121d..55590108759 100644
|
||||
--- a/RELEASENOTES
|
||||
+++ b/RELEASENOTES
|
||||
@@ -7,6 +7,9 @@ Release Notes
|
||||
Detailed release notes are available with the release and are also
|
||||
published on the SWIG web site at http://swig.org/release.html.
|
||||
|
||||
+SWIG-4.2.0 summary:
|
||||
+- Add PHP 8 support.
|
||||
+
|
||||
SWIG-4.0.2 summary:
|
||||
- A few fixes around doxygen comment handling.
|
||||
- Ruby 2.7 support added.
|
12
swig.spec
12
swig.spec
@ -20,7 +20,7 @@
|
||||
%{!?perllang:%global perllang 1}
|
||||
%{!?phplang:%global phplang 1}
|
||||
# Disable Ruby test failed with swig 4.0.0 on s390
|
||||
%ifarch s390x
|
||||
%ifarch s390x %{power64}
|
||||
%{!?rubylang:%global rubylang 0}
|
||||
%else
|
||||
%{!?rubylang:%global rubylang 1}
|
||||
@ -54,7 +54,7 @@
|
||||
Summary: Connects C/C++/Objective C to some high-level programming languages
|
||||
Name: swig
|
||||
Version: 4.0.2
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
License: GPLv3+ and BSD
|
||||
URL: http://swig.sourceforge.net/
|
||||
Source0: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz
|
||||
@ -68,6 +68,11 @@ Source4: ccache-swig.csh
|
||||
|
||||
# https://github.com/swig/swig/pull/1702
|
||||
Patch0: swig-Upgrade-to-support-newer-NodeJS.patch
|
||||
# Backport PHP 7.x and 88888888 updates
|
||||
Patch1: swig-4.0.2-Fix-overloaded-directed-methods-with-non-void-re.patch
|
||||
Patch2: swig-4.0.2-Fix-char-typecheck-typemap-to-accept-Null.patch
|
||||
Patch3: swig-4.0.2-Improve-PHP-object-creation.patch
|
||||
Patch4: swig-4.0.2-Support-PHP8.patch
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: perl-interpreter, pcre-devel
|
||||
@ -338,6 +343,9 @@ install -pm 644 Tools/swig.gdb %{buildroot}%{_datadir}/%{name}/gdb
|
||||
%{_datadir}/%{name}/gdb
|
||||
|
||||
%changelog
|
||||
* Fri Mar 05 2021 Jitka Plesnikova <jplesnik@redhat.com> - 4.0.2-5
|
||||
- Backport support of PHP8 from upstream
|
||||
|
||||
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 4.0.2-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user