X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=db-mysql%2Fmysql-loader.lisp;h=afea3e5415359a5dd155b1ff1a86c95c0335d050;hp=b0c9c14dd517f6cf12f90744d884aff482228521;hb=79d8426bb78f25255a2cb2550ed2d41174b35b53;hpb=7d50938ba2db52a713498e49aa1679deae6f0b6b diff --git a/db-mysql/mysql-loader.lisp b/db-mysql/mysql-loader.lisp index b0c9c14..afea3e5 100644 --- a/db-mysql/mysql-loader.lisp +++ b/db-mysql/mysql-loader.lisp @@ -2,59 +2,27 @@ ;;;; ************************************************************************* ;;;; FILE IDENTIFICATION ;;;; -;;;; Name: mysql-loader.sql -;;;; Purpose: MySQL library loader using UFFI -;;;; Programmers: Kevin M. Rosenberg -;;;; Date Started: Feb 2002 +;;;; Name: mysql-loader.sql +;;;; Purpose: MySQL library loader using UFFI +;;;; Author: Kevin M. Rosenberg +;;;; Created: Feb 2002 ;;;; -;;;; $Id: mysql-loader.lisp,v 1.1 2002/09/30 10:19:23 kevin Exp $ -;;;; -;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg +;;;; This file, part of CLSQL, is Copyright (c) 2002-2010 by Kevin M. Rosenberg ;;;; ;;;; CLSQL users are granted the rights to distribute and use this software ;;;; as governed by the terms of the Lisp Lesser GNU Public License ;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. ;;;; ************************************************************************* -(declaim (optimize (debug 3) (speed 3) (safety 1) (compilation-speed 0))) -(in-package :mysql) - -;;;; Modified by Kevin Rosenberg -;;;; - probe potential directories to find library -;;;; - Changed from CMUCL functions to UFFI to -;;;; -- prevent library from being loaded multiple times -;;;; -- support Allegro CL and Lispworks +(in-package #:mysql) -(defvar *clsql-mysql-library-filename* - (uffi:find-foreign-library - "clsql-mysql" - `("/usr/lib/clsql/" - "/opt/lisp/clsql/db-mysql/" - "/home/kevin/debian/src/clsql/db-mysql/") - :drive-letters '("C" "D" "E" "F" "G"))) - -(defvar *mysql-library-filename* - (cond - ((probe-file "/opt/mysql/lib/mysql/libmysqlclient.so") - "/opt/mysql/lib/mysql/libmysqlclient.so") - ((probe-file "/usr/local/lib/libmysqlclient.so") - "/usr/local/lib/libmysqlclient.so") - ((probe-file "/usr/lib/libmysqlclient.so") - "/usr/lib/libmysqlclient.so") - #+(or win32 mswindows) - ((probe-file "c:/mysql/lib/opt/libmysql.dll") - "c:/mysql/lib/opt/libmysql.dll") - (t - (warn "Can't find MySQL client library to load."))) - "Location where the MySQL client library is to be found.") +;; searches clsql_mysql64 to accomodate both 32-bit and 64-bit libraries on same system +(defparameter *clsql-mysql-library-candidate-names* + `(,@(when (> most-positive-fixnum (expt 2 32)) (list "clsql_mysql64")) + "clsql_mysql")) (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")) + '("libmysqlclient" "libmysql")) (defvar *mysql-supporting-libraries* '("c") "Used only by CMU. List of library flags needed to be passed to ld to @@ -64,32 +32,20 @@ set to the right path before compiling or loading the system.") (defvar *mysql-library-loaded* nil "T if foreign library was able to be loaded successfully") -(defmethod clsql-base-sys:database-type-library-loaded ((database-type (eql :mysql))) +(defmethod clsql-sys:database-type-library-loaded ((database-type (eql :mysql))) *mysql-library-loaded*) - -(defmethod clsql-base-sys:database-type-load-foreign ((database-type (eql :mysql))) - (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/"))) - (if (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) - (warn "Unable to load MySQL client library ~A or CLSQL-MySQL library ~A" - mysql-path *clsql-mysql-library-filename*)))) +(defmethod clsql-sys:database-type-load-foreign ((database-type (eql :mysql))) + (unless *mysql-library-loaded* + (clsql:push-library-path clsql-mysql-system::*library-file-dir*) + + (clsql-uffi:find-and-load-foreign-library *mysql-library-candidate-names* + :module "mysql" + :supporting-libraries *mysql-supporting-libraries*) -(clsql-base-sys:database-type-load-foreign :mysql) + (clsql-uffi:find-and-load-foreign-library *clsql-mysql-library-candidate-names* + :module "clsql-mysql" + :supporting-libraries *mysql-supporting-libraries*) + (setq *mysql-library-loaded* t))) +(clsql-sys:database-type-load-foreign :mysql)