Saturday, August 31, 2024

Re: lang/guile3 update to 3.0.10

I'll hold off from committing this update for a while. It seems that it
is broken on various 32 bit arches:

https://buildd.debian.org/status/package.php?p=guile%2d3%2e0

On 2024/08/25 12:23:32 +0200, Omar Polo <op@omarpolo.com> wrote:
> A bit overdue, but here's the update. I'm leaving the description of
> the change to upstream anonunce mail:
>
> https://lists.gnu.org/archive/html/info-gnu/2024-06/msg00008.html
>
> port-wise:
>
> - spawn works without patching. the TL;DR is that guile decided to
> switch to the posix_spawn api^W madness a few releases ago. The
> problem is that they really wanted closefrom(2) but there's no
> posix_spawn version of it so they rolled it badly. It is still
> bad, but at least it works. (unless there are threads involved,
> which is funny because they switched to posix_madness for that.)
> If we provide posixx_spawn_file_actions_closfrom() or whatever
> is called guile would start using it.
>
> - i'm tweaking the changes to the regress. It is fully passing, but I
> had to disable a few tests.
> In particular one test that tries to run a nonexistent binary fails
> and I'm not sure how to interpret the backtrace, but will look into
> it. I don't consider it a blocker since the rest of the regress is
> happy.
>
> - another interesting failure is (getsockopt sock IPPROTO_TCP TCP_NODELAY)
> that returns 4 while the regress expected exactly 1. I've tweaked
> the test.
>
>
> I plan to commit this next week, but testing and oks are appreciated :)
>
>
> Index: Makefile
> ===================================================================
> RCS file: /home/cvs/ports/lang/guile3/Makefile,v
> diff -u -p -r1.7 Makefile
> --- Makefile 26 Sep 2023 12:02:01 -0000 1.7
> +++ Makefile 8 Aug 2024 07:09:10 -0000
> @@ -6,7 +6,7 @@ DPB_PROPERTIES = parallel
>
> COMMENT= GNU's Ubiquitous Intelligent Language for Extension
>
> -VERSION= 3.0.9
> +VERSION= 3.0.10
> DISTNAME= guile-${VERSION}
> PKGNAME= guile3-${VERSION}
> V= ${VERSION:R}
> Index: distinfo
> ===================================================================
> RCS file: /home/cvs/ports/lang/guile3/distinfo,v
> diff -u -p -r1.2 distinfo
> --- distinfo 3 Feb 2023 08:27:31 -0000 1.2
> +++ distinfo 8 Aug 2024 07:09:24 -0000
> @@ -1,2 +1,2 @@
> -SHA256 (guile-3.0.9.tar.gz) = GFJQea0poNRtFcdlgbXZHIcCMBv9ghZm0uHRNyYWKBE=
> -SIZE (guile-3.0.9.tar.gz) = 9734735
> +SHA256 (guile-3.0.10.tar.gz) = Lb28l1mLL68xATVk77SOT+1EEx0o6ZbCar6KWyO1bCo=
> +SIZE (guile-3.0.10.tar.gz) = 9738824
> Index: patches/patch-libguile_posix_c
> ===================================================================
> RCS file: patches/patch-libguile_posix_c
> diff -N patches/patch-libguile_posix_c
> --- patches/patch-libguile_posix_c 3 Feb 2023 08:27:31 -0000 1.1
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,29 +0,0 @@
> -fix close_inherited_fds_slow
> -
> -The intent of close_inherited_fds_slow is to mimick closefrom() in the
> -posix_spawn API, i.e. schedule the closing of all fds >= 3 after fork().
> -
> -However, the way this is implemented in non-linux OSes is to schedule
> -the closing of 3..1023. This fails due to EBADF in posix_spawn after
> -the fork() and makes it exit(127).
> -
> -see: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=61095
> -
> -Index: libguile/posix.c
> ---- libguile/posix.c.orig
> -+++ libguile/posix.c
> -@@ -1325,8 +1325,12 @@ SCM_DEFINE (scm_fork, "primitive-fork", 0, 0, 0,
> - static void
> - close_inherited_fds_slow (posix_spawn_file_actions_t *actions, int max_fd)
> - {
> -- while (--max_fd > 2)
> -- posix_spawn_file_actions_addclose (actions, max_fd);
> -+ struct stat sb;
> -+ max_fd = getdtablecount();
> -+ while (--max_fd > 2) {
> -+ if (fstat(max_fd, &sb) != -1)
> -+ posix_spawn_file_actions_addclose (actions, max_fd);
> -+ }
> - }
> -
> - static void
> Index: patches/patch-test-suite_tests_00-socket_test
> ===================================================================
> RCS file: patches/patch-test-suite_tests_00-socket_test
> diff -N patches/patch-test-suite_tests_00-socket_test
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-test-suite_tests_00-socket_test 25 Aug 2024 10:07:57 -0000
> @@ -0,0 +1,32 @@
> +- disable a test that tries to make an "abstract" socket
> +- getsockopt(TCP_NODELAY) returns nonzero, non exactly 1
> +- disable more tests on abstract sockets
> +
> +Index: test-suite/tests/00-socket.test
> +--- test-suite/tests/00-socket.test.orig
> ++++ test-suite/tests/00-socket.test
> +@@ -133,6 +133,7 @@
> + (let ((sa (make-socket-address AF_UNIX "/tmp/unix-socket")))
> + (and (= (sockaddr:fam sa) AF_UNIX)
> + (string=? (sockaddr:path sa) "/tmp/unix-socket"))))
> ++ #;
> + (pass-if "AF_UNIX abstract"
> + (let ((sa (make-socket-address AF_UNIX "\x00/tmp/abstract-socket")))
> + (and (= (sockaddr:fam sa) AF_UNIX)
> +@@ -147,7 +148,7 @@
> + (pass-if "IPPROTO_TCP TCP_NODELAY"
> + (let ((sock (socket AF_INET SOCK_STREAM 0)))
> + (setsockopt sock IPPROTO_TCP TCP_NODELAY 1)
> +- (eqv? 1 (getsockopt sock IPPROTO_TCP TCP_NODELAY))))))
> ++ (not (eqv? 0 (getsockopt sock IPPROTO_TCP TCP_NODELAY)))))))
> +
> +
> + ;;;
> +@@ -326,6 +327,7 @@
> +
> + ;; testing `bind', `listen' and `connect' on abstract stream-oriented sockets
> +
> ++ #;
> + (let ((server-socket (socket AF_UNIX SOCK_STREAM 0))
> + (server-bound? #f)
> + (server-listening? #f)
> Index: patches/patch-test-suite_tests_posix_test
> ===================================================================
> RCS file: /home/cvs/ports/lang/guile3/patches/patch-test-suite_tests_posix_test,v
> diff -u -p -r1.1 patch-test-suite_tests_posix_test
> --- patches/patch-test-suite_tests_posix_test 3 Feb 2023 08:27:31 -0000 1.1
> +++ patches/patch-test-suite_tests_posix_test 25 Aug 2024 10:04:50 -0000
> @@ -1,11 +1,12 @@
> - wc pads the result with blanks, trim its output
> - - use "seq 3" rather than assuming /proc is available
> + - disable test that fails since there's no /proc fs
> + - disable a test that fails (not sure why yet)
> - fix nonsensical crypt invocation, use examples from manpage
>
> Index: test-suite/tests/posix.test
> --- test-suite/tests/posix.test.orig
> +++ test-suite/tests/posix.test
> -@@ -411,7 +411,7 @@
> +@@ -426,7 +426,7 @@
> (display "Hello world.\n" (cdr a+b))
> (close-port (cdr a+b))
>
> @@ -14,36 +15,23 @@ Index: test-suite/tests/posix.test
> (close-port (car c+d))
> (waitpid pid)
> str)))
> -@@ -428,18 +428,16 @@
> - (waitpid pid)
> - str)))
> +@@ -449,6 +449,7 @@
> + (string-drop str (+ 1 (string-index str #\newline)))
> + str))))
>
> -- (pass-if-equal "ls /proc/self/fd"
> -- "0\n1\n2\n3\n" ;fourth FD is for /proc/self/fd
> -- (if (file-exists? "/proc/self/fd") ;Linux
> -- (let* ((input+output (pipe))
> -- (pid (spawn "ls" '("ls" "/proc/self/fd")
> -- #:output (cdr input+output))))
> -- (close-port (cdr input+output))
> -- (let ((str (get-string-all (car input+output))))
> -- (close-port (car input+output))
> -- (waitpid pid)
> -- str))
> -- (throw 'unresolved)))
> -+ (pass-if-equal "seq 3"
> -+ "1\n2\n3\n"
> -+ (let* ((input+output (pipe))
> -+ (pid (spawn "seq" '("seq" "3")
> -+ #:output (cdr input+output))))
> -+ (close-port (cdr input+output))
> -+ (let ((str (get-string-all (car input+output))))
> -+ (close-port (car input+output))
> -+ (waitpid pid)
> -+ str)))
> ++ #;
> + (pass-if-equal "ls /proc/self/fd"
> + "0\n1\n2\n3\n" ;fourth FD is for /proc/self/fd
> + (if (file-exists? "/proc/self/fd") ;Linux
> +@@ -462,6 +463,7 @@
> + str))
> + (throw 'unresolved)))
>
> ++ #;
> (pass-if-equal "file not found"
> ENOENT
> -@@ -459,7 +457,8 @@
> + (catch 'system-error
> +@@ -480,7 +482,8 @@
> (pass-if "basic usage"
> (if (not (defined? 'crypt))
> (throw 'unsupported)
> Index: pkg/PLIST
> ===================================================================
> RCS file: /home/cvs/ports/lang/guile3/pkg/PLIST,v
> diff -u -p -r1.3 PLIST
> --- pkg/PLIST 3 Feb 2023 08:27:31 -0000 1.3
> +++ pkg/PLIST 8 Aug 2024 16:57:26 -0000
> @@ -135,8 +135,19 @@ include/guile/${V}/libguile/weak-set.h
> include/guile/${V}/libguile/weak-table.h
> include/guile/${V}/libguile/weak-vector.h
> include/guile/${V}/readline.h
> -@info info/guile.info
> -@info info/r5rs.info
> +info/guile.info
> +info/guile.info-1
> +info/guile.info-10
> +info/guile.info-11
> +info/guile.info-2
> +info/guile.info-3
> +info/guile.info-4
> +info/guile.info-5
> +info/guile.info-6
> +info/guile.info-7
> +info/guile.info-8
> +info/guile.info-9
> +info/r5rs.info
> lib/guile/
> lib/guile/${V}/
> lib/guile/${V}/ccache/
> @@ -153,6 +164,7 @@ lib/guile/${V}/ccache/ice-9/common-list.
> lib/guile/${V}/ccache/ice-9/control.go
> lib/guile/${V}/ccache/ice-9/copy-tree.go
> lib/guile/${V}/ccache/ice-9/curried-definitions.go
> +lib/guile/${V}/ccache/ice-9/custom-ports.go
> lib/guile/${V}/ccache/ice-9/deprecated.go
> lib/guile/${V}/ccache/ice-9/documentation.go
> lib/guile/${V}/ccache/ice-9/eval-string.go
> @@ -209,6 +221,7 @@ lib/guile/${V}/ccache/ice-9/scm-style-re
> lib/guile/${V}/ccache/ice-9/serialize.go
> lib/guile/${V}/ccache/ice-9/session.go
> lib/guile/${V}/ccache/ice-9/slib.go
> +lib/guile/${V}/ccache/ice-9/soft-ports.go
> lib/guile/${V}/ccache/ice-9/stack-catch.go
> lib/guile/${V}/ccache/ice-9/streams.go
> lib/guile/${V}/ccache/ice-9/string-fun.go
> @@ -241,14 +254,17 @@ lib/guile/${V}/ccache/language/cps/dump.
> lib/guile/${V}/ccache/language/cps/effects-analysis.go
> lib/guile/${V}/ccache/language/cps/elide-arity-checks.go
> lib/guile/${V}/ccache/language/cps/graphs.go
> +lib/guile/${V}/ccache/language/cps/guile-vm/
> +lib/guile/${V}/ccache/language/cps/guile-vm.go
> +lib/guile/${V}/ccache/language/cps/guile-vm/loop-instrumentation.go
> +lib/guile/${V}/ccache/language/cps/guile-vm/lower-primcalls.go
> +lib/guile/${V}/ccache/language/cps/guile-vm/reify-primitives.go
> lib/guile/${V}/ccache/language/cps/intmap.go
> lib/guile/${V}/ccache/language/cps/intset.go
> lib/guile/${V}/ccache/language/cps/licm.go
> -lib/guile/${V}/ccache/language/cps/loop-instrumentation.go
> lib/guile/${V}/ccache/language/cps/optimize.go
> lib/guile/${V}/ccache/language/cps/peel-loops.go
> lib/guile/${V}/ccache/language/cps/prune-top-level-scopes.go
> -lib/guile/${V}/ccache/language/cps/reify-primitives.go
> lib/guile/${V}/ccache/language/cps/renumber.go
> lib/guile/${V}/ccache/language/cps/return-types.go
> lib/guile/${V}/ccache/language/cps/rotate-loops.go
> @@ -298,6 +314,7 @@ lib/guile/${V}/ccache/language/tree-il/c
> lib/guile/${V}/ccache/language/tree-il/compile-cps.go
> lib/guile/${V}/ccache/language/tree-il/cps-primitives.go
> lib/guile/${V}/ccache/language/tree-il/debug.go
> +lib/guile/${V}/ccache/language/tree-il/demux-lambda.go
> lib/guile/${V}/ccache/language/tree-il/effects.go
> lib/guile/${V}/ccache/language/tree-il/eta-expand.go
> lib/guile/${V}/ccache/language/tree-il/fix-letrec.go
> @@ -310,6 +327,9 @@ lib/guile/${V}/ccache/language/tree-il/r
> lib/guile/${V}/ccache/language/tree-il/spec.go
> lib/guile/${V}/ccache/language/value/
> lib/guile/${V}/ccache/language/value/spec.go
> +lib/guile/${V}/ccache/language/wisp/
> +lib/guile/${V}/ccache/language/wisp.go
> +lib/guile/${V}/ccache/language/wisp/spec.go
> lib/guile/${V}/ccache/oop/
> lib/guile/${V}/ccache/oop/goops/
> lib/guile/${V}/ccache/oop/goops.go
> @@ -535,6 +555,7 @@ share/guile/${V}/ice-9/common-list.scm
> share/guile/${V}/ice-9/control.scm
> share/guile/${V}/ice-9/copy-tree.scm
> share/guile/${V}/ice-9/curried-definitions.scm
> +share/guile/${V}/ice-9/custom-ports.scm
> share/guile/${V}/ice-9/deprecated.scm
> share/guile/${V}/ice-9/documentation.scm
> share/guile/${V}/ice-9/eval-string.scm
> @@ -597,6 +618,7 @@ share/guile/${V}/ice-9/scm-style-repl.sc
> share/guile/${V}/ice-9/serialize.scm
> share/guile/${V}/ice-9/session.scm
> share/guile/${V}/ice-9/slib.scm
> +share/guile/${V}/ice-9/soft-ports.scm
> share/guile/${V}/ice-9/stack-catch.scm
> share/guile/${V}/ice-9/streams.scm
> share/guile/${V}/ice-9/string-fun.scm
> @@ -629,14 +651,17 @@ share/guile/${V}/language/cps/dump.scm
> share/guile/${V}/language/cps/effects-analysis.scm
> share/guile/${V}/language/cps/elide-arity-checks.scm
> share/guile/${V}/language/cps/graphs.scm
> +share/guile/${V}/language/cps/guile-vm/
> +share/guile/${V}/language/cps/guile-vm.scm
> +share/guile/${V}/language/cps/guile-vm/loop-instrumentation.scm
> +share/guile/${V}/language/cps/guile-vm/lower-primcalls.scm
> +share/guile/${V}/language/cps/guile-vm/reify-primitives.scm
> share/guile/${V}/language/cps/intmap.scm
> share/guile/${V}/language/cps/intset.scm
> share/guile/${V}/language/cps/licm.scm
> -share/guile/${V}/language/cps/loop-instrumentation.scm
> share/guile/${V}/language/cps/optimize.scm
> share/guile/${V}/language/cps/peel-loops.scm
> share/guile/${V}/language/cps/prune-top-level-scopes.scm
> -share/guile/${V}/language/cps/reify-primitives.scm
> share/guile/${V}/language/cps/renumber.scm
> share/guile/${V}/language/cps/return-types.scm
> share/guile/${V}/language/cps/rotate-loops.scm
> @@ -686,6 +711,7 @@ share/guile/${V}/language/tree-il/compil
> share/guile/${V}/language/tree-il/compile-cps.scm
> share/guile/${V}/language/tree-il/cps-primitives.scm
> share/guile/${V}/language/tree-il/debug.scm
> +share/guile/${V}/language/tree-il/demux-lambda.scm
> share/guile/${V}/language/tree-il/effects.scm
> share/guile/${V}/language/tree-il/eta-expand.scm
> share/guile/${V}/language/tree-il/fix-letrec.scm
> @@ -698,6 +724,9 @@ share/guile/${V}/language/tree-il/resolv
> share/guile/${V}/language/tree-il/spec.scm
> share/guile/${V}/language/value/
> share/guile/${V}/language/value/spec.scm
> +share/guile/${V}/language/wisp/
> +share/guile/${V}/language/wisp.scm
> +share/guile/${V}/language/wisp/spec.scm
> share/guile/${V}/oop/
> share/guile/${V}/oop/goops/
> share/guile/${V}/oop/goops.scm

No comments:

Post a Comment