diff --git a/dev-scheme/guile/Manifest b/dev-scheme/guile/Manifest new file mode 100644 index 0000000..b202d5d --- /dev/null +++ b/dev-scheme/guile/Manifest @@ -0,0 +1,8 @@ +AUX 50guile-gentoo.el 38 BLAKE2B e96c6cf48d1522d89450e11d339c76210c672377208b56951791b83c6ef22b2c872d313084e199dd5d7b533a99106a87dbc7f15b5ee6126f71bf5f2e84165ffa SHA512 5c00bcabe2d7cc03013dc7a54b2c653940c08098ca5646d7c73624cb1ca04376ae9dcf88a7166b1925c69f0c5d192d90f6bd790fdef8ed8c3b0f9d163c987da5 +AUX guile-2-snarf.patch 1274 BLAKE2B e9efdd1e14560579131ecff748add4f97de730678e6f766681be72f95bf99ab36edd8bc7279701084d13f3fa762968af814760bcf9b8778c73c956c282bb3c93 SHA512 49d015b08d0bcf5d27aa43d4a595b2ccb4366dffe0f5d159162c8c7747fb9fdbe84056a737f3c81a6e39281d91109bfa4aa98c85dd0e757c17ab668a1dd46f24 +AUX guile-2.0.14-configure-clang16.patch 2083 BLAKE2B db51de35520459eef3b66102a77afbcc492f2762e5629c5c63239dff9169f51104dbbadbedccfbdb3c83b051bd80ec82807f7a4e0ba1d43cc4c292b6a5d3ecc6 SHA512 40b1f6c4f2a04da26ceb0ffb6d016476b673d142ce465895c4fc241b24cb4dc0f3b0e759d51817f9cad27cea7c9cb56dc38507312f28af27daed6f362c70bb4c +AUX guile-2.0.14-darwin.patch 1026 BLAKE2B 9193732cfb74931f7bf8e9b55c5c9dd2621ef6271c8d18190e0ed94d90decde85272f271bbbe7d3c4dd0dd509e51fae3f7f0af42872a0b9ebb87396c9e69a9d2 SHA512 151d19f171656105d87336f81dd8c34273d07a3e88aa03ac5ca8d640c79ab317a90ef06097858bf627e4666fba747faea45237c73e7bc6462d19d8f0d1904d53 +AUX guile-2.0.14-ia64-fix-crash-thread-context-switch.patch 2426 BLAKE2B 5b2073a3780794e9466d8e5434ab98a91a821408ab792abbfaf61d09c95e113b99746b0da850115b4534bda00b1313cef5bb9b08c90c8bf9a04c81b1eb78faa3 SHA512 082f98ac4ee2f40dd3762006bf5c43022088b2286c9a8d63ae9e234d3c8527f3afcfba8076e0c8578e7fbed257294db6ce1a4513661b89f821579dc121d449ae +DIST guile-2.0.14.tar.xz 4615196 BLAKE2B 97e26635c941309b713b632371bc9df7361d3d7d524af3d2c67275f3151dc9c51bd774155bd3c1caf6950d4e839afe8b019f553b5a7223c447bb19c8a97d608c SHA512 2cad60ab8aa77be44bc4988eaa3a2f0652637f315322abd6011c18f1800c3a461eefa15a14fd54d0d48031b093bc56dfc6cd15dc0a8260b97b40521bff793db6 +EBUILD guile-2.0.14-r5.ebuild 2403 BLAKE2B 2c6cd345ea0f7402724ddcd4b74df9ea26d3ccde3e01eb9d2f56ae314fdf2bd7fff9551aab9b00cd9ec2b19c99356d556476782c3c1e60f0fd448e88d93737fe SHA512 b4e3337089b4096480733fab0e877ff5a77a8d1c13bcf20c3321d1925b2701e18cc07d0fdd45407361b0cc3c16a4e7b5d27d220577c36330a329d77bae0a2921 +MISC metadata.xml 1137 BLAKE2B a7804962f0827541dd7e1d10d962700f32734d5dd4f04688c1f07838109ecf68f68d3601f86786a893c6c68c1f8d5144e254d4c82fcad53f6edc12bba9f6cc51 SHA512 5bb0ed15c972f967899c24e290550fb10bb830222dce3890413d9978870d0f00942ebfec738372418958ee99048017ebd25e8fc4c6d175027eef1448bc12384a diff --git a/dev-scheme/guile/files/50guile-gentoo.el b/dev-scheme/guile/files/50guile-gentoo.el new file mode 100644 index 0000000..431f7e9 --- /dev/null +++ b/dev-scheme/guile/files/50guile-gentoo.el @@ -0,0 +1 @@ +(add-to-list 'load-path "@SITELISP@") diff --git a/dev-scheme/guile/files/guile-2-snarf.patch b/dev-scheme/guile/files/guile-2-snarf.patch new file mode 100644 index 0000000..c6ab5cd --- /dev/null +++ b/dev-scheme/guile/files/guile-2-snarf.patch @@ -0,0 +1,47 @@ +From f775ab3654357fcaad294b95efb0b1c16de1eda8 Mon Sep 17 00:00:00 2001 +From: Sergei Trofimovich +Date: Sun, 19 Feb 2017 22:58:40 +0000 +Subject: guile-snarf: skip -g* arguments to avoid build failure + +* libguile/guile-snarf.in: skip -g* arguments to avoid failure on + -ggdb3. + +Bug: https://bugs.gentoo.org/608190 +Bug: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=25803 +Signed-off-by: Sergei Trofimovich +--- + libguile/guile-snarf.in | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/libguile/guile-snarf.in b/libguile/guile-snarf.in +index 47bbc04..22dc1d3 100644 +--- a/libguile/guile-snarf.in ++++ b/libguile/guile-snarf.in +@@ -95,10 +95,22 @@ if [ x"$CPP" = x ] ; then cpp="@CPP@" ; else cpp="$CPP" ; fi + + trap "rm -rf $tempdir" 0 1 2 15 + ++# filter out -g* flags from commandline ++# as some flags like -ggdb3 cause CPP ++ ++cpp_args="" ++for arg in "$@" ++do ++ case "$arg" in ++ -g*) ;; # skip debug flag ++ *) cpp_args="$cpp_args $arg" ;; ++ esac ++done ++ + if [ ! "$outfile" = "-" ] ; then +- modern_snarf "$@" > $outfile ++ modern_snarf $cpp_args > $outfile + else +- modern_snarf "$@" ++ modern_snarf $cpp_args + fi + + # zonk outfile if errors occurred +-- +cgit v1.0-41-gc330 + diff --git a/dev-scheme/guile/files/guile-2.0.14-configure-clang16.patch b/dev-scheme/guile/files/guile-2.0.14-configure-clang16.patch new file mode 100644 index 0000000..361cc01 --- /dev/null +++ b/dev-scheme/guile/files/guile-2.0.14-configure-clang16.patch @@ -0,0 +1,71 @@ +https://src.fedoraproject.org/rpms/guile/c/7fcab121be7d2bc8e3e48d0da476127b86cec90c?branch=rawhide + +These issues have already been fixed upstream via gnulib imports: + +commit 7e641595cd9b45ce7339e21c20a8ab81af9278f6 +Author: Andy Wingo +Date: Wed Feb 15 21:41:24 2017 +0100 + + Update Gnulib to v0.1-1157-gb03f418. + +commit a91b95cca2d397c84f8b9bbd602d40209a7092ce +Author: Andy Wingo +Date: Wed Jan 20 21:52:54 2021 +0100 + + Update Gnulib to v0.1-4379-g2ef5a9b4b + + Also bump required autoconf version to 2.64, as required by Gnulib. + +--- a/m4/link.m4 ++++ b/m4/link.m4 +@@ -22,6 +22,7 @@ AC_DEFUN([gl_FUNC_LINK], + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include ++ #include + ]], + [[int result = 0; + if (!link ("conftest.a", "conftest.b/")) +--- a/m4/round.m4 ++++ b/m4/round.m4 +@@ -57,7 +57,7 @@ int main() + * (double) (1U << ((DBL_MANT_DIG + 3) / 5)) + * (double) (1U << ((DBL_MANT_DIG + 4) / 5)); + volatile double x = 0.5 - 0.5 / TWO_MANT_DIG; +- exit (x < 0.5 && round (x) != 0.0); ++ return x < 0.5 && round (x) != 0.0; + }]])], [gl_cv_func_round_works=yes], [gl_cv_func_round_works=no], + [case "$host_os" in + netbsd* | aix*) gl_cv_func_round_works="guessing no";; + + +Avoid implicit ints in the guile_cv_localtime_cache check. It cause +the check to always fail with strict(er) C99 compilers that do not +support implicit int. + +Submitted upstream: + + + + +--- a/configure.ac ++++ b/configure.ac +@@ -1086,7 +1086,7 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include + # include + #endif + extern char **environ; +-unset_TZ () ++int unset_TZ () + { + char **from, **to; + for (to = from = environ; (*to = *from); from++) +@@ -1095,7 +1095,7 @@ unset_TZ () + } + char TZ_GMT0[] = "TZ=GMT0"; + char TZ_PST8[] = "TZ=PST8"; +-main() ++int main() + { + time_t now = time ((time_t *) 0); + int hour_GMT0, hour_unset; + diff --git a/dev-scheme/guile/files/guile-2.0.14-darwin.patch b/dev-scheme/guile/files/guile-2.0.14-darwin.patch new file mode 100644 index 0000000..17741ae --- /dev/null +++ b/dev-scheme/guile/files/guile-2.0.14-darwin.patch @@ -0,0 +1,38 @@ +fix compilation on Darwin + +https://debbugs.gnu.org/cgi/bugreport.cgi?bug=24862#23 +https://bugs.gentoo.org/show_bug.cgi?id=612338 + +--- guile-2.0.14/libguile/filesys.c ++++ guile-2.0.14/libguile/filesys.c +@@ -1486,6 +1486,9 @@ + mode_bits = scm_i_mode_bits (mode); + } + ++#ifdef __APPLE__ ++ open_flags &= O_APPEND|O_SHLOCK|O_EXLOCK|O_CLOEXEC; ++#endif + SCM_SYSCALL (rv = mkostemp (c_tmpl, open_flags)); + if (rv == -1) + SCM_SYSERROR; +--- guile-2.0.14/libguile/stime.c ++++ guile-2.0.14/libguile/stime.c +@@ -830,6 +830,10 @@ + + #ifdef HAVE_POSIX_CPUTIME + { ++#ifdef __APPLE__ ++ if (clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &posix_run_time_base) == 0) ++ get_internal_run_time = get_internal_run_time_posix_timer; ++#else + clockid_t dummy; + + /* Only use the _POSIX_CPUTIME clock if it's going to work across +@@ -839,6 +843,7 @@ + get_internal_run_time = get_internal_run_time_posix_timer; + else + errno = 0; ++#endif + } + #endif /* HAVE_POSIX_CPUTIME */ + #endif /* HAVE_CLOCKTIME */ diff --git a/dev-scheme/guile/files/guile-2.0.14-ia64-fix-crash-thread-context-switch.patch b/dev-scheme/guile/files/guile-2.0.14-ia64-fix-crash-thread-context-switch.patch new file mode 100644 index 0000000..c2f136d --- /dev/null +++ b/dev-scheme/guile/files/guile-2.0.14-ia64-fix-crash-thread-context-switch.patch @@ -0,0 +1,63 @@ +From f92888853439a8ded221f3423865c78de2a96a14 Mon Sep 17 00:00:00 2001 +From: Sergei Trofimovich +Date: Sun, 5 Nov 2017 09:30:45 +0000 +Subject: ia64: Fix crash in thread context switch. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes and . + +Backtrace looks like that: + + Program terminated with signal SIGSEGV, Segmentation fault. + #0 0x200000000014a5c0 in scm_ia64_longjmp (JB=0x6000000000817020, VAL=1) at continuations.c:372 + 372 t->pending_rbs_continuation->backing_store, + [Current thread is 1 (Thread 0x2000000000049340 (LWP 8190))] + (gdb) bt + #0 0x200000000014a5c0 in scm_ia64_longjmp (JB=0x6000000000817020, VAL=1) at continuations.c:372 + #1 0x2000000000148e00 in scm_c_abort (vm=0x60000000000edea0, tag=0x6000000000795ba0, n=0, argv=0x60000fffff7f0ce0, cookie=-1) at control.c:239 + #2 0x2000000000149070 in scm_at_abort (tag=0x6000000000795ba0, args=0x304) at control.c:258 + (gdb) print t + $2 = (scm_i_thread *) 0x6000000000068000 + (gdb) print t->pending_rbs_continuation + $3 = (scm_t_contregs *) 0xffeb + +The problem here is the value of 't->pending_rbs_continuation' pointer. +It's supposed to poin to a register stack pointer or be NULL if not yet +backed up. + +The problem is it is never initialized to NULL at creation time and +contained garbage on stack. Sometimes people are lucky and have zeros +on stack and guile works. But sometimes there is something and guile +crashes. + +The fix is trivial: initialize 'pending_rbs_continuation = NULL' +at thread registration time (the same way other threads are registered). + +Reported-by: Matt Turner + +* libguile/threads.c (guilify_self_1): Initialize pending_rbs_continuation +to avoid crash on ia64. + +Signed-off-by: Sergei Trofimovich +Signed-off-by: Ludovic Courtès +--- + libguile/threads.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libguile/threads.c b/libguile/threads.c +index 9ceb5b8..770f62c 100644 +--- a/libguile/threads.c ++++ b/libguile/threads.c +@@ -395,6 +395,7 @@ guilify_self_1 (struct GC_stack_base *base, int needs_unregister) + t.base = base->mem_base; + #ifdef __ia64__ + t.register_backing_store_base = base->reg_base; ++ t.pending_rbs_continuation = 0; + #endif + t.continuation_root = SCM_EOL; + t.continuation_base = t.base; +-- +cgit v1.0-41-gc330 + diff --git a/dev-scheme/guile/guile-2.0.14-r5.ebuild b/dev-scheme/guile/guile-2.0.14-r5.ebuild new file mode 100644 index 0000000..2ea5568 --- /dev/null +++ b/dev-scheme/guile/guile-2.0.14-r5.ebuild @@ -0,0 +1,92 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 +inherit flag-o-matic autotools + +DESCRIPTION="GNU Ubiquitous Intelligent Language for Extensions" +HOMEPAGE="https://www.gnu.org/software/guile/" +SRC_URI="mirror://gnu/guile/${P}.tar.xz" +KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos" +LICENSE="LGPL-3+" +IUSE="debug debug-malloc +deprecated +networking +nls +regex +threads" # upstream recommended +networking +nls +# emacs useflag removal not working + +REQUIRED_USE="regex" # workaround for bug 596322 +RESTRICT="strip" + +RDEPEND=" + >=dev-libs/boehm-gc-7.0:=[threads?] + dev-libs/gmp:= + dev-libs/libffi:= + dev-libs/libltdl:= + dev-libs/libunistring:0= + sys-devel/libtool + sys-libs/ncurses:0= + sys-libs/readline:0= + virtual/libcrypt:=" +DEPEND="${RDEPEND} + virtual/pkgconfig + sys-apps/texinfo + sys-devel/gettext" + +SLOT="12/22" # subslot is soname version +MAJOR="2.0" + +# guile generates ELF files without use of C or machine code +# It's a false positive. bug #677600 +QA_PREBUILT='*[.]go' + +DOCS=( GUILE-VERSION HACKING README ) + +PATCHES=( + "${FILESDIR}/${PN}-2-snarf.patch" + "${FILESDIR}/${P}-darwin.patch" + "${FILESDIR}/${P}-ia64-fix-crash-thread-context-switch.patch" + "${FILESDIR}/${P}-configure-clang16.patch" +) + +src_prepare() { + default + eautoreconf +} + +src_configure() { + # see bug #178499 + filter-flags -ftree-vectorize + + econf \ + --disable-error-on-warning \ + --disable-rpath \ + --disable-static \ + --enable-posix \ + --without-libgmp-prefix \ + --without-libiconv-prefix \ + --without-libintl-prefix \ + --without-libltdl-prefix \ + --without-libreadline-prefix \ + --without-libunistring-prefix \ + $(use_enable debug guile-debug) \ + $(use_enable debug-malloc) \ + $(use_enable deprecated) \ + $(use_enable networking) \ + $(use_enable nls) \ + $(use_enable regex) \ + $(use_with threads) +} + +src_install() { + default + find "${ED}" -name '*.la' -delete || die + + # From Novell + # https://bugzilla.novell.com/show_bug.cgi?id=874028#c0 + dodir /usr/share/gdb/auto-load/$(get_libdir) + mv "${ED}"/usr/$(get_libdir)/libguile-*-gdb.scm "${ED}"/usr/share/gdb/auto-load/$(get_libdir) || die + + # necessary for registering slib, see bug 206896 + keepdir /usr/share/guile/site + + # Dark magic necessary for some deps + dosym libguile-2.0.so /usr/$(get_libdir)/libguile.so +} diff --git a/dev-scheme/guile/metadata.xml b/dev-scheme/guile/metadata.xml new file mode 100644 index 0000000..eb3a100 --- /dev/null +++ b/dev-scheme/guile/metadata.xml @@ -0,0 +1,22 @@ + + + + + scheme@gentoo.org + Gentoo Scheme Project + + +Guile is a library designed to help programmers create flexible applications. Using Guile in an application allows programmers to write plug-ins, or modules (there are many names, but the concept is essentially the same) and users to use them to have an application fit their needs. + + + Include garbage collector freelist debugging code + Include malloc debugging code + Enable deprecated features + (implied by deprecated) enable merely discouraged features + Include networking interfaces + Include regular expression interfaces + + + guile + +