This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: What does PWD = $${PWDCMD-pwd} do in make?
- From: "H. J. Lu" <hjl at lucon dot org>
- To: Roland McGrath <roland at redhat dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Thu, 3 Jul 2003 09:12:24 -0700
- Subject: Re: What does PWD = $${PWDCMD-pwd} do in make?
- References: <20030703005507.GA22350@lucon.org> <200307030113.h631D3i01211@magilla.sf.frob.com>
On Wed, Jul 02, 2003 at 06:13:03PM -0700, Roland McGrath wrote:
> > Hi Roland,
> >
> > I have a strange make related problem. In gcc, there is
> >
> > PWD = $${PWDCMD-pwd}
>
> This is surely ill-advised, but what it means is clear enough.
> $$ means a literal $, and make has nothing more to do with this.
> If this string is used in a sh command, then ${PWDCMD-pwd} is
> sh syntax meaning $PWDCMD if that's defined and pwd otherwise.
>
> Modern shells define an environment variable PWD with the name of the
> current directory. Anything that expects to use such a value will surely
> not be expecting a string like '${PWDCMD-pwd}' in its environment. If
> make's environment includes PWD, then it will be default export PWD to its
> children, and give them whatever literal value the make variable PWD has.
>
> > It doesn't happen with pmake. Any ideas?
>
> I can't imagine pmake processing this string any differently than GNU make
> does unless it's in wild violation of the POSIX.2 spec for make. Perhaps
> in your pmake scenario, either something overrides PWD with the name of the
> current directory and so clobbers the problematic value with what other
> programs are expecting, or else whatever piece of shell or whatnot it is
> that is depending on the PWD environment variable is not called in the same
> way.
Here are what I found so far:
1. GNU make will set PWD in its children's environment.
2. Pmake won't set PWD in its children's environment.
3. getpwd in libiberty and glibc use shell's PWD.
4. -g will call getpwd in libiberty.
5. When PWD is set to value like "${PWDCMD-pwd}", different, but
correct result will be generated by gcc.
6. If -g is not used, getpwd in libiberty won't be called and the
output is the same no matter what value PWD is set to.
Can gcc use something else instead of a common shell environment
variable?
H.J.