guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Problem with modules in Guile 2.0


From: Mark H Weaver
Subject: Re: Problem with modules in Guile 2.0
Date: Wed, 07 Mar 2012 21:01:32 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.92 (gnu/linux)

Gubinelli Massimiliano <address@hidden> writes:

> Thanks for the prompt reply to both of you. However the proposed
> solution do not work in my case.

I think it _did_ solve your original problem, but now you have moved on
to other unrelated problems.

> After implementing the
> begin-for-syntax alternative I now get
>
> scheme@(guile-user)> (load "main.scm")
> ;;; compiling /Users/mgubi/t/build-64-guile-2.0/test-modules/main.scm
> ;;; note: source file 
> /Users/mgubi/t/build-64-guile-2.0/test-modules/test-modules.scm
> ;;; newer than compiled
> /Users/mgubi/.cache/guile/ccache/2.0-LE-8-2.0/Users/mgubi/t/build-64-guile-2.0/test-modules/test-modules.scm.go
> ;;; compiling /Users/mgubi/t/build-64-guile-2.0/test-modules/test-modules.scm
> ;;;
> /Users/mgubi/t/build-64-guile-2.0/test-modules/test-modules.scm:15:34:
> warning: possibly unbound variable `compile-interface-spec'

Note that 'compile-interface-spec' was an undocumented internal
procedure of Guile 1.x, and no longer exists in Guile 2.

> ;;; /Users/mgubi/t/build-64-guile-2.0/test-modules/test-modules.scm:32:11: 
> warning: possibly unbound variable `:use'
> ;;; /Users/mgubi/t/build-64-guile-2.0/test-modules/test-modules.scm:33:11: 
> warning: possibly unbound variable `:inherit'
> ;;; /Users/mgubi/t/build-64-guile-2.0/test-modules/test-modules.scm:34:11: 
> warning: possibly unbound variable `:export'

In order to use the shorter keyword syntax ':use' (instead of '#:use'),
you must set the prefix keywords reader option.  Put the following at
the beginning of your 'begin-for-syntax' form:

  (read-set! keywords 'prefix)

> ;;; compiled 
> /Users/mgubi/.cache/guile/ccache/2.0-LE-8-2.0/Users/mgubi/t/build-64-guile-2.0/test-modules/test-modules.scm.go
> ;;; WARNING: compilation of 
> /Users/mgubi/t/build-64-guile-2.0/test-modules/main.scm failed:
> ;;; ERROR: No variable named %module-public-interface in #<directory (sub 
> mymodule) 10507ed80>
> ERROR: In procedure scm-error:
> ERROR: No variable named %module-public-interface in #<directory (sub 
> mymodule) 10507ed80>
>
> Entering a new prompt.  Type `,bt' for a backtrace or `,q' to continue.
> scheme@(guile-user) [1]> 
>
> if I understand correctly this backtrace it seems that the module is
> not completely loaded at compile time and there is not public
> interface available. How can I force the evaluation of the loaded
> modules in order to get a list of exported symbols?

I cannot reproduce this.  When I try using your example code, Guile
2.0.5 tries to compile (sub mymodule).  Are you sure that you remembered
to set GUILE_LOAD_PATH during this test run?

This is what I see:

  GNU Guile 2.0.5
  Copyright (C) 1995-2012 Free Software Foundation, Inc.
  
  Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
  This program is free software, and you are welcome to redistribute it
  under certain conditions; type `,show c' for details.
  
  Enter `,help' for help.
  scheme@(guile-user)> (load "main.scm")
  ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
  ;;;       or pass the --no-auto-compile argument to disable.
  ;;; compiling /home/mhw/guile-modules/main.scm
  ;;; compiling /home/mhw/guile-modules/./test-modules.scm
  ;;; test-modules.scm:15:34: warning: possibly unbound variable 
`compile-interface-spec'
  ;;; compiled 
/home/mhw/.cache/guile/ccache/2.0-LE-4-2.0/home/mhw/guile-modules/test-modules.scm.go
  ;;; compiling /home/mhw/guile-modules/sub/mymodule.scm
  ;;; sub/mymodule.scm:1:0: warning: possibly unbound variable `texmacs-module'
  ;;; sub/mymodule.scm:1:16: warning: possibly unbound variable `sub'
  ;;; sub/mymodule.scm:1:16: warning: possibly unbound variable `mymodule'
  ;;; compiled 
/home/mhw/.cache/guile/ccache/2.0-LE-4-2.0/home/mhw/guile-modules/sub/mymodule.scm.go
  ;;; WARNING: compilation of /home/mhw/guile-modules/main.scm failed:
  ;;; ERROR: In procedure module-lookup: Unbound variable: texmacs-module
  sub/mymodule.scm:1:0: In procedure #<procedure 1058ebb0 ()>:
  sub/mymodule.scm:1:0: In procedure module-lookup: Unbound variable: 
texmacs-module
  
  Entering a new prompt.  Type `,bt' for a backtrace or `,q' to continue.
  scheme@(#{ g435}#) [1]> 

and the problem here is that the compilation of sub/mymodule.scm fails
because the 'texmacs-module' macro was used before it was imported into
that module.  Initially, a module imports only the (guile) module.  If
you want to use a non-standard module declaration like 'texmacs-module'
at the top of a module, you'll need to add that binding to the (guile)
module.

    Best,
     Mark



reply via email to

[Prev in Thread] Current Thread [Next in Thread]