From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Linas Vepstas Newsgroups: gmane.lisp.guile.user Subject: Re: Guile + SWIG Date: Mon, 05 Apr 2021 09:44:31 -0500 Message-ID: <86d95c18ff8f7ab7db9cad94b700c468de2f526a.camel@linas.org> References: <65bb42ce8d587b284b70d48f2f4b0c99e5c37cf7.camel@mrc-lmb.cam.ac.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="416"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Evolution 3.30.5-1.1 To: Paul Emsley , Guile User Mailing List Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Wed Apr 07 18:10:13 2021 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lUAku-000AW4-4k for guile-user@m.gmane-mx.org; Wed, 07 Apr 2021 18:10:12 +0200 Original-Received: from localhost ([::1]:49462 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lUAkt-0000JW-2K for guile-user@m.gmane-mx.org; Wed, 07 Apr 2021 12:10:11 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:48498) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUAki-0000JN-0P for guile-user@gnu.org; Wed, 07 Apr 2021 12:10:00 -0400 Original-Received: from www.linas.org ([67.198.37.16]:45828 helo=linas.org) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lUAkf-00061F-S9 for guile-user@gnu.org; Wed, 07 Apr 2021 12:09:59 -0400 Original-Received: from fanny (fanny.linas.org [10.70.70.2]) by linas.org (Postfix) with ESMTP id 12F2840214; Wed, 7 Apr 2021 11:09:54 -0500 (CDT) In-Reply-To: <65bb42ce8d587b284b70d48f2f4b0c99e5c37cf7.camel@mrc-lmb.cam.ac.uk> Received-SPF: pass client-ip=67.198.37.16; envelope-from=linas@linas.org; helo=linas.org X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.io gmane.lisp.guile.user:17401 Archived-At: 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 #) > In ice-9/boot-9.scm: > 2312:4 17 (save-module-excursion _) > In ice-9/eval-string.scm: > 38:6 16 (read-and-eval # #: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" # 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. > > >