diff options
author | Patrick Meyer <git@the-space.agency> | 2021-12-20 23:37:26 +0100 |
---|---|---|
committer | Raphael Megzari <raphael@megzari.com> | 2021-12-22 04:36:40 -0500 |
commit | 373d2348bedd941512f25d145c22a53be64c9b43 (patch) | |
tree | ca8331de01ad5f92dcf144692eb5f6fa38aa836b /pkgs/tools/misc/coreutils | |
parent | 8cd976ffdbe0ad1b77334d1756c06e1c2918bd21 (diff) |
coreutils: patch for uname to show the correct arch on arm macos
Until a recent patch in coreutils, gnus uname -p returned a different arch on apple silicon macs, compared to the uname shipped with macos. This causes config.guess to produce incorrect build system triplets for various projects on these systems when in a nix-shell.[23][42] As coreutils only releases every few months/years and no release is planned at the moment, I'm introducing the patch here. We can drop it once the next coreutils version is released. I made a tiny adjustment to the patch from [23]. I removed the usage of MAYBE_UNUSED, which currently only compiles against HEAD. [23] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52330 [42] https://github.com/NixOS/nixpkgs/issues/147914
Diffstat (limited to 'pkgs/tools/misc/coreutils')
-rw-r--r-- | pkgs/tools/misc/coreutils/default.nix | 3 | ||||
-rw-r--r-- | pkgs/tools/misc/coreutils/fix-arm64-macos.patch | 124 |
2 files changed, 127 insertions, 0 deletions
diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix index c4280fbd12273..424ae9da6307f 100644 --- a/pkgs/tools/misc/coreutils/default.nix +++ b/pkgs/tools/misc/coreutils/default.nix @@ -33,6 +33,9 @@ stdenv.mkDerivation (rec { ./fix-chmod-exit-code.patch # Workaround for https://debbugs.gnu.org/cgi/bugreport.cgi?bug=51433 ./disable-seek-hole.patch + # Workaround for https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52330 + # This patch can be dropped, once we upgrade to the next coreutils version after 9.0 + ./fix-arm64-macos.patch ]; postPatch = '' diff --git a/pkgs/tools/misc/coreutils/fix-arm64-macos.patch b/pkgs/tools/misc/coreutils/fix-arm64-macos.patch new file mode 100644 index 0000000000000..d8880b23dcbfc --- /dev/null +++ b/pkgs/tools/misc/coreutils/fix-arm64-macos.patch @@ -0,0 +1,124 @@ +diff --git a/src/uname.c b/src/uname.c +index ae9b8e29d..e84fc477a 100644 +--- a/src/uname.c ++++ b/src/uname.c +@@ -27,7 +27,7 @@ + # include <sys/systeminfo.h> + #endif + +-#if HAVE_SYS_SYSCTL_H && ! defined __GLIBC__ ++#if HAVE_SYS_SYSCTL_H && ! defined __GLIBC__ && ! defined __APPLE__ + # if HAVE_SYS_PARAM_H + # include <sys/param.h> /* needed for OpenBSD 3.0 */ + # endif +@@ -44,11 +44,6 @@ + # endif + #endif + +-#ifdef __APPLE__ +-# include <mach/machine.h> +-# include <mach-o/arch.h> +-#endif +- + #include "system.h" + #include "die.h" + #include "error.h" +@@ -167,6 +162,24 @@ print_element (char const *element) + fputs (element, stdout); + } + ++/* Print ELEMENT, preceded by a space if something has already been ++ printed. But if the environment variable ENVVAR is set, print its ++ value instead of ELEMENT. */ ++ ++static void ++print_element_env (char const *element, char const *envvar) ++{ ++#ifdef __APPLE__ ++ if (envvar) ++ { ++ char const *val = getenv (envvar); ++ if (val) ++ element = val; ++ } ++#endif ++ print_element (element); ++} ++ + + /* Set all the option flags according to the switches specified. + Return the mask indicating which elements to print. */ +@@ -287,26 +300,36 @@ main (int argc, char **argv) + die (EXIT_FAILURE, errno, _("cannot get system name")); + + if (toprint & PRINT_KERNEL_NAME) +- print_element (name.sysname); ++ print_element_env (name.sysname, "UNAME_SYSNAME"); + if (toprint & PRINT_NODENAME) +- print_element (name.nodename); ++ print_element_env (name.nodename, "UNAME_NODENAME"); + if (toprint & PRINT_KERNEL_RELEASE) +- print_element (name.release); ++ print_element_env (name.release, "UNAME_RELEASE"); + if (toprint & PRINT_KERNEL_VERSION) +- print_element (name.version); ++ print_element_env (name.version, "UNAME_VERSION"); + if (toprint & PRINT_MACHINE) +- print_element (name.machine); ++ print_element_env (name.machine, "UNAME_MACHINE"); + } + + if (toprint & PRINT_PROCESSOR) + { + char const *element = unknown; ++#ifdef __APPLE__ ++# if defined __arm__ || defined __arm64__ ++ element = "arm"; ++# elif defined __i386__ || defined __x86_64__ ++ element = "i386"; ++# elif defined __ppc__ || defined __ppc64__ ++ element = "powerpc"; ++# endif ++#endif + #if HAVE_SYSINFO && defined SI_ARCHITECTURE +- { +- static char processor[257]; +- if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor)) +- element = processor; +- } ++ if (element == unknown) ++ { ++ static char processor[257]; ++ if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor)) ++ element = processor; ++ } + #endif + #ifdef UNAME_PROCESSOR + if (element == unknown) +@@ -316,26 +339,6 @@ main (int argc, char **argv) + static int mib[] = { CTL_HW, UNAME_PROCESSOR }; + if (sysctl (mib, 2, processor, &s, 0, 0) >= 0) + element = processor; +- +-# ifdef __APPLE__ +- /* This kludge works around a bug in Mac OS X. */ +- if (element == unknown) +- { +- cpu_type_t cputype; +- size_t cs = sizeof cputype; +- NXArchInfo const *ai; +- if (sysctlbyname ("hw.cputype", &cputype, &cs, NULL, 0) == 0 +- && (ai = NXGetArchInfoFromCpuType (cputype, +- CPU_SUBTYPE_MULTIPLE)) +- != NULL) +- element = ai->name; +- +- /* Hack "safely" around the ppc vs. powerpc return value. */ +- if (cputype == CPU_TYPE_POWERPC +- && STRNCMP_LIT (element, "ppc") == 0) +- element = "powerpc"; +- } +-# endif + } + #endif + if (! (toprint == UINT_MAX && element == unknown)) |