at master 17 kB view raw
1# DARWIN-SPECIFIC OVERRIDES FOR THE HASKELL PACKAGE SET IN NIXPKGS 2 3{ pkgs, haskellLib }: 4 5let 6 inherit (pkgs) lib darwin; 7in 8 9with haskellLib; 10 11self: super: 12( 13 { 14 15 # the tests for shell-conduit on Darwin illegitimatey assume non-GNU echo 16 # see: https://github.com/psibi/shell-conduit/issues/12 17 shell-conduit = dontCheck super.shell-conduit; 18 19 conduit-extra = super.conduit-extra.overrideAttrs (drv: { 20 __darwinAllowLocalNetworking = true; 21 }); 22 23 spacecookie = super.spacecookie.overrideAttrs (_: { 24 __darwinAllowLocalNetworking = true; 25 }); 26 27 streaming-commons = super.streaming-commons.overrideAttrs (_: { 28 __darwinAllowLocalNetworking = true; 29 }); 30 31 # Hakyll's tests are broken on Darwin (3 failures); and they require util-linux 32 hakyll = overrideCabal { 33 testToolDepends = [ ]; 34 doCheck = false; 35 } super.hakyll; 36 37 double-conversion = addExtraLibrary pkgs.libcxx super.double-conversion; 38 39 # "erf table" test fails on Darwin 40 # https://github.com/bos/math-functions/issues/63 41 math-functions = dontCheck super.math-functions; 42 43 # darwin doesn't have sub-second resolution 44 # https://github.com/hspec/mockery/issues/11 45 mockery = overrideCabal (drv: { 46 preCheck = '' 47 export TRAVIS=true 48 '' 49 + (drv.preCheck or ""); 50 }) super.mockery; 51 52 # https://github.com/ndmitchell/shake/issues/206 53 shake = dontCheck super.shake; 54 55 filecache = dontCheck super.filecache; 56 57 # gtk/gtk3 needs to be told on Darwin to use the Quartz 58 # rather than X11 backend (see eg https://github.com/gtk2hs/gtk2hs/issues/249). 59 gtk3 = appendConfigureFlag "-f have-quartz-gtk" super.gtk3; 60 gtk = appendConfigureFlag "-f have-quartz-gtk" super.gtk; 61 62 # issues finding libcharset.h without libiconv in buildInputs on darwin. 63 with-utf8 = addExtraLibrary pkgs.libiconv super.with-utf8; 64 65 git-annex = overrideCabal (drv: { 66 # We can't use testFlags since git-annex side steps the Cabal test mechanism 67 preCheck = drv.preCheck or "" + '' 68 checkFlagsArray+=( 69 # The addurl test cases require security(1) to be in PATH which we can't 70 # provide from nixpkgs to my (@sternenseemann) knowledge. 71 "-p" "!/addurl/" 72 ) 73 ''; 74 }) super.git-annex; 75 76 # on*Finish tests rely on a threadDelay timing differential of 0.1s. 77 # You'd think that's plenty of time even though immediate rescheduling 78 # after threadDelay is not guaranteed. However, it appears that these 79 # tests are quite flaky on Darwin. 80 immortal = dontCheck super.immortal; 81 82 # Prevents needing to add `security_tool` as a run-time dependency for 83 # everything using x509-system to give access to the `security` executable. 84 # 85 # darwin.security_tool is broken in Mojave (#45042) 86 # 87 # We will use the system provided security for now. 88 # Beware this WILL break in sandboxes! 89 # 90 # TODO(matthewbauer): If someone really needs this to work in sandboxes, 91 # I think we can add a propagatedImpureHost dep here, but I’m hoping to 92 # get a proper fix available soonish. 93 x509-system = overrideCabal ( 94 drv: 95 lib.optionalAttrs (!pkgs.stdenv.cc.nativeLibc) { 96 postPatch = '' 97 substituteInPlace System/X509/MacOS.hs --replace security /usr/bin/security 98 '' 99 + (drv.postPatch or ""); 100 } 101 ) super.x509-system; 102 crypton-x509-system = overrideCabal ( 103 drv: 104 lib.optionalAttrs (!pkgs.stdenv.cc.nativeLibc) { 105 postPatch = '' 106 substituteInPlace System/X509/MacOS.hs --replace security /usr/bin/security 107 '' 108 + (drv.postPatch or ""); 109 } 110 ) super.crypton-x509-system; 111 112 # https://github.com/haskell-foundation/foundation/pull/412 113 foundation = dontCheck super.foundation; 114 115 # Test suite attempts to create illegal paths on HFS+ 116 # https://github.com/fpco/haskell-filesystem/issues/37 117 system-fileio = dontCheck super.system-fileio; 118 119 llvm-hs = overrideCabal (oldAttrs: { 120 # One test fails on darwin. 121 doCheck = false; 122 # llvm-hs's Setup.hs file tries to add the lib/ directory from LLVM8 to 123 # the DYLD_LIBRARY_PATH environment variable. This messes up clang 124 # when called from GHC, probably because clang is version 7, but we are 125 # using LLVM8. 126 preCompileBuildDriver = '' 127 substituteInPlace Setup.hs --replace "addToLdLibraryPath libDir" "pure ()" 128 '' 129 + (oldAttrs.preCompileBuildDriver or ""); 130 }) super.llvm-hs; 131 132 sym = markBroken super.sym; 133 134 yesod-core = super.yesod-core.overrideAttrs (drv: { 135 # Allow access to local networking when the Darwin sandbox is enabled, so yesod-core can 136 # run tests that access localhost. 137 __darwinAllowLocalNetworking = true; 138 }); 139 140 hidapi = super.hidapi.override { systemd = null; }; 141 142 # Ensure the necessary frameworks are propagatedBuildInputs on darwin 143 OpenGLRaw = overrideCabal (drv: { 144 librarySystemDepends = [ ]; 145 libraryHaskellDepends = drv.libraryHaskellDepends; 146 preConfigure = '' 147 frameworkPaths=($(for i in $nativeBuildInputs; do if [ -d "$i"/Library/Frameworks ]; then echo "-F$i/Library/Frameworks"; fi done)) 148 frameworkPaths=$(IFS=, ; echo "''${frameworkPaths[@]}") 149 configureFlags+=$(if [ -n "$frameworkPaths" ]; then echo -n "--ghc-options=-optl=$frameworkPaths"; fi) 150 '' 151 + (drv.preConfigure or ""); 152 }) super.OpenGLRaw; 153 bindings-GLFW = overrideCabal (drv: { 154 librarySystemDepends = [ ]; 155 }) super.bindings-GLFW; 156 157 # cabal2nix likes to generate dependencies on hinotify when hfsevents is 158 # really required on darwin: https://github.com/NixOS/cabal2nix/issues/146. 159 hinotify = self.hfsevents; 160 161 # FSEvents API is very buggy and tests are unreliable. See 162 # http://openradar.appspot.com/10207999 and similar issues. 163 fsnotify = dontCheck super.fsnotify; 164 165 HTF = overrideCabal (drv: { 166 # GNU find is not prefixed in stdenv 167 postPatch = '' 168 substituteInPlace scripts/local-htfpp --replace "find=gfind" "find=find" 169 '' 170 + (drv.postPatch or ""); 171 }) super.HTF; 172 173 # conditional dependency via a cabal flag 174 cas-store = overrideCabal (drv: { 175 libraryHaskellDepends = [ 176 self.kqueue 177 ] 178 ++ (drv.libraryHaskellDepends or [ ]); 179 }) super.cas-store; 180 181 # We are lacking pure pgrep at the moment for tests to work 182 tmp-postgres = dontCheck super.tmp-postgres; 183 184 # On darwin librt doesn't exist and will fail to link against, 185 # however linking against it is also not necessary there 186 GLHUI = overrideCabal (drv: { 187 postPatch = '' 188 substituteInPlace GLHUI.cabal --replace " rt" "" 189 '' 190 + (drv.postPatch or ""); 191 }) super.GLHUI; 192 193 SDL-image = overrideCabal (drv: { 194 # Prevent darwin-specific configuration code path being taken 195 # which doesn't work with nixpkgs' SDL libraries 196 postPatch = '' 197 substituteInPlace configure --replace xDarwin noDarwinSpecialCasing 198 '' 199 + (drv.postPatch or ""); 200 patches = [ 201 # Work around SDL_main.h redefining main to SDL_main 202 ./patches/SDL-image-darwin-hsc.patch 203 ]; 204 }) super.SDL-image; 205 206 # Prevent darwin-specific configuration code path being taken which 207 # doesn't work with nixpkgs' SDL libraries 208 SDL-mixer = overrideCabal (drv: { 209 postPatch = '' 210 substituteInPlace configure --replace xDarwin noDarwinSpecialCasing 211 '' 212 + (drv.postPatch or ""); 213 }) super.SDL-mixer; 214 215 # Work around SDL_main.h redefining main to SDL_main 216 SDL-ttf = appendPatch ./patches/SDL-ttf-darwin-hsc.patch super.SDL-ttf; 217 218 # Disable a bunch of test suites that fail because of darwin's case insensitive 219 # file system: When a test suite has a test suite file that has the same name 220 # as a module in scope, but in different case (e. g. hedgehog.hs and Hedgehog 221 # in scope), GHC will complain that the file name and module name differ (in 222 # the example hedgehog.hs would be Main). 223 # These failures can easily be fixed by upstream by renaming files, so we 224 # should create issues for them. 225 # https://github.com/typeclasses/aws-cloudfront-signed-cookies/issues/2 226 aws-cloudfront-signed-cookies = dontCheck super.aws-cloudfront-signed-cookies; 227 228 # https://github.com/acid-state/acid-state/issues/133 229 acid-state = dontCheck super.acid-state; 230 231 # Otherwise impure gcc is used, which is Apple's weird wrapper 232 c2hsc = addTestToolDepends [ pkgs.gcc ] super.c2hsc; 233 234 http2 = super.http2.overrideAttrs (drv: { 235 # Allow access to local networking when the Darwin sandbox is enabled, so http2 can run tests 236 # that access localhost. 237 __darwinAllowLocalNetworking = true; 238 }); 239 240 # https://hydra.nixos.org/build/230964714/nixlog/1 241 inline-c-cpp = appendPatch (pkgs.fetchpatch { 242 url = "https://github.com/fpco/inline-c/commit/e8dc553b13bb847409fdced649a6a863323cff8a.patch"; 243 name = "revert-use-system-cxx-std-lib.patch"; 244 sha256 = "sha256-ql1/+8bvmWexyCdFR0VS4M4cY2lD0Px/9dHYLqlKyNA="; 245 revert = true; 246 stripLen = 1; 247 }) super.inline-c-cpp; 248 249 # Tests fail on macOS https://github.com/mrkkrp/zip/issues/112 250 zip = dontCheck super.zip; 251 252 http-streams = super.http-streams.overrideAttrs (drv: { 253 __darwinAllowLocalNetworking = true; 254 }); 255 256 io-streams = super.io-streams.overrideAttrs (drv: { 257 __darwinAllowLocalNetworking = true; 258 }); 259 260 io-streams-haproxy = super.io-streams-haproxy.overrideAttrs (drv: { 261 __darwinAllowLocalNetworking = true; 262 }); 263 264 openssl-streams = super.openssl-streams.overrideAttrs (drv: { 265 __darwinAllowLocalNetworking = true; 266 }); 267 268 snap = super.snap.overrideAttrs (drv: { 269 __darwinAllowLocalNetworking = true; 270 }); 271 272 warp = super.warp.overrideAttrs (drv: { 273 __darwinAllowLocalNetworking = true; 274 }); 275 276 ghcjs-dom-hello = overrideCabal (drv: { 277 libraryHaskellDepends = with self; [ 278 jsaddle 279 jsaddle-warp 280 ]; 281 executableHaskellDepends = with self; [ 282 ghcjs-dom 283 jsaddle-wkwebview 284 ]; 285 }) super.ghcjs-dom-hello; 286 287 jsaddle-hello = overrideCabal (drv: { 288 libraryHaskellDepends = with self; [ 289 jsaddle 290 lens 291 ]; 292 executableHaskellDepends = with self; [ 293 jsaddle-warp 294 jsaddle-wkwebview 295 ]; 296 }) super.jsaddle-hello; 297 298 jsaddle-wkwebview = overrideCabal (drv: { 299 libraryHaskellDepends = with self; [ 300 aeson 301 data-default 302 jsaddle 303 ]; # cabal2nix doesn't add darwin-only deps 304 }) super.jsaddle-wkwebview; 305 306 # cabal2nix doesn't add darwin-only deps 307 reflex-dom = addBuildDepend self.jsaddle-wkwebview ( 308 super.reflex-dom.override (drv: { 309 jsaddle-webkit2gtk = null; 310 }) 311 ); 312 313 # Remove a problematic assert, the length is sometimes 1 instead of 2 on darwin 314 di-core = overrideCabal (drv: { 315 preConfigure = '' 316 substituteInPlace test/Main.hs --replace \ 317 "2 @=? List.length (List.nub (List.sort (map Di.log_time logs)))" "" 318 ''; 319 }) super.di-core; 320 321 # Require /usr/bin/security which breaks sandbox 322 http-reverse-proxy = dontCheck super.http-reverse-proxy; 323 servant-auth-server = dontCheck super.servant-auth-server; 324 325 sysinfo = dontCheck super.sysinfo; 326 327 network = super.network.overrideAttrs (drv: { 328 __darwinAllowLocalNetworking = true; 329 }); 330 331 # 2025-08-04: Some RNG tests fail only on Darwin 332 botan-low = overrideCabal (drv: { 333 testFlags = 334 drv.testFlags or [ ] 335 ++ (lib.concatMap (x: [ "--skip" ] ++ [ x ]) [ 336 # botan-low-rng-tests 337 "/rdrand/rngInit/" 338 "/rdrand/rngGet/" 339 "/rdrand/rngReseed/" 340 "/rdrand/rngReseedFromRNGCtx/" 341 "/rdrand/rngAddEntropy/" 342 ]); 343 }) super.botan-low; 344 } 345 // lib.optionalAttrs pkgs.stdenv.hostPlatform.isAarch64 { 346 # aarch64-darwin 347 348 # Workarounds for justStaticExecutables on aarch64-darwin. Since dead code 349 # elimination barely works on aarch64-darwin, any package that has a 350 # dependency that uses a Paths_ module will incur a reference on GHC, making 351 # it fail with disallowGhcReference (which is set by justStaticExecutables). 352 # 353 # To address this, you can either manually remove the references causing this 354 # after verifying they are indeed erroneous (e.g. cabal2nix) or just disable 355 # the check, sticking with the status quo. Ideally there'll be zero cases of 356 # the latter in the future! 357 cabal2nix = overrideCabal (old: { 358 postInstall = '' 359 remove-references-to -t ${self.hpack} "$out/bin/cabal2nix" 360 # Note: The `data` output is needed at runtime. 361 remove-references-to -t ${self.distribution-nixpkgs.out} "$out/bin/hackage2nix" 362 363 ${old.postInstall or ""} 364 ''; 365 }) super.cabal2nix; 366 cabal2nix-unstable = overrideCabal (old: { 367 postInstall = '' 368 remove-references-to -t ${self.hpack} "$out/bin/cabal2nix" 369 # Note: The `data` output is needed at runtime. 370 remove-references-to -t ${self.distribution-nixpkgs-unstable.out} "$out/bin/hackage2nix" 371 372 ${old.postInstall or ""} 373 ''; 374 }) super.cabal2nix-unstable; 375 376 # https://github.com/fpco/unliftio/issues/87 377 unliftio = dontCheck super.unliftio; 378 # This is the same issue as above; the rio tests call functions in unliftio 379 # that have issues as tracked in the GitHub issue above. Once the unliftio 380 # tests are fixed, we can remove this as well. 381 # 382 # We skip just the problematic tests by replacing 'it' with 'xit'. 383 rio = overrideCabal (drv: { 384 preConfigure = '' 385 sed -i 's/\bit /xit /g' test/RIO/FileSpec.hs 386 ''; 387 }) super.rio; 388 389 # https://github.com/haskell-crypto/cryptonite/issues/360 390 cryptonite = appendPatch ./patches/cryptonite-remove-argon2.patch super.cryptonite; 391 392 # Build segfaults unless `fixity-th` is disabled. 393 # https://github.com/tweag/ormolu/issues/927 394 ormolu = overrideCabal (drv: { 395 libraryHaskellDepends = drv.libraryHaskellDepends ++ [ self.file-embed ]; 396 }) (disableCabalFlag "fixity-th" super.ormolu); 397 fourmolu = overrideCabal (drv: { 398 libraryHaskellDepends = drv.libraryHaskellDepends ++ [ self.file-embed ]; 399 }) (disableCabalFlag "fixity-th" super.fourmolu); 400 401 Agda = lib.pipe super.Agda [ 402 # https://github.com/NixOS/nixpkgs/issues/149692 403 (disableCabalFlag "optimise-heavily") 404 # https://github.com/agda/agda/issues/8016 405 (appendConfigureFlag "--ghc-option=-Wwarn=deprecations") 406 ]; 407 408 # https://github.com/NixOS/nixpkgs/issues/198495 409 eventsourcing-postgresql = dontCheck super.eventsourcing-postgresql; 410 gargoyle-postgresql-connect = dontCheck super.gargoyle-postgresql-connect; 411 hs-opentelemetry-instrumentation-postgresql-simple = dontCheck super.hs-opentelemetry-instrumentation-postgresql-simple; 412 moto-postgresql = dontCheck super.moto-postgresql; 413 persistent-postgresql = dontCheck super.persistent-postgresql; 414 pipes-postgresql-simple = dontCheck super.pipes-postgresql-simple; 415 postgresql-connector = dontCheck super.postgresql-connector; 416 postgresql-migration = dontCheck super.postgresql-migration; 417 postgresql-schema = dontCheck super.postgresql-schema; 418 postgresql-simple = dontCheck super.postgresql-simple; 419 postgresql-simple-interpolate = dontCheck super.postgresql-simple-interpolate; 420 postgresql-simple-migration = dontCheck super.postgresql-simple-migration; 421 postgresql-simple-url = dontCheck super.postgresql-simple-url; 422 postgresql-transactional = dontCheck super.postgresql-transactional; 423 postgrest = dontCheck super.postgrest; 424 rivet-adaptor-postgresql = dontCheck super.rivet-adaptor-postgresql; 425 tmp-proc-postgres = dontCheck super.tmp-proc-postgres; 426 427 } 428 // lib.optionalAttrs pkgs.stdenv.hostPlatform.isx86_64 { 429 # x86_64-darwin 430 431 # tests appear to be failing to link or something: 432 # https://hydra.nixos.org/build/174540882/nixlog/9 433 regex-rure = dontCheck super.regex-rure; 434 # same 435 # https://hydra.nixos.org/build/174540882/nixlog/9 436 jacinda = dontCheck super.jacinda; 437 438 # Greater floating point error on x86_64-darwin (!) for some reason 439 # https://github.com/ekmett/ad/issues/113 440 ad = overrideCabal (drv: { 441 testFlags = drv.testFlags or [ ] ++ [ 442 "-p" 443 "!/issue-108/" 444 ]; 445 }) super.ad; 446 } 447)