Revision: 6371
Author: ek.kato
Date: Thu May 6 09:38:31 2010
Log: - Separate dynlib handling from module system of plugin.scm.
* scm/Makefile.am (SCM_FILES) : Add dynlib.scm.
* scm/plugin.scm
- Require dynlib.scm.
- (uim-plugin-lib-load-path) : Move to dynlib.scm and renamed with
s/plubin-lib/dynlib/.
- (plug-alist) : Move to dynlib.scm and renamed with
s/plugin/dynlib/.
- (plugin-func-alist) : Removed.
- (plugin-entry) : Move to dynlib.scm and renamed with
s/plugin/dynlib/.
- (plugin-list-append) : Ditto.
- (plugin-list-query) : Ditto.
- (plugin-list-query-library) : Ditto.
- (plugin-list-query-instance-init) : Ditto.
- (plugin-list-query-instance-quit) : Ditto.
- (module-load) : Simplify using require-dynlib.
- (module-unload) : Move to dynlib.scm and renamed with
s/module/dynlib/.
- (module-unload-all) : Ditto.
* scm/dynlib.scm
- (uim-dynlib-load-path) : Moved from plugin.scm and renamed.
- (dynlib-alist) : Ditto.
- (dynlib-entry) : Ditto.
- (dynlib-list-append) : Ditto.
- (dynlib-list-delete) : Ditto.
- (dynlib-list-query) : Ditto.
- (dynlib-list-query-library) : Ditto.
- (dynlib-list-query-instance-init) : Ditto.
- (dynlib-list-query-instance-quit) : Ditto.
- (find-dynlib-path) : Ditto.
- (require-dynlib) : Moved from plugin.scm with renamed and
simplification.
- (dynlib-unload) : Moved from plugin.scm and renamed.
- (dynlib-unload-all) : Ditto.
* scm/tutcode.scm : Follow the change.
* scm/fileio.scm : Ditto.
* scm/lolevel.scm : Ditto.
* scm/socket.scm : Ditto.
* scm/process.scm : Ditto.
* scm/openssl.scm : Ditto.
* scm/sqlite3.scm : Ditto.
* uim/uim.c (uim_quit) : Ditto.
http://code.google.com/p/uim/source/detail?r=6371
Added:
/trunk/scm/dynlib.scm
Modified:
/trunk/scm/Makefile.am
/trunk/scm/fileio.scm
/trunk/scm/lolevel.scm
/trunk/scm/openssl.scm
/trunk/scm/plugin.scm
/trunk/scm/process.scm
/trunk/scm/socket.scm
/trunk/scm/sqlite3.scm
/trunk/scm/tutcode.scm
/trunk/uim/uim.c
=======================================
--- /dev/null
+++ /trunk/scm/dynlib.scm Thu May 6 09:38:31 2010
@@ -0,0 +1,143 @@
+;;; dynlib.scm: dynlib for uim.
+;;;
+;;; Copyright (c) 2005-2010 uim Project http://code.google.com/p/uim/
+;;;
+;;; All rights reserved.
+;;;
+;;; Redistribution and use in source and binary forms, with or without
+;;; modification, are permitted provided that the following conditions
+;;; are met:
+;;; 1. Redistributions of source code must retain the above copyright
+;;; notice, this list of conditions and the following disclaimer.
+;;; 2. Redistributions in binary form must reproduce the above copyright
+;;; notice, this list of conditions and the following disclaimer in the
+;;; documentation and/or other materials provided with the distribution.
+;;; 3. Neither the name of authors nor the names of its contributors
+;;; may be used to endorse or promote products derived from this
software
+;;; without specific prior written permission.
+;;;
+;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND
+;;; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+;;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE
+;;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
CONTRIBUTORS BE LIABLE
+;;; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL
+;;; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+;;; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+;;; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT
+;;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY
+;;; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+;;; SUCH DAMAGE.
+;;;;
+
+(require "util.scm")
+
+(define uim-dynlib-load-path
+ (if (setugid?)
+ (list (string-append (sys-pkglibdir) "/plugin"))
+ (let ((home-dir (or (home-directory (user-name)) ""))
+ (ld-library-path (getenv "LD_LIBRARY_PATH")))
+ (filter string?
+ (append (list (getenv "LIBUIM_PLUGIN_LIB_DIR")
+ (if home-dir
+ (string-append (get-config-path! #f)
"/plugin")
+ '())
+ (string-append (sys-pkglibdir) "/plugin"))
+ ;; XXX
+ (if ld-library-path
+ (string-split ld-library-path ":")
+ '()))))))
+
+(define dynlib-alist ())
+
+(define-record 'dynlib-entry
+ '((name "")
+ ;;(desc "")
+ ;;(author "")
+ ;;(version #f)
+ (library #f)
+ (init-proc #f)
+ (quit-proc #f)))
+
+(define dynlib-list-append
+ (lambda (dynlib-name library init quit)
+ (let ((entry (dynlib-entry-new dynlib-name library init quit)))
+ (set! dynlib-alist
+ (append dynlib-alist (list entry))))))
+
+(define dynlib-list-delete
+ (lambda (dynlib-name)
+ (set! dynlib-alist
+ (alist-delete dynlib-name dynlib-alist string=?))))
+
+(define dynlib-list-query
+ (lambda (dynlib-name)
+ (assoc dynlib-name dynlib-alist)))
+
+(define dynlib-list-query-library
+ (lambda (dynlib-name)
+ (let ((entry (dynlib-list-query dynlib-name)))
+ (and entry
+ (dynlib-entry-library entry)))))
+
+(define dynlib-list-query-instance-init
+ (lambda (dynlib-name)
+ (let ((entry (dynlib-list-query dynlib-name)))
+ (and entry
+ (dynlib-entry-init-proc entry)))))
+
+(define dynlib-list-query-instance-quit
+ (lambda (dynlib-name)
+ (let ((entry (dynlib-list-query dynlib-name)))
+ (and entry
+ (dynlib-entry-quit-proc entry)))))
+
+
+(define find-dynlib-path
+ (lambda (paths dynlib-name)
+ (let ((path ()))
+ (cond ((null? paths) #f)
+ ((not (string? (car paths))) #f)
+ ((file-readable? (string-append (car paths)
+ "/libuim-"
+ dynlib-name
+ ".so"))
+ (string-append (car paths) "/libuim-" dynlib-name ".so"))
+ (else
+ (find-dynlib-path (cdr paths) dynlib-name))))))
+
+(define require-dynlib
+ (lambda (dynlib-name)
+ (let ((dynlib-exists? (dynlib-list-query dynlib-name)))
+ (if dynlib-exists?
+ #t
+ (and-let* ((lib-path (find-dynlib-path uim-dynlib-load-path
+ dynlib-name))
+ (proc-ptrs (%%dynlib-bind lib-path))
+ (library-ptr (car proc-ptrs))
+ (init-proc (car (cdr proc-ptrs)))
+ (quit-proc (car (cdr (cdr proc-ptrs)))))
+ (if (not (and (null? proc-ptrs)
+ (null? init-proc)
+ (null? quit-proc)))
+ (begin
+ (dynlib-list-append dynlib-name
+ library-ptr
+ init-proc
+ quit-proc)
+ #t)
+ #f))))))
+
+(define dynlib-unload
+ (lambda (dynlib-name)
+ (and-let* ((dynlib-exists? (dynlib-list-query dynlib-name))
+ (library-ptr (dynlib-list-query-library dynlib-name))
+ (init-proc (dynlib-list-query-instance-init dynlib-name))
+ (quit-proc (dynlib-list-query-instance-quit dynlib-name)))
+ (%%dynlib-unbind library-ptr init-proc quit-proc)
+ (dynlib-list-delete dynlib-name) #t)))
+
+(define dynlib-unload-all
+ (lambda ()
+ (%%dynlib-unbind-all dynlib-alist)
+ (set! dynlib-alist '())
+ #t))
=======================================
--- /trunk/scm/Makefile.am Mon Apr 26 15:50:19 2010
+++ /trunk/scm/Makefile.am Thu May 6 09:38:31 2010
@@ -53,7 +53,8 @@
input-parse.scm match.scm pregexp.scm \
http-client.scm http-server.scm \
sxml-tools.scm sxpathlib.scm \
- annotation.scm annotation-eb.scm
+ annotation.scm annotation-eb.scm \
+ dynlib.scm
ETAGS_ARGS=$(SCM_FILES) $(GENERATED_SCM_FILES)
=======================================
--- /trunk/scm/fileio.scm Sun Apr 4 20:35:54 2010
+++ /trunk/scm/fileio.scm Thu May 6 09:38:31 2010
@@ -31,9 +31,7 @@
(require-extension (srfi 9 48))
-(and (not (provided? "fileio"))
- (module-load "fileio")
- (provide "fileio"))
+(require-dynlib "fileio")
(define file-bufsiz 16384)
=======================================
--- /trunk/scm/lolevel.scm Mon Apr 12 20:56:27 2010
+++ /trunk/scm/lolevel.scm Thu May 6 09:38:31 2010
@@ -30,7 +30,7 @@
;;;;
(use srfi-1)
-(module-load "lolevel")
+(require-dynlib "lolevel")
(define (u8list-pack fmt . args)
(apply append
=======================================
--- /trunk/scm/openssl.scm Sun Apr 4 20:35:54 2010
+++ /trunk/scm/openssl.scm Thu May 6 09:38:31 2010
@@ -32,10 +32,8 @@
(require-extension (srfi 9))
(require "fileio.scm")
-(and (not (provided? "openssl"))
- (guard (err (else #f))
- (module-load "openssl"))
- (provide "openssl"))
+(guard (err (else #f))
+ (require-dynlib "openssl"))
(define-record-type openssl-file-internal
(make-openssl-file-internal-port ssl-ctx ssl) openssl-file-internal?
=======================================
--- /trunk/scm/plugin.scm Thu May 6 06:57:59 2010
+++ /trunk/scm/plugin.scm Thu May 6 09:38:31 2010
@@ -33,22 +33,7 @@
;;;;
(require "util.scm")
-
-(define uim-plugin-lib-load-path
- (if (setugid?)
- (list (string-append (sys-pkglibdir) "/plugin"))
- (let ((home-dir (or (home-directory (user-name)) ""))
- (ld-library-path (getenv "LD_LIBRARY_PATH")))
- (filter string?
- (append (list (getenv "LIBUIM_PLUGIN_LIB_DIR")
- (if home-dir
- (string-append (get-config-path! #f)
"/plugin")
- '())
- (string-append (sys-pkglibdir) "/plugin"))
- ;; XXX
- (if ld-library-path
- (string-split ld-library-path ":")
- '()))))))
+(require "dynlib.scm")
(define uim-plugin-scm-load-path
(if (setugid?)
@@ -61,52 +46,6 @@
'())
(sys-pkgdatadir))))))
-(define plugin-alist ())
-(define plugin-func-alist ())
-
-(define-record 'plugin-entry
- '((name "")
- ;;(desc "")
- ;;(author "")
- ;;(version #f)
- (library #f)
- (init-proc #f)
- (quit-proc #f)))
-
-(define plugin-list-append
- (lambda (plugin-name library init quit)
- (let ((entry (plugin-entry-new plugin-name library init quit)))
- (set! plugin-alist
- (append plugin-alist (list entry))))))
-
-(define plugin-list-delete
- (lambda (plugin-name)
- (set! plugin-alist
- (alist-delete plugin-name plugin-alist string=?))))
-
-(define plugin-list-query
- (lambda (plugin-name)
- (assoc plugin-name plugin-alist)))
-
-(define plugin-list-query-library
- (lambda (plugin-name)
- (let ((entry (plugin-list-query plugin-name)))
- (and entry
- (plugin-entry-library entry)))))
-
-(define plugin-list-query-instance-init
- (lambda (plugin-name)
- (let ((entry (plugin-list-query plugin-name)))
- (and entry
- (plugin-entry-init-proc entry)))))
-
-(define plugin-list-query-instance-quit
- (lambda (plugin-name)
- (let ((entry (plugin-list-query plugin-name)))
- (and entry
- (plugin-entry-quit-proc entry)))))
-
-
;; The name 'module' is adopted from a post from Hiroyuki. If you
;; feel bad about the meaning of 'module', post your opinion to
;; u...@fdo.
@@ -197,39 +136,10 @@
(define module-load
(lambda (module-name)
- (and-let* ((module-not-exists? (not (plugin-list-query module-name)))
- (lib-path (find-module-lib-path uim-plugin-lib-load-path
- module-name))
- (proc-ptrs (%%dynlib-bind lib-path))
- (library-ptr (car proc-ptrs))
- (init-proc (car (cdr proc-ptrs)))
- (quit-proc (car (cdr (cdr proc-ptrs))))
- (scm-path '()))
- (if (not (and (null? proc-ptrs)
- (null? init-proc)
- (null? quit-proc)))
- (begin
- (set! scm-path (find-module-scm-path
- uim-plugin-scm-load-path module-name))
- (plugin-list-append module-name
- library-ptr
- init-proc
- quit-proc)
- (if (string? scm-path) (try-require scm-path))
- #t)
- #f))))
-
-(define module-unload
- (lambda (module-name)
- (and-let* ((module-exists? (plugin-list-query module-name))
- (library-ptr (plugin-list-query-library module-name))
- (init-proc (plugin-list-query-instance-init module-name))
- (quit-proc (plugin-list-query-instance-quit module-name)))
- (%%dynlib-unbind library-ptr init-proc quit-proc)
- (plugin-list-delete module-name) #t)))
-
-(define module-unload-all
- (lambda ()
- (%%dynlib-unbind-all plugin-alist)
- (set! plugin-alist '())
- #t))
+ (if (require-dynlib module-name)
+ (let ((scm-path (find-module-scm-path
+ uim-plugin-scm-load-path module-name)))
+ (if (string? scm-path)
+ (try-require scm-path))
+ #t)
+ #f)))
=======================================
--- /trunk/scm/process.scm Sun Apr 4 20:35:54 2010
+++ /trunk/scm/process.scm Thu May 6 09:38:31 2010
@@ -31,9 +31,7 @@
(require "i18n.scm")
(require "fileio.scm")
-(and (not (provided? "process"))
- (module-load "process")
- (provide "process"))
+(require-dynlib "process")
(define process-waitpid-options-alist (process-waitpid-options?))
=======================================
--- /trunk/scm/socket.scm Tue Apr 20 01:46:51 2010
+++ /trunk/scm/socket.scm Thu May 6 09:38:31 2010
@@ -32,9 +32,7 @@
(require-extension (srfi 1 2 9))
(use util)
(require "fileio.scm")
-(and (not (provided? "socket"))
- (module-load "socket")
- (provide "socket"))
+(require-dynlib "socket")
(define addrinfo-ai-flags-alist (addrinfo-ai-flags-alist?))
(define addrinfo-ai-family-alist (addrinfo-ai-family-alist?))
=======================================
--- /trunk/scm/sqlite3.scm Sun Apr 4 20:35:54 2010
+++ /trunk/scm/sqlite3.scm Thu May 6 09:38:31 2010
@@ -29,10 +29,8 @@
;;; SUCH DAMAGE.
;;;;
-(and (not (provided? "sqlite3"))
- (guard (err (else #f))
- (module-load "sqlite3"))
- (provide "sqlite3"))
+(guard (err (else #f))
+ (require-dynlib "sqlite3"))
(require-extension (srfi 1))
=======================================
--- /trunk/scm/tutcode.scm Thu Apr 22 18:16:04 2010
+++ /trunk/scm/tutcode.scm Thu May 6 09:38:31 2010
@@ -93,8 +93,7 @@
(require-custom "tutcode-key-custom.scm")
;;(load-plugin "skk") ;SKK·Á¼°¤Î¸ò¤¼½ñ¤¼½ñ¤Î¸¡º÷¤Î¤¿¤á¡¢libuim-skk.so¤ò¥í¡¼¥É
;; FIXME: Temporary workaround for the module system reorganization
-(and-let* ((lib-path (find-module-lib-path uim-plugin-lib-load-path "skk"))
- (proc-ptrs (%%dynlib-bind lib-path))))
+(require-dynlib "skk")
(require "tutcode-bushudic.scm") ;Éô¼ó¹çÀ®ÊÑ´¹¼½ñ
(require "tutcode-kigoudic.scm") ;µ¹æÆþÎϥ⡼¥ÉÍѤε¹æÉ½
=======================================
--- /trunk/uim/uim.c Tue Apr 27 18:51:37 2010
+++ /trunk/uim/uim.c Thu May 6 09:38:31 2010
@@ -185,7 +185,7 @@
uim_notify_quit();
#endif
uim_scm_callf("annotation-unload", "");
- uim_scm_callf("module-unload-all", "");
+ uim_scm_callf("dynlib-unload-all", "");
uim_quit_dynlib();
uim_scm_quit();
uim_initialized = UIM_FALSE;