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;

Reply via email to