mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-16 18:53:17 +00:00
64faf2372d
The wrapper that linuxkit uses around the macOS Virtualization framework tries to detect which OS it is running on, and aborts if it thinks that the macOS version is not new enough to have the required framework features. This commit (mostly) fixes that macOS version detection when the code is linked as if it is linked against the 10.12 SDK (as the current Darwin ld wrapper does via the -platform_version switch), but is then run on macOS 11 or later.
54 lines
2.2 KiB
Diff
54 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)
|