r2033: move initialize code for better .system compilation
[clsql.git] / interfaces / mysql / mysql-loader.cl
index caa8c55fa559ba80f6194e4dd62f2bb03f504f50..7434670da5a235391e45b2e3d2ed5506c7710bfe 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmers:   Kevin M. Rosenberg
 ;;;; Date Started:  Feb 2002
 ;;;;
-;;;; $Id: mysql-loader.cl,v 1.3 2002/03/24 04:37:09 kevin Exp $
+;;;; $Id: mysql-loader.cl,v 1.8 2002/05/13 22:05:21 kevin Exp $
 ;;;;
 ;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;;
 
 (defvar *clsql-mysql-library-filename* 
     (translate-logical-pathname 
-     #+(or linux unix) "CLSQL:interfaces;mysql;clsql-mysql.so"
-     #+(or mswindows win32) "CLSQL:interfaces;mysql;clsql-mysql.dll"
+     #+(or linux unix) "CL-LIBRARY:clsql;interfaces;mysql;clsql-mysql.so"
+     #+(or mswindows win32) "CL-LIBRARY:clsql;interfaces;mysql;clsql-mysql.dll"
      ))
 
-(defvar *mysql-library-filename* 
+(defvar *mysql-library-filename*
     (cond
      ((probe-file "/opt/mysql/lib/mysql/libmysqlclient.so")
       "/opt/mysql/lib/mysql/libmysqlclient.so")
       (warn "Can't find MySQL client library to load.")))
   "Location where the MySQL client library is to be found.")
 
+(defvar *mysql-library-candidate-names*
+    '("libmysqlclient" "libmysql"))
+
+(defvar *mysql-library-candidate-directories*
+    '("/opt/mysql/lib/mysql/" "/usr/local/lib/" "/usr/lib/" "/mysql/lib/opt/"))
+
+(defvar *mysql-library-candidate-drive-letters* '("C" "D" "E"))
+
 (defvar *mysql-supporting-libraries* '("c")
   "Used only by CMU. List of library flags needed to be passed to ld to
 load the MySQL client library succesfully.  If this differs at your site,
@@ -58,19 +66,30 @@ set to the right path before compiling or loading the system.")
   *mysql-library-loaded*)
                                      
 (defmethod clsql-sys:database-type-load-foreign ((database-type (eql :mysql)))
-  (when
-      (and
-       (uffi:load-foreign-library *mysql-library-filename* 
-                                 :module "mysql" 
-                                 :supporting-libraries 
-                                 *mysql-supporting-libraries*)
-       (uffi:load-foreign-library *clsql-mysql-library-filename* 
-                                 :module "clsql-mysql" 
-                                 :supporting-libraries 
-                                 (append *mysql-supporting-libraries*)))
-    (setq *mysql-library-loaded* t)))
+  (let ((mysql-path
+        (uffi:find-foreign-library *mysql-library-candidate-names*
+                                   *mysql-library-candidate-directories*
+                                   :drive-letters
+                                   *mysql-library-candidate-drive-letters*)))
+    ;; zlib required to load mysql on CMUCL Solaris
+    (uffi:load-foreign-library 
+     (uffi:find-foreign-library '("libz" "zlib")
+                               '("/usr/lib/" "/usr/local/" "/lib/")))
+    (when
+       (and
+        (uffi:load-foreign-library mysql-path
+                                   :module "mysql" 
+                                   :supporting-libraries 
+                                   *mysql-supporting-libraries*)
+        (uffi:load-foreign-library *clsql-mysql-library-filename* 
+                                   :module "clsql-mysql" 
+                                   :supporting-libraries 
+                                   (append *mysql-supporting-libraries*)))
+      (setq *mysql-library-loaded* t))))
 
 
 (clsql-sys:database-type-load-foreign :mysql)
-
-
+(when (clsql-sys:database-type-library-loaded :mysql)
+  (clsql-sys:initialize-database-type :database-type :mysql)
+  (setq clsql:*default-database-type* :mysql)
+  (pushnew :mysql cl:*features*))