delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1999/06/24/16:30:24

Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm
Sender: cygwin-owner AT sourceware DOT cygnus DOT com
Delivered-To: mailing list cygwin AT sourceware DOT cygnus DOT com
Message-ID: <65CAA822B707D211AD430008C7F40FED1F853C@EXCHANGERSW2>
From: Dennis McCunney <DMcCunney AT roper DOT com>
To: "'Don Baker'" <dbaker AT mcc DOT com>
Cc: cygwin AT sourceware DOT cygnus DOT com
Subject: RE: Bug in B20.1 make with mixed case environment variables
Date: Thu, 24 Jun 1999 16:29:56 -0400
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.2232.9)

> -----Original Message-----
> From: Don Baker [mailto:dbaker AT mcc DOT com]
> Sent: Thursday, June 24, 1999 1:14 PM
> To: cygwin AT sourceware DOT cygnus DOT com
> Cc: dbaker AT mcc DOT 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 AT mcc DOT 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 AT roper DOT com


--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019