From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dennis McCunney To: 'Don Baker' Cc: cygwin@sourceware.cygnus.com Subject: RE: Bug in B20.1 make with mixed case environment variables Date: Wed, 30 Jun 1999 22:10:00 -0000 Message-ID: <65CAA822B707D211AD430008C7F40FED1F853C@EXCHANGERSW2> X-SW-Source: 1999-06n/msg00603.html Message-ID: <19990630221000.yDLIvDvKFkMBKmAJOk2sVKev2VhRpChCKyiL6pw4tEM@z> > -----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