From bbe2a1944c7e344a566fe024f2321c0ffedcb3af Mon Sep 17 00:00:00 2001 From: Alexey Pavlov Date: Tue, 11 Dec 2018 07:49:09 +0300 Subject: [PATCH] gc: Downgrade to 7.6.8 to solve hangs of guile and autogen --- gc/PKGBUILD | 15 +++++--- gc/gc-7.6-msys2.patch | 43 +++++++++++++++++++++ gc/gc_cpp_delete.patch | 85 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 6 deletions(-) create mode 100644 gc/gc-7.6-msys2.patch create mode 100644 gc/gc_cpp_delete.patch diff --git a/gc/PKGBUILD b/gc/PKGBUILD index 542e883f..d96e3e4d 100644 --- a/gc/PKGBUILD +++ b/gc/PKGBUILD @@ -2,23 +2,26 @@ pkgbase=gc pkgname=('libgc' 'libgc-devel') -pkgver=8.0.0 -pkgrel=2 +pkgver=7.6.8 +pkgrel=1 pkgdesc="A garbage collector for C and C++" arch=('i686' 'x86_64') gropus=('libraries') url="http://www.hboehm.info/gc/" license=('GPL') source=("https://github.com/ivmai/bdwgc/releases/download/v${pkgver}/${pkgbase}-${pkgver}.tar.gz" - gc-8.0-msys2.patch) + gc-7.6-msys2.patch + gc_cpp_delete.patch) makedepends=(libatomic_ops-devel) options=('!libtool') -sha256sums=('8f23f9a20883d00af2bff122249807e645bdf386de0de8cbd6cce3e0c6968f04' - '28d1a532badc3f83ed804727f99b7189106a1be92f98ac452e7a219ba2f115af') +sha256sums=('040ac5cdbf1bebc7c8cd4928996bbae0c54497c151ea5639838fa0128102e258' + 'e926468756764b66c6c896d99b244bc27c310d4616b03c0c06dc613a23b3ac39' + '26fb4c2cf0d44c26419ac51a5c95707febfc104ca932dafac3470e2b05241498') prepare() { cd "${srcdir}/${pkgbase}-${pkgver}" - patch -p1 -i ${srcdir}/gc-8.0-msys2.patch + patch -p1 -i ${srcdir}/gc-7.6-msys2.patch + patch -p1 -i ${srcdir}/gc_cpp_delete.patch autoreconf -fiv } diff --git a/gc/gc-7.6-msys2.patch b/gc/gc-7.6-msys2.patch new file mode 100644 index 00000000..4fd5bd86 --- /dev/null +++ b/gc/gc-7.6-msys2.patch @@ -0,0 +1,43 @@ +diff -durN gc-7.6.0.orig/config.guess gc-7.6.0/config.guess +--- gc-7.6.0.orig/config.guess 2016-08-03 04:23:34.000000000 +0800 ++++ gc-7.6.0/config.guess 2017-05-13 19:58:35.656250000 +0800 +@@ -867,6 +867,9 @@ + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; ++ amd64:MSYS*:*:* | x86_64:MSYS*:*:*) ++ echo x86_64-unknown-msys ++ exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; +diff -durN gc-7.6.0.orig/configure.ac gc-7.6.0/configure.ac +--- gc-7.6.0.orig/configure.ac 2016-08-03 04:21:36.000000000 +0800 ++++ gc-7.6.0/configure.ac 2017-05-13 20:15:39.718750000 +0800 +@@ -263,7 +263,7 @@ + *-*-irix*) + AC_DEFINE(GC_IRIX_THREADS) + ;; +- *-*-cygwin*) ++ *-*-cygwin* | *-*-msys*) + AC_DEFINE(GC_WIN32_THREADS) + if test "${enable_parallel_mark}" != no; then + AC_DEFINE(PARALLEL_MARK) +@@ -458,7 +458,7 @@ + # We never want libdl on darwin. It is a fake libdl that just ends up making + # dyld calls anyway. The same applies to Cygwin. + *-*-darwin*) ;; +- *-*-cygwin*) ;; ++ *-*-cygwin* | *-*-msys*) ;; + *) + AC_CHECK_LIB(dl, dlopen, THREADDLLIBS="$THREADDLLIBS -ldl") + ;; +@@ -521,7 +521,7 @@ + if test "$GCC" = yes; then + if test "${enable_cplusplus}" = yes; then + case "$host" in +- *-*-cygwin* | *-*-mingw*) ++ *-*-cygwin* | *-*-msys* | *-*-mingw*) + AC_MSG_CHECKING([whether libsupc++ required]) + SUPC="`$CXX -print-file-name=libsupc++.a 2>/dev/null`" + if test -n "$SUPC" -a "$SUPC" != "libsupc++.a"; then diff --git a/gc/gc_cpp_delete.patch b/gc/gc_cpp_delete.patch new file mode 100644 index 00000000..7f81b454 --- /dev/null +++ b/gc/gc_cpp_delete.patch @@ -0,0 +1,85 @@ +From 4a67c8d07b6fb729cd2f1a1b87ffe8aaa1b1c936 Mon Sep 17 00:00:00 2001 +From: Ivan Maidanski +Date: Wed, 15 Aug 2018 10:23:33 +0300 +Subject: [PATCH] Fix delete operator redirection if gc_cpp is built as .dll + (Cygwin, MinGW) (back-port of commit 5e51e8d from 'master') + +Issue #229 (bdwgc). + +* include/gc_cpp.h [(__CYGWIN32__ || __CYGWIN__ || __MINGW32__) +&& !GC_BUILD && !GC_NOT_DLL && GC_OPERATOR_NEW_ARRAY] (operator new[], +operator delete[]): Define inline function. +* include/gc_cpp.h [(__CYGWIN32__ || __CYGWIN__ || __MINGW32__) +&& !GC_BUILD && !GC_NOT_DLL] (operator new, operator delete): Likewise. +* include/gc_cpp.h [(_MSC_VER || __DMC__ || (__CYGWIN32__ || __CYGWIN__ +|| __MINGW32__) && !GC_BUILD && !GC_NOT_DLL) && __cplusplus>201103L] +(operator delete(void*,size_t)): Likewise. +* include/gc_cpp.h [(_MSC_VER || __DMC__ || (__CYGWIN32__ || __CYGWIN__ +|| __MINGW32__) && !GC_BUILD && !GC_NOT_DLL) && __cplusplus>201103L +&& GC_OPERATOR_NEW_ARRAY] (operator delete[](void*,size_t)): Likewise. +* include/gc_cpp.h [(_MSC_VER || __DMC__) && GC_OPERATOR_NEW_ARRAY] +(operator delete[](void*)): Add GC_DECL_DELETE_THROW. +* include/gc_cpp.h [_MSC_VER || __DMC__] (operator delete(void*)): +Likewise. +* include/gc_cpp.h (operator new(size_t, int, const char*, int), +operator new[](size_t, int, const char*, int)): Do not define +for __DMC__. +--- + include/gc_cpp.h | 26 +++++++++++++++++++++++--- + 1 file changed, 23 insertions(+), 3 deletions(-) + +diff --git a/include/gc_cpp.h b/include/gc_cpp.h +index 92ec2317..7afc7838 100644 +--- a/include/gc_cpp.h ++++ b/include/gc_cpp.h +@@ -304,7 +304,9 @@ inline void* operator new(size_t size, GC_NS_QUALIFY(GCPlacement) gcp, + GC_NS_QUALIFY(GCCleanUpFunc), void*); + #endif + +-#if defined(_MSC_VER) || defined(__DMC__) ++#if defined(_MSC_VER) || defined(__DMC__) \ ++ || ((defined(__CYGWIN32__) || defined(__CYGWIN__) \ ++ || defined(__MINGW32__)) && !defined(GC_BUILD) && !defined(GC_NOT_DLL)) + // The following ensures that the system default operator new[] does not + // get undefined, which is what seems to happen on VC++ 6 for some reason + // if we define a multi-argument operator new[]. +@@ -321,7 +323,7 @@ inline void* operator new(size_t size, GC_NS_QUALIFY(GCPlacement) gcp, + return obj; + } + +- inline void operator delete[](void* obj) ++ inline void operator delete[](void* obj) GC_DECL_DELETE_THROW + { + GC_FREE(obj); + } +@@ -334,11 +336,29 @@ inline void* operator new(size_t size, GC_NS_QUALIFY(GCPlacement) gcp, + return obj; + } + +- inline void operator delete(void* obj) ++ inline void operator delete(void* obj) GC_DECL_DELETE_THROW + { + GC_FREE(obj); + } + ++# if __cplusplus > 201103L // C++14 ++ inline void operator delete(void* obj, size_t size) GC_DECL_DELETE_THROW { ++ (void)size; // size is ignored ++ GC_FREE(obj); ++ } ++ ++# if defined(GC_OPERATOR_NEW_ARRAY) ++ inline void operator delete[](void* obj, size_t size) ++ GC_DECL_DELETE_THROW { ++ (void)size; ++ GC_FREE(obj); ++ } ++# endif ++# endif // C++14 ++#endif ++ ++#ifdef _MSC_VER ++ + // This new operator is used by VC++ in case of Debug builds: + # ifdef GC_DEBUG + inline void* operator new(size_t size, int /* nBlockUse */,