Merge pull request #30549 from obsidiansystems/bintools

treewide: Introduce stdenv.cc.bintools
This commit is contained in:
John Ericson 2017-11-08 14:20:48 -05:00 committed by GitHub
commit 0101856765
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
29 changed files with 109 additions and 92 deletions

View file

@ -184,7 +184,7 @@
For now, feel free to use either method. For now, feel free to use either method.
</para> </para>
<note><para> <note><para>
There is also a "backlink" <varname>__targetPackages</varname>, yielding a package set whose <varname>buildPackages</varname> is the current package set. There is also a "backlink" <varname>targetPackages</varname>, yielding a package set whose <varname>buildPackages</varname> is the current package set.
This is a hack, though, to accommodate compilers with lousy build systems. This is a hack, though, to accommodate compilers with lousy build systems.
Please do not use this unless you are absolutely sure you are packaging such a compiler and there is no other way. Please do not use this unless you are absolutely sure you are packaging such a compiler and there is no other way.
</para></note> </para></note>

View file

@ -1,7 +1,7 @@
{ config, stdenv, fetchgit, makeWrapper, gnome3, at_spi2_core, libcxx, { config, stdenv, fetchgit, makeWrapper, gnome3, at_spi2_core, libcxx,
boost, epoxy, cmake, aspell, llvmPackages, libgit2, pkgconfig, pcre, boost, epoxy, cmake, aspell, llvmPackages, libgit2, pkgconfig, pcre,
libXdmcp, libxkbcommon, libpthreadstubs, wrapGAppsHook, aspellDicts, libXdmcp, libxkbcommon, libpthreadstubs, wrapGAppsHook, aspellDicts,
coreutils, glibc, dbus_libs, openssl, libxml2, gnumake, binutils, ctags }: coreutils, glibc, dbus_libs, openssl, libxml2, gnumake, ctags }:
with stdenv.lib; with stdenv.lib;
@ -65,7 +65,7 @@ stdenv.mkDerivation rec {
postInstall = '' postInstall = ''
mv $out/bin/juci $out/bin/.juci mv $out/bin/juci $out/bin/.juci
makeWrapper "$out/bin/.juci" "$out/bin/juci" \ makeWrapper "$out/bin/.juci" "$out/bin/juci" \
--set PATH "${stdenv.lib.makeBinPath [ ctags coreutils llvmPackages.clang.cc cmake gnumake binutils llvmPackages.clang ]}" \ --set PATH "${stdenv.lib.makeBinPath [ ctags coreutils llvmPackages.clang.cc cmake gnumake llvmPackages.clang.bintools llvmPackages.clang ]}" \
--set NO_AT_BRIDGE 1 \ --set NO_AT_BRIDGE 1 \
--set ASPELL_CONF "dict-dir ${aspellDicts.en}/lib/aspell" --set ASPELL_CONF "dict-dir ${aspellDicts.en}/lib/aspell"
''; '';

View file

@ -97,6 +97,11 @@ stdenv.mkDerivation {
outputs = [ "out" "man" ]; outputs = [ "out" "man" ];
passthru = { passthru = {
# "cc" is the generic name for a C compiler, but there is no one for package
# providing the linker and related tools. The two we use now are GNU
# Binutils, and Apple's "cctools"; "binutils" as an attempt to find an
# unused middle-ground name that evokes both.
bintools = binutils_bin;
inherit libc nativeTools nativeLibc nativePrefix isGNU isClang default_cxx_stdlib_compile inherit libc nativeTools nativeLibc nativePrefix isGNU isClang default_cxx_stdlib_compile
prefix; prefix;

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, noSysDirs { stdenv, targetPackages, fetchurl, noSysDirs
, langC ? true, langCC ? true, langFortran ? false , langC ? true, langCC ? true, langFortran ? false
, langJava ? false , langJava ? false
, langAda ? false , langAda ? false
@ -77,8 +77,8 @@ let version = "4.5.4";
withCpu + withCpu +
withAbi + withAbi +
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
" --with-as=${binutils}/bin/${targetPlatform.config}-as" + " --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
" --with-ld=${binutils}/bin/${targetPlatform.config}-ld" + " --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
(if crossMingw && crossStageStatic then (if crossMingw && crossStageStatic then
" --with-headers=${libcCross}/include" + " --with-headers=${libcCross}/include" +
" --with-gcc" + " --with-gcc" +
@ -229,7 +229,7 @@ stdenv.mkDerivation ({
++ (optional langJava boehmgc) ++ (optional langJava boehmgc)
++ (optionals langJava [zip unzip]) ++ (optionals langJava [zip unzip])
++ (optionals javaAwtGtk ([gtk2 pkgconfig libart_lgpl] ++ xlibs)) ++ (optionals javaAwtGtk ([gtk2 pkgconfig libart_lgpl] ++ xlibs))
++ (optionals (targetPlatform != hostPlatform) [binutils]) ++ (optionals (targetPlatform != hostPlatform) [targetPackages.stdenv.cc.bintools])
++ (optionals langAda [gnatboot]) ++ (optionals langAda [gnatboot])
++ (optionals langVhdl [gnat]) ++ (optionals langVhdl [gnat])
; ;

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, fetchpatch, noSysDirs { stdenv, targetPackages, fetchurl, fetchpatch, noSysDirs
, langC ? true, langCC ? true, langFortran ? false , langC ? true, langCC ? true, langFortran ? false
, langObjC ? targetPlatform.isDarwin , langObjC ? targetPlatform.isDarwin
, langObjCpp ? targetPlatform.isDarwin , langObjCpp ? targetPlatform.isDarwin
@ -153,8 +153,8 @@ let version = "4.8.5";
withFloat + withFloat +
withMode + withMode +
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
" --with-as=${binutils}/bin/${targetPlatform.config}-as" + " --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
" --with-ld=${binutils}/bin/${targetPlatform.config}-ld" + " --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
(if crossMingw && crossStageStatic then (if crossMingw && crossStageStatic then
" --with-headers=${libcCross}/include" + " --with-headers=${libcCross}/include" +
" --with-gcc" + " --with-gcc" +
@ -303,7 +303,7 @@ stdenv.mkDerivation ({
++ (optional (zlib != null) zlib) ++ (optional (zlib != null) zlib)
++ (optionals langJava [ boehmgc zip unzip ]) ++ (optionals langJava [ boehmgc zip unzip ])
++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs)) ++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs))
++ (optionals (targetPlatform != hostPlatform) [binutils]) ++ (optionals (targetPlatform != hostPlatform) [targetPackages.stdenv.cc.bintools])
++ (optionals langAda [gnatboot]) ++ (optionals langAda [gnatboot])
++ (optionals langVhdl [gnat]) ++ (optionals langVhdl [gnat])

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, noSysDirs { stdenv, targetPackages, fetchurl, noSysDirs
, langC ? true, langCC ? true, langFortran ? false , langC ? true, langCC ? true, langFortran ? false
, langObjC ? targetPlatform.isDarwin , langObjC ? targetPlatform.isDarwin
, langObjCpp ? targetPlatform.isDarwin , langObjCpp ? targetPlatform.isDarwin
@ -144,8 +144,8 @@ let version = "4.9.4";
withFloat + withFloat +
withMode + withMode +
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
" --with-as=${binutils}/bin/${targetPlatform.config}-as" + " --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
" --with-ld=${binutils}/bin/${targetPlatform.config}-ld" + " --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
(if crossMingw && crossStageStatic then (if crossMingw && crossStageStatic then
" --with-headers=${libcCross}/include" + " --with-headers=${libcCross}/include" +
" --with-gcc" + " --with-gcc" +
@ -296,7 +296,7 @@ stdenv.mkDerivation ({
++ (optional (zlib != null) zlib) ++ (optional (zlib != null) zlib)
++ (optionals langJava [ boehmgc zip unzip ]) ++ (optionals langJava [ boehmgc zip unzip ])
++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs)) ++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs))
++ (optionals (targetPlatform != hostPlatform) [binutils]) ++ (optionals (targetPlatform != hostPlatform) [targetPackages.stdenv.cc.bintools])
++ (optionals langAda [gnatboot]) ++ (optionals langAda [gnatboot])
++ (optionals langVhdl [gnat]) ++ (optionals langVhdl [gnat])

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, noSysDirs { stdenv, targetPackages, fetchurl, noSysDirs
, langC ? true, langCC ? true, langFortran ? false , langC ? true, langCC ? true, langFortran ? false
, langObjC ? targetPlatform.isDarwin , langObjC ? targetPlatform.isDarwin
, langObjCpp ? targetPlatform.isDarwin , langObjCpp ? targetPlatform.isDarwin
@ -31,7 +31,6 @@
, libpthread ? null, libpthreadCross ? null # required for GNU/Hurd , libpthread ? null, libpthreadCross ? null # required for GNU/Hurd
, stripped ? true , stripped ? true
, gnused ? null , gnused ? null
, binutils ? null
, cloog # unused; just for compat with gcc4, as we override the parameter on some places , cloog # unused; just for compat with gcc4, as we override the parameter on some places
, darwin ? null , darwin ? null
, buildPlatform, hostPlatform, targetPlatform , buildPlatform, hostPlatform, targetPlatform
@ -51,7 +50,7 @@ assert libelf != null -> zlib != null;
assert hostPlatform.isDarwin -> gnused != null; assert hostPlatform.isDarwin -> gnused != null;
# Need c++filt on darwin # Need c++filt on darwin
assert hostPlatform.isDarwin -> binutils != null; assert hostPlatform.isDarwin -> targetPackages.stdenv.cc.bintools or null != null;
# The go frontend is written in c++ # The go frontend is written in c++
assert langGo -> langCC; assert langGo -> langCC;
@ -149,8 +148,8 @@ let version = "5.5.0";
withFloat + withFloat +
withMode + withMode +
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
" --with-as=${binutils}/bin/${targetPlatform.config}-as" + " --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
" --with-ld=${binutils}/bin/${targetPlatform.config}-ld" + " --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
(if crossMingw && crossStageStatic then (if crossMingw && crossStageStatic then
" --with-headers=${libcCross}/include" + " --with-headers=${libcCross}/include" +
" --with-gcc" + " --with-gcc" +
@ -312,7 +311,7 @@ stdenv.mkDerivation ({
++ (optional (zlib != null) zlib) ++ (optional (zlib != null) zlib)
++ (optionals langJava [ boehmgc zip unzip ]) ++ (optionals langJava [ boehmgc zip unzip ])
++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs)) ++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs))
++ (optionals (targetPlatform != hostPlatform) [binutils]) ++ (optionals (targetPlatform != hostPlatform) [targetPackages.stdenv.cc.bintools])
++ (optionals (buildPlatform != hostPlatform) [buildPackages.stdenv.cc]) ++ (optionals (buildPlatform != hostPlatform) [buildPackages.stdenv.cc])
++ (optionals langAda [gnatboot]) ++ (optionals langAda [gnatboot])
++ (optionals langVhdl [gnat]) ++ (optionals langVhdl [gnat])
@ -320,7 +319,7 @@ stdenv.mkDerivation ({
# The builder relies on GNU sed (for instance, Darwin's `sed' fails with # The builder relies on GNU sed (for instance, Darwin's `sed' fails with
# "-i may not be used with stdin"), and `stdenvNative' doesn't provide it. # "-i may not be used with stdin"), and `stdenvNative' doesn't provide it.
++ (optional hostPlatform.isDarwin gnused) ++ (optional hostPlatform.isDarwin gnused)
++ (optional hostPlatform.isDarwin binutils) ++ (optional hostPlatform.isDarwin targetPackages.stdenv.cc.bintools)
; ;
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl"; NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, noSysDirs { stdenv, targetPackages, fetchurl, noSysDirs
, langC ? true, langCC ? true, langFortran ? false , langC ? true, langCC ? true, langFortran ? false
, langObjC ? targetPlatform.isDarwin , langObjC ? targetPlatform.isDarwin
, langObjCpp ? targetPlatform.isDarwin , langObjCpp ? targetPlatform.isDarwin
@ -31,7 +31,6 @@
, libpthread ? null, libpthreadCross ? null # required for GNU/Hurd , libpthread ? null, libpthreadCross ? null # required for GNU/Hurd
, stripped ? true , stripped ? true
, gnused ? null , gnused ? null
, binutils ? null
, cloog # unused; just for compat with gcc4, as we override the parameter on some places , cloog # unused; just for compat with gcc4, as we override the parameter on some places
, darwin ? null , darwin ? null
, buildPlatform, hostPlatform, targetPlatform , buildPlatform, hostPlatform, targetPlatform
@ -50,7 +49,7 @@ assert libelf != null -> zlib != null;
assert hostPlatform.isDarwin -> gnused != null; assert hostPlatform.isDarwin -> gnused != null;
# Need c++filt on darwin # Need c++filt on darwin
assert hostPlatform.isDarwin -> binutils != null; assert hostPlatform.isDarwin -> targetPackages.stdenv.cc.bintools or null != null;
# The go frontend is written in c++ # The go frontend is written in c++
assert langGo -> langCC; assert langGo -> langCC;
@ -145,8 +144,8 @@ let version = "6.4.0";
withFloat + withFloat +
withMode + withMode +
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
" --with-as=${binutils}/bin/${targetPlatform.config}-as" + " --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
" --with-ld=${binutils}/bin/${targetPlatform.config}-ld" + " --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
(if crossMingw && crossStageStatic then (if crossMingw && crossStageStatic then
" --with-headers=${libcCross}/include" + " --with-headers=${libcCross}/include" +
" --with-gcc" + " --with-gcc" +
@ -309,14 +308,14 @@ stdenv.mkDerivation ({
++ (optional (zlib != null) zlib) ++ (optional (zlib != null) zlib)
++ (optionals langJava [ boehmgc zip unzip ]) ++ (optionals langJava [ boehmgc zip unzip ])
++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs)) ++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs))
++ (optionals (targetPlatform != hostPlatform) [binutils]) ++ (optionals (targetPlatform != hostPlatform) [targetPackages.stdenv.cc.bintools])
++ (optionals langAda [gnatboot]) ++ (optionals langAda [gnatboot])
++ (optionals langVhdl [gnat]) ++ (optionals langVhdl [gnat])
# The builder relies on GNU sed (for instance, Darwin's `sed' fails with # The builder relies on GNU sed (for instance, Darwin's `sed' fails with
# "-i may not be used with stdin"), and `stdenvNative' doesn't provide it. # "-i may not be used with stdin"), and `stdenvNative' doesn't provide it.
++ (optional hostPlatform.isDarwin gnused) ++ (optional hostPlatform.isDarwin gnused)
++ (optional hostPlatform.isDarwin binutils) ++ (optional hostPlatform.isDarwin targetPackages.stdenv.cc.bintools)
; ;
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl"; NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, noSysDirs { stdenv, targetPackages, fetchurl, noSysDirs
, langC ? true, langCC ? true, langFortran ? false , langC ? true, langCC ? true, langFortran ? false
, langObjC ? targetPlatform.isDarwin , langObjC ? targetPlatform.isDarwin
, langObjCpp ? targetPlatform.isDarwin , langObjCpp ? targetPlatform.isDarwin
@ -31,7 +31,6 @@
, libpthread ? null, libpthreadCross ? null # required for GNU/Hurd , libpthread ? null, libpthreadCross ? null # required for GNU/Hurd
, stripped ? true , stripped ? true
, gnused ? null , gnused ? null
, binutils ? null
, cloog # unused; just for compat with gcc4, as we override the parameter on some places , cloog # unused; just for compat with gcc4, as we override the parameter on some places
, darwin ? null , darwin ? null
, flex ? null , flex ? null
@ -51,7 +50,7 @@ assert libelf != null -> zlib != null;
assert hostPlatform.isDarwin -> gnused != null; assert hostPlatform.isDarwin -> gnused != null;
# Need c++filt on darwin # Need c++filt on darwin
assert hostPlatform.isDarwin -> binutils != null; assert hostPlatform.isDarwin -> targetPackages.stdenv.cc.bintools or null != null;
# The go frontend is written in c++ # The go frontend is written in c++
assert langGo -> langCC; assert langGo -> langCC;
@ -144,8 +143,8 @@ let version = "7.2.0";
withFloat + withFloat +
withMode + withMode +
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
" --with-as=${binutils}/bin/${targetPlatform.config}-as" + " --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
" --with-ld=${binutils}/bin/${targetPlatform.config}-ld" + " --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
(if crossMingw && crossStageStatic then (if crossMingw && crossStageStatic then
" --with-headers=${libcCross}/include" + " --with-headers=${libcCross}/include" +
" --with-gcc" + " --with-gcc" +
@ -308,14 +307,14 @@ stdenv.mkDerivation ({
++ (optional (zlib != null) zlib) ++ (optional (zlib != null) zlib)
++ (optionals langJava [ boehmgc zip unzip ]) ++ (optionals langJava [ boehmgc zip unzip ])
++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs)) ++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs))
++ (optionals (targetPlatform != hostPlatform) [binutils]) ++ (optionals (targetPlatform != hostPlatform) [targetPackages.stdenv.cc.bintools])
++ (optionals langAda [gnatboot]) ++ (optionals langAda [gnatboot])
++ (optionals langVhdl [gnat]) ++ (optionals langVhdl [gnat])
# The builder relies on GNU sed (for instance, Darwin's `sed' fails with # The builder relies on GNU sed (for instance, Darwin's `sed' fails with
# "-i may not be used with stdin"), and `stdenvNative' doesn't provide it. # "-i may not be used with stdin"), and `stdenvNative' doesn't provide it.
++ (optional hostPlatform.isDarwin gnused) ++ (optional hostPlatform.isDarwin gnused)
++ (optional hostPlatform.isDarwin binutils) ++ (optional hostPlatform.isDarwin targetPackages.stdenv.cc.bintools)
; ;
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl"; NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, noSysDirs { stdenv, targetPackages, fetchurl, noSysDirs
, langC ? true, langCC ? true, langFortran ? false , langC ? true, langCC ? true, langFortran ? false
, langObjC ? targetPlatform.isDarwin , langObjC ? targetPlatform.isDarwin
, langObjCpp ? targetPlatform.isDarwin , langObjCpp ? targetPlatform.isDarwin
@ -31,7 +31,6 @@
, libpthread ? null, libpthreadCross ? null # required for GNU/Hurd , libpthread ? null, libpthreadCross ? null # required for GNU/Hurd
, stripped ? true , stripped ? true
, gnused ? null , gnused ? null
, binutils ? null
, cloog # unused; just for compat with gcc4, as we override the parameter on some places , cloog # unused; just for compat with gcc4, as we override the parameter on some places
, darwin ? null , darwin ? null
, flex ? null , flex ? null
@ -51,7 +50,7 @@ assert libelf != null -> zlib != null;
assert hostPlatform.isDarwin -> gnused != null; assert hostPlatform.isDarwin -> gnused != null;
# Need c++filt on darwin # Need c++filt on darwin
assert hostPlatform.isDarwin -> binutils != null; assert hostPlatform.isDarwin -> targetPackages.stdenv.cc.bintools or null != null;
# The go frontend is written in c++ # The go frontend is written in c++
assert langGo -> langCC; assert langGo -> langCC;
@ -144,8 +143,8 @@ let version = "7-20170409";
withFloat + withFloat +
withMode + withMode +
# Ensure that -print-prog-name is able to find the correct programs. # Ensure that -print-prog-name is able to find the correct programs.
" --with-as=${binutils}/bin/${targetPlatform.config}-as" + " --with-as=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-as" +
" --with-ld=${binutils}/bin/${targetPlatform.config}-ld" + " --with-ld=${targetPackages.stdenv.cc.bintools}/bin/${targetPlatform.config}-ld" +
(if crossMingw && crossStageStatic then (if crossMingw && crossStageStatic then
" --with-headers=${libcCross}/include" + " --with-headers=${libcCross}/include" +
" --with-gcc" + " --with-gcc" +
@ -295,14 +294,14 @@ stdenv.mkDerivation ({
++ (optional (zlib != null) zlib) ++ (optional (zlib != null) zlib)
++ (optionals langJava [ boehmgc zip unzip ]) ++ (optionals langJava [ boehmgc zip unzip ])
++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs)) ++ (optionals javaAwtGtk ([ gtk2 libart_lgpl ] ++ xlibs))
++ (optionals (targetPlatform != hostPlatform) [binutils]) ++ (optionals (targetPlatform != hostPlatform) [targetPackages.stdenv.cc.bintools])
++ (optionals langAda [gnatboot]) ++ (optionals langAda [gnatboot])
++ (optionals langVhdl [gnat]) ++ (optionals langVhdl [gnat])
# The builder relies on GNU sed (for instance, Darwin's `sed' fails with # The builder relies on GNU sed (for instance, Darwin's `sed' fails with
# "-i may not be used with stdin"), and `stdenvNative' doesn't provide it. # "-i may not be used with stdin"), and `stdenvNative' doesn't provide it.
++ (optional hostPlatform.isDarwin gnused) ++ (optional hostPlatform.isDarwin gnused)
++ (optional hostPlatform.isDarwin binutils) ++ (optional hostPlatform.isDarwin targetPackages.stdenv.cc.bintools)
; ;
NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl"; NIX_LDFLAGS = stdenv.lib.optionalString hostPlatform.isSunOS "-lm -ldl";

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, fetchpatch, bootPkgs, perl, ncurses, libiconv, binutils, coreutils { stdenv, fetchurl, fetchpatch, bootPkgs, perl, ncurses, libiconv, targetPackages, coreutils
, libxml2, libxslt, docbook_xsl, docbook_xml_dtd_45, docbook_xml_dtd_42, hscolour , libxml2, libxslt, docbook_xsl, docbook_xml_dtd_45, docbook_xml_dtd_42, hscolour
# If enabled GHC will be build with the GPL-free but slower integer-simple # If enabled GHC will be build with the GPL-free but slower integer-simple
@ -70,7 +70,7 @@ stdenv.mkDerivation rec {
for i in "$out/bin/"*; do for i in "$out/bin/"*; do
test ! -h $i || continue test ! -h $i || continue
egrep --quiet '^#!' <(head -n 1 $i) || continue egrep --quiet '^#!' <(head -n 1 $i) || continue
sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ binutils coreutils ]}"' $i sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ targetPackages.stdenv.cc.bintools coreutils ]}"' $i
done done
''; '';

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, fetchpatch, bootPkgs, perl, ncurses, libiconv, binutils, coreutils { stdenv, fetchurl, fetchpatch, bootPkgs, perl, ncurses, libiconv, targetPackages, coreutils
, libxml2, libxslt, docbook_xsl, docbook_xml_dtd_45, docbook_xml_dtd_42, hscolour , libxml2, libxslt, docbook_xsl, docbook_xml_dtd_45, docbook_xml_dtd_42, hscolour
# If enabled GHC will be build with the GPL-free but slower integer-simple # If enabled GHC will be build with the GPL-free but slower integer-simple
@ -68,7 +68,7 @@ stdenv.mkDerivation rec {
for i in "$out/bin/"*; do for i in "$out/bin/"*; do
test ! -h $i || continue test ! -h $i || continue
egrep --quiet '^#!' <(head -n 1 $i) || continue egrep --quiet '^#!' <(head -n 1 $i) || continue
sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ binutils coreutils ]}"' $i sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ targetPackages.stdenv.cc.bintools coreutils ]}"' $i
done done
''; '';

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, ghc, perl, ncurses, binutils, libiconv { stdenv, fetchurl, ghc, perl, ncurses, libiconv
# If enabled GHC will be build with the GPL-free but slower integer-simple # If enabled GHC will be build with the GPL-free but slower integer-simple
# library instead of the faster but GPLed integer-gmp library. # library instead of the faster but GPLed integer-gmp library.

View file

@ -1,4 +1,4 @@
{ stdenv, lib, fetchurl, fetchpatch, bootPkgs, perl, ncurses, libiconv, binutils, coreutils { stdenv, lib, fetchurl, fetchpatch, bootPkgs, perl, ncurses, libiconv, targetPackages, coreutils
, hscolour, patchutils, sphinx , hscolour, patchutils, sphinx
# If enabled GHC will be build with the GPL-free but slower integer-simple # If enabled GHC will be build with the GPL-free but slower integer-simple
@ -65,7 +65,7 @@ stdenv.mkDerivation rec {
for i in "$out/bin/"*; do for i in "$out/bin/"*; do
test ! -h $i || continue test ! -h $i || continue
egrep --quiet '^#!' <(head -n 1 $i) || continue egrep --quiet '^#!' <(head -n 1 $i) || continue
sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ binutils coreutils ]}"' $i sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ targetPackages.stdenv.cc.bintools coreutils ]}"' $i
done done
''; '';

View file

@ -1,4 +1,4 @@
{ stdenv, lib, fetchurl, bootPkgs, perl, ncurses, libiconv, binutils, coreutils { stdenv, lib, fetchurl, bootPkgs, perl, ncurses, libiconv, targetPackages, coreutils
, autoconf, automake, happy, alex, python3, sphinx, hscolour , autoconf, automake, happy, alex, python3, sphinx, hscolour
, buildPlatform, targetPlatform , selfPkgs, cross ? null , buildPlatform, targetPlatform , selfPkgs, cross ? null
@ -66,7 +66,7 @@ in stdenv.mkDerivation (rec {
for i in "$out/bin/"*; do for i in "$out/bin/"*; do
test ! -h $i || continue test ! -h $i || continue
egrep --quiet '^#!' <(head -n 1 $i) || continue egrep --quiet '^#!' <(head -n 1 $i) || continue
sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ binutils coreutils ]}"' $i sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ targetPackages.stdenv.cc.bintools coreutils ]}"' $i
done done
''; '';
@ -97,23 +97,23 @@ in stdenv.mkDerivation (rec {
configureFlags = [ configureFlags = [
"CC=${stdenv.ccCross}/bin/${cross.config}-cc" "CC=${stdenv.ccCross}/bin/${cross.config}-cc"
"LD=${stdenv.binutils}/bin/${cross.config}-ld" "LD=${targetPackages.stdenv.cc.bintools}/bin/${cross.config}-ld"
"AR=${stdenv.binutils}/bin/${cross.config}-ar" "AR=${targetPackages.stdenv.cc.bintools}/bin/${cross.config}-ar"
"NM=${stdenv.binutils}/bin/${cross.config}-nm" "NM=${targetPackages.stdenv.cc.bintools}/bin/${cross.config}-nm"
"RANLIB=${stdenv.binutils}/bin/${cross.config}-ranlib" "RANLIB=${targetPackages.stdenv.cc.bintools}/bin/${cross.config}-ranlib"
"--target=${cross.config}" "--target=${cross.config}"
"--enable-bootstrap-with-devel-snapshot" "--enable-bootstrap-with-devel-snapshot"
] ++ ] ++
# fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/ # fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/
lib.optional (cross.config or null == "aarch64-apple-darwin14") "--disable-large-address-space"; lib.optional (cross.config or null == "aarch64-apple-darwin14") "--disable-large-address-space";
buildInputs = commonBuildInputs ++ [ stdenv.ccCross stdenv.binutils ]; buildInputs = commonBuildInputs ++ [ stdenv.ccCross stdenv.targetPackages.stdenv.cc.bintools ];
dontSetConfigureCross = true; dontSetConfigureCross = true;
passthru = { passthru = {
inherit bootPkgs cross; inherit bootPkgs cross;
cc = "${stdenv.ccCross}/bin/${cross.config}-cc"; cc = "${stdenv.ccCross}/bin/${cross.config}-cc";
ld = "${stdenv.binutils}/bin/${cross.config}-ld"; ld = "${stdenv.targetPackages.stdenv.cc.bintools}/bin/${cross.config}-ld";
}; };
}) })

View file

@ -1,4 +1,4 @@
{ stdenv, lib, fetchgit, bootPkgs, perl, ncurses, libiconv, binutils, coreutils { stdenv, lib, fetchgit, bootPkgs, perl, ncurses, libiconv, targetPackages, coreutils
, autoconf, automake, happy, alex, python3, buildPlatform, targetPlatform , autoconf, automake, happy, alex, python3, buildPlatform, targetPlatform
, selfPkgs, cross ? null , selfPkgs, cross ? null
@ -71,7 +71,7 @@ in stdenv.mkDerivation (rec {
for i in "$out/bin/"*; do for i in "$out/bin/"*; do
test ! -h $i || continue test ! -h $i || continue
egrep --quiet '^#!' <(head -n 1 $i) || continue egrep --quiet '^#!' <(head -n 1 $i) || continue
sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ binutils coreutils ]}"' $i sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ targetPackages.stdenv.cc.bintools coreutils ]}"' $i
done done
''; '';

View file

@ -1,4 +1,4 @@
{ stdenv, fetchgit, bootPkgs, perl, gmp, ncurses, binutils, autoconf, alex, happy, makeStaticLibraries { stdenv, fetchgit, bootPkgs, perl, gmp, ncurses, targetPackages, autoconf, alex, happy, makeStaticLibraries
, hscolour, xen, automake, gcc, git, zlib, libtool, enableIntegerSimple ? false , hscolour, xen, automake, gcc, git, zlib, libtool, enableIntegerSimple ? false
}: }:
@ -17,14 +17,14 @@ stdenv.mkDerivation rec {
sed -i '305 d' Makefile sed -i '305 d' Makefile
sed -i '309,439 d' Makefile # Removes RPM packaging sed -i '309,439 d' Makefile # Removes RPM packaging
sed -i '20 d' src/scripts/halvm-cabal.in sed -i '20 d' src/scripts/halvm-cabal.in
sed -ie 's|ld |${binutils}/bin/ld |g' src/scripts/ldkernel.in sed -ie 's|ld |${targetPackages.stdenv.cc.bintools}/bin/ld |g' src/scripts/ldkernel.in
''; '';
configureFlags = stdenv.lib.optional (!enableIntegerSimple) [ "--enable-gmp" ]; configureFlags = stdenv.lib.optional (!enableIntegerSimple) [ "--enable-gmp" ];
propagatedNativeBuildInputs = [ alex happy ]; propagatedNativeBuildInputs = [ alex happy ];
buildInputs = buildInputs =
let haskellPkgs = [ alex happy bootPkgs.hscolour bootPkgs.cabal-install bootPkgs.haddock bootPkgs.hpc let haskellPkgs = [ alex happy bootPkgs.hscolour bootPkgs.cabal-install bootPkgs.haddock bootPkgs.hpc
]; in [ bootPkgs.ghc ]; in [ bootPkgs.ghc
automake perl git binutils automake perl git targetPackages.stdenv.cc.bintools
autoconf xen zlib ncurses.dev autoconf xen zlib ncurses.dev
libtool gmp ] ++ haskellPkgs; libtool gmp ] ++ haskellPkgs;
preConfigure = '' preConfigure = ''
@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
inherit bootPkgs; inherit bootPkgs;
cross.config = "halvm"; cross.config = "halvm";
cc = "${gcc}/bin/gcc"; cc = "${gcc}/bin/gcc";
ld = "${binutils}/bin/ld"; ld = "${targetPackages.stdenv.cc.bintools}/bin/ld";
}; };
meta = { meta = {

View file

@ -1,5 +1,6 @@
{ stdenv, fetchurl, fetchgit, fetchzip, file, python2, tzdata, procps { stdenv, targetPackages
, llvm, jemalloc, ncurses, darwin, binutils, rustPlatform, git, cmake, curl , fetchurl, fetchgit, fetchzip, file, python2, tzdata, procps
, llvm, jemalloc, ncurses, darwin, rustPlatform, git, cmake, curl
, which, libffi, gdb , which, libffi, gdb
, version , version
, forceBundledLLVM ? false , forceBundledLLVM ? false
@ -49,7 +50,7 @@ stdenv.mkDerivation {
++ [ "--enable-local-rust" "--local-rust-root=${rustPlatform.rust.rustc}" "--enable-rpath" ] ++ [ "--enable-local-rust" "--local-rust-root=${rustPlatform.rust.rustc}" "--enable-rpath" ]
++ [ "--enable-vendor" "--disable-locked-deps" ] ++ [ "--enable-vendor" "--disable-locked-deps" ]
# ++ [ "--jemalloc-root=${jemalloc}/lib" # ++ [ "--jemalloc-root=${jemalloc}/lib"
++ [ "--default-linker=${stdenv.cc}/bin/cc" "--default-ar=${binutils.out}/bin/ar" ] ++ [ "--default-linker=${targetPackages.stdenv.cc}/bin/cc" "--default-ar=${targetPackages.stdenv.cc.bintools}/bin/ar" ]
++ optional (!forceBundledLLVM) [ "--enable-llvm-link-shared" ] ++ optional (!forceBundledLLVM) [ "--enable-llvm-link-shared" ]
++ optional (stdenv.cc.cc ? isClang) "--enable-clang" ++ optional (stdenv.cc.cc ? isClang) "--enable-clang"
++ optional (targets != []) "--target=${target}" ++ optional (targets != []) "--target=${target}"

View file

@ -1,4 +1,5 @@
{ stdenv { stdenv
, targetPackages
, cmake , cmake
, coreutils , coreutils
, glibc , glibc
@ -26,7 +27,6 @@
, rsync , rsync
, git , git
, libgit2 , libgit2
, binutils
, fetchFromGitHub , fetchFromGitHub
, paxctl , paxctl
, findutils , findutils
@ -250,7 +250,7 @@ stdenv.mkDerivation rec {
# TODO: Use wrappers to get these on the PATH for swift tools, instead # TODO: Use wrappers to get these on the PATH for swift tools, instead
ln -s ${clang}/bin/* $out/bin/ ln -s ${clang}/bin/* $out/bin/
ln -s ${binutils}/bin/ar $out/bin/ar ln -s ${targetPackages.stdenv.cc.bintools}/bin/ar $out/bin/ar
''; '';
# Hack to avoid TMPDIR in RPATHs. # Hack to avoid TMPDIR in RPATHs.

View file

@ -1,5 +1,7 @@
{ fetchgit, pkgconfig, gettext, runCommand, makeWrapper { fetchgit, pkgconfig, gettext, runCommand, makeWrapper
, elfutils, kernel, gnumake, python2, pythonPackages, binutils }: , elfutils, kernel, gnumake, python2, pythonPackages
}:
let let
## fetchgit info ## fetchgit info
url = git://sourceware.org/git/systemtap.git; url = git://sourceware.org/git/systemtap.git;
@ -55,5 +57,5 @@ in runCommand "systemtap-${kernel.version}-${version}" {
rm $out/bin/stap rm $out/bin/stap
makeWrapper $stapBuild/bin/stap $out/bin/stap \ makeWrapper $stapBuild/bin/stap $out/bin/stap \
--add-flags "-r $kernelBuildDir" \ --add-flags "-r $kernelBuildDir" \
--prefix PATH : ${lib.makeBinPath [ stdenv.cc.cc binutils elfutils gnumake ]} --prefix PATH : ${lib.makeBinPath [ stdenv.cc.cc stdenv.cc.bintools elfutils gnumake ]}
'' ''

View file

@ -1,4 +1,4 @@
{ stdenv, fetchurl, SDL, ncurses, libtcod, binutils }: { stdenv, fetchurl, SDL, ncurses, libtcod }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "brogue-${version}"; name = "brogue-${version}";

View file

@ -1,4 +1,4 @@
{ stdenv, steamArch, fetchurl, writeText, python2, dpkg, binutils }: { stdenv, steamArch, fetchurl, writeText, python2, dpkg }:
let input = builtins.getAttr steamArch (import ./runtime-generated.nix { inherit fetchurl; }); let input = builtins.getAttr steamArch (import ./runtime-generated.nix { inherit fetchurl; });
@ -7,7 +7,7 @@ let input = builtins.getAttr steamArch (import ./runtime-generated.nix { inherit
in stdenv.mkDerivation { in stdenv.mkDerivation {
name = "steam-runtime-2016-08-13"; name = "steam-runtime-2016-08-13";
nativeBuildInputs = [ python2 dpkg binutils ]; nativeBuildInputs = [ python2 dpkg stdenv.cc.bintools ];
buildCommand = '' buildCommand = ''
mkdir -p $out mkdir -p $out

View file

@ -1,6 +1,6 @@
{ stdenv, pkgs, lib, fetchurl, fetchgit, fetchsvn, fetchpatch, { stdenv, pkgs, lib, fetchurl, fetchgit, fetchsvn, fetchpatch,
jansson, libxml2, libxslt, ncurses, openssl, sqlite, jansson, libxml2, libxslt, ncurses, openssl, sqlite,
utillinux, dmidecode, libuuid, binutils, newt, utillinux, dmidecode, libuuid, newt,
lua, speex, lua, speex,
srtp, wget, curl srtp, wget, curl
}: }:
@ -10,7 +10,7 @@ let
inherit version; inherit version;
name = "asterisk-${version}"; name = "asterisk-${version}";
buildInputs = [ jansson libxml2 libxslt ncurses openssl sqlite utillinux dmidecode libuuid binutils newt lua speex srtp wget curl ]; buildInputs = [ jansson libxml2 libxslt ncurses openssl sqlite utillinux dmidecode libuuid newt lua speex srtp wget curl ];
patches = [ patches = [
# We want the Makefile to install the default /var skeleton # We want the Makefile to install the default /var skeleton

View file

@ -47,13 +47,13 @@ stageFuns: let
same as same as
let let
f_-1 = lnul; f_-1 = lnul f_0;
f_0 = op f_-1 x_0 f_1; f_0 = op f_-1 x_0 f_1;
f_1 = op f_0 x_1 f_2; f_1 = op f_0 x_1 f_2;
f_2 = op f_1 x_2 f_3; f_2 = op f_1 x_2 f_3;
... ...
f_n = op f_n-1 x_n f_n+1; f_n = op f_n-1 x_n f_n+1;
f_n+1 = rnul; f_n+1 = rnul f_n;
in in
f_0 f_0
*/ */
@ -62,13 +62,15 @@ stageFuns: let
len = builtins.length list; len = builtins.length list;
go = pred: n: go = pred: n:
if n == len if n == len
then rnul then rnul pred
else let else let
# Note the cycle -- call-by-need ensures finite fold. # Note the cycle -- call-by-need ensures finite fold.
cur = op pred (builtins.elemAt list n) succ; cur = op pred (builtins.elemAt list n) succ;
succ = go cur (n + 1); succ = go cur (n + 1);
in cur; in cur;
in go lnul 0; lapp = lnul cur;
cur = go lapp 0;
in cur;
# Take the list and disallow custom overrides in all but the final stage, # Take the list and disallow custom overrides in all but the final stage,
# and allow it in the final flag. Only defaults this boolean field if it # and allow it in the final flag. Only defaults this boolean field if it
@ -98,7 +100,18 @@ stageFuns: let
then args' then args'
else allPackages ((builtins.removeAttrs args' ["selfBuild"]) // { else allPackages ((builtins.removeAttrs args' ["selfBuild"]) // {
buildPackages = if args.selfBuild or true then null else prevStage; buildPackages = if args.selfBuild or true then null else prevStage;
__targetPackages = if args.selfBuild or true then null else nextStage; targetPackages = if args.selfBuild or true then null else nextStage;
}); });
in dfold folder {} {} withAllowCustomOverrides # This is a hack for resolving cross-compiled compilers' run-time
# deps. (That is, compilers that are themselves cross-compiled, as
# opposed to used to cross-compile packages.)
postStage = buildPackages: {
__raw = true;
stdenv.cc =
if buildPackages.stdenv.cc.isClang or false
then buildPackages.clang
else buildPackages.gcc;
};
in dfold folder postStage (_: {}) withAllowCustomOverrides

View file

@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
makeFlags = [ makeFlags = [
"INSTALL=install" "INSTALL=install"
"STRIP=strip" "STRIP=${stdenv.cc.bintools.prefix}strip"
"prefix=$(out)" "prefix=$(out)"
]; ];

View file

@ -13,8 +13,8 @@ stdenv.mkDerivation {
sha256 = "1zvadgsskmpm82id9mbj24a2lyq38qv768ixv7nmfjl3d4wr2biv"; sha256 = "1zvadgsskmpm82id9mbj24a2lyq38qv768ixv7nmfjl3d4wr2biv";
}; };
nativeBuildInputs = [ bison binutils gettext pkgconfig ]; nativeBuildInputs = [ bison gettext pkgconfig ];
buildInputs = [ glib gnutls gtk2 libxml2 zlib ]; buildInputs = [ binutils glib gnutls gtk2 libxml2 zlib ];
hardeningDisable = [ "bindnow" "fortify" "pic" "relro" ]; hardeningDisable = [ "bindnow" "fortify" "pic" "relro" ];

View file

@ -5537,7 +5537,7 @@ with pkgs;
# built with, and use, that cross-compiled libc. # built with, and use, that cross-compiled libc.
gccCrossStageStatic = assert targetPlatform != buildPlatform; let gccCrossStageStatic = assert targetPlatform != buildPlatform; let
libcCross1 = libcCross1 =
if targetPlatform.libc == "msvcrt" then __targetPackages.windows.mingw_w64_headers if targetPlatform.libc == "msvcrt" then targetPackages.windows.mingw_w64_headers
else if targetPlatform.libc == "libSystem" then darwin.xcode else if targetPlatform.libc == "libSystem" then darwin.xcode
else null; else null;
in wrapCCWith { in wrapCCWith {
@ -8338,9 +8338,9 @@ with pkgs;
libcCrossChooser = name: libcCrossChooser = name:
# libc is hackily often used from the previous stage. This `or` # libc is hackily often used from the previous stage. This `or`
# hack fixes the hack, *sigh*. # hack fixes the hack, *sigh*.
/**/ if name == "glibc" then __targetPackages.glibcCross or glibcCross /**/ if name == "glibc" then targetPackages.glibcCross or glibcCross
else if name == "uclibc" then uclibcCross else if name == "uclibc" then uclibcCross
else if name == "msvcrt" then __targetPackages.windows.mingw_w64 or windows.mingw_w64 else if name == "msvcrt" then targetPackages.windows.mingw_w64 or windows.mingw_w64
else if name == "libSystem" then darwin.xcode else if name == "libSystem" then darwin.xcode
else throw "Unknown libc"; else throw "Unknown libc";

View file

@ -67,7 +67,7 @@ let
if actuallySplice if actuallySplice
then splicer defaultBuildScope defaultRunScope // { then splicer defaultBuildScope defaultRunScope // {
# These should never be spliced under any circumstances # These should never be spliced under any circumstances
inherit (pkgs) pkgs buildPackages __targetPackages inherit (pkgs) pkgs buildPackages targetPackages
buildPlatform targetPlatform hostPlatform; buildPlatform targetPlatform hostPlatform;
} }
else pkgs // pkgs.xorg; else pkgs // pkgs.xorg;

View file

@ -26,13 +26,13 @@
# us to avoid expensive splicing. # us to avoid expensive splicing.
buildPackages buildPackages
, # The package set used in the next stage. If null, `__targetPackages` will be , # The package set used in the next stage. If null, `targetPackages` will be
# defined internally as the final produced package set itself, just like with # defined internally as the final produced package set itself, just like with
# `buildPackages` and for the same reasons. # `buildPackages` and for the same reasons.
# #
# THIS IS A HACK for compilers that don't think critically about cross- # THIS IS A HACK for compilers that don't think critically about cross-
# compilation. Please do *not* use unless you really know what you are doing. # compilation. Please do *not* use unless you really know what you are doing.
__targetPackages targetPackages
, # The standard environment to use for building packages. , # The standard environment to use for building packages.
stdenv stdenv
@ -72,7 +72,7 @@ let
stdenvBootstappingAndPlatforms = self: super: { stdenvBootstappingAndPlatforms = self: super: {
buildPackages = (if buildPackages == null then self else buildPackages) buildPackages = (if buildPackages == null then self else buildPackages)
// { recurseForDerivations = false; }; // { recurseForDerivations = false; };
__targetPackages = (if __targetPackages == null then self else __targetPackages) targetPackages = (if targetPackages == null then self else targetPackages)
// { recurseForDerivations = false; }; // { recurseForDerivations = false; };
inherit stdenv; inherit stdenv;
}; };