my_addons.ves collector leaf node
my_addons.ves
import bash = bash.ves; perl = perl.ves; { return [ contents = [ addons = [ bash, perl ] ]; }
contents is a collector keyword meaning leaf node and can't be changed.
The collector allows leaf sources to be organized by arbitrary keys. addon is such a key. The collector is agnostic about these key names. The std_env addon system, however, recognizes addon and so it can't be changed.
perl.ves (aka addon.ves)
perl.ves - I would perfer to call this perl/1/addon.ves
from /vesta/example.project.com/some/path/components/ import component_models = [ perl/1 ]; // perl 5.8.5 { root = <"perl">; return [component_models, root, ]; }
the import line defaults to importing filename build.ves when none is specified, as above.
The return value is keyed by component_models and root. These are both keywords to std_env addon as described in StdEnvAddonTmp. It means that the imported perl/1/build.ves gets evaluated and results added to ./components and the string list <"perl"> gets added directly to the ./root binding.
perl/1/build.ves
perl/1/build.ves
// // Model generated by rpm2vesta, Wed Jun 26 13:57:38 EDT 2002 // import root_func = root.ves; { result = [ // Main RPM installed into this package name = "perl", version = "5.8.5", arch = "i386", // All RPMs installed into this package // rpms = < "perl-5.6.0-12.i386.rpm" >, // Alternate names for this, based on the other installed RPMs all_names = < "perl", >, // Tree of installed files root = root_func ]; return [ "perl" = result, ]; }
The root = root_func in here is what is read by ./build_root() (defined here: /vesta/vestasys.org/platforms/linux/redhat/i686/std_env/latest/build.ves).
root_func here is the function representing the imported model file root.ves (below). This is a nice extra layer, because root_func is small, but it returns a huge binding.
perl/1/root.ves
perl/1/root.ves
files root; { return root; }
This files clause readds the dir tree that exists in perl/1/root/ and stores in a Vesta SDL binding var root. This model file then returns that binding keyed by [ root = {root tree here} ].
Note that this root.ves is a small file, and the function that's made out of it is also small, and can be passed around a lot cheaply. What this function returns, however, is quite large.
So it's best to evaluate this model file function as late as possible.