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

Reply via email to