> On Dec 7, 2016, at 11:15, Ryan Schmidt <ryandes...@macports.org> wrote: > > >> On Dec 7, 2016, at 12:05 PM, Christopher Jones <jon...@hep.phy.cam.ac.uk> >> wrote: >> >> >>> On 7 Dec 2016, at 5:32 pm, Joshua Root <j...@macports.org> wrote: >>> >>> On 2016-12-8 04:24 , Chris Jones wrote: >>>> Hi, >>>> >>>> I'm working on an update to the root6 port, where the minimum compiler >>>> requirement has been increased in the latest release, such that I need >>>> to update the compiler blacklist/fallback to force a macports compiler >>>> to be used on OSX 10.8 and 10.9 (whereas previously the system one was OK). >>>> >>>> This is all working OK, but I have noticed one thing I am trying to >>>> understand is on 10.8 and 10.9 different fallbacks are being picked. >>>> >>>> I have >>>> >>>> compiler.blacklist-append *gcc* {clang < 602} macports-clang-3.3 >>>> macports-clang-3.4 macports-clang-3.5 macports-clang-3.6 >>>> compiler.fallback-append macports-clang-3.9 macports-clang-3.8 >>>> macports-clang-3.7 >>>> >>>> On 10.8 this is causing macports clang 3.9 to be picked, whereas on 10.9 >>>> clang 3.8 is being used. I am curious as to what the logic is in the >>>> blacklist portgroup that is leading to this different decisions to be >>>> made ? I thought perhaps it was based on what clang ports where already >>>> installed, but even after uninstalling all clang versions, the same >>>> decisions are being made. Just curious... >>> >>> The initial value of compiler.fallback differs based on cxx_stdlib because >>> clang 3.5+ needs libc++. And yes, this will mean trouble for users on 10.8 >>> who are using the default cxx_stdlib. >> >> Ah, I didn’t consider the cxx_stdlib differences. Still not sure though how >> that exactly translates into different decisions w.r.t. clang 3.8 versus 3.9 >> though. Is it just the different list means a different (random) decision is >> taken ? both are >3.5 so on the same field regarding the stdlib used. > > No random decisions are taken. MacPorts uses the first acceptable (i.e. not > blacklisted) compiler from the whitelist (if you specify a whitelist), or the > first acceptable compiler from the fallback list (if you don't specify a > whitelist). > > You can read the portconfigure::get_compiler_fallback procedure in > src/port1.0/portconfigure.tcl to see all the nuance that goes into generating > the list of compilers to try, which varies based on OS version, Xcode > version, and C++ library: > > https://github.com/macports/macports-base/blob/7fb6ab2e5a40a5f4f828430a499b840b43398c56/src/port1.0/portconfigure.tcl#L475 > > but the relevant part here is: > > On OS X versions earlier than Sierra, with libc++ and Xcode 5 or later (i.e. > on 10.9-10.11, or on 10.8 or earlier if the user follows the > LibcxxOnOlderSystems wiki page) the default compiler fallback is: > > clang macports-clang-3.8 macports-clang-3.7 macports-clang-3.6 > macports-clang-3.5 > > (The intention is that this would list the newest stable version of clang > first, followed by the next newest stable version, etc. clang 3.9.0 stable > was released in September 2016 so one would think that macports-clang-3.9 > should be prepended to that list, but we haven't done that yet; I don't know > if there is an extenuating circumstance why that has not yet been done.)
Waiting for 3.9.1. 3.9+ also doesn't currently build on Snow Leopard and earlier. I'd like to get those taken care of first. > With libstdc++ and Xcode 5 or later, the default compiler fallback is: > > clang macports-clang-3.4 macports-clang-3.3 > > To these lists, in your port you append "macports-clang-3.9 > macports-clang-3.8 macports-clang-3.7" > > That means the final fallback list for your port for libc++ on 10.11 or > earlier with Xcode 5 or later is: > > clang macports-clang-3.8 macports-clang-3.7 macports-clang-3.6 > macports-clang-3.5 macports-clang-3.9 macports-clang-3.8 macports-clang-3.7 > > From this, MacPorts picks the first acceptable compiler, which (since you are > blacklisting clang < 602) is either clang (if its version is >= 602) or > macports-clang-3.8 (if clang's version is < 602). > > For libstdc++ with Xcode 5 or later, the final fallback for your port is: > > clang macports-clang-3.4 macports-clang-3.3 macports-clang-3.9 > macports-clang-3.8 macports-clang-3.7 > > (For earlier Xcode versions, llvm-gcc-4.2 is also in the list, but since > you're blacklisting *gcc* that won't get used.) > > From this, MacPorts picks the first acceptable compiler, which (since you are > blacklisting clang < 602 and macports-clang-3.3 and macports-clang-3.4) is > macports-clang-3.9. > >
smime.p7s
Description: S/MIME cryptographic signature