<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-15">
<META content="MSHTML 6.00.6000.16890" name=GENERATOR></HEAD>
<BODY style="MARGIN: 4px 4px 1px">
<DIV>Jay:</DIV>
<DIV> </DIV>
<DIV>No problem.  I think you are trying to make it more flexible, and that is good.  I just ran into a problem with cm3ide.</DIV>
<DIV> </DIV>
<DIV>The shortcut I use to launch cm3ide causes the current dir to be the "bin" folder.  So, using your new cm3.cfg, I was always having a problem with (path() & "/config/"), since it would be trying to find "config" at the root of the file system when path() returned the empty string.  Since "/config" wasn't found, none of the other parts of your include file were ever processed, hence, BUILD_DIR would never be found.</DIV>
<DIV> </DIV>
<DIV>I gather that path() is supposed to return the path to the cm3.cfg file.  If this is true, then returning "" is not really a path, so the function seems broken when cm3.cfg is in the current dir.  Returning "." makes more sense for this case and would allow the rest of your cm3.cfg file to work I think, provided that HOST is defined or that it is replaced by the actual text.</DIV>
<DIV> </DIV>
<DIV>Regards,</DIV>
<DIV>Randy<BR><BR>>>> Jay K <jay.krell@cornell.edu> 8/3/2009 5:05 AM >>><BR><BR>Sorry about #1 Randy, my mistake.<BR><BR><BR>Sitting in the bin directory...seems a little wierd, eh?<BR>What source are you going to build sitting there?<BR>I guess um some custom quake code??<BR>Good enough if empty is instead just "."?<BR><BR>This falls out of the fact that cm3 actually probes all over the place for the cm3.cfg file and the first place it looks in is the current directory.<BR><BR><BR>Another good option I think would be just to remove that probe.<BR>It looks in way too many places.<BR><BR><BR>Here is the current code. I think it is gross.<BR>Too much probing make things quite ambiguous.<BR><BR><BR>PROCEDURE FindConfig () =<BR>  (* LL = mu *)<BR>  VAR txt: TEXT;<BR>  BEGIN<BR>    IF (found) THEN RETURN END;<BR><BR>    (* try the current directory *)<BR>    IF TryConfig (Filename) THEN RETURN END;<BR><BR>    (* try the immediate source directory *)<BR>    IF TryConfig ("src", Filename) THEN RETURN END;<BR><BR>    (* try the sibling source directory *)<BR>    IF TryConfig ("..", "src", Filename) THEN RETURN END;<BR><BR>    (* try the M3CONFIG environment variable *)<BR>    txt := QMachine.GetEnv (NIL, "M3CONFIG");<BR>    IF (txt # NIL) THEN<BR>      IF TryConfig (txt) THEN RETURN END;<BR>      IF TryConfig (txt, Filename) THEN RETURN END;<BR>    END;<BR><BR>    (* try the directory containing the current executable *)<BR>    txt := Pathname.Prefix (Params.Get (0));<BR><BR>    IF Text.Length (txt)> 0 THEN<BR>      IF TryConfig (txt, Filename) THEN RETURN END;<BR>    END;<BR><BR>    (* try the directories named by the PATH environment variable. *)<BR>    txt := Env.Get ("PATH");<BR>    FindConfigInPath (txt);<BR><BR>    IF found THEN RETURN END;<BR><BR>    (* try the etc directories *)<BR>    IF TryConfig("/usr/local/cm3/etc", Filename) THEN RETURN END;<BR>    IF TryConfig("/usr/cm3/etc", Filename) THEN RETURN END; <BR>    IF TryConfig("/cm3/etc", Filename) THEN RETURN END; <BR>    IF TryConfig("/usr/contrib/etc", Filename) THEN RETURN END; <BR>    IF TryConfig("/usr/local/etc", Filename) THEN RETURN END; <BR>    IF TryConfig("/usr/etc", Filename) THEN RETURN END; <BR>    IF TryConfig("/opt/etc", Filename) THEN RETURN END; <BR>    IF TryConfig("/sw/etc", Filename) THEN RETURN END; <BR>    IF TryConfig("/etc", Filename) THEN RETURN END;<BR><BR>    (* oh well, make sure we don't try this silly exercise again... *)<BR>    config := NIL;<BR>    found := TRUE;<BR>  END FindConfig;<BR><BR><BR>I propose..roughly roughly, we make it like this instead:<BR><BR><BR>PROCEDURE FindConfig () =<BR>  (* LL = mu *)<BR>  VAR txt: TEXT;<BR>  BEGIN<BR>    IF (found) THEN RETURN END;<BR><BR>    (* try the M3CONFIG environment variable *)<BR>    txt := QMachine.GetEnv (NIL, "M3CONFIG");<BR>    IF (txt # NIL) THEN<BR>      IF TryConfig (txt) THEN RETURN END;<BR>      IF TryConfig (txt, Filename) THEN RETURN END;<BR>    END;<BR><BR>    (* try the directory containing the current executable *)<BR>    txt := Pathname.Prefix (Params.Get (0));<BR>    IF Text.Length (txt)> 0 THEN<BR>      IF TryConfig (txt, Filename) THEN RETURN END;<BR>    END;<BR><BR>    (* oh well, make sure we don't try this silly exercise again... *)<BR>    config := NIL;<BR>    found := TRUE;<BR>  END FindConfig;<BR><BR><BR>or, if people really like it looking all over the place, fixing the case of it being in the current working directory is probably like this:<BR><BR><BR>    (* try the current directory *)<BR><    IF TryConfig (Filename) THEN RETURN END;<BR>>    IF TryConfig (".", Filename) THEN RETURN END;<BR><BR><BR>- Jay<BR><BR><BR><BR>----------------------------------------<BR>> From: jay.krell@cornell.edu<BR>> To: rcoleburn@scires.com<BR>> Date: Sun, 2 Aug 2009 23:42:17 -0700<BR>> CC: m3devel@elegosoft.com<BR>> Subject: Re: [M3devel] problems with cm3.cfg and MxConfig<BR>><BR>> Host, hm, I think probably my mistake. It is defined by cm3 but not<BR>> all m3quake users. Path() should be the directory containing the file<BR>> with the call.<BR>><BR>> - Jay (phone)<BR>><BR>> On Aug 2, 2009, at 9:52 PM, "Randy Coleburn" <BR>> wrote:<BR>><BR>>> I have been working on the problem of cm3ide not getting the<BR>>> BUILD_DIR from cm3.cfg. I've run across some perplexing test results.<BR>>><BR>>> MxConfig.Get("BUILD_DIR") is returning NIL on Windows XP & Vista.<BR>>> I've tracked it down a bit further. There seem to be two issues<BR>>> that must be fixed to solve this problem:<BR>>><BR>>> 1. HOST does not seem to be defined. In particular my "C:\cm3\bin<BR>>> \cm3.cfg" file appears as follows (this is the file Jay recommended):<BR>>> INSTALL_ROOT = path() & "/.."<BR>>> include (path() & "/config/" & HOST)<BR>>><BR>>> Is HOST a variable? Or, was I supposed to replace it by "NT386"?<BR>>> If the latter, my bad on this one--I took Jay's message literally.<BR>>><BR>>> 2. path() does not appear to always yield the path to the bin<BR>>> folder. In particular, it seems to work fine unless you invoke the<BR>>> program when the current directory is actually set to the bin<BR>>> folder, in which case path() seems to return the empty string.<BR>>><BR>>> So, if Í%=C:\, and I run cm3ide, path() returns "C:\cm3\bin" as it s<BR>>> hould.<BR>>> But, if Í%=C:\cm3\bin, and I run cm3ide, path() returns "".<BR>>><BR>>> So in the latter case, the include statement winds up trying to pull<BR>>> a file from the wrong place, e.g. "/config/NT386" rather than "C:<BR>>> \cm3\bin/config/NT386"<BR>>><BR>>> Regards,<BR>>> Randy Coleburn</DIV></BODY></HTML>