mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-26 15:44:20 +00:00
85e0d375cf
This was required for Nix v2.2.2 which did not build with libcxx 7. This is no longer required for any current version of Nix.
211 lines
7.4 KiB
Nix
211 lines
7.4 KiB
Nix
{ lib, fetchurl, fetchFromGitHub, callPackage
|
|
, storeDir ? "/nix/store"
|
|
, stateDir ? "/nix/var"
|
|
, confDir ? "/etc"
|
|
, boehmgc
|
|
}:
|
|
|
|
let
|
|
|
|
common =
|
|
{ lib, stdenv, fetchpatch, perl, curl, bzip2, sqlite, openssl ? null, xz
|
|
, bash, coreutils, gzip, gnutar
|
|
, pkgconfig, boehmgc, perlPackages, libsodium, brotli, boost, editline, nlohmann_json
|
|
, autoreconfHook, autoconf-archive, bison, flex, libxml2, libxslt, docbook5, docbook_xsl_ns
|
|
, jq, libarchive
|
|
# Used by tests
|
|
, gmock
|
|
, busybox-sandbox-shell
|
|
, storeDir
|
|
, stateDir
|
|
, confDir
|
|
, withLibseccomp ? lib.any (lib.meta.platformMatch stdenv.hostPlatform) libseccomp.meta.platforms, libseccomp
|
|
, withAWS ? !enableStatic && (stdenv.isLinux || stdenv.isDarwin), aws-sdk-cpp
|
|
, enableStatic ? false
|
|
, name, suffix ? "", src
|
|
|
|
}:
|
|
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 =
|
|
[ pkgconfig ]
|
|
++ lib.optionals is24 [ autoreconfHook autoconf-archive bison flex libxml2 libxslt
|
|
docbook5 docbook_xsl_ns jq ];
|
|
|
|
buildInputs =
|
|
[ curl openssl sqlite xz bzip2 nlohmann_json
|
|
brotli boost editline
|
|
]
|
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
|
|
++ lib.optionals is24 [ libarchive gmock ]
|
|
++ 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 =
|
|
# need to list libraries individually until
|
|
# https://github.com/NixOS/nix/commit/3e85c57a6cbf46d5f0fe8a89b368a43abd26daba
|
|
# is in a release
|
|
lib.optionalString enableStatic "-lssl -lbrotlicommon -lssh2 -lz -lnghttp2 -lcrypto"
|
|
|
|
# need to detect it here until
|
|
# https://github.com/NixOS/nix/commits/74b4737d8f0e1922ef5314a158271acf81cd79f8
|
|
# is in a release
|
|
+ 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
|
|
lib.optionalString (!enableStatic) ''
|
|
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.*
|
|
''}
|
|
'' +
|
|
# 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" ]
|
|
++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "PRECOMPILE_HEADERS=0";
|
|
|
|
installFlags = [ "sysconfdir=$(out)/etc" ];
|
|
|
|
doInstallCheck = true; # not cross
|
|
|
|
# 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 = stdenv.lib.licenses.lgpl2Plus;
|
|
maintainers = [ stdenv.lib.maintainers.eelco ];
|
|
platforms = stdenv.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 pkgconfig 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 = nixStable;
|
|
|
|
nixStable = callPackage common (rec {
|
|
name = "nix-2.3.7";
|
|
src = fetchurl {
|
|
url = "https://nixos.org/releases/nix/${name}/${name}.tar.xz";
|
|
sha256 = "dd8f52849414e5a878afe7e797aa4e22bab77c875d9da5a38d5f1bada704e596";
|
|
};
|
|
|
|
inherit storeDir stateDir confDir boehmgc;
|
|
});
|
|
|
|
nixUnstable = lib.lowPrio (callPackage common rec {
|
|
name = "nix-3.0${suffix}";
|
|
suffix = "pre20200829_f156513";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "NixOS";
|
|
repo = "nix";
|
|
rev = "f15651303f8596bf34c67fc8d536b1e9e7843a87";
|
|
hash = "sha256-HqM3Z4DLdMrf+0PPZL9ysctGg+K+i3S/IHA1GsJj0Ro=";
|
|
};
|
|
|
|
inherit storeDir stateDir confDir boehmgc;
|
|
});
|
|
|
|
nixFlakes = nixUnstable;
|
|
|
|
}
|