This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

RE: Bug in B20.1 make with mixed case environment variables


> -----Original Message-----
> From: Don Baker [mailto:dbaker@mcc.com]
> Sent: Thursday, June 24, 1999 1:14 PM
> To: cygwin@sourceware.cygnus.com
> Cc: dbaker@mcc.com
> Subject: Bug in B20.1 make with mixed case environment variables
> 
> B20.1 uses GNU make 3.75 which seems to have a bug or mis-feature
> where (DOS) environment variable names are converted to upper case
> when made into makefile variables.  (I believe that GNU make 3.77
> fixes this problem, so upgrading may be all that's necessary. 
> Unfortunately, I don't know the exact lineage of the make 3.77
> that I have.)
> 
> From a DOS shell, set an environment variable with lower case
> letters:
> 
> set foo=hello
> 
> Then run make on the following makefile:
> 
> all:
> 	echo $(foo)
> 
> The echo is empty, unless the makefile variable is changed
> to all upper case, where "hello" is printed.  This problem
> does not seem to occur if the environment variable is set
> in bash.  (Bash, however has all of the DOS environement
> variables converted to upper case.)
> 
> Thanks for looking into this problem.

I don't think this is a Cygwin problem.  The issue is that _DOS_
automatically uppercases environment variables, and the trick is getting it
to not do so.  There are some old DOS tricks based on this quirk, like using
the PATH command to upercase something, as in:

: upper.bat
: upper case up to 9 arguments on the command line

if "%1"=="" goto error
set OLDPATH=%PATH%
PATH %1 %2 %3 %4 %5 %6 %7 %8 %9 
set VAR=%PATH%
PATH %OLDPATH%
echo %VAR
goto end
:error
No command line parameter specified!
:end

Placing the above in a batch file called upper.bat and running it will
uppercase up to 9 parameters passed on the command line.

If bash is run as a sub-shell, it inherits the environment from the primary
DOS shell (COMMAND.COM or CMD.EXE) and the variable names it gets are upper
cased when it gets them.
If you set a variable in bash in mixed case or lower case, bash _doesn't_
twiddle the case, so it will appear as you set it.

If you set your variables in bash and run make from there you shouldn't see
an issue.  If you do it from DOS, I'm not sure what kind of a fix is
possible, since there's no good way to know what the case was supposed to be
before DOS twiddled it.

If the 3.77 version of make has an option to ignore case in variables, that
would work, though it would break anything that relied on the same variable
names in different cases being treated as different variables.  (I wouldn't
create variables that relied on that, but someone might have a valid reason
to do it.)

> ------------------------------------------------------------
> Don Baker, Member of the Technical Staff
> MCC, 3500 West Balcones Center Dr., Austin, Texas 78759-6509
> dbaker@mcc.com * Phone: (512) 338-3362 * Fax: (512) 338-3890

______________________
Dennis McCunney
Technical Manager
Manhattan Phone Center
115 E 23 St, 11 Fl
NY NY  10010
212 387 7550 Voice
212 387 8180 Fax
dmccunney@roper.com


--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]