Author: hhubner
Date: 2006-02-06 12:36:30 -0600 (Mon, 06 Feb 2006)
New Revision: 1824
Modified:
trunk/bknr/src/bknr-datastore.asd
trunk/bknr/src/bknr-utils.asd
trunk/bknr/src/data/blob.lisp
trunk/bknr/src/data/encoding.lisp
trunk/bknr/src/data/object.lisp
trunk/bknr/src/data/package.lisp
trunk/bknr/src/data/txn.lisp
trunk/bknr/src/indices/indexed-class.lisp
trunk/bknr/src/indices/package.lisp
trunk/bknr/src/utils/package.lisp
trunk/bknr/src/utils/smbpasswd.lisp
trunk/bknr/src/utils/utils.lisp
Log:
SBCL and OpenMCL compatibility changes by Hoan Ton-That.
Modified: trunk/bknr/src/bknr-datastore.asd
===================================================================
--- trunk/bknr/src/bknr-datastore.asd 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/bknr-datastore.asd 2006-02-06 18:36:30 UTC (rev 1824)
@@ -16,8 +16,11 @@
:licence "BSD"
:description "baikonour - launchpad for lisp satellites"
- :depends-on (:cl-interpol :unit-test :bknr-utils :bknr-indices
- :acl-compat)
+ :depends-on (:cl-interpol
+ :unit-test
+ :bknr-utils
+ :bknr-indices
+ #+(not allegro) :acl-compat)
:components ((:module "data" :components ((:file "package")
(:file "encoding" :depends-on ("package"))
Modified: trunk/bknr/src/bknr-utils.asd
===================================================================
--- trunk/bknr/src/bknr-utils.asd 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/bknr-utils.asd 2006-02-06 18:36:30 UTC (rev 1824)
@@ -28,7 +28,7 @@
(:module "utils" :components ((:file "package")
(:file "utils" :depends-on ("package"))
(:file "class" :depends-on ("package" "utils"))
- #+(or cmu allegro sbcl)
+ #+(or cmu allegro openmcl sbcl)
(:file "smbpasswd" :depends-on ("utils"))
(:file "actor" :depends-on ("utils"))
(:file "reader" :depends-on ("utils"))
Modified: trunk/bknr/src/data/blob.lisp
===================================================================
--- trunk/bknr/src/data/blob.lisp 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/data/blob.lisp 2006-02-06 18:36:30 UTC (rev 1824)
@@ -154,13 +154,7 @@
blob))
(defmethod rename-file-to-blob ((blob blob) pathname)
- ;; xxx fixme: hier sollte ggf. copy-file benutzt werden, damit das
- ;; auch �ber Filesystemgrenzen hinweg funktioniert.
- #+cmu
- (unix:unix-rename (namestring pathname)
- (namestring (blob-pathname blob)))
- #+allegro
- (rename-file pathname (blob-pathname blob)))
+ (move-file pathname (blob-pathname blob)))
(defmethod restore-subsystem ((store store) (subsystem blob-subsystem) &key until)
(declare (ignore until))
Modified: trunk/bknr/src/data/encoding.lisp
===================================================================
--- trunk/bknr/src/data/encoding.lisp 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/data/encoding.lisp 2006-02-06 18:36:30 UTC (rev 1824)
@@ -120,6 +120,9 @@
(defun %write-char (char stream)
(write-byte (char-code char) stream))
+(defun %write-string (string stream)
+ (dotimes (i (length string))
+ (%write-char (char string i) stream)))
;;;; binary encoding
@@ -168,10 +171,10 @@
(defun %encode-string (object stream)
(%encode-integer (length object) stream)
+ #+allegro
+ (excl::stream-write-sequence stream object)
#-allegro
- (write-string object stream)
- #+allegro
- (excl::stream-write-sequence stream object))
+ (%write-string object stream))
(defun encode-string (object stream)
(%write-char #\s stream)
@@ -196,26 +199,36 @@
object))
(defun %encode-single-float (object stream)
- #+cmu
- (%encode-int32 (kernel:single-float-bits object) stream)
#+allegro
(map nil #'(lambda (short)
(%encode-int16 short stream))
- (multiple-value-list (excl::single-float-to-shorts object))))
+ (multiple-value-list (excl::single-float-to-shorts object)))
+ #+cmu
+ (%encode-int32 (kernel:single-float-bits object) stream)
+ #+openmcl
+ (%encode-int32 (ccl::single-float-bits object) stream)
+ #+sbcl
+ (%encode-int32 (sb-kernel:single-float-bits object) stream))
(defun encode-single-float (object stream)
(%write-char #\f stream)
(%encode-single-float object stream))
(defun %encode-double-float (object stream)
- #+cmu
- (%encode-int32 (kernel:double-float-high-bits object) stream)
- #+cmu
- (%encode-int32 (kernel:double-float-low-bits object) stream)
- #+allegro
+ #+cmucl
(map nil #'(lambda (short)
(%encode-int16 short stream))
- (multiple-value-list (excl::double-float-to-shorts object))))
+ (multiple-value-list (excl::double-float-to-shorts object)))
+ #+cmu
+ (progn (%encode-int32 (kernel:double-float-high-bits object) stream)
+ (%encode-int32 (kernel:double-float-low-bits object) stream))
+ #+openmcl
+ (multiple-value-bind (hi lo) (ccl::double-float-bits object)
+ (%encode-int32 hi stream)
+ (%encode-int32 lo stream))
+ #+sbcl
+ (progn (%encode-int32 (sb-kernel:double-float-high-bits object) stream)
+ (%encode-int32 (sb-kernel:double-float-low-bits object) stream)))
(defun encode-double-float (object stream)
(%write-char #\d stream)
@@ -327,21 +340,31 @@
result))
(defun %decode-single-float (stream)
+ #+allegro
+ (excl::shorts-to-single-float (%decode-uint16 stream)
+ (%decode-uint16 stream))
#+cmu
(kernel:make-single-float (%decode-sint32 stream))
- #+allegro
- (excl::shorts-to-single-float (%decode-uint16 stream)
- (%decode-uint16 stream)))
+ #+openmcl
+ (make-single-float (%decode-sint32 stream))
+ #+sbcl
+ (sb-kernel:make-single-float (%decode-sint32 stream)))
(defun %decode-double-float (stream)
- #+cmu
- (kernel:make-double-float (%decode-sint32 stream)
- (%decode-uint32 stream))
#+allegro
(excl::shorts-to-double-float (%decode-uint16 stream)
(%decode-uint16 stream)
(%decode-uint16 stream)
- (%decode-uint16 stream)))
+ (%decode-uint16 stream))
+ #+cmu
+ (kernel:make-double-float (%decode-sint32 stream)
+ (%decode-uint32 stream))
+ #+openmcl
+ (make-double-float (%decode-sint32 stream)
+ (%decode-uint32 stream))
+ #+sbcl
+ (sb-kernel:make-double-float (%decode-sint32 stream)
+ (%decode-uint32 stream)))
(defun %decode-array (stream)
(let* ((element-type (%decode-symbol stream))
@@ -380,3 +403,44 @@
(t (decode-object tag stream)))))
(defgeneric decode-object (tag stream))
+
+;;;; OpenMCL does not have these functions
+(defun make-single-float (bits)
+ (cond
+ ;; IEEE float special cases
+ ((zerop bits) 0.0)
+ ((= bits #x-80000000) -0.0)
+ (t (let* ((sign (ecase (ldb (byte 1 31) bits)
+ (0 1.0)
+ (1 -1.0)))
+ (iexpt (ldb (byte 8 23) bits))
+ (expt (if (zerop iexpt) ; denormalized
+ -126
+ (- iexpt 127)))
+ (mant (* (logior (ldb (byte 23 0) bits)
+ (if (zerop iexpt)
+ 0
+ (ash 1 23)))
+ (expt 0.5 23))))
+ (* sign (expt 2.0 expt) mant)))))
+
+#+openmcl
+(defun make-double-float (hi lo)
+ (cond
+ ;; IEEE float special cases
+ ((and (zerop hi) (zerop lo)) 0.0d0)
+ ((and (= hi #x-80000000) (zerop lo)) -0.0d0)
+ (t (let* ((bits (logior (ash hi 32) lo))
+ (sign (ecase (ldb (byte 1 63) bits)
+ (0 1.0d0)
+ (1 -1.0d0)))
+ (iexpt (ldb (byte 11 52) bits))
+ (expt (if (zerop iexpt) ; denormalized
+ -1022
+ (- iexpt 1023)))
+ (mant (* (logior (ldb (byte 52 0) bits)
+ (if (zerop iexpt)
+ 0
+ (ash 1 52)))
+ (expt 0.5d0 52))))
+ (* sign (expt 2.0d0 expt) mant)))))
Modified: trunk/bknr/src/data/object.lisp
===================================================================
--- trunk/bknr/src/data/object.lisp 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/data/object.lisp 2006-02-06 18:36:30 UTC (rev 1824)
@@ -211,6 +211,15 @@
(:metaclass persistent-class)
,@class-options)))
+(defmacro defpersistent-class (class (&rest superclasses) slots &rest class-options)
+ (let ((superclasses (or superclasses '(store-object))))
+ (when (member :metaclass class-options :key #'car)
+ (error "Can not define a persistent class with a metaclass."))
+ `(eval-when (:compile-toplevel :load-toplevel :execute)
+ (defclass ,class ,superclasses ,slots
+ (:metaclass persistent-class)
+ ,@class-options))))
+
#+nil
(define-persistent-class foo ()
((a :read)))
Modified: trunk/bknr/src/data/package.lisp
===================================================================
--- trunk/bknr/src/data/package.lisp 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/data/package.lisp 2006-02-06 18:36:30 UTC (rev 1824)
@@ -7,9 +7,10 @@
:mp
#+(not allegro)
:acl-compat.mp
+ #+allegro :aclmop
#+cmu :pcl
- #+sbcl :sb-mop
- #+allegro :aclmop)
+ #+openmcl :openmcl-mop
+ #+sbcl :sb-mop)
#+(not allegro)
(:shadowing-import-from :acl-compat.mp process-kill process-wait)
(:shadowing-import-from :cl-interpol quote-meta-chars)
@@ -41,6 +42,7 @@
#:persistent-xml-class
#:persistent-xml-class-importer
#:define-persistent-class
+ #:defpersistent-class
#:store-object
#:store-object-store
Modified: trunk/bknr/src/data/txn.lisp
===================================================================
--- trunk/bknr/src/data/txn.lisp 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/data/txn.lisp 2006-02-06 18:36:30 UTC (rev 1824)
@@ -297,7 +297,9 @@
;; dabei waere sync()-Semantik zu erwarten.
(finish-output stream)
#+cmu
- (unix:unix-fsync (kernel::fd-stream-fd stream)))
+ (unix:unix-fsync (kernel::fd-stream-fd stream))
+ #+sbcl
+ (sb-posix:fsync (sb-kernel::fd-stream-fd stream)))
(defvar *disable-sync* nil)
@@ -431,7 +433,7 @@
(close-transaction-log-stream store)
;; CMUCL will, dass das directory existiert, ACL nicht
- #+cmu
+ #+(or cmu sbcl)
(ensure-directories-exist backup-directory)
(when *store-debug*
@@ -490,7 +492,9 @@
(copy-stream s r))))
(format t "~&; truncating transaction log at position ~D.~%" p)
#+cmu
- (unix:unix-truncate (ext:unix-namestring pathname) p)))))
+ (unix:unix-truncate (ext:unix-namestring pathname) p)
+ #+sbcl
+ (sb-posix:truncate (namestring pathname) p)))))
(defgeneric restore-subsystem (store subsystem &key until))
Modified: trunk/bknr/src/indices/indexed-class.lisp
===================================================================
--- trunk/bknr/src/indices/indexed-class.lisp 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/indices/indexed-class.lisp 2006-02-06 18:36:30 UTC (rev 1824)
@@ -235,12 +235,12 @@
;;; avoid late instantiation
-#+(or allegro cmu sbcl)
+#+(or allegro cmu openmcl sbcl)
(defmethod initialize-instance :after ((class indexed-class) &key &allow-other-keys)
(compute-class-indices class (indexed-class-index-definitions class))
(reinitialize-class-indices class))
-#+(or allegro cmu sbcl)
+#+(or allegro cmu openmcl sbcl)
(defmethod reinitialize-instance :after ((class indexed-class) &key &allow-other-keys)
(compute-class-indices class (indexed-class-index-definitions class))
(reinitialize-class-indices class))
Modified: trunk/bknr/src/indices/package.lisp
===================================================================
--- trunk/bknr/src/indices/package.lisp 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/indices/package.lisp 2006-02-06 18:36:30 UTC (rev 1824)
@@ -11,6 +11,7 @@
:bknr.skip-list
#+allegro :aclmop
#+cmu :pcl
+ #+openmcl :openmcl-mop
#+sbcl :sb-pcl)
(:export #:index-add
#:index-get
Modified: trunk/bknr/src/utils/package.lisp
===================================================================
--- trunk/bknr/src/utils/package.lisp 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/utils/package.lisp 2006-02-06 18:36:30 UTC (rev 1824)
@@ -5,15 +5,11 @@
:cl-ppcre
:cl-interpol
:cxml-xmls
- #+cmu
- :extensions
:md5
-; #+sbcl
-; :sb-ext
- #+(not allegro)
- :acl-compat.mp
- #+allegro
- :mp)
+ #+cmu :extensions
+; #+sbcl :sb-ext
+ #+(not allegro) :acl-compat.mp
+ #+allegro :mp)
(:shadowing-import-from :cl-interpol quote-meta-chars)
#+(not allegro)
(:shadowing-import-from :acl-compat.mp process-kill process-wait)
Modified: trunk/bknr/src/utils/smbpasswd.lisp
===================================================================
--- trunk/bknr/src/utils/smbpasswd.lisp 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/utils/smbpasswd.lisp 2006-02-06 18:36:30 UTC (rev 1824)
@@ -32,6 +32,10 @@
(unless (zerop (process-exit-code process))
(error (make-condition 'smb-password-error :message (get-output-stream-string stream))))
(process-close process)))
+ #+openmcl
+ (ccl::run-program +smb-wrapper-program+
+ args
+ :output stream)
#+sbcl
(let ((process
(sb-ext:run-program +smb-wrapper-program+ args :output stream :error :output)))
Modified: trunk/bknr/src/utils/utils.lisp
===================================================================
--- trunk/bknr/src/utils/utils.lisp 2006-02-06 18:33:09 UTC (rev 1823)
+++ trunk/bknr/src/utils/utils.lisp 2006-02-06 18:36:30 UTC (rev 1824)
@@ -134,6 +134,7 @@
(let ((hostname
#+allegro (sys:getenv "HOST")
#+cmu (cdr (assoc :host ext:*environment-list*))
+ #+openmcl (ccl::getenv "HOST")
#+sbcl (sb-ext:posix-getenv "HOST")))
(unless hostname
(error "HOST environment variable not set, can't continue"))
@@ -169,7 +170,7 @@
(when (< read-count 4096) (return)))))))
(defun move-file (file1 file2)
- #+allegro
+ #+(or allegro openmcl)
(rename-file file1 file2)
#+cmu
(unix:unix-rename (namestring file1)
@@ -524,6 +525,8 @@
(aclmop:class-direct-subclasses class)
#+cmu
(pcl:class-direct-subclasses class)
+ #+openmcl
+ (openmcl-mop:class-direct-subclasses class)
#+sbcl
(sb-mop:class-direct-subclasses class)))
(apply #'append subclasses