94427deb9d
GitOrigin-RevId: f91ee3065de91a3531329a674a45ddcb3467a650
53 lines
2.2 KiB
Diff
53 lines
2.2 KiB
Diff
diff --git a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go
|
|
index d72a7856d..b186d3aff 100644
|
|
--- a/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go
|
|
+++ b/src/cmd/linuxkit/vendor/github.com/Code-Hex/vz/v3/osversion.go
|
|
@@ -9,6 +9,7 @@ import "C"
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
+ "os/exec"
|
|
"strconv"
|
|
"strings"
|
|
"sync"
|
|
@@ -48,6 +49,40 @@ func fetchMajorMinorVersion() (float64, error) {
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
+
|
|
+ // For backward compatibility reasons, if code compiled against an SDK
|
|
+ // earlier than macOS 11 is run on macOS 11 or later, and then tries to read
|
|
+ // value of kern.osproductversion, the OS will return the value "10.16"
|
|
+ // instead of the real OS version string. By contrast, the command `sw_vers
|
|
+ // -productVersion` will return the real OS version string unless the
|
|
+ // environment variable SYSTEM_VERSION_COMPAT is set to 1 or 2, in which
|
|
+ // case it will respectively return "10.16" and "15.7" (the latter is for
|
|
+ // some iOS compatibility reason).
|
|
+ //
|
|
+ // The only (currently) sure way to get the real OS version string
|
|
+ // regardless of SYSTEM_VERSION_COMPAT or the SDK compiled against is
|
|
+ // apparently to parse
|
|
+ // /System/Library/CoreServices/.SystemVersionPlatform.plist if it exists,
|
|
+ // and /System/Library/CoreServices/SystemVersion.plist otherwise. Doing
|
|
+ // so, however, requires parsing XML plist files.
|
|
+ //
|
|
+ // Given what this library does, it doesn't seem likely that there would be
|
|
+ // a good reason to run its code with SYSTEM_VERSION_COMPAT set, so using
|
|
+ // `sw_vers` should be adequate until a proper parsing of plist files is
|
|
+ // added.
|
|
+ //
|
|
+ // See https://github.com/ziglang/zig/issues/7569,
|
|
+ // https://github.com/ziglang/zig/pull/7714 and
|
|
+ // https://eclecticlight.co/2020/08/13/macos-version-numbering-isnt-so-simple/
|
|
+ // for more information.
|
|
+ if osver == "10.16" {
|
|
+ out, err := exec.Command("sw_vers", "-productVersion").Output()
|
|
+ if err != nil {
|
|
+ return 0, err
|
|
+ }
|
|
+ osver = strings.TrimRight(string(out), "\r\n")
|
|
+ }
|
|
+
|
|
prefix := "v"
|
|
majorMinor := strings.TrimPrefix(semver.MajorMinor(prefix+osver), prefix)
|
|
version, err := strconv.ParseFloat(majorMinor, 64)
|