On Tue, Nov 26, 2002 at 03:17:05AM -0800, Michael G Schwern wrote:
> On Mon, Nov 25, 2002 at 10:14:07PM -0800, Michael G Schwern wrote:
> > PERLPREFIX = $(PERLRUN) -e 'q{$(PREFIX)} ? q{$$(PREFIX)} : "/usr"'
> > SITEPREFIX = $(PERLRUN) -e 'q{$(PREFIX)} ? q($$(PREFIX)} : "/opt"'
> >
> > I think that'll work. Thoughts?
>
> Of course it was all too easy. I'm wrong.
>
> Values on the RHS of a macro assigment aren't run through the shell, of
> course. So the above just creates a macro containing a perl oneliner, not
> the results of that one liner.
>
> If it can be guaranteed that the *PREFIX macros, and any macro with
> $(*PREFIX) in it, is always used on the shell line, this works.
>
> PERLPREFIX = `$(PERLRUN) -e 'q{$(PREFIX)} ? q{$(PREFIX)} : "/usr"'`
> SITEPREFIX = `$(PERLRUN) -e 'q{$(PREFIX)} ? q($(PREFIX)} : "/opt"'`
>
> but that situation is only true on Unix, and its precarious at best. And it
> means that little Perl program is run over and over and over again as the
> Makefile runs, crushingly slow on Windows. Besides, I have no idea what the
> portable shell equivalent to `` is.
>
> I need some way to define a macro using the results of a shell command, as I
> had originally assumed.
>
> Otherwise, I need a portable version of this:
>
> if PREFIX
> PERLPREFIX = $(PREFIX)
> SITEPREFIX = $(PREFIX)
> else
> PERLPREFIX = /usr
> SITEPREFIX = /top
> endif
>
> Gnu make can do something like that, but I doubt most other make variants
> can.
PERLPREFIX=${PREFIX:-/usr}
SITEPREFIX=${PREFIX:-/top}
I've used that long before I heard about bash.
It's also part of the POSIX 1003.1-2001 standard.
Abigail