On Tue, 4 Apr 2006, Jung-uk Kim wrote:

On Tuesday 04 April 2006 05:32 pm, Lars Eighner wrote:
On Tue, 4 Apr 2006, Jung-uk Kim wrote:
On Tuesday 04 April 2006 05:14 pm, Lars Eighner wrote:
It appears to me that either I have a wrong version of awk or
this Makefile.inc1 is wrong:

#
# $FreeBSD: src/Makefile.inc1,v 1.499.2.11 2006/04/04 14:24:03
glebius Exp $ #

<Snippage>

MAKEOBJDIRPREFIX?=      /usr/obj
.if !defined(OSRELDATE)
.if exists(/usr/include/osreldate.h)
OSRELDATE!=     awk '/^\#define[[:space:]]*__FreeBSD_version/ {
print $$3 }' \ /usr/include/osreldate.h
.else
OSRELDATE=      0


In particular with the double dollar sign in the awk statement,
I get no return, therefore OSRELDATE gets set to 0.  The awk
statement also fails from the command line.  But if I use only
one $, the awk statement succeeds.

Is there a reason for the double dollar sign?

Yes.  See make(1):

   $   A single dollar sign `$', i.e. `$$' expands to a single
dollar sign.

I think this is wrong for a SINGLE QUOTED argument to be passed
to awk.  The Makefile is wrong.  I am right.


Then why does it get the wrong answer?

Because you ran it from command line. ;-)  You can copy and paste the
same lines to *Makefile* like this:

------------
.if !defined(OSRELDATE)
.if exists(/usr/include/osreldate.h)
OSRELDATE!=     awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
                /usr/include/osreldate.h
.else
OSRELDATE=      0
.endif
.endif

all:
        @echo "reldate = ${OSRELDATE}"
------------

and run make.  You will see something like this (depending on your
header file):

%make
reldate = 600034

But it doesn't

Tue Apr 04 17:11:38 bash3.1:ttyp0:eighner
goodwill~$make -V OSRELDATE -f /usr/src/Makefile.inc1
0
Tue Apr 04 17:12:25 bash3.1:ttyp0:eighner
goodwill~$exit
exit

where /usr/include/osreldate.h =

/*-
 * Copyright (c) 1992-2006 The FreeBSD Project.
 * All rights reserved.

<snippage>
 * SUCH DAMAGE.
 *
 */

#ifdef _KERNEL
#error "<osreldate.h> cannot be used in the kernel, use <sys/param.h>"
#else
#undef __FreeBSD_version
#define __FreeBSD_version 504105
#endif




Also is there a difference when the accent mark is used in front
instead of a real single quote?

Where do you see it?

Where you wrote:
   $   A single dollar sign `$', i.e. `$$' expands to a single
dollar sign.

And also in man make. The ` is an accent key, not a quote key. Yes, they are aka backticks and do mean something when they are
paired, but `something' is nonsense so far as I can tell.

Why would make tamper with anything in single quotes that is
passed to a command?  How do you write an argument for a command
so that make won't tamper with it?  What would double quoting
the argument be for?


--
Lars Eighner
[EMAIL PROTECTED]  [EMAIL PROTECTED]
http://www.larseighner.com/index.html
8800 N IH35 APT 1191 AUSTIN TX 78753-5266

_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to