forked from rarias/bscpkgs
		
	The alias pkgconfig has been removed. Reviewed-by: Aleix Roca Nonell <aleix.rocanonell@bsc.es>
		
			
				
	
	
		
			220 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ lib, fetchurl, fetchFromGitHub, callPackage
 | 
						|
, storeDir ? "/nix/store"
 | 
						|
, stateDir ? "/nix/var"
 | 
						|
, confDir ? "/etc"
 | 
						|
, boehmgc
 | 
						|
, stdenv, llvmPackages_6
 | 
						|
}:
 | 
						|
 | 
						|
let
 | 
						|
 | 
						|
common =
 | 
						|
  { lib, stdenv, fetchpatch, perl, curl, bzip2, sqlite, openssl ? null, xz
 | 
						|
  , bash, coreutils, gzip, gnutar
 | 
						|
  , pkg-config, boehmgc, perlPackages, libsodium, brotli, boost, editline, nlohmann_json
 | 
						|
  , autoreconfHook, autoconf-archive, bison, flex, libxml2, libxslt, docbook5, docbook_xsl_ns
 | 
						|
  , jq, libarchive, rustc, cargo
 | 
						|
  # Used by tests
 | 
						|
  , gmock
 | 
						|
  , busybox-sandbox-shell
 | 
						|
  , storeDir
 | 
						|
  , stateDir
 | 
						|
  , confDir
 | 
						|
  , withLibseccomp ? lib.any (lib.meta.platformMatch stdenv.hostPlatform) libseccomp.meta.platforms, libseccomp
 | 
						|
  , withAWS ? stdenv.isLinux || stdenv.isDarwin, aws-sdk-cpp
 | 
						|
 | 
						|
  , name, suffix ? "", src, crates ? null
 | 
						|
 | 
						|
  }:
 | 
						|
  let
 | 
						|
     sh = busybox-sandbox-shell;
 | 
						|
     nix = stdenv.mkDerivation rec {
 | 
						|
      inherit name src;
 | 
						|
      version = lib.getVersion name;
 | 
						|
 | 
						|
      is24 = lib.versionAtLeast version "2.4pre";
 | 
						|
      isExactly23 = lib.versionAtLeast version "2.3" && lib.versionOlder version "2.4";
 | 
						|
 | 
						|
      VERSION_SUFFIX = suffix;
 | 
						|
 | 
						|
      outputs = [ "out" "dev" "man" "doc" ];
 | 
						|
 | 
						|
      nativeBuildInputs =
 | 
						|
        [ pkg-config ]
 | 
						|
        ++ lib.optionals is24 [ autoreconfHook autoconf-archive bison flex libxml2 libxslt
 | 
						|
                                docbook5 docbook_xsl_ns jq gmock ];
 | 
						|
 | 
						|
      buildInputs =
 | 
						|
        [ curl openssl sqlite xz bzip2 nlohmann_json
 | 
						|
          brotli boost editline
 | 
						|
        ]
 | 
						|
        ++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
 | 
						|
        ++ lib.optionals is24 [ libarchive rustc cargo ]
 | 
						|
        ++ lib.optional withLibseccomp libseccomp
 | 
						|
        ++ lib.optional withAWS
 | 
						|
            ((aws-sdk-cpp.override {
 | 
						|
              apis = ["s3" "transfer"];
 | 
						|
              customMemoryManagement = false;
 | 
						|
            }).overrideDerivation (args: {
 | 
						|
              patches = args.patches or [] ++ [(fetchpatch {
 | 
						|
                url = "https://github.com/edolstra/aws-sdk-cpp/commit/7d58e303159b2fb343af9a1ec4512238efa147c7.patch";
 | 
						|
                sha256 = "103phn6kyvs1yc7fibyin3lgxz699qakhw671kl207484im55id1";
 | 
						|
              })];
 | 
						|
            }));
 | 
						|
 | 
						|
      propagatedBuildInputs = [ boehmgc ];
 | 
						|
 | 
						|
      # Seems to be required when using std::atomic with 64-bit types
 | 
						|
      NIX_LDFLAGS = lib.optionalString (stdenv.hostPlatform.system == "armv5tel-linux" || stdenv.hostPlatform.system == "armv6l-linux") "-latomic";
 | 
						|
 | 
						|
      preConfigure =
 | 
						|
        # Copy libboost_context so we don't get all of Boost in our closure.
 | 
						|
        # https://github.com/NixOS/nixpkgs/issues/45462
 | 
						|
        ''
 | 
						|
          mkdir -p $out/lib
 | 
						|
          cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
 | 
						|
          rm -f $out/lib/*.a
 | 
						|
          ${lib.optionalString stdenv.isLinux ''
 | 
						|
            chmod u+w $out/lib/*.so.*
 | 
						|
            patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
 | 
						|
          ''}
 | 
						|
        '' +
 | 
						|
        # Unpack the Rust crates.
 | 
						|
        lib.optionalString is24 ''
 | 
						|
          tar xvf ${crates} -C nix-rust/
 | 
						|
          mv nix-rust/nix-vendored-crates* nix-rust/vendor
 | 
						|
        '' +
 | 
						|
        # For Nix-2.3, patch around an issue where the Nix configure step pulls in the
 | 
						|
        # build system's bash and other utilities when cross-compiling
 | 
						|
        lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform && isExactly23) ''
 | 
						|
          mkdir tmp/
 | 
						|
          substitute corepkgs/config.nix.in tmp/config.nix.in \
 | 
						|
            --subst-var-by bash ${bash}/bin/bash \
 | 
						|
            --subst-var-by coreutils ${coreutils}/bin \
 | 
						|
            --subst-var-by bzip2 ${bzip2}/bin/bzip2 \
 | 
						|
            --subst-var-by gzip ${gzip}/bin/gzip \
 | 
						|
            --subst-var-by xz ${xz}/bin/xz \
 | 
						|
            --subst-var-by tar ${gnutar}/bin/tar \
 | 
						|
            --subst-var-by tr ${coreutils}/bin/tr
 | 
						|
          mv tmp/config.nix.in corepkgs/config.nix.in
 | 
						|
          '';
 | 
						|
 | 
						|
      configureFlags =
 | 
						|
        [ "--with-store-dir=${storeDir}"
 | 
						|
          "--localstatedir=${stateDir}"
 | 
						|
          "--sysconfdir=${confDir}"
 | 
						|
          "--disable-init-state"
 | 
						|
          "--enable-gc"
 | 
						|
        ]
 | 
						|
        ++ lib.optionals stdenv.isLinux [
 | 
						|
          "--with-sandbox-shell=${sh}/bin/busybox"
 | 
						|
        ]
 | 
						|
        ++ lib.optional (
 | 
						|
            stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform ? nix && stdenv.hostPlatform.nix ? system
 | 
						|
        ) ''--with-system=${stdenv.hostPlatform.nix.system}''
 | 
						|
           # RISC-V support in progress https://github.com/seccomp/libseccomp/pull/50
 | 
						|
        ++ lib.optional (!withLibseccomp) "--disable-seccomp-sandboxing";
 | 
						|
 | 
						|
      makeFlags = [ "profiledir=$(out)/etc/profile.d" ];
 | 
						|
 | 
						|
      installFlags = [ "sysconfdir=$(out)/etc" ];
 | 
						|
 | 
						|
      doInstallCheck = false;
 | 
						|
 | 
						|
      # socket path becomes too long otherwise
 | 
						|
      #preInstallCheck = lib.optional stdenv.isDarwin ''
 | 
						|
      #  export TMPDIR=$NIX_BUILD_TOP
 | 
						|
      #'';
 | 
						|
 | 
						|
      separateDebugInfo = stdenv.isLinux;
 | 
						|
 | 
						|
      enableParallelBuilding = true;
 | 
						|
 | 
						|
      meta = {
 | 
						|
        description = "Powerful package manager that makes package management reliable and reproducible";
 | 
						|
        longDescription = ''
 | 
						|
          Nix is a powerful package manager for Linux and other Unix systems that
 | 
						|
          makes package management reliable and reproducible. It provides atomic
 | 
						|
          upgrades and rollbacks, side-by-side installation of multiple versions of
 | 
						|
          a package, multi-user package management and easy setup of build
 | 
						|
          environments.
 | 
						|
        '';
 | 
						|
        homepage = "https://nixos.org/";
 | 
						|
        license = lib.licenses.lgpl2Plus;
 | 
						|
        maintainers = [ lib.maintainers.eelco ];
 | 
						|
        platforms = lib.platforms.unix;
 | 
						|
        outputsToInstall = [ "out" "man" ];
 | 
						|
      };
 | 
						|
 | 
						|
      passthru = {
 | 
						|
        perl-bindings = stdenv.mkDerivation {
 | 
						|
          pname = "nix-perl";
 | 
						|
          inherit version;
 | 
						|
 | 
						|
          inherit src;
 | 
						|
 | 
						|
          postUnpack = "sourceRoot=$sourceRoot/perl";
 | 
						|
 | 
						|
          # This is not cross-compile safe, don't have time to fix right now
 | 
						|
          # but noting for future travellers.
 | 
						|
          nativeBuildInputs =
 | 
						|
            [ perl pkg-config curl nix libsodium boost autoreconfHook autoconf-archive ];
 | 
						|
 | 
						|
          configureFlags =
 | 
						|
            [ "--with-dbi=${perlPackages.DBI}/${perl.libPrefix}"
 | 
						|
              "--with-dbd-sqlite=${perlPackages.DBDSQLite}/${perl.libPrefix}"
 | 
						|
            ];
 | 
						|
 | 
						|
          preConfigure = "export NIX_STATE_DIR=$TMPDIR";
 | 
						|
 | 
						|
          preBuild = "unset NIX_INDENT_MAKE";
 | 
						|
        };
 | 
						|
      };
 | 
						|
    };
 | 
						|
  in nix;
 | 
						|
 | 
						|
in rec {
 | 
						|
 | 
						|
  nix = nixUnstable;
 | 
						|
 | 
						|
  nixUnstable = lib.lowPrio (callPackage common rec {
 | 
						|
    name = "nix-2.4${suffix}";
 | 
						|
    suffix = "pre7534_b92f58f6";
 | 
						|
 | 
						|
    #src = /home/Computational/rarias/nix/nix-rodarima;
 | 
						|
    src = fetchFromGitHub {
 | 
						|
      owner = "rodarima";
 | 
						|
      repo = "nix";
 | 
						|
      rev = "3a642187c33ed46d952d3a50a83b2576b704fab7";
 | 
						|
      sha256 = "0s8is2czpkcj1x1kcjqgbnsbbl03w3fwjjiclsd44zh1ij3wb90s";
 | 
						|
    };
 | 
						|
 | 
						|
    crates = fetchurl {
 | 
						|
      url = "https://hydra.nixos.org/build/118797694/download/1/nix-vendored-crates-2.4pre7534_b92f58f6.tar.xz";
 | 
						|
      sha256 = "a4c2612bbd81732bbb899bc0c230e07b16f6b6150ffbb19c4907dedbbc2bf9fc";
 | 
						|
    };
 | 
						|
 | 
						|
    inherit storeDir stateDir confDir boehmgc;
 | 
						|
  });
 | 
						|
 | 
						|
  nixFlakes = lib.lowPrio (callPackage common rec {
 | 
						|
    name = "nix-2.4${suffix}";
 | 
						|
    suffix = "pre20200521_00b562c";
 | 
						|
 | 
						|
    src = fetchFromGitHub {
 | 
						|
      owner = "NixOS";
 | 
						|
      repo = "nix";
 | 
						|
      rev = "00b562c87ec4c3bbe514f5dc1f4d1c41f66f66bf";
 | 
						|
      sha256 = "0s8is2czpkcj1x1kcjqgbnsbbl03w3fwjjiclsd44zh1ij3wb90s";
 | 
						|
    };
 | 
						|
 | 
						|
    crates = fetchurl {
 | 
						|
      url = "https://hydra.nixos.org/build/118093786/download/1/nix-vendored-crates-2.4pre20200501_941f952.tar.xz";
 | 
						|
      sha256 = "060f4n5srdbb8vsj0m14aqch7im79a4h5g3nrs41p1xc602vhcdl";
 | 
						|
    };
 | 
						|
 | 
						|
    inherit storeDir stateDir confDir boehmgc;
 | 
						|
  });
 | 
						|
 | 
						|
}
 |