Hi Paul, Conventionally, a guile module would look something like
(define-module (test-embedding)) (use-modules (srfi srfi-1)) ; .. etc (define (enahanced-ligand-coot-p) #t) ; etc. (export enahanced-ligand-coot-p) In your example, you never explained how "enahanced-ligand-coot-p" magically showed up in your environment. When a module is defined, it starts with a new environment. The module cannot access stuff you've defined previously; you would have to import it somehow. --linas On Mon, 2021-04-05 at 11:24 +0100, Paul Emsley wrote: > Hi, > > I am trying to bring my swigged Gtk2 + guile 1.8.8 + guile-gtk > application up to date and I'd like some help please. > > My SWIG usage wraps many function, including > enhanced_coot_ligand_p(). I am confused between the difference > between > functions that are available from C/C++ and those from a scheme > script: > > if my inner_main looks like this: > > void inner_main(void *closure, int argc, char **argv) { > > SWIG_init(); > std::string handler_string = "(lambda (key . args) "; > handler_string += "(display (list \"Error in proc:\" key \" args: > \" args)) (newline))"; > SCM handler = scm_c_eval_string(handler_string.c_str()); > std::string thunk_str = "(lambda() (display (list > 444444444444444444 (enhanced-ligand-coot-p))) (newline))\n"; > SCM thunk = scm_c_eval_string(thunk_str.c_str()); > scm_catch(SCM_BOOL_T, thunk, handler); > gtk_main(); > > } > > then I get on the terminal what I expected: > > (444444444444444444 #f) > > (i.e. enhanced-ligand-coot-p is evaluated) > > > if my inner_main looks like this: > void inner_main(void *closure, int argc, char **argv) { > > SWIG_init(); > std::string handler_string = "(lambda (key . args) "; > handler_string += "(display (list \"Error in proc:\" key \" args: > \" args)) (newline))"; > SCM handler = scm_c_eval_string(handler_string.c_str()); > std::string thunk_str = "(use-modules (test- > embedding))\n"; //////////// different /////////////// > SCM thunk = scm_c_eval_string(thunk_str.c_str()); > scm_catch(SCM_BOOL_T, thunk, handler); > gtk_main(); > > } > > then I get: > > ;; compiling /home/paule/autobuild/Linux-pen-pre-release- > gtk3/share/guile/site/test-embedding.scm > ;;; test-embedding.scm:21:30: warning: possibly unbound variable > `enhanced-ligand-coot-p' > ;;; compiled /home/paule/.cache/guile/ccache/2.2-LE-8- > 3.A/home/paule/autobuild/Linux-pen-pre-release- > gtk3/share/guile/site/test-embedding.scm.go > ------------------- test embedding! ----------------------- > Backtrace: > 18 (apply-smob/1 #<catch-closure 7f98d1436b20>) > In ice-9/boot-9.scm: > 2312:4 17 (save-module-excursion _) > In ice-9/eval-string.scm: > 38:6 16 (read-and-eval #<input: string 7f98d08acbd0> #:lang _) > In ice-9/eval.scm: > 721:20 15 (primitive-eval _) > In ice-9/psyntax.scm: > 1262:36 14 (expand-top-sequence _ _ _ #f _ _ _) > 1209:24 13 (parse _ (("placeholder" placeholder)) ((top) #(# # …)) > …) > 285:10 12 (parse _ (("placeholder" placeholder)) (()) _ c&e (eval) > …) > In ice-9/boot-9.scm: > 3377:20 11 (process-use-modules _) > 222:17 10 (map1 (((test-embedding)))) > 3378:31 9 (_ ((test-embedding))) > 2800:17 8 (resolve-interface (test-embedding) #:select _ #:hide _ > …) > In ice-9/threads.scm: > 390:8 7 (_ _) > In ice-9/boot-9.scm: > 2726:13 6 (_) > In ice-9/threads.scm: > 390:8 5 (_ _) > In ice-9/boot-9.scm: > 2994:20 4 (_) > 2312:4 3 (save-module-excursion _) > 3014:26 2 (_) > In unknown file: > 1 (primitive-load-path "test-embedding" #<procedure > 7f98d…>) > In test-embedding.scm: > 19:0 0 (_) > > test-embedding.scm:4:0: In procedure module-lookup: Unbound variable: > enhanced-ligand-coot-p > > > > test-embedding.scm looks like this and is installed in > $prfx/share/guile/site > > (display "------------- test embedding! ------------\n") > (display (list 55555555555555 (enhanced-ligand-coot-p))) > (newline) > > > So, inner_main() knows that enhanced-ligand-coot-p is available, but > the scheme script does not. I don't know how to > resolve this. > > How do I get a list of the available functions? > > Thanks in advance for your help. > > Paul. > > >