[M3devel] HEADS UP: cm3.cfg locations, was: Re: problems with cm3.cfg and MxConfig

Olaf Wagner wagner at elegosoft.com
Mon Aug 3 12:30:54 CEST 2009


It was a specific request from the people building platform specific
installation packages that config files reside and are found in the
`usual' locations on their system and not somewhere beneath cm3.

Place don't change that unless there is no objection from anyone
on m3devel.

Olaf

Quoting Jay K <jay.krell at cornell.edu>:

> Sorry about #1 Randy, my mistake.
>
>
> Sitting in the bin directory...seems a little wierd, eh?
> What source are you going to build sitting there?
> I guess um some custom quake code??
> Good enough if empty is instead just "."?
>
> 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.
>
>
> Another good option I think would be just to remove that probe.
> It looks in way too many places.
>
>
> Here is the current code. I think it is gross.
> Too much probing make things quite ambiguous.
>
>
> PROCEDURE FindConfig () =
>   (* LL = mu *)
>   VAR txt: TEXT;
>   BEGIN
>     IF (found) THEN RETURN END;
>
>     (* try the current directory *)
>     IF TryConfig (Filename) THEN RETURN END;
>
>     (* try the immediate source directory *)
>     IF TryConfig ("src", Filename) THEN RETURN END;
>
>     (* try the sibling source directory *)
>     IF TryConfig ("..", "src", Filename) THEN RETURN END;
>
>     (* try the M3CONFIG environment variable *)
>     txt := QMachine.GetEnv (NIL, "M3CONFIG");
>     IF (txt # NIL) THEN
>       IF TryConfig (txt) THEN RETURN END;
>       IF TryConfig (txt, Filename) THEN RETURN END;
>     END;
>
>     (* try the directory containing the current executable *)
>     txt := Pathname.Prefix (Params.Get (0));
>
>     IF Text.Length (txt)> 0 THEN
>       IF TryConfig (txt, Filename) THEN RETURN END;
>     END;
>
>     (* try the directories named by the PATH environment variable. *)
>     txt := Env.Get ("PATH");
>     FindConfigInPath (txt);
>
>     IF found THEN RETURN END;
>
>     (* try the etc directories *)
>     IF TryConfig("/usr/local/cm3/etc", Filename) THEN RETURN END;
>     IF TryConfig("/usr/cm3/etc", Filename) THEN RETURN END;
>     IF TryConfig("/cm3/etc", Filename) THEN RETURN END;
>     IF TryConfig("/usr/contrib/etc", Filename) THEN RETURN END;
>     IF TryConfig("/usr/local/etc", Filename) THEN RETURN END;
>     IF TryConfig("/usr/etc", Filename) THEN RETURN END;
>     IF TryConfig("/opt/etc", Filename) THEN RETURN END;
>     IF TryConfig("/sw/etc", Filename) THEN RETURN END;
>     IF TryConfig("/etc", Filename) THEN RETURN END;
>
>     (* oh well, make sure we don't try this silly exercise again... *)
>     config := NIL;
>     found := TRUE;
>   END FindConfig;
>
>
> I propose..roughly roughly, we make it like this instead:
>
>
> PROCEDURE FindConfig () =
>   (* LL = mu *)
>   VAR txt: TEXT;
>   BEGIN
>     IF (found) THEN RETURN END;
>
>     (* try the M3CONFIG environment variable *)
>     txt := QMachine.GetEnv (NIL, "M3CONFIG");
>     IF (txt # NIL) THEN
>       IF TryConfig (txt) THEN RETURN END;
>       IF TryConfig (txt, Filename) THEN RETURN END;
>     END;
>
>     (* try the directory containing the current executable *)
>     txt := Pathname.Prefix (Params.Get (0));
>     IF Text.Length (txt)> 0 THEN
>       IF TryConfig (txt, Filename) THEN RETURN END;
>     END;
>
>     (* oh well, make sure we don't try this silly exercise again... *)
>     config := NIL;
>     found := TRUE;
>   END FindConfig;
>
>
> 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:
>
>
>     (* try the current directory *)
> <    IF TryConfig (Filename) THEN RETURN END;
>>    IF TryConfig (".", Filename) THEN RETURN END;
>
>
>  - Jay
>
>
>
> ----------------------------------------
>> From: jay.krell at cornell.edu
>> To: rcoleburn at scires.com
>> Date: Sun, 2 Aug 2009 23:42:17 -0700
>> CC: m3devel at elegosoft.com
>> Subject: Re: [M3devel] problems with cm3.cfg and MxConfig
>>
>> Host, hm, I think probably my mistake. It is defined by cm3 but not
>> all m3quake users. Path() should be the directory containing the file
>> with the call.
>>
>> - Jay (phone)
>>
>> On Aug 2, 2009, at 9:52 PM, "Randy Coleburn"
>> wrote:
>>
>>> I have been working on the problem of cm3ide not getting the
>>> BUILD_DIR from cm3.cfg. I've run across some perplexing test results.
>>>
>>> MxConfig.Get("BUILD_DIR") is returning NIL on Windows XP & Vista.
>>> I've tracked it down a bit further. There seem to be two issues
>>> that must be fixed to solve this problem:
>>>
>>> 1. HOST does not seem to be defined. In particular my "C:\cm3\bin
>>> \cm3.cfg" file appears as follows (this is the file Jay recommended):
>>> INSTALL_ROOT = path() & "/.."
>>> include (path() & "/config/" & HOST)
>>>
>>> Is HOST a variable? Or, was I supposed to replace it by "NT386"?
>>> If the latter, my bad on this one--I took Jay's message literally.
>>>
>>> 2. path() does not appear to always yield the path to the bin
>>> folder. In particular, it seems to work fine unless you invoke the
>>> program when the current directory is actually set to the bin
>>> folder, in which case path() seems to return the empty string.
>>>
>>> So, if Í%=C:\, and I run cm3ide, path() returns "C:\cm3\bin" as it s
>>> hould.
>>> But, if Í%=C:\cm3\bin, and I run cm3ide, path() returns "".
>>>
>>> So in the latter case, the include statement winds up trying to pull
>>> a file from the wrong place, e.g. "/config/NT386" rather than "C:
>>> \cm3\bin/config/NT386"
>>>
>>> Regards,
>>> Randy Coleburn



-- 
Olaf Wagner -- elego Software Solutions GmbH
                Gustav-Meyer-Allee 25 / Gebäude 12, 13355 Berlin, Germany
phone: +49 30 23 45 86 96  mobile: +49 177 2345 869  fax: +49 30 23 45 86 95
    http://www.elegosoft.com | Geschäftsführer: Olaf Wagner | Sitz: Berlin
Handelregister: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr: DE163214194




More information about the M3devel mailing list