[elephant-cvs] CVS elephant
ieslick
ieslick at common-lisp.net
Sun Feb 19 17:25:53 UTC 2006
Update of /project/elephant/cvsroot/elephant
In directory common-lisp:/tmp/cvs-serv25268
Modified Files:
INSTALL Makefile ele-bdb.asd
Log Message:
New build process completed & tested for BDB
--- /project/elephant/cvsroot/elephant/INSTALL 2006/02/15 01:54:07 1.14
+++ /project/elephant/cvsroot/elephant/INSTALL 2006/02/19 17:25:52 1.15
@@ -26,9 +26,28 @@
A C compiler, probably gcc or Visual Studio. Presumably you
have this if you installed Sleepycat.
-------------
-Instructions
-------------
+------------------
+Short Instructions
+------------------
+
+The new build system should work out of the box on most Un*x
+platforms that have asdf, uffi and either clsql or Berkeley DB
+installed in the usual places.
+
+Try: (asdf:operate 'asdf:load-op :elephant)
+Then: (open-store '(<backend> <spec>))
+
+Where <backend> = { :bdb | :clsql }
+ <spec> = { '(:sqlite3 "db path") | '(:postgresql "db path") | "bdb directory" }
+
+This should load all files, including compiling libraries, on
+most systems. For Win32, see the instructions below.
+
+(We'll improve the build process for Win32 if there is demand)
+
+-----------------
+Long Instructions
+-----------------
I assume you have a supported lisp with asdf.
@@ -36,58 +55,69 @@
/usr/local/share/common-lisp/elephant-0.3/
+
1) Install UFFI. If you're using 1.4.24 replace
-path-to-uffi/src/functions.lisp
+ path-to-uffi/src/functions.lisp
+
+ with the provided file.
-with the provided file.
-2) Install a backend: Either Berkeley DB 4.3, PostGresql, or SQLite 3.
+2) Install ASDF.
+
+Ensure that you have a recent version of ASDF installed as
+the load process now depends upon it.
+
+
+3) Install a backend: Either Berkeley DB 4.3, PostGresql, or SQLite 3.
+
+-------
+SQL
+-------
For relational database systems, refering the formal documentation
other the heading "SQL-BACK-END".
-For Berkeley 4.3:
-Under Un*x, you may actually
-already have this installed, though it may be compiled with
-funny options, so if things don't work you may want to try
-to start from scratch. FreeBSD has a port for this, as I'm
-sure do other BSDs (including Darwin/Fink.) Take note of
-where libdb.so and db.h are installed (usually
-/usr/local/BerekleyDB.4.3/lib/libdb.so and
-/usr/local/BerekleyDB.4.3/include/db.h, or
-/usr/local/lib/db42/libdb.so and
-/usr/local/include/db42/db.h.)
+-------------
+Berkeley 4.3:
+-------------
-Compile and install the libsleepycat shared library.
+Under Un*x, you may actually already have this installed, though
+it may be compiled with funny options, so if things don't work
+you may want to try to start from scratch. FreeBSD has a port
+for this, as I'm sure do other BSDs (including Darwin/Fink.)
+Take note of where libdb.so and db.h are installed, usually:
-Under Un*x, edit Makefile and run (using GNU make, gmake on
-BSD)
+ /usr/local/BerekleyDB.4.3/lib/libdb.so and
+ /usr/local/BerekleyDB.4.3/include/db.h, or
-make
+ /usr/local/lib/db42/libdb.so and
+ /usr/local/include/db42/db.h.)
-This compiles src/libsleepycat.c and installs it into
+a) Edit Makefile variable DB43DIR and DB43INC, DB43LIB if necessary
-/usr/local/share/common-lisp/elephant-0.3/
+This makes sure that the build process can find your files.
+You can test that the build works by calling:
-You probably have to make sure this directory exists before running
-make install.
+'make bdb'.
-If you need to change this path, you will change it in the Makefile
-and also in controller.lisp on the line:
+b) Also edit the variable *sleepycat-foreign-library-path* in
-(defvar *elephant-lib-path* "/usr/local/share/common-lisp/elephant-0.3/")
+ ele-bdb.asd
-or where you specified. On Darwin / OS X you need to have
-the developer tools installed. In the Makefile and other places
-there are commented-out lines showing settings that some users have used for
-OS X; if you are using that I assume you will have to comment out the
-appropriate lines and uncomment those examples.
+to point to your local distribution of the Berkeley DB libraries
-For Win32 (directions courtesy of Bill Clementson):
+Darwin / OS X
+---------------
+You need to have the developer tools installed. In the Makefile and
+ele-bdb.lib there are commented-out lines showing settings that some
+users have used for OS X; if you are using that I assume you will
+have to comment out the appropriate lines and uncomment those examples.
-Create an MSVC dll project and add src/libsleepycat.c,
-src/libsleepycat.def and the Berkeley DB libdb43.lib files
+For Win32 (directions courtesy of Bill Clementson):
+---------------------------------------------------
+Create an MSVC dll project and add src/db-bdb/libsleepycat.c,
+src/db-bdb/libsleepycat.def and the Berkeley DB libdb43.lib files
to the project (should be in the build_win32/release folder)
Add the Berkeley DB dbinc include files directory and the
@@ -101,15 +131,28 @@
libsleepycat.c, it may or may not be necessary to load
libdb43.dll into Lisp (see below.)
-3) Compile and load Elephant:
-First, edit src/sleepycat.lisp so that it points to the
-correct libraries. If you're using Un*x and ASDF, this is
-probably automagic.
-
-Symlink elephant.asd to your asdf systems directory (mine is
-/usr/local/share/common-lisp/systems). Fire up lisp and
-depending on your database backend:
+4) Compile and load Elephant:
+
+The new backend load process should work automatically on Un*x
+systems but if there are problems with loading foreign libraries,
+then you can test your C tools setup with 'make' in the elephant
+root directory. This will build the common memutils library
+in src/memutil/libmemutil.so/dylib that all backends require.
+
+There is a new two-phase load process. The first requires that
+you use asdf to load the main elephant front-end:
+
+(asdf:operate 'asdf:load-op :elephant)
+
+This will load and compile Elephant. This will also automatically
+load UFFI.
+
+When you call (open-store <spec>) inside lisp it will automatically
+load the remaining dependencies for the specified backend via ASDF.
+
+To test the load process explicitly the following asdf files are
+provided:
if you are using Sleepycat / Berkeley DB, type:
(asdf:operate 'asdf:load-op :ele-bdb)
@@ -120,16 +163,8 @@
if you are using SQLite3, type:
(asdf:operate 'asdf:load-op :ele-sqlite3)
-This will load and compile Elephant. This will also
-automatically load UFFI.
-I can't seem to make OpenMCL not intern default keyword
-values of my macros -- something which doesn't happen on
-other implementations. I can't reproduce the issue except
-for in my code, but expect (use-package "ELE")'s to produce
-conflicting symbol warnings.
-
-4) Make the documentation:
+5) Make the documentation:
Execute:
@@ -137,6 +172,7 @@
In the doc directory should be build the HTML version of the texinfo files.
+
-------
Testing
-------
@@ -145,16 +181,29 @@
http://www.cliki.net/RT
-Once RT is installed, edit tests/elephant-tests.lisp to make
-*testdb-path* point to somewhere appropriate. Symlink
-elephant-tests.asd to your asdf systems directory, then run
+Once RT is installed
(asdf:operate 'asdf:load-op :elephant-tests)
(in-package :ele-tests)
-(do-all-tests)
+(setf *default-spec* <backend>)
+ where <backend> = { *testsqlite3-spec* | *testpg-spec* | *testbdb-spec* }
+(do-backend-tests)
+
+This will test the standalone API for your backend. Currently all tests are
+passing on 0.6.0. There will be a set of migration tests that will be 'ignored'
+but the final message should indicate no failing tests.
+
+This should take less than 5 minutes on decent hardware.
+
+Elephant allows migration between repositories. To test this:
+
+(do-migration-tests *default-spec* <backend>)
+ where <backend> is a different *testXXXXX-spec* variable to test migration
+ to that backend.
+
+This should take less than 2 minutes on decent hardware.
+
+A backend is considered "green" if it can pass both the backend tests and the
+migration tests.
-this should take about 5 minutes on decent hardware. Note
-that the "no-eval-initform" and "update-class" tests fail,
-these are known bugs which will get fixed in a future
-release.
--- /project/elephant/cvsroot/elephant/Makefile 2006/02/19 16:22:39 1.10
+++ /project/elephant/cvsroot/elephant/Makefile 2006/02/19 17:25:52 1.11
@@ -49,7 +49,7 @@
BDBSRC=src/db-bdb
-bdb: libsleepycat.$(EXT)
+bdb: $(BDBSRC)/libsleepycat.$(EXT)
$(BDBSRC)/libsleepycat.$(EXT): $(BDBSRC)/libsleepycat.c
gcc $(SHARED) -Wall -L$(DBLIBDIR) -I$(DBINCDIR) -fPIC -O3 -o $@ $< -ldb -lm
--- /project/elephant/cvsroot/elephant/ele-bdb.asd 2006/02/19 04:52:58 1.6
+++ /project/elephant/cvsroot/elephant/ele-bdb.asd 2006/02/19 17:25:52 1.7
@@ -23,6 +23,82 @@
(in-package :ele-bdb-system)
+(eval-when (:compile-toplevel :load-toplevel :execute)
+ ;; We need this dependency satisfied to compute what to do for C files
+ (unless (find-package 'uffi)
+ (asdf:operate 'asdf:load-op 'uffi)))
+
+;;
+;; EDIT ME FOR YOUR SYSTEM
+;;
+;; An attempt at good defaults is here. We should
+;; later add a search function that users can add to
+;; so they don't have to edit source
+;;
+
+(defparameter *sleepycat-foreign-library-path*
+ ;; 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 (or darwin 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")
+
+(defclass bdb-c-source (c-source-file)
+ ())
+
+(defparameter *root-dir* (pathname-directory *load-truename*))
+
+(defparameter *library-file-dir* (append (pathname-directory *load-truename*)
+ (list "src" "db-bdb")))
+
+;; Compile foreign library on non-win32 platforms
+
+(defmethod output-files ((o compile-op) (c bdb-c-source))
+ (let ((library-file-type
+ (funcall (intern (symbol-name '#:default-foreign-library-type)
+ (symbol-name '#:uffi)))))
+ (list (make-pathname :name (component-name c)
+ :type library-file-type
+ :directory *library-file-dir*))))
+
+(defmethod perform ((o compile-op) (c bdb-c-source))
+ (unless (operation-done-p o c)
+ #-(or win32 windows)
+ (unless (zerop (uffi:run-shell-command
+ (format nil
+ #-freebsd "cd ~A; make bdb"
+ #+freebds "cd ~A; gmake bdb"
+ (make-pathname :directory *root-dir*))))
+ (format t "Couldn't build library from libsleepycat.c via 'make bdb'~%")
+ (error 'operation-error :component c :operation o))))
+
+(defmethod operation-done-p ((o compile-op) (c bdb-c-source))
+ (or (let ((lib (make-pathname :defaults (component-pathname c)
+ :type (uffi:default-foreign-library-type))))
+ (and (probe-file lib) (probe-file (component-pathname c))
+ (> (file-write-date lib) (file-write-date (component-pathname c)))))))
+
+;; Load op - ensure that foreign library is loaded
+
+(defmethod perform ((o load-op) (c bdb-c-source))
+ "Nothing to do!"
+ t)
+
+(defmethod operation-done-p ((o load-op) (c bdb-c-source))
+ "Operation is done when the foreign library is loaded which should
+ happen when we compile the interface lisp file"
+ (and (symbol-function (intern (symbol-name '#:%db-strerror)
+ (find-package '#:sleepycat)))
+ t))
+
+
(defsystem ele-bdb
:name "elephant"
:author "Ben Lee <blee at common-lisp.net>"
@@ -37,6 +113,7 @@
((:module :db-bdb
:components
((:file "package")
+ (:bdb-c-source "libsleepycat")
(:file "sleepycat")
(:file "bdb-controller")
(:file "bdb-transactions")
More information about the Elephant-cvs
mailing list