std/os/signal: detect macOS for BSD-style signal numbers
ober
5f79a9520be7ceda17db9974d082d52177db9404
--- a/lib/std/os/signal.sls +++ b/lib/std/os/signal.sls @@ -45,27 +45,30 @@ (define SIGPROF 27) (define SIGWINCH 28) - ;; Signal numbers that differ between Linux and FreeBSD. - ;; Detect platform at load time via uname. - (define %freebsd? + ;; Signal numbers that differ between Linux and the BSDs (FreeBSD, macOS). + ;; FreeBSD and macOS share the same numeric layout; Linux differs. + ;; Detect platform at load time via Chez machine-type / kernel file. + (define %bsd? (or (guard (e [#t #f]) - (equal? (machine-type) 'ta6fb)) + (memq (machine-type) + '(ta6fb a6fb ti3fb i3fb tarm64fb arm64fb + ta6osx a6osx tarm64osx arm64osx ti3osx i3osx))) + ;; Fallback for static builds: kernel file paths (guard (e [#t #f]) - (memq (machine-type) '(ta6fb a6fb ti3fb i3fb tarm64fb arm64fb))) - ;; Fallback for static builds: check for FreeBSD kernel file + (file-exists? "/boot/kernel/kernel")) ;; FreeBSD (guard (e [#t #f]) - (file-exists? "/boot/kernel/kernel")) + (file-exists? "/System/Library/CoreServices/SystemVersion.plist")) ;; macOS #f)) - (define SIGUSR1 (if %freebsd? 30 10)) - (define SIGUSR2 (if %freebsd? 31 12)) - (define SIGSYS (if %freebsd? 12 31)) - (define SIGURG (if %freebsd? 16 23)) - (define SIGSTOP (if %freebsd? 17 19)) - (define SIGTSTP (if %freebsd? 18 20)) - (define SIGCONT (if %freebsd? 19 18)) - (define SIGCHLD (if %freebsd? 20 17)) - (define SIGIO (if %freebsd? 23 29)) + (define SIGUSR1 (if %bsd? 30 10)) + (define SIGUSR2 (if %bsd? 31 12)) + (define SIGSYS (if %bsd? 12 31)) + (define SIGURG (if %bsd? 16 23)) + (define SIGSTOP (if %bsd? 17 19)) + (define SIGTSTP (if %bsd? 18 20)) + (define SIGCONT (if %bsd? 19 18)) + (define SIGCHLD (if %bsd? 20 17)) + (define SIGIO (if %bsd? 23 29)) (define signal-names `((1 . "SIGHUP") (2 . "SIGINT") (3 . "SIGQUIT") (4 . "SIGILL")