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}`? 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. > > >