[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] dynamic-modules 3f762bd 02/22: add `load-module' function
From: |
Noah Friedman |
Subject: |
[Emacs-diffs] dynamic-modules 3f762bd 02/22: add `load-module' function to emacs lisp. |
Date: |
Mon, 8 May 2017 19:46:11 -0400 (EDT) |
branch: dynamic-modules
commit 3f762bd2f94da9d972af23007830e1fb9bf2f69c
Author: Aurélien Aptel <address@hidden>
Commit: Ted Zlatanov <address@hidden>
add `load-module' function to emacs lisp.
a) load compiled module
b) check for plugin_is_GPL_compatible symbol
c) run module's init() function
---
src/lread.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/src/lread.c b/src/lread.c
index 6f71ff5..d08d898 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -64,6 +64,10 @@ along with GNU Emacs. If not, see
<http://www.gnu.org/licenses/>. */
#define file_tell ftell
#endif
+#ifdef HAVE_LTDL
+#include <ltdl.h>
+#endif
+
/* Hash table read constants. */
static Lisp_Object Qhash_table, Qdata;
static Lisp_Object Qtest;
@@ -998,6 +1002,49 @@ This uses the variables `load-suffixes' and
`load-file-rep-suffixes'. */)
return Fnreverse (lst);
}
+DEFUN ("load-module", Fload_module, Sload_module, 1, 1, 0,
+ doc: /* Dymamically load a compiled module. */)
+ (Lisp_Object file)
+{
+#ifdef HAVE_LTDL
+ static int lt_init_done = 0;
+ lt_dlhandle handle;
+ void (*module_init) ();
+ void *gpl_sym;
+
+ if (!lt_init_done)
+ {
+ int ret = lt_dlinit ();
+ if (ret)
+ {
+ const char* s = lt_dlerror ();
+ error ("ltdl init fail: %s", s);
+ }
+ lt_init_done = 1;
+ }
+
+ CHECK_STRING (file);
+
+ handle = lt_dlopen (SDATA (file));
+ if (!handle)
+ error ("Cannot load file %s", SDATA (file));
+
+ gpl_sym = lt_dlsym (handle, "plugin_is_GPL_compatible");
+ if (!gpl_sym)
+ error ("Module %s is not GPL compatible", SDATA (file));
+
+ module_init = (void (*) ()) lt_dlsym (handle, "init");
+ if (!module_init)
+ error ("Module %s does not have an init function.", SDATA (file));
+
+ module_init ();
+
+ return Qt;
+#else
+ return Qnil;
+#endif
+}
+
DEFUN ("load", Fload, Sload, 1, 5, 0,
doc: /* Execute a file of Lisp code named FILE.
First try FILE with `.elc' appended, then try with `.el',
@@ -4491,6 +4538,7 @@ syms_of_lread (void)
defsubr (&Sget_file_char);
defsubr (&Smapatoms);
defsubr (&Slocate_file_internal);
+ defsubr (&Sload_module);
DEFVAR_LISP ("obarray", Vobarray,
doc: /* Symbol table for use by `intern' and `read'.
- [Emacs-diffs] dynamic-modules 5c710fb 01/22: add libltdl configure option/dependency., (continued)
- [Emacs-diffs] dynamic-modules 5c710fb 01/22: add libltdl configure option/dependency., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules cc5fe95 09/22: move fmod module in modules/fmod/., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules eae5da9 20/22: yaml module: add `yaml-parse-string'., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules 01e2303 17/22: update modules examples with `provide' call., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules d2271bc 06/22: alloc.c: protect doc field from GC., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules 1be03fd 08/22: doc.c: don't prefix doc path by ../etc/ for modules, Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules c0eb5a6 05/22: change Subr doc field from char* to Lisp_Object., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules db69d49 12/22: new module: elisp, Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules 334564f 15/22: fix docstring., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules 18920eb 19/22: new yaml parsing module using libyaml, Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules 3f762bd 02/22: add `load-module' function to emacs lisp.,
Noah Friedman <=
- [Emacs-diffs] dynamic-modules 1be7b68 10/22: new module: opaque, Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules 4efd6a2 21/22: yaml module: rename `yaml-parse' to `yaml-parse-buffer'., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules 6334cf7 18/22: use `load-module-suffixes' as a source of module suffixes., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules 106c15b 14/22: curl: use url arg., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules 9313182 22/22: configure.ac: dynamic modules off by default., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules e374b97 11/22: opaque: add comments., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules 399d8ec 16/22: make `load' look for and handle dynamic modules., Noah Friedman, 2017/05/08
- [Emacs-diffs] dynamic-modules ada5c5e 13/22: new module: curl. basic URL fetcher working., Noah Friedman, 2017/05/08