Remove the unmaintained (and AFAIK unused) stdenv for mingw

+10 -24
pkgs/stdenv/default.nix
···
# Posix utilities, the GNU C compiler, and so on. On other systems,
# we use the native C library.
-
-
# stdenvType exists to support multiple kinds of stdenvs on the same
-
# system, e.g., cygwin and mingw builds on i686-cygwin. Most people
-
# can ignore it.
-
-
{ system, stdenvType ? system, allPackages ? import ../.., platform, config }:
-
-
assert system != "i686-cygwin" -> system == stdenvType;
+
{ system, allPackages ? import ../.., platform, config }:
rec {
···
stdenvLinux = (import ./linux { inherit system allPackages platform config;}).stdenvLinux;
-
# MinGW/MSYS standard environment.
-
stdenvMinGW = import ./mingw {
-
inherit system;
-
};
-
-
# Select the appropriate stdenv for the platform `system'.
stdenv =
-
if stdenvType == "i686-linux" then stdenvLinux else
-
if stdenvType == "x86_64-linux" then stdenvLinux else
-
if stdenvType == "armv5tel-linux" then stdenvLinux else
-
if stdenvType == "armv6l-linux" then stdenvLinux else
-
if stdenvType == "armv7l-linux" then stdenvLinux else
-
if stdenvType == "mips64el-linux" then stdenvLinux else
-
if stdenvType == "powerpc-linux" then /* stdenvLinux */ stdenvNative else
-
if stdenvType == "i686-mingw" then stdenvMinGW else
-
if stdenvType == "x86_64-darwin" then stdenvNix else
-
if stdenvType == "x86_64-solaris" then stdenvNix else
+
if system == "i686-linux" then stdenvLinux else
+
if system == "x86_64-linux" then stdenvLinux else
+
if system == "armv5tel-linux" then stdenvLinux else
+
if system == "armv6l-linux" then stdenvLinux else
+
if system == "armv7l-linux" then stdenvLinux else
+
if system == "mips64el-linux" then stdenvLinux else
+
if system == "powerpc-linux" then /* stdenvLinux */ stdenvNative else
+
if system == "x86_64-darwin" then stdenvNix else
+
if system == "x86_64-solaris" then stdenvNix else
stdenvNative;
}
-18
pkgs/stdenv/mingw/builder.sh
···
-
# the other stdenv could change the SHELL variable,
-
# so we have to remember its value.
-
origShell=$SHELL
-
origGcc=$GCC
-
-
source $STDENV/setup
-
-
mkdir $OUT
-
-
SHELL=$origShell
-
GCC=$origGcc
-
-
export NIX_BUILD_TOP=$(pwd)
-
-
substitute "$SETUP" "$OUT/setup" \
-
--subst-var INITIALPATH \
-
--subst-var GCC \
-
--subst-var SHELL
-5
pkgs/stdenv/mingw/cygpath/builder.sh
···
-
source $stdenv/setup
-
-
mkdir $out
-
result="$(cygpath --mixed $path)"
-
echo "\"$result\"" > $out/default.nix
-9
pkgs/stdenv/mingw/cygpath/default.nix
···
-
{stdenv}: path :
-
-
import (
-
stdenv.mkDerivation {
-
name = "cygpath";
-
builder = ./builder.sh;
-
inherit path;
-
}
-
)
-2
pkgs/stdenv/mingw/default-builder.sh
···
-
source $STDENV/setup
-
genericBuild
-233
pkgs/stdenv/mingw/default.nix
···
-
{system} :
-
-
let {
-
body =
-
stdenvFinal;
-
-
/**
-
* Initial standard environment based on native Cygwin tools.
-
* GCC is not required.
-
* Required (approx): bash, mkdir, gnu tar, curl.
-
*/
-
stdenvInit1 =
-
import ./simple-stdenv {
-
inherit system;
-
name = "stdenv-init1-mingw";
-
shell = "/bin/bash.exe";
-
path = ["/usr/bin" "/bin" "/usr/local/bin"];
-
};
-
-
/**
-
* Initial standard environment based on MSYS tools.
-
*/
-
stdenvInit2 =
-
import ./simple-stdenv {
-
inherit system;
-
name = "stdenv-init2-mingw";
-
shell = msysShell;
-
path = [(msys + "/bin")];
-
};
-
-
/**
-
* Initial standard environment with the most basic MinGW packages.
-
*/
-
stdenvInit3 =
-
(import ./simple-stdenv) {
-
inherit system;
-
name = "stdenv-init3-mingw";
-
shell = msysShell;
-
path = [
-
(make + "/bin")
-
(tar + "/bin")
-
(binutils + "/bin")
-
(gccFull + "/bin")
-
(mingwRuntimeBin + "/bin")
-
(w32apiBin + "/bin")
-
(msys + "/bin")
-
];
-
-
extraEnv = {
-
C_INCLUDE_PATH = mingwRuntimeBin + "/include" + ":" + w32apiBin + "/include";
-
LIBRARY_PATH = mingwRuntimeBin + "/lib" + ":" + w32apiBin + "/lib";
-
};
-
};
-
-
/**
-
* Final standard environment, based on generic stdenv.
-
* It would be better to make the generic stdenv usable on
-
* MINGW (i.e. make all environment variables CAPS).
-
*/
-
stdenvFinal =
-
let {
-
body =
-
stdenv // mkDerivationFun // {
-
inherit fetchurl;
-
overrides.pkgconfig = pkgconfigBin;
-
};
-
-
shell =
-
msys + "/bin/sh.exe";
-
-
stdenv =
-
stdenvInit2.mkDerivation {
-
name = "stdenv-mingw";
-
builder = ./builder.sh;
-
setup = ./setup.sh;
-
-
/**
-
* binutils is on the path because it contains dlltool, which
-
* is invoked on the PATH by some packages.
-
*/
-
initialPath = [make tar binutils gccFull mingwRuntimeSrc w32apiSrc msys];
-
gcc = gccFull;
-
shell = msysShell;
-
inherit curl;
-
isDarwin = false;
-
isMinGW = true;
-
};
-
-
mkDerivationFun = {
-
mkDerivation = attrs:
-
(derivation (
-
(removeAttrs attrs ["meta"])
-
//
-
{
-
builder =
-
if attrs ? realBuilder then attrs.realBuilder else shell;
-
args =
-
if attrs ? args then
-
attrs.args
-
else
-
["-e"] ++ (
-
if attrs ? builder then
-
[./fix-builder.sh attrs.builder]
-
else
-
[./fix-builder.sh ./default-builder.sh]
-
);
-
inherit stdenv system;
-
C_INCLUDE_PATH = mingwRuntimeSrc + "/include" + ":" + w32apiSrc + "/include";
-
CPLUS_INCLUDE_PATH = mingwRuntimeSrc + "/include" + ":" + w32apiSrc + "/include";
-
LIBRARY_PATH = mingwRuntimeSrc + "/lib" + ":" + w32apiSrc + "/lib";
-
})
-
)
-
// { meta = if attrs ? meta then attrs.meta else {}; };
-
};
-
};
-
-
/**
-
* fetchurl
-
*/
-
fetchurlInit1 =
-
import ../../build-support/fetchurl {
-
stdenv = stdenvInit1;
-
curl =
-
(import ./pkgs).curl {
-
stdenv = stdenvInit1;
-
};
-
};
-
-
cygpath =
-
import ./cygpath {
-
stdenv = stdenvInit1;
-
};
-
-
/**
-
* Hack: we need the cygpath of the Cygwin chmod.
-
*/
-
fetchurl =
-
import ./fetchurl {
-
stdenv = stdenvInit2;
-
curl = curl + "/bin/curl.exe";
-
chmod = cygpath "/usr/bin/chmod";
-
};
-
-
/**
-
* MSYS, installed using stdenvInit1
-
*
-
* @todo Maybe remove the make of msys?
-
*/
-
msys =
-
stdenvInit1.mkDerivation {
-
name = "msys-1.0.11";
-
builder = ./msys-builder.sh;
-
src =
-
fetchurlInit1 {
-
url = ftp://ftp.strategoxt.org/pub/mingw/msys-1.0.11.tar.gz;
-
sha256 = "08qp4jk279i66q6ngksg58fx3cfv1r6p5n394h2kfrs56qs9zvz4";
-
};
-
};
-
-
msysShell =
-
msys + "/bin/sh.exe";
-
-
/**
-
* Binary packages, based on stdenvInit2
-
*/
-
curl =
-
(import ./pkgs).curl {
-
stdenv = stdenvInit2;
-
};
-
-
gccFull =
-
(import ./pkgs).gccFull {
-
stdenv = stdenvInit2;
-
inherit fetchurl;
-
};
-
-
make =
-
(import ./pkgs).make {
-
stdenv = stdenvInit2;
-
inherit fetchurl;
-
};
-
-
tar =
-
(import ./pkgs).tar {
-
stdenv = stdenvInit2;
-
inherit fetchurl;
-
};
-
-
binutils =
-
(import ./pkgs).binutils {
-
stdenv = stdenvInit2;
-
inherit fetchurl;
-
};
-
-
mingwRuntimeBin =
-
(import ./pkgs).mingwRuntimeBin {
-
stdenv = stdenvInit2;
-
inherit fetchurl;
-
};
-
-
w32apiBin =
-
(import ./pkgs).w32apiBin {
-
stdenv = stdenvInit2;
-
inherit fetchurl;
-
};
-
-
pkgconfigBin =
-
(import ./pkgs).pkgconfigBin {
-
stdenv = stdenvInit3;
-
inherit fetchurl;
-
};
-
-
/**
-
* Source packages, based on stdenvInit3
-
*/
-
mingwRuntimeSrc =
-
(import ./pkgs).mingwRuntimeSrc {
-
stdenv = stdenvInit3;
-
inherit fetchurl;
-
};
-
-
w32apiSrc =
-
(import ./pkgs).w32apiSrc {
-
stdenv = stdenvInit3;
-
inherit fetchurl;
-
};
-
-
replace =
-
(import ./pkgs).replace {
-
stdenv = stdenvInit3;
-
inherit fetchurl;
-
};
-
}
-34
pkgs/stdenv/mingw/fetchurl/builder.sh
···
-
if test -z "$out"; then
-
stdenv="$STDENV"
-
url="$URL"
-
id="$ID"
-
outputHashAlgo="$OUTPUTHASHALGO"
-
outputHash="$OUTPUTHASH"
-
chmod=$CHMOD
-
curl=$CURL
-
fi
-
-
source $stdenv/setup
-
-
if test -z "$out"; then
-
out="$OUT"
-
fi
-
-
header "downloading $out from $url"
-
$curl --fail --location --max-redirs 20 "$url" > "$out"
-
-
if test "$NIX_OUTPUT_CHECKED" != "1"; then
-
if test "$outputHashAlgo" != "md5"; then
-
echo "hashes other than md5 are unsupported in Nix <= 0.7, upgrade to Nix 0.8"
-
exit 1
-
fi
-
actual=$(md5sum -b "$out" | cut -c1-32)
-
if test "$actual" != "$id"; then
-
echo "hash is $actual, expected $id"
-
exit 1
-
fi
-
fi
-
-
$chmod a-x $out
-
-
stopNest
-28
pkgs/stdenv/mingw/fetchurl/default.nix
···
-
{stdenv, curl, chmod}:
-
-
{url, outputHash ? "", outputHashAlgo ? "", md5 ? "", sha1 ? "", sha256 ? ""}:
-
-
assert (outputHash != "" && outputHashAlgo != "")
-
|| md5 != "" || sha1 != "" || sha256 != "";
-
-
stdenv.mkDerivation {
-
name = baseNameOf (toString url);
-
builder = ./builder.sh;
-
-
# Compatibility with Nix <= 0.7.
-
id = md5;
-
-
# New-style output content requirements.
-
outputHashAlgo = if outputHashAlgo != "" then outputHashAlgo else
-
if sha256 != "" then "sha256" else if sha1 != "" then "sha1" else "md5";
-
outputHash = if outputHash != "" then outputHash else
-
if sha256 != "" then sha256 else if sha1 != "" then sha1 else md5;
-
-
inherit url chmod curl;
-
-
# We borrow these environment variables from the caller to allow
-
# easy proxy configuration. This is impure, but a fixed-output
-
# derivation like fetchurl is allowed to do so since its result is
-
# by definition pure.
-
impureEnvVars = ["http_proxy" "https_proxy" "ftp_proxy" "all_proxy" "no_proxy"];
-
}
-23
pkgs/stdenv/mingw/fix-builder.sh
···
-
# Workaround MSYS shell problem
-
-
if test -z "$out"; then
-
buildInputs=$BUILDINPUTS
-
buildUtilities=$BUILDUTILITIES
-
configureFlags=$CONFIGUREFLAGS
-
doCheck=$DOCHECK
-
doCoverageAnalysis=$DOCOVERAGEANALYSIS
-
dontInstall=$DONTINSTALL
-
dontLogThroughTee=$DONTLOGTHROUGHTEE
-
lcov=$LCOV
-
logPhases=$LOGPHASES
-
out=$OUT
-
patches=$PATCHES
-
propagatedBuildInputs=$PROPAGATEDBUILDINPUTS
-
stdenv=$STDENV
-
src=$SRC
-
srcs=$SRCS
-
succeedOnFailure=$SUCCEEDONFAILURE
-
system=$SYSTEM
-
fi
-
-
source $@
-15
pkgs/stdenv/mingw/msys-builder.sh
···
-
source $stdenv/setup
-
-
mkdir $out
-
cd $out
-
tar zxvf $src
-
-
# Make the Nix store available to MSYS.
-
# Hack: we are assuming that the stdenv is based on Cygwin.
-
-
nixdir="$(cygpath --windows /nix)"
-
mkdir $out/nix
-
cat > $out/etc/fstab <<EOF
-
#Win32_Path Mount_Point
-
$nixdir /nix
-
EOF
-5
pkgs/stdenv/mingw/pkgs/bin-builder.sh
···
-
source $STDENV/setup
-
-
mkdir $OUT
-
cd $OUT
-
tar zxvf $SRC
pkgs/stdenv/mingw/pkgs/curl.exe

This is a binary file and will not be displayed.

-157
pkgs/stdenv/mingw/pkgs/default.nix
···
-
/**
-
* MinGW packages.
-
*/
-
rec {
-
-
/**
-
* Curl, binary
-
*/
-
curl = {stdenv} :
-
stdenv.mkDerivation {
-
name = "curl-7.15.4";
-
exename = "curl.exe";
-
builder = ./single-exe-builder.sh;
-
src = ./curl.exe;
-
};
-
-
/**
-
* Make. Binary.
-
*/
-
make = {stdenv, fetchurl} :
-
stdenv.mkDerivation {
-
name = "mingw-make-3.81";
-
builder = ./bin-builder.sh;
-
src =
-
fetchurl {
-
url = http://surfnet.dl.sourceforge.net/sourceforge/mingw/mingw32-make-3.81-1.tar.gz;
-
md5 = "74c2f44ecc699b318edeb07d838feae5";
-
};
-
};
-
-
/**
-
* Tar
-
*/
-
tar = {stdenv, fetchurl} :
-
stdenv.mkDerivation {
-
name = "mingw-tar";
-
builder = ./bin-builder.sh;
-
src =
-
fetchurl {
-
url = ftp://ftp.strategoxt.org/pub/mingw/tar-1.22-1-msys-1.0.11-bin.tar.gz;
-
sha256 = "17rbv159g56q3bp8rh5vzv8hw8clxs7vk731cgqg0vy1fzls6yfq";
-
};
-
};
-
-
/**
-
* GCC. Binary
-
*/
-
gccFull = {stdenv, fetchurl} :
-
stdenv.mkDerivation {
-
name = "gcc-full-4.4.0-mingw32";
-
builder = ./bin-builder.sh;
-
src =
-
fetchurl {
-
url = ftp://ftp.strategoxt.org/pub/mingw/gcc-full-4.4.0-mingw32-bin-2.tar.gz;
-
sha256= "6c5a125591837817c940f4c66140cd7393b3f5837dd738c7ed315157e6270a60";
-
};
-
};
-
-
/**
-
* binutils. Binary.
-
*/
-
binutils = {stdenv, fetchurl} :
-
stdenv.mkDerivation {
-
name = "binutils-2.19.1-mingw32";
-
builder = ./bin-builder.sh;
-
src =
-
fetchurl {
-
url = http://surfnet.dl.sourceforge.net/sourceforge/mingw/files/GNU%20Binutils/Current%20Release_%20GNU%20binutils-2.19.1/binutils-2.19.1-mingw32-bin.tar.gz;
-
sha256 = "037vh2n9iv2vccvplk48vd3al91p7yhc73p5nkfsrb6sg977shj2";
-
};
-
};
-
-
mingwRuntimeBin = {stdenv, fetchurl} :
-
stdenv.mkDerivation {
-
name = "mingwrt-3.16";
-
builder = ./bin-builder.sh;
-
src =
-
fetchurl {
-
url = http://surfnet.dl.sourceforge.net/sourceforge/mingw/files/MinGW%20Runtime/mingwrt-3.16/mingwrt-3.16-mingw32-dev.tar.gz;
-
sha256 = "1xqpp7lvsj88grs6jlk0fnlkvis2y4avcqrpwsaxxrpjlg5bwzci";
-
};
-
};
-
-
mingwRuntimeSrc = {stdenv, fetchurl} :
-
stdenv.mkDerivation {
-
name = "mingwrt-3.16-mingw32";
-
builder = ./src-builder.sh;
-
src =
-
fetchurl {
-
url = http://surfnet.dl.sourceforge.net/sourceforge/mingw/files/MinGW%20Runtime/mingwrt-3.16/mingwrt-3.16-mingw32-src.tar.gz;
-
sha256 = "0rljw3v94z9wzfa63b7lvyprms5l5jgf11lws8vm8z7x7q7h1k38";
-
};
-
};
-
-
w32apiBin = {stdenv, fetchurl} :
-
stdenv.mkDerivation {
-
name = "w32api-3.13-mingw32";
-
builder = ./bin-builder.sh;
-
src =
-
fetchurl {
-
url = http://surfnet.dl.sourceforge.net/sourceforge/mingw/files/MinGW%20API%20for%20MS-Windows/Current%20Release_%20w32api-3.13/w32api-3.13-mingw32-dev.tar.gz;
-
sha256 = "19jm2hdym5ixi9b874xmmilixlpxvfdpi5y3bx0bs88fdah03gvx";
-
};
-
};
-
-
w32apiSrc = {stdenv, fetchurl} :
-
stdenv.mkDerivation {
-
name = "w32api-3.13-mingw32";
-
builder = ./src-builder.sh;
-
src =
-
fetchurl {
-
url = http://surfnet.dl.sourceforge.net/sourceforge/mingw/files/MinGW%20API%20for%20MS-Windows/Current%20Release_%20w32api-3.13/w32api-3.13-mingw32-src.tar.gz;
-
sha256 = "1i1gpwilfc21s3yr4sx39i0w4g7lbij427wwxa34gjfgz0awdkh2";
-
};
-
};
-
-
/**
-
* We need a binary pkg-config to bootstrap the compilation of
-
* glib and pkg-config: pkg-config needs glib, glib needs pkg-config.
-
*
-
* This tarball contains pkg-config and all its dependencies. Once we
-
* have bootstrapped pkg-config we really need to use a statically linked
-
* pkg-config (and provide this .exe at the web: it is really missing
-
* on the web).
-
*/
-
pkgconfigBin = {stdenv, fetchurl} :
-
stdenv.mkDerivation {
-
name = "pkgconfig-0.23";
-
builder = ./pkgconfig-builder.sh;
-
setupHook = ../../../development/tools/misc/pkgconfig/setup-hook.sh;
-
src =
-
fetchurl {
-
url = ftp://ftp.strategoxt.org/pub/mingw/pkg-config-0.23.tar.gz;
-
sha256 = "1vab3rdnw16nhma1bln41bbrn6phbpcv9wiz79map8y5znaiv6mq";
-
};
-
};
-
-
replace = {stdenv, fetchurl} :
-
import ../../../tools/text/replace {
-
inherit fetchurl stdenv;
-
};
-
-
/*
-
pkgs.coreutils
-
pkgs.findutils
-
pkgs.diffutils
-
pkgs.gnused
-
pkgs.gnugrep
-
pkgs.gawk
-
pkgs.gnutar
-
pkgs.gzip
-
pkgs.bzip2
-
pkgs.gnumake
-
pkgs.bash
-
pkgs.patch
-
*/
-
}
-8
pkgs/stdenv/mingw/pkgs/pkgconfig-builder.sh
···
-
source $STDENV/setup
-
-
mkdir $OUT
-
cd $OUT
-
tar zxvf $SRC
-
-
test -x $OUT/nix-support || mkdir $OUT/nix-support
-
cp $SETUPHOOK $OUT/nix-support/setup-hook
-12
pkgs/stdenv/mingw/pkgs/single-exe-builder.sh
···
-
if test -z "$out"; then
-
stdenv=$STDENV
-
out=$OUT
-
src=$SRC
-
exename=$EXENAME
-
fi
-
-
source $stdenv/setup
-
-
mkdir $out
-
mkdir $out/bin
-
cp $src $out/bin/$exename
-7
pkgs/stdenv/mingw/pkgs/src-builder.sh
···
-
source $STDENV/setup
-
-
tar zxvf $SRC
-
cd $NAME
-
./configure --prefix=$OUT
-
make
-
make install
-759
pkgs/stdenv/mingw/setup.sh
···
-
# Run the named hook, either by calling the function with that name or
-
# by evaluating the variable with that name. This allows convenient
-
# setting of hooks both from Nix expressions (as attributes /
-
# environment variables) and from shell scripts (as functions).
-
runHook() {
-
local hookName="$1"
-
if test "$(type -t $hookName)" = function; then
-
$hookName
-
else
-
eval "${!hookName}"
-
fi
-
}
-
-
-
exitHandler() {
-
exitCode=$?
-
set +e
-
-
closeNest
-
-
if test -n "$showBuildStats"; then
-
times > "$NIX_BUILD_TOP/.times"
-
local -a times=($(cat "$NIX_BUILD_TOP/.times"))
-
# Print the following statistics:
-
# - user time for the shell
-
# - system time for the shell
-
# - user time for all child processes
-
# - system time for all child processes
-
echo "build time elapsed: " ${times[*]}
-
fi
-
-
if test $exitCode != 0; then
-
runHook failureHook
-
-
# If the builder had a non-zero exit code and
-
# $succeedOnFailure is set, create the file
-
# `$out/nix-support/failed' to signal failure, and exit
-
# normally. Otherwise, return the original exit code.
-
if test -n "$succeedOnFailure"; then
-
echo "build failed with exit code $exitCode (ignored)"
-
mkdir -p "$out/nix-support"
-
echo -n $exitCode > "$out/nix-support/failed"
-
exit 0
-
fi
-
-
else
-
runHook exitHook
-
fi
-
-
exit $exitCode
-
}
-
-
trap "exitHandler" EXIT
-
-
-
######################################################################
-
# Helper functions that might be useful in setup hooks.
-
-
-
addToSearchPathWithCustomDelimiter() {
-
local delimiter=$1
-
local varName=$2
-
local dir=$3
-
if [ -d "$dir" ]; then
-
eval export ${varName}=${!varName}${!varName:+$delimiter}${dir}
-
fi
-
}
-
-
PATH_DELIMITER=':'
-
-
addToSearchPath() {
-
addToSearchPathWithCustomDelimiter "${PATH_DELIMITER}" "$@"
-
}
-
-
-
######################################################################
-
# Initialisation.
-
-
set -e
-
-
test -z $NIX_GCC && NIX_GCC=@GCC@
-
-
-
# Wildcard expansions that don't match should expand to an empty list.
-
# This ensures that, for instance, "for i in *; do ...; done" does the
-
# right thing.
-
shopt -s nullglob
-
-
-
# Set up the initial path.
-
PATH=
-
for i in $NIX_GCC @INITIALPATH@; do
-
if test "$i" = /; then i=; fi
-
addToSearchPath PATH $i/bin
-
done
-
-
# Hack: the /tmp of Cygwin is different from the /tmp in MSYS
-
if test -d $NIX_BUILD_TOP; then
-
echo "Nix build top already exists. Strange."
-
else
-
mkdir $NIX_BUILD_TOP
-
cd $NIX_BUILD_TOP
-
fi
-
-
if test "$NIX_DEBUG" = "1"; then
-
echo "initial path: $PATH"
-
fi
-
-
-
# Execute the pre-hook.
-
export SHELL=@SHELL@
-
if test -z "$shell"; then
-
export shell=@SHELL@
-
fi
-
-
# Check that the pre-hook initialised SHELL.
-
if test -z "$SHELL"; then echo "SHELL not set"; exit 1; fi
-
-
-
# Hack: run gcc's setup hook.
-
envHooks=()
-
if test -f $NIX_GCC/nix-support/setup-hook; then
-
source $NIX_GCC/nix-support/setup-hook
-
fi
-
-
-
# Ensure that the given directories exists.
-
ensureDir() {
-
local dir
-
for dir in "$@"; do
-
if ! test -x "$dir"; then mkdir -p "$dir"; fi
-
done
-
}
-
-
installBin() {
-
mkdir -p $out/bin
-
cp "$@" $out/bin
-
}
-
-
-
# Allow the caller to augment buildInputs (it's not always possible to
-
# do this before the call to setup.sh, since the PATH is empty at that
-
# point; here we have a basic Unix environment).
-
runHook addInputsHook
-
-
-
# Recursively find all build inputs.
-
findInputs() {
-
local pkg=$1
-
-
case $pkgs in
-
*\ $pkg\ *)
-
return 0
-
;;
-
esac
-
-
pkgs="$pkgs $pkg "
-
-
if test -f $pkg/nix-support/setup-hook; then
-
source $pkg/nix-support/setup-hook
-
fi
-
-
if test -f $pkg/nix-support/propagated-build-inputs; then
-
for i in $(cat $pkg/nix-support/propagated-build-inputs); do
-
findInputs $i
-
done
-
fi
-
}
-
-
pkgs=""
-
for i in $buildInputs $propagatedBuildInputs; do
-
findInputs $i
-
done
-
-
-
# Set the relevant environment variables to point to the build inputs
-
# found above.
-
addToEnv() {
-
local pkg=$1
-
-
if test -d $1/bin; then
-
addToSearchPath _PATH $1/bin
-
fi
-
-
# Run the package-specific hooks set by the setup-hook scripts.
-
for i in "${envHooks[@]}"; do
-
$i $pkg
-
done
-
}
-
-
for i in $pkgs; do
-
addToEnv $i
-
done
-
-
-
# Add the output as an rpath.
-
if test "$NIX_NO_SELF_RPATH" != "1"; then
-
export NIX_LDFLAGS="-rpath $out/lib $NIX_LDFLAGS"
-
if test -n "$NIX_LIB64_IN_SELF_RPATH"; then
-
export NIX_LDFLAGS="-rpath $out/lib64 $NIX_LDFLAGS"
-
fi
-
fi
-
-
-
# Set the TZ (timezone) environment variable, otherwise commands like
-
# `date' will complain (e.g., `Tue Mar 9 10:01:47 Local time zone must
-
# be set--see zic manual page 2004').
-
export TZ=UTC
-
-
-
# Set the prefix. This is generally $out, but it can be overriden,
-
# for instance if we just want to perform a test build/install to a
-
# temporary location and write a build report to $out.
-
if test -z "$prefix"; then
-
prefix="$out";
-
fi
-
-
if test "$useTempPrefix" = "1"; then
-
prefix="$NIX_BUILD_TOP/tmp_prefix";
-
fi
-
-
-
PATH=$_PATH${_PATH:+:}$PATH
-
if test "$NIX_DEBUG" = "1"; then
-
echo "final path: $PATH"
-
fi
-
-
-
# Make GNU Make produce nested output.
-
export NIX_INDENT_MAKE=1
-
-
-
######################################################################
-
# Misc. helper functions.
-
-
-
stripDirs() {
-
local dirs="$1"
-
local stripFlags="$2"
-
local dirsNew=
-
-
for d in ${dirs}; do
-
if test -d "$prefix/$d"; then
-
dirsNew="${dirsNew} $prefix/$d "
-
fi
-
done
-
dirs=${dirsNew}
-
-
if test -n "${dirs}"; then
-
header "stripping (with flags $stripFlags) in $dirs"
-
find $dirs -type f -print0 | xargs -0 ${xargsFlags:--r} strip $stripFlags || true
-
stopNest
-
fi
-
}
-
-
-
######################################################################
-
# Textual substitution functions.
-
-
-
substitute() {
-
local input="$1"
-
local output="$2"
-
-
local -a params=("$@")
-
local -a args=()
-
-
local n p pattern replacement varName
-
-
for ((n = 2; n < ${#params[*]}; n += 1)); do
-
p=${params[$n]}
-
-
if test "$p" = "--replace"; then
-
pattern="${params[$((n + 1))]}"
-
replacement="${params[$((n + 2))]}"
-
n=$((n + 2))
-
fi
-
-
if test "$p" = "--subst-var"; then
-
varName="${params[$((n + 1))]}"
-
pattern="@$varName@"
-
replacement="${!varName}"
-
n=$((n + 1))
-
fi
-
-
if test "$p" = "--subst-var-by"; then
-
pattern="@${params[$((n + 1))]}@"
-
replacement="${params[$((n + 2))]}"
-
n=$((n + 2))
-
fi
-
-
if test ${#args[@]} != 0; then
-
args[${#args[@]}]="-a"
-
fi
-
args[${#args[@]}]="$pattern"
-
args[${#args[@]}]="$replacement"
-
done
-
-
replace-literal -e -s -- "${args[@]}" < "$input" > "$output".tmp
-
if test -x "$output"; then
-
chmod +x "$output".tmp
-
fi
-
mv -f "$output".tmp "$output"
-
}
-
-
-
substituteInPlace() {
-
local fileName="$1"
-
shift
-
substitute "$fileName" "$fileName" "$@"
-
}
-
-
-
substituteAll() {
-
local input="$1"
-
local output="$2"
-
-
# Select all environment variables that start with a lowercase character.
-
for envVar in $(env | sed "s/^[^a-z].*//" | sed "s/^\([^=]*\)=.*/\1/"); do
-
if test "$NIX_DEBUG" = "1"; then
-
echo "$envVar -> ${!envVar}"
-
fi
-
args="$args --subst-var $envVar"
-
done
-
-
substitute "$input" "$output" $args
-
}
-
-
-
######################################################################
-
# What follows is the generic builder.
-
-
-
nestingLevel=0
-
-
startNest() {
-
nestingLevel=$(($nestingLevel + 1))
-
echo -en "\e[$1p"
-
}
-
-
stopNest() {
-
nestingLevel=$(($nestingLevel - 1))
-
echo -en "\e[q"
-
}
-
-
header() {
-
startNest "$2"
-
echo "$1"
-
}
-
-
# Make sure that even when we exit abnormally, the original nesting
-
# level is properly restored.
-
closeNest() {
-
while test $nestingLevel -gt 0; do
-
stopNest
-
done
-
}
-
-
-
# This function is useful for debugging broken Nix builds. It dumps
-
# all environment variables to a file `env-vars' in the build
-
# directory. If the build fails and the `-K' option is used, you can
-
# then go to the build directory and source in `env-vars' to reproduce
-
# the environment used for building.
-
dumpVars() {
-
echo "Dumping env-vars to $NIX_BUILD_TOP/env-vars"
-
if test "$noDumpEnvVars" != "1"; then
-
export > "$NIX_BUILD_TOP/env-vars"
-
fi
-
}
-
-
-
# Utility function: return the base name of the given path, with the
-
# prefix `HASH-' removed, if present.
-
stripHash() {
-
strippedName=$(basename $1);
-
if echo "$strippedName" | grep -q '^[a-z0-9]\{32\}-'; then
-
strippedName=$(echo "$strippedName" | cut -c34-)
-
fi
-
}
-
-
-
unpackFile() {
-
curSrc="$1"
-
local cmd
-
-
header "unpacking source archive $curSrc" 3
-
-
case "$curSrc" in
-
*.tar)
-
tar xvf $curSrc
-
;;
-
*.tar.gz | *.tgz | *.tar.Z)
-
gzip -d < $curSrc | tar xvf -
-
;;
-
*.tar.bz2 | *.tbz2)
-
bzip2 -d < $curSrc | tar xvf -
-
;;
-
*.zip)
-
unzip $curSrc
-
;;
-
*)
-
if test -d "$curSrc"; then
-
stripHash $curSrc
-
cp -prvd $curSrc $strippedName
-
else
-
if test -z "$unpackCmd"; then
-
echo "source archive $curSrc has unknown type"
-
exit 1
-
fi
-
runHook unpackCmd
-
fi
-
;;
-
esac
-
-
stopNest
-
}
-
-
-
unpackPhase() {
-
runHook preUnpack
-
-
if test -z "$srcs"; then
-
if test -z "$src"; then
-
echo 'variable $src or $srcs should point to the source'
-
exit 1
-
fi
-
srcs="$src"
-
fi
-
-
# To determine the source directory created by unpacking the
-
# source archives, we record the contents of the current
-
# directory, then look below which directory got added. Yeah,
-
# it's rather hacky.
-
local dirsBefore=""
-
for i in *; do
-
if test -d "$i"; then
-
dirsBefore="$dirsBefore $i "
-
fi
-
done
-
-
# Unpack all source archives.
-
for i in $srcs; do
-
unpackFile $i
-
done
-
-
# Find the source directory.
-
if test -n "$setSourceRoot"; then
-
runHook setSourceRoot
-
elif test -z "$sourceRoot"; then
-
sourceRoot=
-
for i in *; do
-
if test -d "$i"; then
-
case $dirsBefore in
-
*\ $i\ *)
-
;;
-
*)
-
if test -n "$sourceRoot"; then
-
echo "unpacker produced multiple directories"
-
exit 1
-
fi
-
sourceRoot="$i"
-
;;
-
esac
-
fi
-
done
-
fi
-
-
if test -z "$sourceRoot"; then
-
echo "unpacker appears to have produced no directories"
-
exit 1
-
fi
-
-
echo "source root is $sourceRoot"
-
-
# By default, add write permission to the sources. This is often
-
# necessary when sources have been copied from other store
-
# locations.
-
if test "$dontMakeSourcesWritable" != 1; then
-
chmod -R u+w "$sourceRoot"
-
fi
-
-
runHook postUnpack
-
}
-
-
-
patchPhase() {
-
runHook prePatch
-
-
for i in $patches; do
-
header "applying patch $i" 3
-
local uncompress=cat
-
case $i in
-
*.gz)
-
uncompress="gzip -d"
-
;;
-
*.bz2)
-
uncompress="bzip2 -d"
-
;;
-
esac
-
$uncompress < $i | patch ${patchFlags:--p1}
-
stopNest
-
done
-
-
runHook postPatch
-
}
-
-
-
configurePhase() {
-
runHook preConfigure
-
-
if test -z "$configureScript"; then
-
configureScript=./configure
-
if ! test -x $configureScript; then
-
echo "no configure script, doing nothing"
-
return
-
fi
-
fi
-
-
if test -z "$dontAddPrefix"; then
-
configureFlags="${prefixKey:---prefix=}$prefix $configureFlags"
-
fi
-
-
# Add --disable-dependency-tracking to speed up some builds.
-
if test -z "$dontAddDisableDepTrack"; then
-
if grep -q dependency-tracking $configureScript; then
-
configureFlags="--disable-dependency-tracking $configureFlags"
-
fi
-
fi
-
-
# By default, disable static builds.
-
if test -z "$dontDisableStatic"; then
-
if grep -q enable-static $configureScript; then
-
configureFlags="--disable-static $configureFlags"
-
fi
-
fi
-
-
echo "configure flags: $configureFlags ${configureFlagsArray[@]}"
-
$configureScript $configureFlags "${configureFlagsArray[@]}"
-
-
runHook postConfigure
-
}
-
-
-
buildPhase() {
-
runHook preBuild
-
-
if test -z "$makeFlags" && ! test -n "$makefile" -o -e "Makefile" -o -e "makefile" -o -e "GNUmakefile"; then
-
echo "no Makefile, doing nothing"
-
return
-
fi
-
-
echo "make flags: $makeFlags ${makeFlagsArray[@]} $buildFlags ${buildFlagsArray[@]}"
-
make ${makefile:+-f $makefile} \
-
$makeFlags "${makeFlagsArray[@]}" \
-
$buildFlags "${buildFlagsArray[@]}"
-
-
runHook postBuild
-
}
-
-
-
checkPhase() {
-
runHook preCheck
-
-
echo "check flags: $makeFlags ${makeFlagsArray[@]} $checkFlags ${checkFlagsArray[@]}"
-
make ${makefile:+-f $makefile} \
-
$makeFlags "${makeFlagsArray[@]}" \
-
$checkFlags "${checkFlagsArray[@]}" ${checkTarget:-check}
-
-
runHook postCheck
-
}
-
-
-
patchELF() {
-
# Patch all ELF executables and shared libraries.
-
header "patching ELF executables and libraries"
-
if test -e "$prefix"; then
-
find "$prefix" \( \
-
\( -type f -a -name "*.so*" \) -o \
-
\( -type f -a -perm +0100 \) \
-
\) -print -exec patchelf --shrink-rpath {} \;
-
fi
-
stopNest
-
}
-
-
-
patchShebangs() {
-
# Rewrite all script interpreter file names (`#! /path') under the
-
# specified directory tree to paths found in $PATH. E.g.,
-
# /bin/sh will be rewritten to /nix/store/<hash>-some-bash/bin/sh.
-
# Interpreters that are already in the store are left untouched.
-
header "patching script interpreter paths"
-
local dir="$1"
-
local f
-
for f in $(find "$dir" -type f -perm +0100); do
-
local oldPath=$(sed -ne '1 s,^#![ ]*\([^ ]*\).*$,\1,p' "$f")
-
if test -n "$oldPath" -a "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE"; then
-
local newPath=$(type -P $(basename $oldPath) || true)
-
if test -n "$newPath" -a "$newPath" != "$oldPath"; then
-
echo "$f: interpreter changed from $oldPath to $newPath"
-
sed -i -e "1 s,$oldPath,$newPath," "$f"
-
fi
-
fi
-
done
-
stopNest
-
}
-
-
-
installPhase() {
-
runHook preInstall
-
-
mkdir -p "$prefix"
-
-
installTargets=${installTargets:-install}
-
echo "install flags: $installTargets $makeFlags ${makeFlagsArray[@]} $installFlags ${installFlagsArray[@]}"
-
make ${makefile:+-f $makefile} $installTargets \
-
$makeFlags "${makeFlagsArray[@]}" \
-
$installFlags "${installFlagsArray[@]}"
-
-
runHook postInstall
-
}
-
-
-
# The fixup phase performs generic, package-independent, Nix-related
-
# stuff, like running patchelf and setting the
-
# propagated-build-inputs. It should rarely be overriden.
-
fixupPhase() {
-
runHook preFixup
-
-
# Put man/doc/info under $out/share.
-
forceShare=${forceShare:=man doc info}
-
if test -n "$forceShare"; then
-
for d in $forceShare; do
-
if test -d "$prefix/$d"; then
-
if test -d "$prefix/share/$d"; then
-
echo "both $d/ and share/$d/ exists!"
-
else
-
echo "fixing location of $d/ subdirectory"
-
mkdir -p $prefix/share
-
if test -w $prefix/share; then
-
mv -v $prefix/$d $prefix/share
-
ln -sv $prefix/share/$d $prefix/$d
-
fi
-
fi
-
fi
-
done;
-
fi
-
-
# TODO: strip _only_ ELF executables, and return || fail here...
-
if test -z "$dontStrip"; then
-
stripDebugList=${stripDebugList:-lib lib64 libexec bin sbin}
-
if test -n "$stripDebugList"; then
-
stripDirs "$stripDebugList" "${stripDebugFlags:--S}"
-
fi
-
-
stripAllList=${stripAllList:-}
-
if test -n "$stripAllList"; then
-
stripDirs "$stripAllList" "${stripAllFlags:--s}"
-
fi
-
fi
-
-
if test "$havePatchELF" = 1 -a -z "$dontPatchELF"; then
-
patchELF "$prefix"
-
fi
-
-
if test -z "$dontPatchShebangs"; then
-
patchShebangs "$prefix"
-
fi
-
-
if test -n "$propagatedBuildInputs"; then
-
mkdir -p "$out/nix-support"
-
echo "$propagatedBuildInputs" > "$out/nix-support/propagated-build-inputs"
-
fi
-
-
if test -n "$setupHook"; then
-
mkdir -p "$out/nix-support"
-
substituteAll "$setupHook" "$out/nix-support/setup-hook"
-
fi
-
-
runHook postFixup
-
}
-
-
-
distPhase() {
-
runHook preDist
-
-
echo "dist flags: $distFlags ${distFlagsArray[@]}"
-
make ${makefile:+-f $makefile} $distFlags "${distFlagsArray[@]}" ${distTarget:-dist}
-
-
if test "$dontCopyDist" != 1; then
-
mkdir -p "$out/tarballs"
-
-
# Note: don't quote $tarballs, since we explicitly permit
-
# wildcards in there.
-
cp -pvd ${tarballs:-*.tar.gz} $out/tarballs
-
fi
-
-
runHook postDist
-
}
-
-
-
showPhaseHeader() {
-
local phase="$1"
-
case $phase in
-
unpackPhase) header "unpacking sources";;
-
patchPhase) header "patching sources";;
-
configurePhase) header "configuring";;
-
buildPhase) header "building";;
-
checkPhase) header "running tests";;
-
installPhase) header "installing";;
-
fixupPhase) header "post-installation fixup";;
-
*) header "$phase";;
-
esac
-
}
-
-
-
genericBuild() {
-
header "building $out"
-
-
if test -n "$buildCommand"; then
-
eval "$buildCommand"
-
return
-
fi
-
-
if test -z "$phases"; then
-
phases="$prePhases unpackPhase patchPhase $preConfigurePhases \
-
configurePhase $preBuildPhases buildPhase checkPhase \
-
$preInstallPhases installPhase $preFixupPhases fixupPhase \
-
$preDistPhases distPhase $postPhases";
-
fi
-
-
for curPhase in $phases; do
-
if test "$curPhase" = buildPhase -a -n "$dontBuild"; then continue; fi
-
if test "$curPhase" = checkPhase -a -z "$doCheck"; then continue; fi
-
if test "$curPhase" = installPhase -a -n "$dontInstall"; then continue; fi
-
if test "$curPhase" = fixupPhase -a -n "$dontFixup"; then continue; fi
-
if test "$curPhase" = distPhase -a -z "$doDist"; then continue; fi
-
-
showPhaseHeader "$curPhase"
-
dumpVars
-
-
# Evaluate the variable named $curPhase if it exists, otherwise the
-
# function named $curPhase.
-
eval "${!curPhase:-$curPhase}"
-
-
if test "$curPhase" = unpackPhase; then
-
cd "${sourceRoot:-.}"
-
fi
-
-
stopNest
-
done
-
-
stopNest
-
}
-
-
-
-
-
dumpVars
-80
pkgs/stdenv/mingw/simple-stdenv/builder.sh
···
-
if test -z "$out"; then
-
out="$OUT"
-
initialPath="$INITIALPATH"
-
shell="$SHELL"
-
fi
-
-
setupPath=
-
for i in $initialPath; do
-
setupPath=$setupPath${setupPath:+:}$i
-
done
-
-
PATH=$setupPath
-
export PATH
-
-
mkdir $out
-
-
cat > $out/setup <<EOF
-
PATH=$setupPath
-
export PATH
-
-
SHELL=$shell
-
export SHELL
-
-
# make fetchurl usable
-
header() {
-
echo "\$1"
-
}
-
-
stopNest() {
-
echo "Nothing to do"
-
}
-
-
# !!! Awful copy&paste.
-
substitute() {
-
local input="\$1"
-
local output="\$2"
-
-
local -a params=("\$@")
-
-
local sedScript=\$NIX_BUILD_TOP/.sedargs
-
rm -f \$sedScript
-
touch \$sedScript
-
-
local n p pattern replacement varName
-
-
for ((n = 2; n < \${#params[*]}; n += 1)); do
-
p=\${params[\$n]}
-
-
if test "\$p" = "--replace"; then
-
pattern=\${params[\$((n + 1))]}
-
replacement=\${params[\$((n + 2))]}
-
n=\$((n + 2))
-
echo "s^\$pattern^\$replacement^g" >> \$sedScript
-
sedArgs=("\${sedArgs[@]}" "-e" )
-
fi
-
-
if test "\$p" = "--subst-var"; then
-
varName=\${params[\$((n + 1))]}
-
n=\$((n + 1))
-
echo "s^@\${varName}@^\${!varName}^g" >> \$sedScript
-
fi
-
-
if test "\$p" = "--subst-var-by"; then
-
varName=\${params[\$((n + 1))]}
-
replacement=\${params[\$((n + 2))]}
-
n=\$((n + 2))
-
echo "s^@\${varName}@^\$replacement^g" >> \$sedScript
-
fi
-
-
done
-
-
sed -f \$sedScript < "\$input" > "\$output".tmp
-
if test -x "\$output"; then
-
chmod +x "\$output".tmp
-
fi
-
mv -f "\$output".tmp "\$output"
-
}
-
EOF
-
-
chmod +x $out/setup
-31
pkgs/stdenv/mingw/simple-stdenv/default.nix
···
-
{ system
-
, name
-
, shell
-
, path
-
, extraEnv ? {}
-
, extraShellOptions ? []
-
}:
-
-
let {
-
body =
-
derivation ({
-
inherit system name;
-
initialPath = path;
-
builder = shell;
-
args = extraShellOptions ++ ["-e" ./builder.sh];
-
} // extraEnv)
-
-
// {
-
mkDerivation = attrs:
-
derivation ((removeAttrs attrs ["meta"]) // {
-
builder = shell;
-
args = extraShellOptions ++ ["-e" ] ++ [attrs.builder]; # (if attrs ? builder then [attrs.builder] else [ ../fix-builder.sh ../default-builder.sh] ) ;
-
stdenv = body;
-
system = body.system;
-
}
-
-
// extraEnv);
-
-
inherit shell;
-
};
-
}
+2 -11
pkgs/top-level/all-packages.nix
···
{ # The system (e.g., `i686-linux') for which to build the packages.
system ? builtins.currentSystem
-
# Usually, the system type uniquely determines the stdenv and thus
-
# how to build the packages. But on some platforms we have
-
# different stdenvs, leading to different ways to build the
-
# packages. For instance, on Windows we support both Cygwin and
-
# Mingw builds. In both cases, `system' is `i686-cygwin'. The
-
# attribute `stdenvType' is used to select the specific kind of
-
# stdenv to use, e.g., `i686-mingw'.
-
, stdenvType ? system
-
, # The standard environment to use. Only used for bootstrapping. If
# null, the default standard environment is used.
bootStdenv ? null
···
self_ = with self; helperFunctions // {
# Make some arguments passed to all-packages.nix available
-
inherit system stdenvType platform;
+
inherit system platform;
# Allow callPackage to fill in the pkgs argument
inherit pkgs;
···
allStdenvs = import ../stdenv {
-
inherit system stdenvType platform config;
+
inherit system platform config;
allPackages = args: import ./all-packages.nix ({ inherit config system; } // args);
};
-27
pkgs/top-level/mingw.nix
···
-
let {
-
pkgs =
-
import ./all-packages.nix {
-
stdenvType = "i686-mingw";
-
};
-
-
body = {
-
inherit (pkgs)
-
aterm
-
getopt
-
pkgconfig
-
realCurl
-
strategoLibraries
-
zlib;
-
# inherit profileTest;
-
};
-
-
# profileTest =
-
# pkgs.stdenv.mkDerivation {
-
# name = "profile-test";
-
# src = ./char-test.c;
-
# builder = ./profile-builder.sh;
-
# strlib = pkgs.strategoLibraries;
-
# aterm = pkgs.aterm;
-
# buildInputs = [pkgs.aterm pkgs.strategoLibraries];
-
# };
-
}