diff options
Diffstat (limited to 'pkgs/by-name/co/cosmopolitan/package.nix')
-rw-r--r-- | pkgs/by-name/co/cosmopolitan/package.nix | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/pkgs/by-name/co/cosmopolitan/package.nix b/pkgs/by-name/co/cosmopolitan/package.nix new file mode 100644 index 00000000000..defc3efb8d1 --- /dev/null +++ b/pkgs/by-name/co/cosmopolitan/package.nix @@ -0,0 +1,92 @@ +{ lib +, stdenv +, fetchFromGitHub +, bintools-unwrapped +, callPackage +, coreutils +, substituteAll +, unzip +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "cosmopolitan"; + version = "2.2"; + + src = fetchFromGitHub { + owner = "jart"; + repo = "cosmopolitan"; + rev = finalAttrs.version; + hash = "sha256-DTL1dXH+LhaxWpiCrsNjV74Bw5+kPbhEAA2Z1NKiPDk="; + }; + + patches = [ + # make sure tests set PATH correctly + (substituteAll { + src = ./fix-paths.patch; + inherit coreutils; + }) + ]; + + nativeBuildInputs = [ + bintools-unwrapped + unzip + ]; + + strictDeps = true; + + outputs = [ "out" "dist" ]; + + # slashes are significant because upstream uses o/$(MODE)/foo.o + buildFlags = [ + "o/cosmopolitan.h" + "o//cosmopolitan.a" + "o//libc/crt/crt.o" + "o//ape/ape.o" + "o//ape/ape.lds" + ]; + + checkTarget = "o//test"; + + enableParallelBuilding = true; + + doCheck = true; + dontConfigure = true; + dontFixup = true; + + preCheck = let + failingTests = [ + # some syscall tests fail because we're in a sandbox + "test/libc/calls/sched_setscheduler_test.c" + "test/libc/thread/pthread_create_test.c" + "test/libc/calls/getgroups_test.c" + # fails + "test/libc/stdio/posix_spawn_test.c" + ]; + in lib.concatStringsSep ";\n" (map (t: "rm -v ${t}") failingTests); + + installPhase = '' + runHook preInstall + + mkdir -p $out/{include,lib} + install o/cosmopolitan.h $out/include + install o/cosmopolitan.a o/libc/crt/crt.o o/ape/ape.{o,lds} o/ape/ape-no-modify-self.o $out/lib + cp -RT . "$dist" + + runHook postInstall + ''; + + passthru = { + cosmocc = callPackage ./cosmocc.nix { + cosmopolitan = finalAttrs.finalPackage; + }; + }; + + meta = { + homepage = "https://justine.lol/cosmopolitan/"; + description = "Your build-once run-anywhere c library"; + license = lib.licenses.isc; + maintainers = lib.teams.cosmopolitan.members; + platforms = lib.platforms.x86_64; + badPlatforms = lib.platforms.darwin; + }; +}) |