In https://cgit.freebsd.org/src/commit/?id=c3276e02beab8, the SHUT_RD, SHUT_WR and SHUT_RDWR constants were changed from #defines to enum values. This breaks lang/sbcl: gmake[2]: Entering directory '/wrkdirs/share/dim/ports/lang/sbcl/work/sbcl-2.4.0/contrib/sb-bsd-sockets' ../..//src/runtime/sbcl --noinform --core ../..//output/sbcl.core --lose-on-corruption --disable-debugger --no-sysinit --no-userinit --load ../make-contrib.lisp "sb-bsd-sockets" </dev/null ; Note: Building "sb-bsd-sockets" Compile-File "module-setup" Compile-File "defpackage" Compile-File "generated-constants" STYLE-WARNING: Couldn't grovel for SHUT_RD (unknown to the C compiler). STYLE-WARNING: Couldn't grovel for SHUT_WR (unknown to the C compiler). STYLE-WARNING: Couldn't grovel for SHUT_RDWR (unknown to the C compiler). Compile-File "util" ... ; file: SYS:CONTRIB;SB-BSD-SOCKETS;SOCKETS.LISP.NEWEST ; in: DEFMETHOD SB-BSD-SOCKETS:SOCKET-SHUTDOWN (SB-BSD-SOCKETS:SOCKET) ; (ECASE SB-BSD-SOCKETS::DIRECTION ; (:INPUT SB-BSD-SOCKETS-INTERNAL::SHUT_RD) ; (:OUTPUT SB-BSD-SOCKETS-INTERNAL::SHUT_WR) ; (:IO SB-BSD-SOCKETS-INTERNAL::SHUT_RDWR)) ; --> COND IF ; ==> ; (PROGN NIL SB-BSD-SOCKETS-INTERNAL::SHUT_RD) ; ; caught WARNING: ; undefined variable: SB-BSD-SOCKETS-INTERNAL::SHUT_RD ; --> COND IF IF IF ; ==> ; (PROGN NIL SB-BSD-SOCKETS-INTERNAL::SHUT_RDWR) ; ; caught WARNING: ; undefined variable: SB-BSD-SOCKETS-INTERNAL::SHUT_RDWR ; --> COND IF IF ; ==> ; (PROGN NIL SB-BSD-SOCKETS-INTERNAL::SHUT_WR) ; ; caught WARNING: ; undefined variable: SB-BSD-SOCKETS-INTERNAL::SHUT_WR ; ; compilation unit finished ; Undefined variables: ; SB-BSD-SOCKETS-INTERNAL::SHUT_RD SB-BSD-SOCKETS-INTERNAL::SHUT_RDWR SB-BSD-SOCKETS-INTERNAL::SHUT_WR ; caught 3 WARNING conditions gmake[2]: *** [../asdf-module.mk:41: ../..//obj/sbcl-home/contrib/sb-bsd-sockets.fasl] Error 1 This is because /wrkdirs/share/dim/ports/lang/sbcl/work/sbcl-2.4.0/obj/from-self/contrib/sb-bsd-sockets/runme.c checks for the existence of #define'd macros, not enum values: #ifdef SHUT_RD fprintf(out, "(cl:defconstant SHUT_RD %ld)\n", CAST_SIGNED(SHUT_RD)); #else fprintf(out, "(sb-int:style-warn \"Couldn't grovel for ~A (unknown to the C compiler).\" \"SHUT_RD\")\n"); #endif #ifdef SHUT_WR fprintf(out, "(cl:defconstant SHUT_WR %ld)\n", CAST_SIGNED(SHUT_WR)); #else fprintf(out, "(sb-int:style-warn \"Couldn't grovel for ~A (unknown to the C compiler).\" \"SHUT_WR\")\n"); #endif #ifdef SHUT_RDWR fprintf(out, "(cl:defconstant SHUT_RDWR %ld)\n", CAST_SIGNED(SHUT_RDWR)); #else fprintf(out, "(sb-int:style-warn \"Couldn't grovel for ~A (unknown to the C compiler).\" \"SHUT_RDWR\")\n"); #endif Since this runme.c file seems to be generated from lisp, I have no good idea how to fix it.
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=3fa957840354bb476c2f990b72cb2ee7339ac328 commit 3fa957840354bb476c2f990b72cb2ee7339ac328 Author: Gleb Smirnoff <glebius@FreeBSD.org> AuthorDate: 2024-03-27 19:19:44 +0000 Commit: Gleb Smirnoff <glebius@FreeBSD.org> CommitDate: 2024-03-27 19:22:10 +0000 sockets: define shutdown(2) constants in cpp namespace There is software that uses SHUT_RD, SHUT_WR as preprocessor defines and its build was broken by enum declaration. Keep the enum, but provide defines to propagate the constants to cpp namespace. PR: 277994 PR: 277995 Fixes: c3276e02beab825824e3147b31af33af66298430 sys/sys/socket.h | 3 +++ 1 file changed, 3 insertions(+)