Bug 277994 - lang/sbcl: fails to build after SHUT_RD and friend were changed to enum
Summary: lang/sbcl: fails to build after SHUT_RD and friend were changed to enum
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: --- Affects Some People
Assignee: Kirill Ponomarev
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-03-27 18:37 UTC by Dimitry Andric
Modified: 2024-03-27 19:50 UTC (History)
2 users (show)

See Also:
bugzilla: maintainer-feedback? (krion)


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dimitry Andric freebsd_committer freebsd_triage 2024-03-27 18:37:43 UTC
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.
Comment 1 commit-hook freebsd_committer freebsd_triage 2024-03-27 19:23:16 UTC
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(+)