1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2024-09-19 10:50:24 -04:00

Merge pull request #11527 from Mic92/macos-test-fix

Fix macOS tests with meson
This commit is contained in:
Eelco Dolstra 2024-09-18 15:07:22 +02:00 committed by GitHub
commit 0ed2ab0533
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 22 additions and 20 deletions

View file

@ -370,7 +370,7 @@
# TODO: Remove the darwin check once # TODO: Remove the darwin check once
# https://github.com/NixOS/nixpkgs/pull/291814 is available # https://github.com/NixOS/nixpkgs/pull/291814 is available
++ lib.optional (stdenv.cc.isClang && !stdenv.buildPlatform.isDarwin) pkgs.buildPackages.bear ++ lib.optional (stdenv.cc.isClang && !stdenv.buildPlatform.isDarwin) pkgs.buildPackages.bear
++ lib.optional (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform) pkgs.buildPackages.clang-tools; ++ lib.optional (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform) (lib.hiPrio pkgs.buildPackages.clang-tools);
buildInputs = attrs.buildInputs or [] buildInputs = attrs.buildInputs or []
++ [ ++ [

View file

@ -2,11 +2,6 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>EnvironmentVariables</key>
<dict>
<key>OBJC_DISABLE_INITIALIZE_FORK_SAFETY</key>
<string>YES</string>
</dict>
<key>Label</key> <key>Label</key>
<string>org.nixos.nix-daemon</string> <string>org.nixos.nix-daemon</string>
<key>KeepAlive</key> <key>KeepAlive</key>

View file

@ -325,11 +325,6 @@ in {
preInstallCheck = preInstallCheck =
lib.optionalString (! doBuild) '' lib.optionalString (! doBuild) ''
mkdir -p src/nix-channel mkdir -p src/nix-channel
''
# See https://github.com/NixOS/nix/issues/2523
# Occurs often in tests since https://github.com/NixOS/nix/pull/9900
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
''; '';
separateDebugInfo = !stdenv.hostPlatform.isStatic; separateDebugInfo = !stdenv.hostPlatform.isStatic;

View file

@ -12,6 +12,7 @@
#include <mutex> #include <mutex>
#include <thread> #include <thread>
#include <curl/curl.h>
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
#ifndef _WIN32 #ifndef _WIN32
@ -363,10 +364,21 @@ void initLibStore(bool loadConfig) {
preloadNSS(); preloadNSS();
/* Because of an objc quirk[1], calling curl_global_init for the first time
after fork() will always result in a crash.
Up until now the solution has been to set OBJC_DISABLE_INITIALIZE_FORK_SAFETY
for every nix process to ignore that error.
Instead of working around that error we address it at the core -
by calling curl_global_init here, which should mean curl will already
have been initialized by the time we try to do so in a forked process.
[1] https://github.com/apple-oss-distributions/objc4/blob/01edf1705fbc3ff78a423cd21e03dfc21eb4d780/runtime/objc-initialize.mm#L614-L636
*/
curl_global_init(CURL_GLOBAL_ALL);
#if __APPLE__
/* On macOS, don't use the per-session TMPDIR (as set e.g. by /* On macOS, don't use the per-session TMPDIR (as set e.g. by
sshd). This breaks build users because they don't have access sshd). This breaks build users because they don't have access
to the TMPDIR, in particular in nix-store --serve. */ to the TMPDIR, in particular in nix-store --serve. */
#if __APPLE__
if (hasPrefix(defaultTempDir(), "/var/folders/")) if (hasPrefix(defaultTempDir(), "/var/folders/"))
unsetenv("TMPDIR"); unsetenv("TMPDIR");
#endif #endif

View file

@ -95,13 +95,6 @@ mkMesonDerivation (finalAttrs: {
"--print-errorlogs" "--print-errorlogs"
]; ];
preCheck =
# See https://github.com/NixOS/nix/issues/2523
# Occurs often in tests since https://github.com/NixOS/nix/pull/9900
lib.optionalString stdenv.hostPlatform.isDarwin ''
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
'';
doCheck = true; doCheck = true;
installPhase = '' installPhase = ''

View file

@ -3,6 +3,7 @@
#include "tests/nix_api_util.hh" #include "tests/nix_api_util.hh"
#include "file-system.hh" #include "file-system.hh"
#include <filesystem>
#include "nix_api_store.h" #include "nix_api_store.h"
#include "nix_api_store_internal.h" #include "nix_api_store_internal.h"
@ -47,7 +48,9 @@ protected:
if (fs::create_directory(nixDir)) break; if (fs::create_directory(nixDir)) break;
} }
#else #else
auto tmpl = nix::defaultTempDir() + "/tests_nix-store.XXXXXX"; // resolve any symlinks in i.e. on macOS /tmp -> /private/tmp
// because this is not allowed for a nix store.
auto tmpl = nix::absPath(std::filesystem::path(nix::defaultTempDir()) / "tests_nix-store.XXXXXX", true);
nixDir = mkdtemp((char *) tmpl.c_str()); nixDir = mkdtemp((char *) tmpl.c_str());
#endif #endif
@ -61,6 +64,10 @@ protected:
const char ** params[] = {p1, p2, p3, nullptr}; const char ** params[] = {p1, p2, p3, nullptr};
store = nix_store_open(ctx, "local", params); store = nix_store_open(ctx, "local", params);
if (!store) {
std::string errMsg = nix_err_msg(nullptr, ctx, nullptr);
ASSERT_NE(store, nullptr) << "Could not open store: " << errMsg;
};
} }
}; };
} }