nixpkgs/pkgs/stdenv/native/default.nix

290 lines
6.7 KiB
Nix
Raw Normal View History

{system, allPackages ? import ../../..}:
rec {
shell = "/bin/bash";
path = (if system == "i386-sunos" then [ "/usr/gnu" ] else []) ++
(if system == "i686-netbsd" then [ "/usr/pkg" ] else []) ++
["/" "/usr" "/usr/local"];
prehookBase = builtins.toFile "prehook-base.sh" ''
# Disable purity tests; it's allowed (even needed) to link to
# libraries outside the Nix store (like the C library).
export NIX_ENFORCE_PURITY=
'';
prehookDarwin = builtins.toFile "prehook-darwin.sh" ''
source ${prehookBase}
export NIX_DONT_SET_RPATH=1
export NIX_NO_SELF_RPATH=1
dontFixLibtool=1
NIX_STRIP_DEBUG=0
stripAllFlags=" " # the Darwin "strip" command doesn't know "-s"
'';
/* FreeBSD needs the following packages installed from the FreeBSD packages
* collection (pkg_add -r ...):
*
* bash
* coreutils
* diffutils
* findutils
* gawk
* gmake
* gsed
* gtar
* gsed
* gtar
* gzip
*
* The aliases are derived by using the derivealiases-freebsd.sh script
*
* The following packages seem to be fine in the default install:
*
* gcc (included with FreeBSD)
* binutils (FreeBSD uses GNU binutils)
* bzip2 (included with FreeBSD)
* grep (FreeBSD uses GNU grep)
* patch (included with FreeBSD)
*
* Moreover a symlink to /bin/bash is required and /bin/sh has to be a symlink to /bin/bash
*/
prehookFreeBSD = builtins.toFile "prehook-freebsd.sh" ''
source ${prehookBase}
alias [='g['
alias base64='gbase64'
alias basename='gbasename'
alias cat='gcat'
alias chcon='gchcon'
alias chgrp='gchgrp'
alias chmod='gchmod'
alias chown='gchown'
alias chroot='gchroot'
alias cksum='gcksum'
alias comm='gcomm'
alias cp='gcp'
alias csplit='gcsplit'
alias cut='gcut'
alias date='gdate'
alias dd='gdd'
alias df='gdf'
alias dir='gdir'
alias dircolors='gdircolors'
alias dirname='gdirname'
alias du='gdu'
alias echo='gecho'
alias env='genv'
alias expand='gexpand'
alias expr='gexpr'
alias factor='gfactor'
alias false='gfalse'
alias fmt='gfmt'
alias fold='gfold'
alias groups='ggroups'
alias head='ghead'
alias hostid='ghostid'
alias id='gid'
alias install='ginstall'
alias join='gjoin'
alias kill='gkill'
alias link='glink'
alias ln='gln'
alias logname='glogname'
alias ls='gls'
alias md5sum='gmd5sum'
alias mkdir='gmkdir'
alias mkfifo='gmkfifo'
alias mknod='gmknod'
alias mktemp='gmktemp'
alias mv='gmv'
alias nice='gnice'
alias nl='gnl'
alias nohup='gnohup'
alias od='god'
alias paste='gpaste'
alias pathchk='gpathchk'
alias pinky='gpinky'
alias pr='gpr'
alias printenv='gprintenv'
alias printf='gprintf'
alias ptx='gptx'
alias pwd='gpwd'
alias readlink='greadlink'
alias rm='grm'
alias rmdir='grmdir'
alias runcon='gruncon'
alias seq='gseq'
alias sha1sum='gsha1sum'
alias sha224sum='gsha224sum'
alias sha256sum='gsha256sum'
alias sha384sum='gsha384sum'
alias sha512sum='gsha512sum'
alias shred='gshred'
alias shuf='gshuf'
alias sleep='gsleep'
alias sort='gsort'
alias split='gsplit'
alias stat='gstat'
alias stdbuf='gstdbuf'
alias stty='gstty'
alias sum='gsum'
alias sync='gsync'
alias tac='gtac'
alias tail='gtail'
alias tee='gtee'
alias test='gtest'
alias timeout='gtimeout'
alias touch='gtouch'
alias tr='gtr'
alias true='gtrue'
alias truncate='gtruncate'
alias tsort='gtsort'
alias tty='gtty'
alias uname='guname'
alias unexpand='gunexpand'
alias uniq='guniq'
alias unlink='gunlink'
alias uptime='guptime'
alias users='gusers'
alias vdir='gvdir'
alias wc='gwc'
alias who='gwho'
alias whoami='gwhoami'
alias yes='gyes'
alias cmp='gcmp'
alias diff='gdiff'
alias diff3='gdiff3'
alias sdiff='gsdiff'
alias find='gfind'
alias oldfind='goldfind'
alias locate='glocate'
alias updatedb='gupdatedb'
alias xargs='gxargs'
alias make='gmake'
alias sed='gsed'
alias tar='gtar'
export MAKE=gmake
shopt -s expand_aliases
# Filter out stupid GCC warnings (in gcc-wrapper).
export NIX_GCC_NEEDS_GREP=1
'';
prehookOpenBSD = builtins.toFile "prehook-openbsd.sh" ''
source ${prehookBase}
alias make=gmake
alias grep=ggrep
alias mv=gmv
alias ln=gln
alias sed=gsed
alias tar=gtar
export MAKE=gmake
shopt -s expand_aliases
# Filter out stupid GCC warnings (in gcc-wrapper).
export NIX_GCC_NEEDS_GREP=1
'';
prehookNetBSD = builtins.toFile "prehook-netbsd.sh" ''
source ${prehookBase}
alias make=gmake
alias sed=gsed
alias tar=gtar
export MAKE=gmake
shopt -s expand_aliases
# Filter out stupid GCC warnings (in gcc-wrapper).
export NIX_GCC_NEEDS_GREP=1
'';
prehookCygwin = builtins.toFile "prehook-cygwin.sh" ''
source ${prehookBase}
if test -z "$cygwinConfigureEnableShared"; then
export configureFlags="$configureFlags --disable-shared"
fi
PATH_DELIMITER=';'
'';
# A function that builds a "native" stdenv (one that uses tools in
# /usr etc.).
makeStdenv =
{gcc, fetchurl, extraPath ? []}:
import ../generic {
name = "stdenv-native";
preHook =
if system == "i686-darwin" || system == "powerpc-darwin" || system == "x86_64-darwin" then prehookDarwin else
if system == "i686-freebsd" then prehookFreeBSD else
if system == "i686-openbsd" then prehookOpenBSD else
if system == "i686-netbsd" then prehookNetBSD else
prehookBase;
initialPath = extraPath ++ path;
fetchurlBoot = fetchurl;
inherit system shell gcc;
};
stdenvBoot0 = makeStdenv {
gcc = "/no-such-path";
fetchurl = null;
};
gcc = import ../../build-support/gcc-wrapper {
name = "gcc-native";
nativeTools = true;
nativeLibc = true;
nativePrefix = if system == "i386-sunos" then "/usr/gnu" else "/usr";
stdenv = stdenvBoot0;
};
fetchurl = import ../../build-support/fetchurl {
stdenv = stdenvBoot0;
# Curl should be in /usr/bin or so.
curl = null;
};
# First build a stdenv based only on tools outside the store.
stdenvBoot1 = makeStdenv {
inherit gcc fetchurl;
} // {inherit fetchurl;};
stdenvBoot1Pkgs = allPackages {
inherit system;
bootStdenv = stdenvBoot1;
};
# Using that, build a stdenv that adds the `replace' command (which
# most systems don't have, so we mustn't rely on the native
# environment providing it).
stdenvBoot2 = makeStdenv {
inherit gcc fetchurl;
extraPath = [stdenvBoot1Pkgs.replace];
};
stdenv = stdenvBoot2;
}