<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'> Building the current system fails in caltech-parser\parserlib\parserlib\test. <BR> <BR><br> <BR> It tries to run an shipped klex but only the non-shipped one exist -- depending on the state of things. <br> But even if shipped exists, it likely shouldn't be using it.  <BR> <BR> <BR><br> This is a general problem we have been through somewhat before.  <br><BR> <BR> <BR> There are multiple parts to our current partial solution: <BR> <BR><br> They can be seen here: <br>  C:\dev2\cm3\m3-comm\netobj\src\netobj-ov.tmpl  <br>  C:\dev2\cm3\m3-comm\sharedobj\src\sharedobj-ov.tmpl  <br>  C:\dev2\cm3\m3-libs\libm3\src\bundleintf\bundle-ov.tmpl <br>  C:\dev2\cm3\m3-ui\zeus\src\m3zume-ov.tmpl  <BR> <BR><br> And those various "build tools" use build_standalone() <BR><br> <BR> This could imho be abstracted. <BR> <BR> <BR> However, I propose where today we have: <br>    source_root/m3-foo/bar/target/abc.obj  <br>    source_root/m3-foo/bar/target/bar.exe    <br>    source_root/m3-foo/bar/src/abc.m3   <BR><br> <BR>  we instead have: <br>     output_root/obj/bar/target/abc.obj  <br>     output_root/bin/target/bar.exe  <br>     output_root/bin/bar.exe link or stub to target/abc.exe  <br>     output_root/pkg/bar/...  <BR> <BR><br> or: <br>     output_root_obj/bar/target/abc.obj  <br>     output_root_install/bin/target/bar.exe  <br>     output_root_install/bin/bar.exe link or stub to target/abc.exe  <br>     output_root_install/pkg/bar/...  <BR> <BR><br> and that "install" become just directory operations, like deleting old and move or copy output_root{_install} to it <br> just "script", not anything in cm3, <BR><br> <BR> and then, on systems that support "origin" -- NT, Linux, Solaris, FreeBSD, NetBSD >= 5.0, we don't <br> use standalone for this, and on systems that don't support "origin", still use standalone <BR> <BR><br> and then shipping goes away, as a package operation. <br> you can instead ship an output root. <BR> <BR><br> and then this override stuff goes away also;<br> You bootstrap by copying in a few working files. Like make-dist.py does. <br> The system is reduced in size, as build_standalone falls away -- you can still use it,<br> but it won't be used usually. <BR> <BR><br> The larger source tree would become readonly, as it should be. <BR> <BR><br> Thoughts?<BR> <BR> <br> I believe Modula-3 was originally ahead of its time in having the readonly src directories,  <br> but I believe time as passed it by, and what one really wants is a larger readonly tree of src directories/packages -- which <br> might as well not say "src", but preserve that instead of rearranging everything. <BR> <BR><br> I know, I've heard, having the separate buildlocal / buildglobal is useful. <br> This doesn't elimine it that.<br> It replaces it with "multiple buildglobal".<br> Instead of having just the two options -- local and global -- you can create an arbitrary number of<br> "global" scopes by creating a new output_root, copying it from a preexisting one. <BR> <br><BR> As well, it is obscure, but you can also have "multiple local" by changing BUILD_DIR.<br> But I don't think anyone does that. I think everyone leaves BUILD_DIR == TARGET. <BR> <BR> <BR> This has several nice properties.<BR> readonly source tree  <BR> less file copying possibly (depending on if final scripted ship is directory copy or move) <BR> cm3 can stop implementing ship   <BR> no need to use build_standalone on most systems, including for cm3 itself (but it still works)  <BR> <BR> <BR><br> - Jay <BR>                                        </div></body>
</html>