[elephant-cvs] CVS elephant/src/db-bdb

ieslick ieslick at common-lisp.net
Sun Feb 19 17:25:53 UTC 2006


Update of /project/elephant/cvsroot/elephant/src/db-bdb
In directory common-lisp:/tmp/cvs-serv25268/src/db-bdb

Modified Files:
	sleepycat.lisp 
Added Files:
	libsleepycat.def 
Log Message:
New build process completed & tested for BDB

--- /project/elephant/cvsroot/elephant/src/db-bdb/sleepycat.lisp	2006/02/19 04:53:00	1.1
+++ /project/elephant/cvsroot/elephant/src/db-bdb/sleepycat.lisp	2006/02/19 17:25:53	1.2
@@ -45,8 +45,69 @@
 		 %db-sequence-get-lower db-sequence-get-fixnum
 		 ))
 
+;;
+;; EXTERNAL LIBRARY DEPENDENCIES - LOAD DURING LOAD/COMPILATION
+;;
+
+(eval-when (:compile-toplevel :load-toplevel)
+
+  ;;
+  ;; Under Linux we need pthreads!
+  ;;
+
+  #+linux
+  (unless 
+      (uffi:load-foreign-library "/lib/tls/libpthread.so.0" :module "pthread")
+    (error "Couldn't load libpthread!"))
+
+  ;; 
+  ;; Our interface library requires that the main Berkeley DB library be loaded
+  ;;
+
+  (unless
+      (uffi:load-foreign-library 
+       ele-bdb-system::*sleepycat-foreign-library-path*
+       :module "sleepycat")
+    (error "Couldn't load libdb (Sleepycat)!"))
+
+  ;; 
+  ;; Our local interface library
+  ;;
+
+  (unless
+      (uffi:load-foreign-library 
+       (merge-pathnames 
+	(make-pathname :name "libsleepycat" :type *c-library-extension*)
+	(merge-pathnames (make-pathname :directory "src/db-bdb")
+			 (asdf:component-pathname (asdf:find-system 'elephant))))
+       :module "libsleepycat")
+    (error "Couldn't load src/db-bdb/libsleepycat.~A!" elephant-memutil::*c-library-extension*))
+
+  ;; Error handling 
+  ;; I put this here so we could validate that the library was loaded
+   
+  (def-function ("db_strerr" %db-strerror)
+      ((error :int))
+    :returning :cstring)
+
+  (defun db-strerror (errno)
+    "Get the string error associated with an error number."
+    (convert-from-cstring (%db-strerror errno)))
+
+  (define-condition db-error (error) 
+    ((errno :type fixnum :initarg :errno :reader db-error-errno))
+    (:report
+     (lambda (condition stream)
+       (declare (type db-error condition) (type stream stream))
+       (format stream "Berkeley DB error: ~A"
+	       (db-strerror (db-error-errno condition)))))
+    (:documentation "Berkeley DB / Sleepycat errors."))
+  )
+
+;;
 ;; Constants and Flags
 ;; eventually write a macro which generates a custom flag function.
+;;
 
 ;I don't like the UFFI syntax for enumerations
 (defconstant DB-BTREE                 1)
@@ -327,45 +388,6 @@
       ,@(when set-transaction-timeout `((when ,set-transaction-timeout (setq ,flags (logior ,flags DB_SET_TXN_TIMEOUT)))))
       ,flags)))
 
-
-(eval-when (:compile-toplevel :load-toplevel)
-  (def-enum DBTYPE ((:BTREE 1) :HASH :QUEUE :RECNO :UNKNOWN))
-
-  #+linux
-  (unless 
-      (uffi:load-foreign-library "/lib/tls/libpthread.so.0" :module "pthread")
-    (error "Couldn't load libpthread!"))
-
-  (unless
-      (uffi:load-foreign-library 
-       ;; Sleepycat: this works on linux
-       #+linux
-;;       "/db/ben/lisp/db43/lib/libdb.so" 
-       "/usr/local/BerkeleyDB.4.3/lib/libdb-4.3.so"
-       ;; this works on FreeBSD
-       #+(and (or bsd freebsd) (not darwin) (not macosx))
-       "/usr/local/lib/db43/libdb.so" 
-       #+(or darwin macosx)
-       ;; for Fink (OS X) -- but I will assume Linux more common...
-;;       "/sw/lib/libdb-4.3.dylib"
-       ;; a possible manual install
-       "/usr/local/BerkeleyDB.4.3/lib/libdb.dylib" 
-       :module "sleepycat")
-    (error "Couldn't load libdb (Sleepycat)!"))
-
-   ;; Libsleepycat.so: edit this
-   (unless
-       (uffi:load-foreign-library 
-        (if (find-package 'asdf)
- 	   (merge-pathnames 
- 	    (make-pathname :name "libsleepycat" :type elephant-memutil::*c-library-extension*)
- 	    (asdf:component-pathname (asdf:find-system 'elephant)))
-  	   (format nil "/usr/local/share/common-lisp/elephant-0.3/libsleepycat.~A" elephant-memutil::*c-library-extension*))
-        :module "libsleepycat")
-     (error "Couldn't load libsleepycat.~A!" elephant-memutil::*c-library-extension*))
-   )
-
-
 ;; Environment
 
 (def-function ("db_env_cr" %db-env-create)
@@ -470,6 +492,9 @@
 
 ;; Database
 
+(eval-when (:compile-toplevel :load-toplevel)
+  (def-enum DBTYPE ((:BTREE 1) :HASH :QUEUE :RECNO :UNKNOWN)))
+
 (def-function ("db_cr" %db-create)
     ((dbenv :pointer-void)
      (flags :unsigned-int)
@@ -1845,24 +1870,3 @@
     (if (< ret 0)
 	(error 'db-error :errno ret)
 	ret)))
-
-;; Misc
-
-;; Errors
-
-(def-function ("db_strerr" %db-strerror)
-    ((error :int))
-  :returning :cstring)
-
-(defun db-strerror (errno)
-  "Get the string error associated with an error number."
-  (convert-from-cstring (%db-strerror errno)))
-
-(define-condition db-error (error) 
-  ((errno :type fixnum :initarg :errno :reader db-error-errno))
-  (:report
-   (lambda (condition stream)
-     (declare (type db-error condition) (type stream stream))
-     (format stream "Berkeley DB error: ~A"
-	     (db-strerror (db-error-errno condition)))))
-  (:documentation "Berkeley DB / Sleepycat errors."))

--- /project/elephant/cvsroot/elephant/src/db-bdb/libsleepycat.def	2006/02/19 17:25:53	NONE
+++ /project/elephant/cvsroot/elephant/src/db-bdb/libsleepycat.def	2006/02/19 17:25:53	1.1
LIBRARY	Elephant
EXPORTS
	read_int
	read_uint
	read_float
	read_double
	write_int
	write_uint
	write_float
	write_double
	offset_charp
	copy_buf
	db_env_cr
	db_strerr
	db_env_close
	db_env_open
	db_env_dbremove
	db_env_dbrename
	db_env_remove
	db_env_set_flags
	db_env_get_flags
	db_cr
	db_close
	db_open
	db_remove
	db_rename
	db_sync
	db_truncate
	db_set_flags
	db_get_flags
	db_set_pagesize
	db_get_pagesize
	db_set_bt_compare
	db_set_dup_compare
	read_num
	lisp_compare
	db_set_lisp_compare
	db_set_lisp_dup_compare
	case_cmp
	lex_cmp
	utf16_cmp
	db_get_raw
	db_put_raw
	db_del
	db_cursor
	db_cursor_close
	db_cursor_del
	db_cursor_dup
	db_cursor_get_raw
	db_cursor_pget_raw
	db_cursor_put_raw
	db_del_kv
	db_cursor_get_multiple_key
	db_multiple_key_next
	db_txn_begin
	db_txn_abort
	db_txn_commit
	db_txnp_begin
	db_txn_id
	db_env_lock_id
	db_env_lock_id_free
	db_env_lock_get
	db_env_lock_put
	db_env_lock_vec
	db_env_set_timeout
	db_env_get_timeout
	db_env_set_lk_detect
	db_env_get_lk_detect
	db_env_lock_detect
	db_associate
	never_index
	db_fake_associate
	next_counter



More information about the Elephant-cvs mailing list