> On 11 Dec 2021, at 10:42 pm, Jason Liu <jason...@umich.edu> wrote:
> 
> 
>> On Sat, Dec 11, 2021 at 5:20 PM Ryan Schmidt <ryandes...@macports.org> wrote:
>> 
>> 
>>> On Dec 10, 2021, at 15:07, Jason Liu wrote:
>>> 
>>> A conversation in one of my PRs has brought up an interesting question that 
>>> I've been wondering about for a long time. In Portfiles, whenever I've had 
>>> a test for `${os.major} <= xx`, I've typically always added an additional 
>>> check for darwin in the front, i.e.:
>>> 
>>> if {${os.platform} eq "darwin" && ${os.major} <= xx} {
>>> 
>>> I've done it that way because I basically copied what I saw from other 
>>> Portfiles, and because I get gently admonished by the committers when I 
>>> forget to.
>> 
>> Yes, please always do that.
> 
> 
> Then would it be easier (or even kosher) to simply wrap the majority of the 
> Portfile inside of a single
> 
> if {${os.platform} eq "darwin"} {
> 
> and be done with it, instead of needing to add one each and every time I have 
> a conditional involving `${os.major}`?

No, because that would render the port non functional on non darwin OSes. You 
should only specify the darwin platform when it is actually required, e.g. when 
then making a os.major conditional that inly makes sense in darwin platforms.

So basically, following the recommendations as currently given.

Chris

> 
>>> I was under the impression that the `platforms darwin` line means that the 
>>> entire Portfile is supposed to be valid only for `${os.platform} eq 
>>> "darwin"`, no? (In other words, my understanding is that a line such as 
>>> `platforms darwin freebsd openbsd` is meant to signify that "this Portfile 
>>> is supposed to be valid for the listed platforms".) If that's not the case, 
>>> then what is the purpose of `platforms darwin`?
>> 
>> The platforms line is not used by MacPorts in any way at this time, other 
>> than to display it in the output of "port info". There is a ticket about 
>> possibly using it in the future as a way to indicate which OS versions the 
>> port is compatible with, but I don't think that got beyond the idea phase.
> 
> That seems like a pity, and a bit of a waste, considering that platforms is 
> being included in each and every Portfile.
> 
> -- 
> Jason Liu
> 
> 
>> On Sat, Dec 11, 2021 at 5:20 PM Ryan Schmidt <ryandes...@macports.org> wrote:
>> 
>> 
>> On Dec 10, 2021, at 15:07, Jason Liu wrote:
>> 
>> > A conversation in one of my PRs has brought up an interesting question 
>> > that I've been wondering about for a long time. In Portfiles, whenever 
>> > I've had a test for `${os.major} <= xx`, I've typically always added an 
>> > additional check for darwin in the front, i.e.:
>> > 
>> > if {${os.platform} eq "darwin" && ${os.major} <= xx} {
>> > 
>> > I've done it that way because I basically copied what I saw from other 
>> > Portfiles, and because I get gently admonished by the committers when I 
>> > forget to.
>> 
>> Yes, please always do that.
>> 
>> 
>> > But I've also always wondered why it's necessary.
>> 
>> Your Portfile could be parsed or accessed by non-Darwin operating systems. 
>> For example, before we took over server hosting duties in 2016, all of the 
>> server VMs including the one that generated the PortIndex files (except the 
>> actual macOS build machines) were running Linux; perhaps some day we will 
>> once again want to try using a server OS other than macOS for this task. 
>> There are even some users using Linux to test various things in MacPorts. We 
>> don't really expect many ports to be installable on other operating systems 
>> or for maintainers to test anything on other operating systems, but just 
>> take 2 seconds when you're writing an OS version conditional to think about 
>> what you're trying to express, and then express it, including checking 
>> os.platform. Typical forms include the one you mentioned:
>> 
>> if {${os.platform} eq "darwin" && ${os.major} <= xx}
>> 
>> (<, <=, ==, >=, >)
>> 
>> And the other one:
>> 
>> if {${os.platform} ne "darwin" || ${os.major} <= xx}
>> 
>> (<, <=, ==, >=, >)
>> 
>> Usually the decision about which to use comes down to whether the thing 
>> you're doing is Mac-specific or not. For example, if you were writing a 
>> conditional to use the Security framework on recent macOS and openssl on 
>> older macOS, what should happen if perchance the port is used on non-macOS? 
>> In this case, the answer is that frameworks are a Mac thing, so you would 
>> want to use openssl for non-macOS.
>> 
>> 
>> > I was under the impression that the `platforms darwin` line means that the 
>> > entire Portfile is supposed to be valid only for `${os.platform} eq 
>> > "darwin"`, no? (In other words, my understanding is that a line such as 
>> > `platforms darwin freebsd openbsd` is meant to signify that "this Portfile 
>> > is supposed to be valid for the listed platforms".) If that's not the 
>> > case, then what is the purpose of `platforms darwin`?
>> 
>> The platforms line is not used by MacPorts in any way at this time, other 
>> than to display it in the output of "port info". There is a ticket about 
>> possibly using it in the future as a way to indicate which OS versions the 
>> port is compatible with, but I don't think that got beyond the idea phase.
>> 
>> 

Reply via email to