On Nov 25, 2012, at 3:10 PM, Craig Treleaven <[email protected]> wrote:
> At 11:48 AM -0500 11/25/12, Jeremy Huddleston Sequoia wrote: >> On Nov 25, 2012, at 8:54 AM, Bradley Giesbrecht <[email protected]> wrote: >> >>> On Nov 24, 2012, at 8:10 PM, Ryan Schmidt wrote: >>> >>>> One idea that occurs to me is modifying the compiler.blacklist syntax. For >>>> example: >>>> >>>> "compiler.blacklist clang" would blacklist all versions of clang, as it >>>> does now. >>>> >>>> "compiler.blacklist clang<318.0.61" would blacklist clang builds less than >>>> 318.0.61 (cairo might use this). >>>> >>>> "compiler.blacklist clang>=421.11.66" would blacklist clang builds greater >>>> than or equal to 421.11.66 (mpich might use this). >>>> >>>> "compiler.blacklist 421.11.66<=clang<444" would blacklist clang builds >>>> greater than or equal to 421.11.66 and less than 444 (mpich might use >>>> this, if whatever clang bug it hit is fixed in some hypothetical future >>>> clang build 444). >>> >>> >>> Would the last example be easier to write, read, debug and document as >>> key/value pairs over two line? >>> compiler.blacklist clang<444 >>> compiler.blacklist clang>=421.11.66 >> >> Unfortunately that won't work as the first would be overwritten by the >> second ... even with the use of -append, the default logic of the blacklist >> is "or" for each element. I'd suggest that if the element is a list, then >> it is examined for versions. If it is a literal, then the entire family is >> blacklisted. I like something like this: >> >> # All clang versions blacklisted >> compiler.blacklist-append clang >> >> # clang < 308 blacklisted: >> compiler.blacklist-append {clang < 308} >> >> # clang >= 421.11.66 and < 444 blacklisted >> compiler.blacklist-append {clang >= 421.11.16 < 444} > > Not sure how the parsing works for the last example. Pseudocode for the parsing is essentially: if is-list(l): if matches_all_versions(car(l), cdr(l)) refuse_compiler(l) else refuse_compiler(l) matches_all_versions(c, vl): if is_empty_list(vl): return true if version_matches(c, car(vl), cadr(vl)): return matches_all_versions(c, cddr(vl)) return false > For mythtv-core.25, I tested a bunch of compilers to find a few that worked. > Eg: > > # See https://trac.macports.org/ticket/35934 > compiler.blacklist llvm-gcc-4.2 macports-llvm-gcc-4.2 macports-clang-3.1 \ > dragonegg-3.0 dragonegg-3.1 apple-gcc-4.2 > compiler.fallback-append macports-clang-3.0 > > # Run time failures with XCode 4.4.x and 4.5.0 > if {[vercmp $xcodeversion 4.4] >= 0} { > compiler.blacklist-append clang > } > > # TODO: This should be done by base > # https://trac.macports.org/ticket/32542 > if {${configure.compiler} == "macports-clang-3.0"} { > depends_build-append port:clang-3.0 > depends_skip_archcheck-append clang-3.0 > } > > Assuming that some future version of Apple clang starts working (say the > "444", above), how would this be expressed? Using my example: compiler.blacklist-append {clang < 444} _______________________________________________ macports-dev mailing list [email protected] http://lists.macosforge.org/mailman/listinfo/macports-dev
