From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Paul Emsley Newsgroups: gmane.lisp.guile.user Subject: Re: Guile + SWIG Date: Thu, 08 Apr 2021 08:13:34 +0100 Message-ID: <1fe357405def82a4c4fa58ecff3035df8093899d.camel@mrc-lmb.cam.ac.uk> References: <65bb42ce8d587b284b70d48f2f4b0c99e5c37cf7.camel@mrc-lmb.cam.ac.uk> <2a6711742cea0cf53342f70a2941b26e48efd864.camel@linas.org> 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="21866"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Evolution 3.34.1-2 To: guile-user@gnu.org Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Thu Apr 08 09:14:11 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 1lUOrj-0005Yt-It for guile-user@m.gmane-mx.org; Thu, 08 Apr 2021 09:14:11 +0200 Original-Received: from localhost ([::1]:48182 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lUOri-0002Mt-CI for guile-user@m.gmane-mx.org; Thu, 08 Apr 2021 03:14:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:57064) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUOrK-0002Mm-Kd for guile-user@gnu.org; Thu, 08 Apr 2021 03:13:46 -0400 Original-Received: from ppsw-33.csi.cam.ac.uk ([131.111.8.133]:43534) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lUOrF-00035o-VI for guile-user@gnu.org; Thu, 08 Apr 2021 03:13:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=cam.ac.uk; s=20180806.ppsw; h=Content-Transfer-Encoding:MIME-Version:Content-Type: References:In-Reply-To:Date:To:From:Subject:Message-ID:Sender:Reply-To:Cc: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Dfr+imepUg97uujF7fqH+y79IzlmeYeI+SZ9eeK8Jlw=; b=wuLp7LPkMhlr6Gurp/TfqF/uJ2 vbWI8OGV71AB99nPCLtrnH3/r4do5hoZHIEpyOFn/fdWiCNjLSrV7R0C0xf9Jc3L1Sv35zP2SF3ZA hq4iHA2PUsco5lodT2HuObntpMian368ruhSgB6Rqb9Y+Vh011C42Iy/Dxb6US65EtcI=; X-Cam-AntiVirus: no malware found X-Cam-ScannerInfo: http://help.uis.cam.ac.uk/email-scanner-virus Original-Received: from mail.mrc-lmb.cam.ac.uk ([131.111.85.9]:45914 helo=mail.lmb.internal) by ppsw-33.csi.cam.ac.uk (ppsw.cam.ac.uk [131.111.8.137]:25) with esmtp id 1lUOrA-000KW5-j3 (Exim 4.94) for guile-user@gnu.org (return-path ); Thu, 08 Apr 2021 08:13:37 +0100 Original-Received: from 79-77-210-255.dynamic.dsl.as9105.com ([79.77.210.255] helo=penelope) by mail.lmb.internal with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.3) (envelope-from ) id 1lUOrA-000VPd-Fn for guile-user@gnu.org; Thu, 08 Apr 2021 08:13:36 +0100 In-Reply-To: Received-SPF: pass client-ip=131.111.8.133; envelope-from=pemsley@mrc-lmb.cam.ac.uk; helo=ppsw-33.csi.cam.ac.uk X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_SBL_A=0.1 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:17402 Archived-At: Hi Matt and Linas, Thanks for your feedback. I was indeed confused by thinking the warning was a terminal error, because I also neglected to add a newline after using display (so it seemed to me as if it was hanging (after years of using python, I expected the prompt to be shown on pressing "Return", so when it didn't, I thought that there was something wrong)). So guile 2.2 is in the bag - and I'm pleased about that. Soon I will be looking at converting guile-gtk scripts to guile-gnome. Regards, Paul. On Mon, 2021-04-05 at 16:51 -0700, Matt Wette wrote: > When scripts with load-extension are compiled, the compiler does not know > what symbols are defined in the extension so you may get warnings. Are you > getting an error or just the warning? > > On 4/5/21 10:44 AM, Paul Emsley wrote: > > Hi Linas, > > > > Thanks for your reply. > > > > Let me clarify if I can. I have many C++ functions that I would like to use from scheme. I am using > > SWIG to generate wrappers for these functions, and these get added > > at the "root module" > > > > http://www.swig.org/Doc3.0/Guile.html > > > > The default linkage is the simplest; nothing special is done. In this case > > the function SWIG_init() is exported. Simple linkage can be used in several ways: > > > > Embedded Guile, no modules. You want to embed a Guile interpreter into your > > program; all bindings made by SWIG shall show up in the root module. Then call > > SWIG_init() in the inner_main() function > > > > So that is what I was trying to do. My understanding was that enhanced-ligand-coot-p > > and its friends would be added so that their usage would be no different to list, string?, > > map and any number of basic scheme functions. However something is amiss. > > > > If I try this: > > ./coot > > Enter `,help' for help. > > scheme@(guile-user)> (load "test-embedding.scm") > > (55555555555555 #f) > > > > Now, if I install that in $prefix/share/guile/site > > If I try this: > > ./coot > > Enter `,help' for help. > > scheme@(guile-user)> (use-modules (test-embedding)) > > While compiling expression: > > In procedure module-lookup: Unbound variable: enhanced-ligand-coot-p > > scheme@(guile-user)> > > > > Is that because the "compiler" doesn't know where enhanced-ligand-coot-p is? Maybe the compiler > > is not my application, so that's why it's not there? > > > > If that is the case, then can I not compile my .scm files? How to do that? Or can I somehow say > > "don't worry that it's not there now, when the application runs, it will be there"? > > > > Thanks, > > > > Paul. > > > > p.s. It's quite likely that Coot was used in the analysis of spike proteins from coronavirus > > that lead to 2P and hexapro stabilization mutants, and they have been taken up by the pharmaceutical > > companies and embedded into the mRNA or more conventional preps. So you can have some guile-1.8.8-based > > technology squirted into your arm next week. > > > > > > On Mon, 2021-04-05 at 10:27 -0500, Linas Vepstas wrote: > > > Hi Paul, > > > > > > Conventionally, a guile module would look something like > > > > > > > > > (define-module (test-embedding)) > > > (use-modules (srfi srfi-1)) ; .. etc > > > > > > (define (enhanced-ligand-coot-p) #t) ; etc. > > > > > > (export enhanced-ligand-coot-p) > > > > > > > > > In your example, you never explained how "enhanced-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. > > > > > > > > > > > > > >