blob: 68eca666627437bd99377a61c975e392af37fad8 [file] [log] [blame]
// Copyright 2017 The LUCI Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cipd
import (
"strings"
"go.chromium.org/luci/vpython/api/vpython"
)
// PlatformForPEP425Tag returns the CIPD platform inferred from a given Python
// PEP425 tag.
//
// If the platform could not be determined, an empty string will be returned.
func PlatformForPEP425Tag(t *vpython.PEP425Tag) string {
switch platSplit := strings.SplitN(t.Platform, "_", 2); platSplit[0] {
case "linux", "manylinux1":
// Grab the remainder.
//
// Examples:
// - linux_i686
// - manylinux1_x86_64
// - linux_arm64
cpu := ""
if len(platSplit) > 1 {
cpu = platSplit[1]
}
switch cpu {
case "i686":
return "linux-386"
case "x86_64":
return "linux-amd64"
case "arm64", "aarch64":
return "linux-arm64"
case "mipsel", "mips":
return "linux-mips32"
case "mips64":
return "linux-mips64"
default:
// All remaining "arm*" get the "armv6l" CIPD platform.
if strings.HasPrefix(cpu, "arm") {
return "linux-armv6l"
}
return ""
}
case "macosx":
// Grab the last token.
//
// Examples:
// - macosx_10_10_intel
// - macosx_10_10_i386
if len(platSplit) == 1 {
return ""
}
suffixSplit := strings.SplitN(platSplit[1], "_", -1)
switch suffixSplit[len(suffixSplit)-1] {
case "intel", "x86_64", "fat64", "universal":
return "mac-amd64"
case "i386", "fat32":
return "mac-386"
default:
return ""
}
case "win32":
// win32
return "windows-386"
case "win":
// Examples:
// - win_amd64
if len(platSplit) == 1 {
return ""
}
switch platSplit[1] {
case "amd64":
return "windows-amd64"
default:
return ""
}
default:
return ""
}
}