Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / by-name / co / cosmopolitan / package.nix
blobdefc3efb8d13d3202394c4ee78c3a2dcd685c1a8
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , bintools-unwrapped
5 , callPackage
6 , coreutils
7 , substituteAll
8 , unzip
9 }:
11 stdenv.mkDerivation (finalAttrs: {
12   pname = "cosmopolitan";
13   version = "2.2";
15   src = fetchFromGitHub {
16     owner = "jart";
17     repo = "cosmopolitan";
18     rev = finalAttrs.version;
19     hash = "sha256-DTL1dXH+LhaxWpiCrsNjV74Bw5+kPbhEAA2Z1NKiPDk=";
20   };
22   patches = [
23     # make sure tests set PATH correctly
24     (substituteAll {
25       src = ./fix-paths.patch;
26       inherit coreutils;
27     })
28   ];
30   nativeBuildInputs = [
31     bintools-unwrapped
32     unzip
33   ];
35   strictDeps = true;
37   outputs = [ "out" "dist" ];
39   # slashes are significant because upstream uses o/$(MODE)/foo.o
40   buildFlags = [
41     "o/cosmopolitan.h"
42     "o//cosmopolitan.a"
43     "o//libc/crt/crt.o"
44     "o//ape/ape.o"
45     "o//ape/ape.lds"
46   ];
48   checkTarget = "o//test";
50   enableParallelBuilding = true;
52   doCheck = true;
53   dontConfigure = true;
54   dontFixup = true;
56   preCheck = let
57     failingTests = [
58       # some syscall tests fail because we're in a sandbox
59       "test/libc/calls/sched_setscheduler_test.c"
60       "test/libc/thread/pthread_create_test.c"
61       "test/libc/calls/getgroups_test.c"
62       # fails
63       "test/libc/stdio/posix_spawn_test.c"
64     ];
65   in lib.concatStringsSep ";\n" (map (t: "rm -v ${t}") failingTests);
67   installPhase = ''
68     runHook preInstall
70     mkdir -p $out/{include,lib}
71     install o/cosmopolitan.h $out/include
72     install o/cosmopolitan.a o/libc/crt/crt.o o/ape/ape.{o,lds} o/ape/ape-no-modify-self.o $out/lib
73     cp -RT . "$dist"
75     runHook postInstall
76   '';
78   passthru = {
79     cosmocc = callPackage ./cosmocc.nix {
80       cosmopolitan = finalAttrs.finalPackage;
81     };
82   };
84   meta = {
85     homepage = "https://justine.lol/cosmopolitan/";
86     description = "Your build-once run-anywhere c library";
87     license = lib.licenses.isc;
88     maintainers = lib.teams.cosmopolitan.members;
89     platforms = lib.platforms.x86_64;
90     badPlatforms = lib.platforms.darwin;
91   };