From 986c24cf4fe239d7f6e767c2af4c16691d659d2b191f8090f29f5ae7f5d0cb9e Mon Sep 17 00:00:00 2001
From: Dirk Mueller
Date: Thu, 22 Sep 2022 19:53:42 +0000
Subject: [PATCH 1/2] Accepting request 1001913 from
home:coolo:branches:openSUSE:Factory
- Cherrypick 15515f390c5e3316a7faf0cf85d661a297d45a50.patch from
upstream to replace obsolete pcre1 with pcre2
OBS-URL: https://build.opensuse.org/request/show/1001913
OBS-URL: https://build.opensuse.org/package/show/devel:tools:building/swig?expand=0&rev=135
---
...5f390c5e3316a7faf0cf85d661a297d45a50.patch | 328 ++++++++++++++++++
swig.changes | 6 +
swig.spec | 4 +-
3 files changed, 337 insertions(+), 1 deletion(-)
create mode 100644 15515f390c5e3316a7faf0cf85d661a297d45a50.patch
diff --git a/15515f390c5e3316a7faf0cf85d661a297d45a50.patch b/15515f390c5e3316a7faf0cf85d661a297d45a50.patch
new file mode 100644
index 0000000..00a16df
--- /dev/null
+++ b/15515f390c5e3316a7faf0cf85d661a297d45a50.patch
@@ -0,0 +1,328 @@
+From 15515f390c5e3316a7faf0cf85d661a297d45a50 Mon Sep 17 00:00:00 2001
+From: Julien Schueller
+Date: Tue, 4 Jan 2022 13:50:02 +0100
+Subject: [PATCH] PCRE2
+
+Closes #2120
+---
+ CMakeLists.txt | 10 ++++-----
+ Doc/Manual/Preface.html | 6 +++---
+ Doc/Manual/Windows.html | 22 ++++++++++++--------
+ Source/Swig/misc.c | 41 ++++++++++++++++++++++++-------------
+ Source/Swig/naming.c | 22 ++++++++++++--------
+ Tools/cmake/FindPCRE.cmake | 37 ---------------------------------
+ Tools/cmake/FindPCRE2.cmake | 21 +++++++++++++++++++
+ Tools/mkwindows.sh | 2 +-
+ Tools/nuget-install.cmd | 28 -------------------------
+ Tools/pcre-build.sh | 4 ++--
+ appveyor.yml | 15 ++++++++------
+ configure.ac | 19 +++++++++--------
+ 12 files changed, 106 insertions(+), 121 deletions(-)
+ delete mode 100644 Tools/cmake/FindPCRE.cmake
+ create mode 100644 Tools/cmake/FindPCRE2.cmake
+ delete mode 100644 Tools/nuget-install.cmd
+
+Index: swig-4.0.2/Doc/Manual/Preface.html
+===================================================================
+--- swig-4.0.2.orig/Doc/Manual/Preface.html
++++ swig-4.0.2/Doc/Manual/Preface.html
+@@ -283,9 +283,9 @@ You must use PCRE
+ needs to be installed on your system to build SWIG, in particular
+-pcre-config must be available. If you have PCRE headers and libraries but not
+-pcre-config itself or, alternatively, wish to override the compiler or linker
+-flags returned by pcre-config, you may set PCRE_LIBS and PCRE_CFLAGS variables
++pcre2-config must be available. If you have PCRE headers and libraries but not
++pcre2-config itself or, alternatively, wish to override the compiler or linker
++flags returned by pcre-config, you may set PCRE2_LIBS and PCRE2_CFLAGS variables
+ to be used instead. And if you don't have PCRE at all, the configure script
+ will provide instructions for obtaining it.
+
+Index: swig-4.0.2/Doc/Manual/Windows.html
+===================================================================
+--- swig-4.0.2.orig/Doc/Manual/Windows.html
++++ swig-4.0.2/Doc/Manual/Windows.html
+@@ -320,7 +320,7 @@ the autotools will fail miserably on tho
+
+
+ The PCRE third party library needs to be built next.
+-Download the latest PCRE source tarball, such as pcre-8.10.tar.bz2, from
++Download the latest PCRE source tarball, such as pcre2-10.39.tar.bz2, from
+ PCRE and place in the /usr/src/swig directory.
+ Build PCRE as a static library using the Tools/pcre-build.sh script as follows:
+
+Index: swig-4.0.2/Source/Swig/misc.c
+===================================================================
+--- swig-4.0.2.orig/Source/Swig/misc.c
++++ swig-4.0.2/Source/Swig/misc.c
+@@ -1312,7 +1312,8 @@ void Swig_offset_string(String *s, int n
+
+
+ #ifdef HAVE_PCRE
+-#include
++#define PCRE2_CODE_UNIT_WIDTH 8
++#include
+
+ static int split_regex_pattern_subst(String *s, String **pattern, String **subst, const char **input)
+ {
+@@ -1375,7 +1376,7 @@ static void copy_with_maybe_case_convers
+ }
+ }
+
+-String *replace_captures(int num_captures, const char *input, String *subst, int captures[], String *pattern, String *s)
++String *replace_captures(int num_captures, const char *input, String *subst, size_t captures[], String *pattern, String *s)
+ {
+ int convertCase = 0, convertNextOnly = 0;
+ String *result = NewStringEmpty();
+@@ -1397,7 +1398,7 @@ String *replace_captures(int num_capture
+ } else if (isdigit((unsigned char)*p)) {
+ int group = *p++ - '0';
+ if (group < num_captures) {
+- int l = captures[group*2], r = captures[group*2 + 1];
++ int l = (int)captures[group*2], r = (int)captures[group*2 + 1];
+ if (l != -1) {
+ copy_with_maybe_case_conversion(result, input + l, r - l, &convertCase, convertNextOnly);
+ }
+@@ -1449,26 +1450,31 @@ String *Swig_string_regex(String *s) {
+ const int pcre_options = 0;
+
+ String *res = 0;
+- pcre *compiled_pat = 0;
+- const char *pcre_error, *input;
+- int pcre_errorpos;
++ pcre2_code *compiled_pat = 0;
++ const char *input;
++ PCRE2_UCHAR pcre_error[256];
++ int pcre_errornum;
++ size_t pcre_errorpos;
+ String *pattern = 0, *subst = 0;
+- int captures[30];
+-
++ size_t *captures = 0;
++ pcre2_match_data *match_data = 0;
+ if (split_regex_pattern_subst(s, &pattern, &subst, &input)) {
+ int rc;
+
+- compiled_pat = pcre_compile(
+- Char(pattern), pcre_options, &pcre_error, &pcre_errorpos, NULL);
++ compiled_pat = pcre2_compile(
++ (PCRE2_SPTR8)Char(pattern), PCRE2_ZERO_TERMINATED, pcre_options, &pcre_errornum, &pcre_errorpos, NULL);
+ if (!compiled_pat) {
++ pcre2_get_error_message (pcre_errornum, pcre_error, sizeof pcre_error);
+ Swig_error("SWIG", Getline(s), "PCRE compilation failed: '%s' in '%s':%i.\n",
+ pcre_error, Char(pattern), pcre_errorpos);
+ SWIG_exit(EXIT_FAILURE);
+ }
+- rc = pcre_exec(compiled_pat, NULL, input, (int)strlen(input), 0, 0, captures, 30);
++ match_data = pcre2_match_data_create_from_pattern (compiled_pat, NULL);
++ rc = pcre2_match(compiled_pat, (PCRE2_SPTR8)input, PCRE2_ZERO_TERMINATED, 0, 0, match_data, NULL);
++ captures = pcre2_get_ovector_pointer (match_data);
+ if (rc >= 0) {
+ res = replace_captures(rc, input, subst, captures, pattern, s);
+- } else if (rc != PCRE_ERROR_NOMATCH) {
++ } else if (rc != PCRE2_ERROR_NOMATCH) {
+ Swig_error("SWIG", Getline(s), "PCRE execution failed: error %d while matching \"%s\" using \"%s\".\n",
+ rc, Char(pattern), input);
+ SWIG_exit(EXIT_FAILURE);
+@@ -1477,12 +1483,19 @@ String *Swig_string_regex(String *s) {
+
+ DohDelete(pattern);
+ DohDelete(subst);
+- pcre_free(compiled_pat);
++ pcre2_code_free(compiled_pat);
++ pcre2_match_data_free(match_data);
+ return res ? res : NewStringEmpty();
+ }
+
+ String *Swig_pcre_version(void) {
+- return NewStringf("PCRE Version: %s", pcre_version());
++ int len = pcre2_config(PCRE2_CONFIG_VERSION, NULL);
++ char *buf = malloc(len);
++ String *result;
++ pcre2_config(PCRE2_CONFIG_VERSION, buf);
++ result = NewStringf("PCRE Version: %s", buf);
++ free(buf);
++ return result;
+ }
+
+ #else
+Index: swig-4.0.2/Source/Swig/naming.c
+===================================================================
+--- swig-4.0.2.orig/Source/Swig/naming.c
++++ swig-4.0.2/Source/Swig/naming.c
+@@ -1092,26 +1092,32 @@ static DOH *get_lattr(Node *n, List *lat
+ }
+
+ #ifdef HAVE_PCRE
+-#include
++#define PCRE2_CODE_UNIT_WIDTH 8
++#include
+
+ static int name_regexmatch_value(Node *n, String *pattern, String *s) {
+- pcre *compiled_pat;
+- const char *err;
+- int errpos;
++ pcre2_code *compiled_pat;
++ PCRE2_UCHAR err[256];
++ int errornum;
++ size_t errpos;
+ int rc;
+
+- compiled_pat = pcre_compile(Char(pattern), 0, &err, &errpos, NULL);
++ compiled_pat = pcre2_compile((PCRE2_SPTR8)Char(pattern), PCRE2_ZERO_TERMINATED, 0, &errornum, &errpos, NULL);
+ if (!compiled_pat) {
++ pcre2_get_error_message (errornum, err, sizeof err);
+ Swig_error("SWIG", Getline(n),
+ "Invalid regex \"%s\": compilation failed at %d: %s\n",
+ Char(pattern), errpos, err);
+ SWIG_exit(EXIT_FAILURE);
+ }
+
+- rc = pcre_exec(compiled_pat, NULL, Char(s), Len(s), 0, 0, NULL, 0);
+- pcre_free(compiled_pat);
++ pcre2_match_data *match_data = 0;
++ match_data = pcre2_match_data_create_from_pattern (compiled_pat, NULL);
++ rc = pcre2_match(compiled_pat, (PCRE2_SPTR8)Char(s), PCRE2_ZERO_TERMINATED, 0, 0, match_data, 0);
++ pcre2_code_free(compiled_pat);
++ pcre2_match_data_free(match_data);
+
+- if (rc == PCRE_ERROR_NOMATCH)
++ if (rc == PCRE2_ERROR_NOMATCH)
+ return 0;
+
+ if (rc < 0 ) {
+Index: swig-4.0.2/Tools/cmake/FindPCRE2.cmake
+===================================================================
+--- /dev/null
++++ swig-4.0.2/Tools/cmake/FindPCRE2.cmake
+@@ -0,0 +1,21 @@
++# - Find PCRE2
++# Perl Compatible Regular Expressions
++# https://www.pcre.org/
++
++# The following variables are set:
++# PCRE2_FOUND - System has the PCRE library
++# PCRE2_LIBRARIES - The PCRE library file
++# PCRE2_INCLUDE_DIRS - The folder with the PCRE headers
++
++find_library(PCRE2_LIBRARY NAMES pcre2 pcre2-8)
++find_path(PCRE2_INCLUDE_DIR pcre2.h)
++
++set (PCRE2_LIBRARIES ${PCRE2_LIBRARY})
++set (PCRE2_INCLUDE_DIRS ${PCRE2_INCLUDE_DIR})
++
++include(FindPackageHandleStandardArgs)
++find_package_handle_standard_args(PCRE2 DEFAULT_MSG PCRE2_LIBRARIES PCRE2_INCLUDE_DIRS)
++
++mark_as_advanced (
++ PCRE2_LIBRARY
++ PCRE2_INCLUDE_DIR)
+Index: swig-4.0.2/Tools/mkwindows.sh
+===================================================================
+--- swig-4.0.2.orig/Tools/mkwindows.sh
++++ swig-4.0.2/Tools/mkwindows.sh
+@@ -84,7 +84,7 @@ export CXXFLAGS="$compileflags"
+ swigbasename=swig-$version
+ swigwinbasename=swigwin-$version
+ tarball=$swigbasename.tar.gz
+-pcre_tarball=`ls pcre-*.tar.*`
++pcre_tarball=`ls pcre2-*.tar.*`
+
+ if ! test -f "$pcre_tarball"; then
+ echo "Could not find PCRE tarball. Please download a PCRE source tarball from http://www.pcre.org"
+Index: swig-4.0.2/Tools/nuget-install.cmd
+===================================================================
+--- swig-4.0.2.orig/Tools/nuget-install.cmd
++++ /dev/null
+@@ -1,28 +0,0 @@
+-rem Workaround 'nuget install' not being reliable by retrying a few times
+-@echo off
+-rem initiate the retry number
+-set errorCode=1
+-set retryNumber=0
+-set maxRetries=5
+-
+-:RESTORE
+-nuget install %*
+-
+-rem problem?
+-IF ERRORLEVEL %errorCode% GOTO :RETRY
+-
+-rem everything is fine!
+-@echo Installed nuget, retries: %reTryNumber%
+-GOTO :EXIT
+-
+-:RETRY
+-@echo Oops, nuget restore exited with code %errorCode% - let us try again!
+-set /a retryNumber=%retryNumber%+1
+-IF %reTryNumber% LSS %maxRetries% (GOTO :RESTORE)
+-IF %retryNumber% EQU %maxRetries% (GOTO :ERR)
+-
+-:ERR
+-@echo Sorry, we tried restoring nuget packages for %maxRetries% times and all attempts were unsuccessful!
+-EXIT /B 1
+-
+-:EXIT
+Index: swig-4.0.2/Tools/pcre-build.sh
+===================================================================
+--- swig-4.0.2.orig/Tools/pcre-build.sh
++++ swig-4.0.2/Tools/pcre-build.sh
+@@ -37,8 +37,8 @@ fi
+
+ echo "Looking for PCRE tarball..."
+ rm -rf pcre
+-pcre_tarball=`ls pcre-*.tar*`
+-test -n "$pcre_tarball" || bail "Could not find tarball matching pattern: pcre-*.tar*"
++pcre_tarball=`ls pcre2-*.tar*`
++test -n "$pcre_tarball" || bail "Could not find tarball matching pattern: pcre2-*.tar*"
+ test -f "$pcre_tarball" || bail "Could not find a single PCRE tarball. Found: $pcre_tarball"
+
+ echo "Extracting tarball: $pcre_tarball"
+Index: swig-4.0.2/configure.ac
+===================================================================
+--- swig-4.0.2.orig/configure.ac
++++ swig-4.0.2/configure.ac
+@@ -54,24 +54,24 @@ dnl To make configuring easier, check fo
+ if test x"${with_pcre}" = xyes ; then
+ AC_MSG_CHECKING([whether to use local PCRE])
+ local_pcre_config=no
+- if test -z $PCRE_CONFIG; then
+- if test -f `pwd`/pcre/pcre-swig-install/bin/pcre-config; then
+- PCRE_CONFIG=`pwd`/pcre/pcre-swig-install/bin/pcre-config
+- local_pcre_config=$PCRE_CONFIG
++ if test -z $PCRE2_CONFIG; then
++ if test -f `pwd`/pcre/pcre-swig-install/bin/pcre2-config; then
++ PCRE2_CONFIG=`pwd`/pcre/pcre-swig-install/bin/pcre2-config
++ local_pcre_config=$PCRE2_CONFIG
+ fi
+ fi
+ AC_MSG_RESULT([$local_pcre_config])
+ fi
+ AS_IF([test "x$with_pcre" != xno],
+- [AX_PATH_GENERIC([pcre],
++ [AX_PATH_GENERIC([pcre2],
+ [], dnl Minimal version of PCRE we need -- accept any
+ [], dnl custom sed script for version parsing is not needed
+ [AC_DEFINE([HAVE_PCRE], [1], [Define if you have PCRE library])
+- LIBS="$LIBS $PCRE_LIBS"
+- CPPFLAGS="$CPPFLAGS $PCRE_CFLAGS"
++ LIBS="$LIBS $PCRE2_LIBS"
++ CPPFLAGS="$CPPFLAGS $PCRE2_CFLAGS"
+ ],
+ [AC_MSG_FAILURE([
+- Cannot find pcre-config script from PCRE (Perl Compatible Regular Expressions)
++ Cannot find pcre2-config script from PCRE (Perl Compatible Regular Expressions)
+ library package. This dependency is needed for configure to complete,
+ Either:
+ - Install the PCRE developer package on your system (preferred approach).
+@@ -82,7 +82,8 @@ AS_IF([test "x$with_pcre" != xno],
+ (quite easy and does not require privileges to install PCRE on your system)
+ - Use configure --without-pcre to disable regular expressions support in SWIG
+ (not recommended).])
+- ])
++ ],
++ [],[],[--libs8])
+ ])
+
+
diff --git a/swig.changes b/swig.changes
index 8ea47c6..9c50969 100644
--- a/swig.changes
+++ b/swig.changes
@@ -1,3 +1,9 @@
+-------------------------------------------------------------------
+Thu Sep 8 13:23:05 UTC 2022 - Stephan Kulow
+
+- Cherrypick 15515f390c5e3316a7faf0cf85d661a297d45a50.patch from
+ upstream to replace obsolete pcre1 with pcre2
+
-------------------------------------------------------------------
Sun May 8 18:12:21 UTC 2022 - Ben Greiner
diff --git a/swig.spec b/swig.spec
index d37fb05..1ea9f63 100644
--- a/swig.spec
+++ b/swig.spec
@@ -44,6 +44,8 @@ Patch0: swig-octave-6.patch
Patch1: fix-gcc12-error.patch
# PATCH-FIX-UPSTREAM swig-python310.patch -- gh#swig/swig#2064, Fix swig test suite with python310
Patch2: swig-python310.patch
+# PATCH-FIX-UPSTREAM 15515f390c5e3316a7faf0cf85d661a297d45a50.patch - gh#swig/swig#2138, remove obsolete pcre1
+Patch3: https://github.com/swig/swig/commit/15515f390c5e3316a7faf0cf85d661a297d45a50.patch
Patch308: swig308-isfinite.diff
BuildRequires: autoconf
@@ -52,7 +54,7 @@ BuildRequires: bison
BuildRequires: fdupes
BuildRequires: gcc-c++
BuildRequires: libtool
-BuildRequires: pcre-devel
+BuildRequires: pcre2-devel
BuildRequires: perl
BuildRequires: pkgconfig
%if 0%{?centos_version} >= 800
From 7b9c7bae899d96f0bf1d0db0701df49f4dded9459572c115b364d491d8193159 Mon Sep 17 00:00:00 2001
From: Dirk Mueller
Date: Mon, 26 Sep 2022 07:23:02 +0000
Subject: [PATCH 2/2] OBS-URL:
https://build.opensuse.org/package/show/devel:tools:building/swig?expand=0&rev=136
---
swig.spec | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/swig.spec b/swig.spec
index 1ea9f63..2a2f18f 100644
--- a/swig.spec
+++ b/swig.spec
@@ -45,7 +45,8 @@ Patch1: fix-gcc12-error.patch
# PATCH-FIX-UPSTREAM swig-python310.patch -- gh#swig/swig#2064, Fix swig test suite with python310
Patch2: swig-python310.patch
# PATCH-FIX-UPSTREAM 15515f390c5e3316a7faf0cf85d661a297d45a50.patch - gh#swig/swig#2138, remove obsolete pcre1
-Patch3: https://github.com/swig/swig/commit/15515f390c5e3316a7faf0cf85d661a297d45a50.patch
+# from https://github.com/swig/swig/commit/15515f390c5e3316a7faf0cf85d661a297d45a50.patch
+Patch3: 15515f390c5e3316a7faf0cf85d661a297d45a50.patch
Patch308: swig308-isfinite.diff
BuildRequires: autoconf