> On 2021-05-24, at 13:27, 조성빈 <[email protected]> wrote:
> 
> I’m trying to write my first Portfile for the swift-format tool.
> 
> I’m referencing the xcodes port as an example of a Swift port.
> 
> The problem here is that the version of the tool must be synced with the 
> local swift version.
> For example, release 0.50400.0 is compatible with Swift 5.4, 0.50300.0 is 
> compatible with Swift 5.3, etc…
> 
> My questions:
>       • Is it right to give if conditions on the swift version to 
> differentiate versions?

You probably want to do this by having subports or having separate ports for 
each version. Subports are easier to maintain as its in one file and can share 
and inherit variables from a top level. In each subport, change the version and 
distfile being pulled in. Example, with GitHub PortGroup:

# Latest version gets no suffix
github.setup apple swift-format 0.50400.0

subport ${name}52 {  # name swift-format
  github.setup apple swift-format 0.50200.1
}

> Would executing different version statements on every if branch be sufficient?


Generally ports don't try to make install-time assumptions on behalf of the 
user. The user has to pick the correct version to install. This is especially 
because none of the port's configure, build, etc phases will execute when the 
packaged is installed via a pre-built tarball.

Subport use in the kubectl port: 
https://github.com/macports/macports-ports/blob/c382ef7da2db4cef7a087edbf0d75647f4c708aa/sysutils/kubectl/Portfile#L24

>       • If 1. is correct, is there a variable for me to test with?

You could test with $xcodeversion prior to building/installation. For example 
in a swift-format53 (where 53 indicates Swift 5.3 compatibility requiring Xcode 
12) port:

subport ${name}53 {  # name swift-format
  if {[vercmp $xcodeversion 12] < 0} {
    ui_error "${name} @${version} Xcode 12 or later."
    return -code error "incompatible Xcode version"
  }
}

>       • If 1. is incorrect, how should I provide different versions? Would 
> just providing the version only for the latest swift the right choice?

This would probably be acceptable to most users of Swift. Most users want to 
stay up-to-date with it. Having the flexibility there for those supporting 
older platforms would still be appreciated.

-- 
Andrew

Reply via email to