> 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. >> >>