summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/patches/swig-guile-gc.patch76
-rw-r--r--gnu/packages/swig.scm10
3 files changed, 2 insertions, 85 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 0c0f5651a9..122e23f68a 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1370,7 +1370,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/superlu-dist-fix-mpi-deprecations.patch	\
   %D%/packages/patches/superlu-dist-scotchmetis.patch		\
   %D%/packages/patches/supertux-unbundle-squirrel.patch		\
-  %D%/packages/patches/swig-guile-gc.patch			\
   %D%/packages/patches/swish-e-search.patch			\
   %D%/packages/patches/swish-e-format-security.patch		\
   %D%/packages/patches/symmetrica-bruch.patch			\
diff --git a/gnu/packages/patches/swig-guile-gc.patch b/gnu/packages/patches/swig-guile-gc.patch
deleted file mode 100644
index 0e745a6247..0000000000
--- a/gnu/packages/patches/swig-guile-gc.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-Fix garbage collection for Guile versions >= 2.0.12.  This issue showed
-up when running the tests on i686-linux.
-
-Taken from this upstream commit:
-https://github.com/swig/swig/commit/38f2ab0c30e369e63bbd0a6152108488d0de68e1
-
-diff --git a/Lib/guile/guile_scm_run.swg b/Lib/guile/guile_scm_run.swg
-index 274f197158..0d04cb7c62 100644
---- a/Lib/guile/guile_scm_run.swg
-+++ b/Lib/guile/guile_scm_run.swg
-@@ -99,6 +99,7 @@ SWIG_Guile_scm2newstr(SCM str, size_t *len) {
- static int swig_initialized = 0;
- static scm_t_bits swig_tag = 0;
- static scm_t_bits swig_collectable_tag = 0;
-+static scm_t_bits swig_finalized_tag = 0;
- static scm_t_bits swig_destroyed_tag = 0;
- static scm_t_bits swig_member_function_tag = 0;
- static SCM swig_make_func = SCM_EOL;
-@@ -163,7 +164,19 @@ SWIG_Guile_PointerType(SCM object)
-   }
-   else scm_wrong_type_arg("SWIG-Guile-PointerType", 1, object);
- }
--  
-+
-+SWIGINTERN int
-+SWIG_Guile_IsValidSmob(SCM smob)
-+{
-+  /* We do not accept smobs representing destroyed pointers, but we have to
-+     allow finalized smobs because Guile >= 2.0.12 sets all smob instances
-+     to the 'finalized' type before calling their 'free' function. This change
-+     was introduced to Guile in commit 8dff3af087c6eaa83ae0d72aa8b22aef5c65d65d */
-+  return SCM_SMOB_PREDICATE(swig_tag, smob)
-+    || SCM_SMOB_PREDICATE(swig_collectable_tag, smob)
-+    || SCM_SMOB_PREDICATE(swig_finalized_tag, smob);
-+}
-+
- SWIGINTERN int
- SWIG_Guile_ConvertPtr(SCM s, void **result, swig_type_info *type, int flags)
- {
-@@ -179,8 +192,7 @@ SWIG_Guile_ConvertPtr(SCM s, void **result, swig_type_info *type, int flags)
-     *result = SCM_POINTER_VALUE(s);
-     return SWIG_OK;
- #endif /* if SCM_MAJOR_VERSION >= 2 */
--  } else if (SCM_SMOB_PREDICATE(swig_tag, smob) || SCM_SMOB_PREDICATE(swig_collectable_tag, smob)) {
--    /* we do not accept smobs representing destroyed pointers */
-+  } else if (SWIG_Guile_IsValidSmob(smob)) {
-     from = (swig_type_info *) SCM_CELL_WORD_2(smob);
-     if (!from) return SWIG_ERROR;
-     if (type) {
-@@ -239,7 +251,7 @@ SWIG_Guile_MarkPointerNoncollectable(SCM s)
- {
-   SCM smob = SWIG_Guile_GetSmob(s);
-   if (!SCM_NULLP(smob)) {
--    if (SCM_SMOB_PREDICATE(swig_tag, smob) || SCM_SMOB_PREDICATE(swig_collectable_tag, smob)) {
-+    if (SWIG_Guile_IsValidSmob(smob)) {
-       SCM_SET_CELL_TYPE(smob, swig_tag);
-     }
-     else scm_wrong_type_arg(NULL, 0, s);
-@@ -252,7 +264,7 @@ SWIG_Guile_MarkPointerDestroyed(SCM s)
- {
-   SCM smob = SWIG_Guile_GetSmob(s);
-   if (!SCM_NULLP(smob)) {
--    if (SCM_SMOB_PREDICATE(swig_tag, smob) || SCM_SMOB_PREDICATE(swig_collectable_tag, smob)) {
-+    if (SWIG_Guile_IsValidSmob(smob)) {
-       SCM_SET_CELL_TYPE(smob, swig_destroyed_tag);
-     }
-     else scm_wrong_type_arg(NULL, 0, s);
-@@ -419,6 +431,8 @@ SWIG_Guile_Init ()
-     scm_set_smob_print(swig_collectable_tag, print_collectable_swig);
-     scm_set_smob_equalp(swig_collectable_tag, equalp_swig);
-     scm_set_smob_free(swig_collectable_tag, free_swig);
-+    /* For Guile >= 2.0.12. See libguile/smob.c:clear_smobnum */
-+    swig_finalized_tag = swig_collectable_tag & ~0xff00;
-   }
-   if (ensure_smob_tag(swig_module, &swig_destroyed_tag,
- 		      "destroyed-swig-pointer", "destroyed-swig-pointer-tag")) {
diff --git a/gnu/packages/swig.scm b/gnu/packages/swig.scm
index 655c1a19ab..df49428964 100644
--- a/gnu/packages/swig.scm
+++ b/gnu/packages/swig.scm
@@ -34,25 +34,19 @@
 (define-public swig
   (package
     (name "swig")
-    (version "3.0.12")
+    (version "4.0.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/" name "/" name "/"
                                  name "-" version "/"
                                  name "-" version ".tar.gz"))
-             (patches (search-patches "swig-guile-gc.patch"))
              (sha256
               (base32
-               "0kf99ygrjs5616gsqhz1l7bib3a12izmxi7g48bwblbymr3z9ybw"))))
+               "1ac7g0gd8ndwv3ybqn5vjgqxa7090bby4db164a7mn9ssp8b803s"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'set-env
-           ;; Required since Perl 5.26.0's removal of the current
-           ;; working directory from @INC.
-           ;; TODO Try removing this for later versions of SWIG.
-           (lambda _ (setenv "PERL_USE_UNSAFE_INC" "1") #t))
          (add-before 'configure 'workaround-gcc-bug
            (lambda _
              ;; XXX: Don't add the -isystem flag, or GCCs #include_next