This is the mail archive of the
guile@sourceware.cygnus.com
mailing list for the Guile project.
Re: modules names, locations, and how to register.
- To: James Dean Palmer <james at tiger-marmalade dot com>
- Subject: Re: modules names, locations, and how to register.
- From: Marius Vollmer <mvo at zagadka dot ping dot de>
- Date: 10 Oct 1999 18:46:04 +0200
- Cc: guile at sourceware dot cygnus dot com
- References: <lz4sfziyfg.fsf@viz.tiger-marmalade.com>
James Dean Palmer <james@tiger-marmalade.com> writes:
> Where is the proper place to put the c library part of the
> module?
;;; Dynamic linking of modules
;; Initializing a module that is written in C is a two step process.
;; First the module's `module init' function is called. This function
;; is expected to call `scm_register_module_xxx' to register the `real
;; init' function. Later, when the module is referenced for the first
;; time, this real init function is called in the right context. See
;; gtcltk-lib/gtcltk-module.c for an example.
;;
;; The code for the module can be in a regular shared library (so that
;; the `module init' function will be called when libguile is
;; initialized). Or it can be dynamically linked.
;;
;; You can safely call `scm_register_module_xxx' before libguile
;; itself is initialized. You could call it from an C++ constructor
;; of a static object, for example.
;;
;; To make your Guile extension into a dynamic linkable module, follow
;; these easy steps:
;;
;; - Find a name for your module, like (ice-9 gtcltk)
;; - Write a function with a name like
;;
;; scm_init_ice_9_gtcltk_module
;;
;; This is your `module init' function. It should call
;;
;; scm_register_module_xxx ("ice-9 gtcltk", scm_init_gtcltk);
;;
;; "ice-9 gtcltk" is the C version of the module name. Slashes are
;; replaced by spaces, the rest is untouched. `scm_init_gtcltk' is
;; the real init function that executes the usual initializations
;; like making new smobs, etc.
;;
;; - Make a shared library with your code and a name like
;;
;; ice-9/libgtcltk.so
;;
;; and put it somewhere in %load-path.
;;
;; - Then you can simply write `:use-module (ice-9 gtcltk)' and it
;; will be linked automatically.
;;
;; This is all very experimental.
> Should my install use the configure "prefix" to get this information
> and default to /usr/local/lib, or should it use guile-config and the
> "libdir" variable?
Hmm. I would use the "prefix" because using guile-config seems to
`smart' to me. I think it is a nice feature of a package to install
in deterministic and controllable locations.