Does setting "destroot.post_args" not include default "destroot.destdir" in the assembled command?

Davor Cubranic cubranic at stat.ubc.ca
Mon Aug 20 13:28:07 PDT 2012


Thank you all for the clarification. So yes, I had things backward, thinking that I had to use "post_args" if I just wanted to pass arguments *in addition* to DESTDIR. 

Clemens's change to the Guide should prevent this kind of misunderstanding in the future, thanks.

Davor


On 2012-08-20, at 1:07 PM, Ryan Schmidt wrote:

> 
> On Aug 20, 2012, at 14:52, Clemens Lang <cal at macports.org> wrote:
> 
>> On Mon, Aug 20, 2012 at 12:41:52PM -0700, Davor Cubranic wrote:
>>> Based on the MacPorts guide, I assumed that just setting
>>> "destroot.post_args PREFIX=${prefix}" would still use the default
>>> value of "destroot.destdir" (i.e., "DESTDIR=${destroot}"), but I found
>>> the assembled command to be just "make -w install PREFIX=/opt/local",
>>> with no DESTROOT passed through. In the end, I had to use in the
>>> Portfile "destroot.post_args DESTDIR=${destroot} PREFIX=${prefix}".
>>> 
>>> This seemed redundant, or at least inelegant. Did I miss a better way
>>> to do this, or was I simply reading too much into the guide?
>> 
>> Apparently the guide is wrong in this case; the default value of
>> destroot.post_args
>> is
>> DESTROOT=${desroot}.
>> I'll fix this shortly.
> 
> For questions like these I like to look directly to the source for the answer.
> 
> https://trac.macports.org/browser/trunk/base/src/port1.0/portdestroot.tcl
> 
> 
> default destroot.cmd {${build.cmd}}
> default destroot.pre_args {[portdestroot::destroot_getargs]}
> default destroot.target install
> default destroot.post_args {${destroot.destdir}}
> default destroot.destdir {DESTDIR=${destroot}}
> 
> 
> proc portdestroot::destroot_getargs {args} {
>    if {(([option build.type] == "default" && [option os.platform] != "freebsd") || \
>         ([option build.type] == "gnu")) \
>        && [regexp "^(/\\S+/|)(g|gnu|)make(\\s+.*|)$" [option destroot.cmd]]} {
>        # Print "Entering directory" lines for better log debugging
>        return "-w [option destroot.target]"
>    }
> 
>    return "[option destroot.target]"
> }
> 
> 
> So destroot.pre_args will contain the target, destroot.post_args will contain the destdir, and destroot.args is available for you to fill as desired.
> 
> 
>> However, in your case, why don't you just use
>> destroot.args PREFIX=${prefix}?
>> The split into pre_args, args and post_args is there to allow adding
>> parameters to the destroot arguments _without_ overwriting the defaults,
>> i.e., exactly the use case you have.
> 
> Yes, this is what you should be doing. Just set destroot.args.
> 
> If you're ever unsure if a variable contains a default value, you can just display it (i.e. "ui_msg ${destroot.args}"). Or you can append to it instead of overwriting it (i.e. "destroot.args-append PREFIX=${prefix}").
> 



More information about the macports-users mailing list