Does setting "destroot.post_args" not include default "destroot.destdir" in the assembled command?
Ryan Schmidt
ryandesign at macports.org
Mon Aug 20 13:07:15 PDT 2012
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