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

Reply via email to