Am 03.06.16 um 14:55 schrieb René J. V. Bertin:
Rainer Müller wrote:

The definition of the platform proc is here:


https://trac.macports.org/browser/trunk/base/src/port1.0/portutil.tcl?rev=149111#L765
Extending that syntax with an optional code block after an "else"
keyword would be possible.
Once I knew it was possible it wasn't very hard to figure out how. Is there a
more efficient way to determine if an else keyword has been given (both in the
parser and in the actual executor?

The code below is more in line with current tcl code practice
(untested, using e.g. tcl index expressions).

-g

proc platform {os args} {
    global os.platform os.subplatform os.arch os.major

    set len [llength $args]
    if {$len < 1} {
        return -code error "Malformed platform specification"
    }
    if {[lindex $args end-1] eq "else"} {
        set code [lindex $args end-2]
        set altcode [lindex $args end]
        set consumed 3
    } else {
        set code [lindex $args end]
        set altcode ""
        set consumed 1
    }

    foreach arg [lrange $args 0 end-$consumed] {
        if {[regexp {(^[0-9]+$)} $arg match result]} {
            set release $result
        } elseif {[regexp {([a-zA-Z0-9]*)} $arg match result]} {
            set arch $result
        }
    }

    set match 0
    # 'os' could be a platform or an arch when it's alone
    if {$len == 1 && ($os == ${os.platform} || $os == ${os.subplatform} || $os 
== ${os.arch})} {
        set match 1
    } elseif {($os == ${os.platform} || $os == ${os.subplatform})
              && (![info exists release] || ${os.major} == $release)
              && (![info exists arch] || ${os.arch} == $arch)} {
        set match 1
    }

    # Execute the code if this platform matches the platform we're on
    if {$match} {
        uplevel 1 $code
    } elseif {$altcode ne ""} {
        uplevel 1 $altcode
    }
}

_______________________________________________
macports-dev mailing list
macports-dev@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/macports-dev

Reply via email to