[M3devel] [M3commit] CVS Update: cm3

Jay jay.krell at cornell.edu
Wed Jan 14 03:33:53 CET 2009


I /think/ cm3/quake exposes the integer but I'll try to peek around, and at the other clients, and my own uses of try_exec/q_exec.
 
There is /some/ validity to a "rich" exit code, more than 1 bit, but I realize it is controversial.
Windows has a 32 bit exit code. Perl on Windows truncates it to 8 bits.
When a process exits with a negative exit code, Perl on Windows gets confused and issues a strange error or runs it a second time (as if negative means CreateProcess failed, for a possible reason that the path was wrong.)
 
 - Jay



From: hosking at cs.purdue.eduTo: jay.krell at cornell.eduDate: Wed, 14 Jan 2009 12:49:41 +1100CC: jkrell at elego.de; m3devel at elegosoft.comSubject: Re: [M3devel] [M3commit] CVS Update: cm3


The current hack is not so bad, I suppose.  I would prefer to come up with a solution that simply defines Process.Wait and System.Wait as returning a BOOLEAN indicating if the process terminated successfully or not.  Are there any clients of these procedures that decode the bits in any more detail than simply testing non-zero?

On 14 Jan 2009, at 11:09, Jay wrote:


  > Sounds like your upgrade script
 
Based on someone else's upgrade.sh.
 
 
 > The alternative is to fold sysutils into m3core, where it can be used directly   Merging sysutils into m3core doesn't quite work,    again only or due to bootstrapping from older builds.    The compiler uses sysutils. Older builds don't have it at all,    and can't build m3core...but maybe again, make that hand patch    Long.Rep = INTEGER? Or have an up to date compiler.      Pointless statement I'm making though, it devolves to:          - have an up to date m3core in bootstrap       - or have sysutils in bootstrap, which implies up to date m3core       - or merge sysutils with m3core, which implies up to date m3core (and the second)      => "have an up to date m3core" (and LONGINT capable compiler)   And I think merging them is a fine idea.I generally like fewer larger pieces of reusable code, thoughthe counterpoint is to have more smaller independently changable pieces.  Probably the scripts and/or m3makefiles should probe the compiler version  and/or m3core version and/or sysutils presence and error clearly if it is too old/absent.  Possibly some "feature detection" feature is needed.  The compiler can just define Quake variables willy/nilly.   if defined("HAS_LONGINT")   Less clear how to probe m3core capability.    Can try compiling a little program against the old WaitProcess signature.    I'm leary of anything that resembles autoconf though (though I have autoconf-ish   stuff in my config files already, probing some cm3cg and cm3 behavior).   Oh...I looked at WaitProcess history. It looks like I introduced it, in 2008.   So..while it never returned the full status word, there also wasn't much history    to change.   Compiler could expose m3core functionality via variables too, though that..is wrong.   It could only expose the m3core it is linked to, not the one it is building.   I guess the only way really is to define a version or date constant and folks    can write constant expressions based on it, though that doesn't get you very far. Less clear how to correctly probe for package existance.  Easy to do ad-hoc by probing package store files, not sure what is the right way.     I also want to try this "import_pkg" directive I see in the docs. It might help a lot here,  if I understand it, and if it actually exists and resembles the doc I read.  It sounds like it recompiles a package's source as part of another package, statically   linking it. It would be bloating in the absence of build_standalone(), but not in its presence.    > No!  I did not want to do have this hack  Are the hacks this time in sysutils really so bad? m3core is left unadulterated. sysutils assumes waitpid(0) won't deadlock, which is true of kernel threads and cm3's use.  - Jay

From: hosking at cs.purdue.eduTo: jay.krell at cornell.eduDate: Wed, 14 Jan 2009 10:11:36 +1100CC: jkrell at elego.de; m3devel at elegosoft.comSubject: Re: [M3devel] [M3commit] CVS Update: cm3


On 14 Jan 2009, at 01:54, Jay wrote:


 > fix for old compilers that can't compile LONGINT: define LongRep.T = INTEGERIs that what bootstrapping should do? Automate that little patch for the first pass and undo it in the second? Then always building in dependency order?

I would prefer to get all the bootstrap archives LONGINT-capable.  Just do the patch by hand to build the initial archives and then forget about it.

Tonight I was trying to build from PPC_DARWIN 5.5.0.I figured, heck, maybe it supports LONGINT already, maybe I should just trybuilding up in dependency order.But then I hit the problem of Compiler.i3 mismatch due to new targets.


So...is that correct?Does building in dependency order predictably fail if compiler has fewer targets than runtime?But starting with existing m3core/libm3 and first building the compiler against them predictably works?

Yes, it works.

I've added targets a bunch and usually don't have a problem, but I can't say for certain whatorder I do things when I do this.Certainly "upgrade.py skipgcc" is something I run fairly often.It is very fast on NT386 (and unlike upgrade.sh, it doesn't build all of std).

Sounds like your upgrade script

For now I put in two small hacks to sysutils, so it works with old m3core.

No!  I did not want to do have this hack.  Let's just fix the boot archives to handle new m3core and have sysutils work as expected.  The alternative is to fold sysutils into m3core, where it can be used directly.  That might be a better solution given the dependency.  Thoughts?



















 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20090114/e6fa16af/attachment-0002.html>


More information about the M3devel mailing list