Revision: 6690
Author: ek.kato
Date: Thu Aug 5 19:09:23 2010
Log: * Merge r6686:6689 from trunk.
http://code.google.com/p/uim/source/detail?r=6690
Modified:
/branches/1.6/doc/PLUGIN
/branches/1.6/scm/plugin.scm
=======================================
--- /branches/1.6/doc/PLUGIN Fri May 7 03:03:24 2010
+++ /branches/1.6/doc/PLUGIN Thu Aug 5 19:09:23 2010
@@ -14,8 +14,8 @@
|___________| +---> foo.scm
When called (require-module "foo") from libuim scheme engine,
libuim-foo.so
- is loaded if existed and call 'plugin_instance_init' in libuim-foo.so
first.
- After that 'foo.scm' is loaded if existed.
+ is loaded if existed and call 'uim_dynlib_instance_init' in libuim-foo.so
+ first. After that 'foo.scm' is loaded if existed.
* For end users
If you want to install 3rd party plugin, you have to place both the
dynamic
@@ -38,17 +38,17 @@
$ sudo uim-module-manager --register foo
* For plugin developers
- plugin_instance_init(void): Called when plugin is being loaded. In most
case,
- initialize variables and bind scheme symbol
and C
- functions.
- plugin_instance_quit(void): Called when plugin is being unloaded.
+ uim_dynlib_instance_init(void): Called when plugin is being loaded. In
most
+ case, initialize variables and bind scheme
+ symbol and C functions.
+ uim_dynlib_instance_quit(void): Called when plugin is being unloaded.
- Plugin's loading scheme:
1. Plugin loading
- dlopen(libuim-foo.so) -> call plugin_instance_init -> call "foo.scm"
+ dlopen(libuim-foo.so) -> call uim_dynlib_instance_init -> call "foo.scm"
2. Plugin unloading
- call plugin_instance_quit -> dlclose(libuim-foo.so)
+ call uim_dynlib_instance_quit -> dlclose(libuim-foo.so)
------------------------------------------------------------------------------
- Dynamic library loading
@@ -63,17 +63,17 @@
|___________|
When called (require-dynlib "bar") from the top of foo.scm, libuim-bar.so
is
- loaded and 'plugin_instance_init' in libuim-bar.so is called.
+ loaded and 'uim_dynlib_instance_init' in libuim-bar.so is called.
* For developers
- plugin_instance_init(void): Called when plugin is being loaded. In most
case,
- initialize variables and bind scheme symbol
and C
- functions.
- plugin_instance_quit(void): Called when plugin is being unloaded.
+ uim_dynlib_instance_init(void): Called when plugin is being loaded. In
most
+ case, initialize variables and bind scheme
+ symbol and C functions.
+ uim_dynlib_instance_quit(void): Called when plugin is being unloaded.
- Plugin's loading scheme:
1. Plugin loading
- (require-dynlib "foo") -> dlopen(libuim-foo.so) -> call
plugin_instance_init -> (provide "foo")
+ (require-dynlib "foo") -> dlopen(libuim-foo.so) -> call
uim_dynlib_instance_init -> (provide "foo")
2. Plugin unloading
- (dynlib-unload "foo") -> call plugin_instance_quit ->
dlclose(libuim-foo.so)
+ (dynlib-unload "foo") -> call uim_dynlib_instance_quit ->
dlclose(libuim-foo.so)
=======================================
--- /branches/1.6/scm/plugin.scm Tue Jul 27 22:09:43 2010
+++ /branches/1.6/scm/plugin.scm Thu Aug 5 19:09:23 2010
@@ -32,6 +32,7 @@
;;; SUCH DAMAGE.
;;;;
+(require-extension (srfi 1))
(require "util.scm")
(require "dynlib.scm")
@@ -89,9 +90,11 @@
(if (try-load user-conf-file)
(begin
(set! installed-im-module-list
- (append orig-module-list installed-im-module-list))
+ (delete-duplicates
+ (append orig-module-list
installed-im-module-list)))
(set! enabled-im-list
- (append orig-enabled-list enabled-im-list))))))))))
+ (delete-duplicates
+ (append orig-enabled-list
enabled-im-list)))))))))))
;; TODO: write test