Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

RE: Modules dependencies RE: PATCH: zftp/tcp abstraction

> Andrej Borsenkow wrote:
> >To make it work in general every module needs a standard function, let's
> >call it dep_, that is autogenerated out of moddeps and called
> before module
> >is attempted to be loaded to register dependencies.
> Problem is you can't call that function without loading the module, and
> you can't successfully load the module until you've got that information.
> If there were an easy solution we'd have implemented it as soon as we
> came up with the module system.

Here is suggested change to current module system. It is actually pretty
trivial to implement and may have additional advantages ...

- module is represented by its module definition file. It is basically mdd
file with all makefile fragments stripped and any shell code replaced by
final value. To avoid confusion with original mdd, let's call it zmd (Zsh
Module Definition). The additional property is full name of binary DSO
object, e.g. soname.

- when you open a module, zsh opens zmd file. It then loads all needed
modules (as in moddeps) and after that loads modules object itself (as in

- zmd file is always installed for both linked-in and external modules. It
eliminates need to build extra list at compile-time.

- zsh _may_ scan $module_path and autoload objects from those modules with
load=yes at startup. Or it even can do it when $module_path changes (but see
*1). This makes it possible to have a single binary and simply drop new
module in place that may be of some use for packagers.

This does not seem very hard to implement (the ugliest part is parsing of
zmd files; do we have something ready in zsh so as not to reinvent the
wheel)? Comments?


*1 When (re)scanning $module_path the problem is, what to do with currently
loaded modules. Consider the case:

module zsh/mod1 provides foo and bar and is loaded
module zsh/mod2 provides baz and bar and is being scanned

Zsh first adds baz, then it adds bar and gets an error. We possibly have to
remove baz now (else, it will try to load zsh/mod2 on access to baz and this
will silently redefine bar).

P.S. We can even completely ignore file name and rely on name= in zmd file.
That gives natural way to directly load any module by its path name.

Messages sorted by: Reverse Date, Date, Thread, Author