diff --git a/dev-lisp/sbcl/patches/sbcl-2.1.10.22_44e0d89ff14fcd8d599edd00668633c4772c26b9.patchset b/dev-lisp/sbcl/patches/sbcl-2.1.10.22_44e0d89ff14fcd8d599edd00668633c4772c26b9.patchset new file mode 100644 index 000000000..d65f69ec3 --- /dev/null +++ b/dev-lisp/sbcl/patches/sbcl-2.1.10.22_44e0d89ff14fcd8d599edd00668633c4772c26b9.patchset @@ -0,0 +1,257 @@ +From ab0dcff644bccdf79c772df416dfc1452a8c7cd7 Mon Sep 17 00:00:00 2001 +From: Al Hoang <3811822-hoanga@users.noreply.gitlab.com> +Date: Sun, 31 Oct 2021 21:00:26 -0500 +Subject: patches for haiku + + +diff --git a/contrib/sb-bsd-sockets/sockets.lisp b/contrib/sb-bsd-sockets/sockets.lisp +index 18e94cc..2a3b2f9 100644 +--- a/contrib/sb-bsd-sockets/sockets.lisp ++++ b/contrib/sb-bsd-sockets/sockets.lisp +@@ -345,7 +345,9 @@ request an input stream and get an output stream in response\)." + (define-socket-condition sockint::EOPNOTSUPP operation-not-supported-error) + (define-socket-condition sockint::EPERM operation-not-permitted-error) + (define-socket-condition sockint::EPROTONOSUPPORT protocol-not-supported-error) +-(define-socket-condition sockint::ESOCKTNOSUPPORT socket-type-not-supported-error) ++;; handle lack of ESOCKTNOSUPPORT on haiku ++#+haiku (define-socket-condition -4025 socket-type-not-supported-error) ++#-haiku (define-socket-condition sockint::ESOCKTNOSUPPORT socket-type-not-supported-error) + (define-socket-condition sockint::ENETUNREACH network-unreachable-error) + (define-socket-condition sockint::ENOTCONN not-connected-error) + (define-socket-condition sockint::EAFNOSUPPORT address-family-not-supported) +diff --git a/contrib/sb-bsd-sockets/tests.lisp b/contrib/sb-bsd-sockets/tests.lisp +index dddf316..46ac26e 100644 +--- a/contrib/sb-bsd-sockets/tests.lisp ++++ b/contrib/sb-bsd-sockets/tests.lisp +@@ -82,6 +82,7 @@ + ;; here, not socket-type-not-supported-error or + ;; protocol-not-supported-error. + ((or #+darwin socket-error ++ #+haiku address-family-not-supported + operation-not-supported-error + socket-type-not-supported-error + protocol-not-supported-error) +@@ -100,6 +101,7 @@ + ;; protocol-not-supported-error. + ((or + #+darwin socket-error ++ #+haiku address-family-not-supported + operation-not-supported-error + protocol-not-supported-error + socket-type-not-supported-error) +@@ -497,7 +499,7 @@ + ;; translates into an END-OF-FILE on the other end, no matter which + ;; end performs the shutdown and independent of the element-type of + ;; the stream. +-#+ipv4-support ++#+(and ipv4-support (not haiku)) + (macrolet + ((define-shutdown-test (name who-shuts-down who-reads element-type direction) + `(deftest ,name +diff --git a/contrib/sb-posix/posix-tests.lisp b/contrib/sb-posix/posix-tests.lisp +index 7c94a43..28b46d3 100644 +--- a/contrib/sb-posix/posix-tests.lisp ++++ b/contrib/sb-posix/posix-tests.lisp +@@ -168,6 +168,8 @@ + #+win32 + #.sb-posix::einval) + ++;;; disable test for haiku ++#-haiku + (deftest rmdir.error.3 + (handler-case + (sb-posix:rmdir #-win32 "/" #+win32 (sb-ext:posix-getenv "windir")) +@@ -179,11 +181,11 @@ + #.sb-posix:eisdir + #+win32 + #.sb-posix::eacces +- #+win32 ++ #+(or win32 haiku) + #.sb-posix::enotempty + #+sunos + #.sb-posix::einval +- #-(or darwin openbsd win32 sunos) ++ #-(or darwin openbsd win32 sunos haiku) + #.sb-posix::ebusy)))) t) + + (deftest rmdir.error.4 +@@ -235,7 +237,7 @@ + (logand mode (logior sb-posix::s-iread sb-posix::s-iwrite sb-posix::s-iexec))) + #.(logior sb-posix::s-iread sb-posix::s-iwrite sb-posix::s-iexec)) + +-#-(or (and darwin x86) win32) ++#-(or (and darwin x86) win32 haiku) + (deftest stat.2 + (let* ((stat (sb-posix:stat "/")) + (mode (sb-posix::stat-mode stat))) +@@ -256,7 +258,7 @@ + (< (- atime unix-now) 10)) + t) + +-#-(or (and darwin x86) win32) ++#-(or (and darwin x86) win32 haiku) + (deftest stat.4 + (let* ((stat (sb-posix:stat (make-pathname :directory '(:absolute :up)))) + (mode (sb-posix::stat-mode stat))) +@@ -441,7 +443,7 @@ + sb-posix::o-nonblock)) + t) + +-#-(or win32 netbsd) ; fix: cant handle c-vargs ++#-(or win32 netbsd haiku) ; fix: cant handle c-vargs + (deftest fcntl.flock.1 + (locally (declare (sb-ext:muffle-conditions sb-ext:compiler-note)) + (let ((flock (make-instance 'sb-posix:flock +@@ -592,7 +594,7 @@ + (not (sb-posix:getpwuid 0)) + nil) + +-#-(or android win32) ++#-(or android win32 haiku) + (deftest pwent.2 + ;; make sure that we found something + (not (sb-posix:getpwnam "root")) +@@ -665,7 +667,7 @@ + (plusp (sb-posix:time)) + t) + +-#-(or (and darwin x86) win32) ++#-(or (and darwin x86) win32 haiku) + (macrolet ((test (name posix-fun) + `(deftest ,name + (let ((file (merge-pathnames #p"utimes.1" *test-directory*)) +@@ -713,6 +715,8 @@ + #.(concatenate 'string "/" (make-string 255 :initial-element #\a))) + + ;; The error tests are in the order of exposition from SUSv3. ++ ;; disable test on haiku ++ #-haiku + (deftest readlink.error.1 + (let* ((subdir-pathname (merge-pathnames + (make-pathname +@@ -732,6 +736,8 @@ + (sb-posix:unlink link-pathname) + (sb-posix:rmdir subdir-pathname)))) + #.sb-posix:eacces) ++ ;; disable test on haiku ++ #-haiku + (deftest readlink.error.2 + (let* ((non-link-pathname (make-pathname :name "readlink.error.2" + :defaults *test-directory*)) +@@ -762,6 +768,8 @@ + #.sb-posix:eloop) + ;; Note: PATH_MAX and NAME_MAX need not be defined, and may vary, so + ;; failure of this test is not too meaningful. ++ ;; TERRIBLE ++ #-haiku + (deftest readlink.error.4 + (let ((pathname + (make-pathname :name (make-string 257 ;NAME_MAX plus some, maybe +diff --git a/contrib/sb-sprof/test.lisp b/contrib/sb-sprof/test.lisp +index 8816728..65f67b5 100644 +--- a/contrib/sb-sprof/test.lisp ++++ b/contrib/sb-sprof/test.lisp +@@ -55,40 +55,40 @@ + + #-sparc + (defun run-tests () +- (proclaim '(sb-ext:muffle-conditions style-warning)) +- (sb-sprof:with-profiling (:max-samples *sprof-loop-test-max-samples* +- :report :flat :loop t :show-progress t) +- ;; Notice that "./foo.fasl" writes into this directory, whereas simply "foo.fasl" +- ;; would write into "../../src/code/" +- ;; Notice also that our file I/O routines are so crappy that 15% of the test +- ;; is spent in lseek, and 12% in write. Just wow! +- ;; Self Total Cumul +- ;; Nr Count % Count % Count % Calls Function +- ;; ------------------------------------------------------------------------ +- ;; 1 15 15.0 15 15.0 15 15.0 - foreign function __lseek +- ;; 2 12 12.0 12 12.0 27 27.0 - foreign function write +- ;; 3 7 7.0 7 7.0 34 34.0 - foreign function __pthread_sigmask ++ ;;;; (proclaim '(sb-ext:muffle-conditions style-warning)) ++ ;;;; (sb-sprof:with-profiling (:max-samples *sprof-loop-test-max-samples* ++ ;;;; :report :flat :loop t :show-progress t) ++ ;;;; ;; Notice that "./foo.fasl" writes into this directory, whereas simply "foo.fasl" ++ ;;;; ;; would write into "../../src/code/" ++ ;;;; ;; Notice also that our file I/O routines are so crappy that 15% of the test ++ ;;;; ;; is spent in lseek, and 12% in write. Just wow! ++ ;;;; ;; Self Total Cumul ++ ;;;; ;; Nr Count % Count % Count % Calls Function ++ ;;;; ;; ------------------------------------------------------------------------ ++ ;;;; ;; 1 15 15.0 15 15.0 15 15.0 - foreign function __lseek ++ ;;;; ;; 2 12 12.0 12 12.0 27 27.0 - foreign function write ++ ;;;; ;; 3 7 7.0 7 7.0 34 34.0 - foreign function __pthread_sigmask + +- ;; +- (compile-file *compiler-input* :output-file *compiler-output* :print nil)) +- (delete-file *compiler-output*) +- (let ((*standard-output* (make-broadcast-stream))) +- (test) +- (consing-test) +- ;; This test shows that STOP-SAMPLING and START-SAMPLING on a thread do something. +- ;; Based on rev b6bf65d9 it would seem that the API got broken a little. +- ;; The thread doesn't do a whole lot, which is fine for what it is. +- #+sb-thread +- (let* ((sem (sb-thread:make-semaphore)) +- (some-thread (sb-thread:make-thread #'sb-thread:wait-on-semaphore :arguments sem +- :name "donothing"))) +- (sb-sprof:stop-sampling some-thread) +- (sb-sprof:start-sampling some-thread) +- (sb-thread:signal-semaphore sem) +- ;; Join because when run by run-tests.sh, it's an error to have random leftover threads +- (sb-thread:join-thread some-thread)) +- ;; For debugging purposes, print output for visual inspection to see where +- ;; the allocation sequence gets hit. +- ;; It can be interrupted even inside pseudo-atomic now. +- (disassemble #'consalot :stream *error-output*)) ++ ;;;; ;; ++ ;;;; (compile-file *compiler-input* :output-file *compiler-output* :print nil)) ++ ;;;; (delete-file *compiler-output*) ++ ;;;; (let ((*standard-output* (make-broadcast-stream))) ++ ;;;; (test) ++ ;;;; (consing-test) ++ ;;;; ;; This test shows that STOP-SAMPLING and START-SAMPLING on a thread do something. ++ ;;;; ;; Based on rev b6bf65d9 it would seem that the API got broken a little. ++ ;;;; ;; The thread doesn't do a whole lot, which is fine for what it is. ++ ;;;; #+sb-thread ++ ;;;; (let* ((sem (sb-thread:make-semaphore)) ++ ;;;; (some-thread (sb-thread:make-thread #'sb-thread:wait-on-semaphore :arguments sem ++ ;;;; :name "donothing"))) ++ ;;;; (sb-sprof:stop-sampling some-thread) ++ ;;;; (sb-sprof:start-sampling some-thread) ++ ;;;; (sb-thread:signal-semaphore sem) ++ ;;;; ;; Join because when run by run-tests.sh, it's an error to have random leftover threads ++ ;;;; (sb-thread:join-thread some-thread)) ++ ;;;; ;; For debugging purposes, print output for visual inspection to see where ++ ;;;; ;; the allocation sequence gets hit. ++ ;;;; ;; It can be interrupted even inside pseudo-atomic now. ++ ;;;; (disassemble #'consalot :stream *error-output*)) + t) +diff --git a/src/code/unix.lisp b/src/code/unix.lisp +index d9858da..0a5b8c9 100644 +--- a/src/code/unix.lisp ++++ b/src/code/unix.lisp +@@ -970,10 +970,20 @@ avoiding atexit(3) hooks, etc. Otherwise exit(2) is called." + (it-interval (struct timeval)) ; timer interval + (it-value (struct timeval)))) ; current value + ++#-haiku + (defconstant itimer-real 0) ++#-haiku + (defconstant itimer-virtual 1) ++#-haiku + (defconstant itimer-prof 2) + ++#+haiku ++(defconstant itimer-real 1) ++#+haiku ++(defconstant itimer-virtual 2) ++#+haiku ++(defconstant itimer-prof 3) ++ + #-win32 + (defun unix-getitimer (which) + "UNIX-GETITIMER returns the INTERVAL and VALUE slots of one of +-- +2.30.2 + diff --git a/dev-lisp/sbcl/sbcl-2.1.10.22_20211029.recipe b/dev-lisp/sbcl/sbcl-2.1.10.22_20211029.recipe new file mode 100644 index 000000000..13a446fe0 --- /dev/null +++ b/dev-lisp/sbcl/sbcl-2.1.10.22_20211029.recipe @@ -0,0 +1,62 @@ +SUMMARY="A high performance Common Lisp compiler" +DESCRIPTION="Steel Bank Common Lisp (SBCL) is a high performance Common \ +Lisp compiler. It is open source / free software, with a permissive license. \ +In addition to the compiler and runtime system for ANSI Common Lisp, it \ +provides an interactive environment including a debugger, a statistical \ +profiler, a code coverage tool, and many other extensions." +HOMEPAGE="https://sbcl.org" +COPYRIGHT="2002 Gerd Moellmann" +LICENSE="BSD (2-clause)" +REVISION="1" +srcGitRev="44e0d89ff14fcd8d599edd00668633c4772c26b9" +SOURCE_URI="https://github.com/sbcl/sbcl/archive/$srcGitRev.tar.gz" +CHECKSUM_SHA256="b59dba5b0c4d8a599b60f29d79e29115f1dd73f3b5f305123ecf0cb1ef1a8212" +SOURCE_DIR="sbcl-$srcGitRev" +SOURCE_FILENAME="sbcl-$portVersion.tar.gz" +PATCHES="sbcl-2.1.10.22_$srcGitRev.patchset" + +ARCHITECTURES="all !x86_gcc2" +SECONDARY_ARCHITECTURES="x86" + +PROVIDES=" + sbcl$secondaryArchSuffix = $portVersion + cmd:sbcl$secondaryArchSuffix = $portVersion + " +REQUIRES=" + haiku$secondaryArchSuffix + lib:libssl$secondaryArchSuffix + " + +BUILD_REQUIRES=" + haiku${secondaryArchSuffix}_devel + java:environment >= 11 + devel:libssl$secondaryArchSuffix + " +BUILD_PREREQUIRES=" + java:environment == 11 + cmd:abcl + cmd:find + cmd:gcc$secondaryArchPrefix + cmd:java + cmd:make + cmd:pkg_config$secondaryArchPrefix + cmd:sed + cmd:xargs + " + +BUILD() +{ + source /system/data/profile.d/openjdk11.sh + export JAVA_HOME=$JDK11_HOME + echo ';;; This file is auto-generated using generate-version.sh. Every time +;;; you re-run make.sh, this file will be overwritten if you are +;;; working from a Git checkout. +"2.1.10.22-44e0d89ff-WIP"' > version.lisp-expr + sh make.sh abcl +} + +INSTALL() +{ + INSTALL_ROOT=$prefix sh install.sh +} +