John's Ideal std_env example (could be addon)
This is very BridgelessVesta-y
My goal with the below is that your average unix programmer, after reading and playing w/ the example below, in 1 hour, could achieve a productivity in vesta nearly equal to what he has outside of vesta.
This example assumes that a vesta support person has already set everything up.
I have a similar example coming if i have time about adding my own component.
My problem is that from the very beginning, this is the spec i've had in my head. I haven't learned anything that suggests that the example below is undoable. And i've never been able to get the std_env nor addon system to match this. I find it difficult to let go of my simplistic view of the ideal, and so i always get tripped up on reality.
my_simple_model.ves
files
srcs = srcs;
from /vesta/vestasys.org/where/ever import
std_env/9;
// or it could be called 'addons' something
{
// these should all be names that match what most unix users would guess
components = <"perl", "grep", "csh", "gcc", "gcc.3.4.2">;
// gcc is whatever is default in std_env/9
// gcc.3.4.2 is specific, assuming available in std_env/9
// or maybe even:
components = ./std_env/typical;
// or even
components = ./std_env/all;
// with the first version being like 'custom'
// it's not a coincidence that these terms look like an install screen
// in fact, perhaps that's the right metaphor here
. ++= std_env/env_build(components,pkg_ovs);
. ++= [ proj/foo/people/jvkumpf/vesta_tmp = srcs ];
// srcs contains foo.c
compil.csh = "grep replace_me foo.c;\n"
+ "set grep_stat = $status;\n"
+ "if $grep_stat then\n"
+ " echo fixing replace_me\n"
+ " mv foo.c{,.orig}\n"
+ " fix.pl < foo.c.orig > foo.c\n"
+ "endif\n"
+ "gcc foo.c\n"
;
. ++= [ proj/foo/people/jvkumpf/vesta_tmp = compil.csh ];
fix.pl = "#!/usr/bin/perl -lwp\n"
+ "s/replace_me/fixed_string/\n"
;
. ++= [ proj/foo/people/jvkumpf/vesta_tmp = fix.pl ];
root_changes = _run_tool(./target_platform,
<"csh", "-c", "compil.csh", >
// ...
);
foo.o = root_changes/proj/foo/people/jvkumpf/vesta_tmp/foo.o;
return foo.o;
}