{ lib, stdenv, version, buildPackages, targetPackages, texinfo, which, gettext, pkg-config ? null, gnused, patchelf, gmp, mpfr, libmpc, libucontext ? null, libxcrypt ? null, cloog ? null, isl ? null, zlib ? null, gnat-bootstrap ? null, flex ? null, boehmgc ? null, zip ? null, unzip ? null, gtk2 ? null, libart_lgpl ? null, perl ? null, xlibs ? null, langJava ? false, javaAwtGtk ? false, langAda ? false, langGo ? false, withoutTargetLibc ? null, threadsCross ? null, }: let inherit (lib) optionals; inherit (stdenv) buildPlatform hostPlatform targetPlatform; in { # same for all gcc's depsBuildBuild = [ buildPackages.stdenv.cc ]; nativeBuildInputs = [ texinfo which gettext ] ++ optionals (perl != null) [ perl ] ++ optionals javaAwtGtk [ pkg-config ] ++ optionals (with stdenv.targetPlatform; isVc4 || isRedox && flex != null) [ flex ] ++ optionals langAda [ gnat-bootstrap ] # 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. ++ optionals buildPlatform.isDarwin [ gnused ]; # For building runtime libs # same for all gcc's depsBuildTarget = ( if hostPlatform == buildPlatform then [ targetPackages.stdenv.cc.bintools # newly-built gcc will be used ] else assert targetPlatform == hostPlatform; [ # build != host == target stdenv.cc ] ) ++ optionals targetPlatform.isLinux [ patchelf ]; buildInputs = [ gmp mpfr libmpc ] ++ optionals (lib.versionAtLeast version "10") [ libxcrypt ] ++ [ targetPackages.stdenv.cc.bintools # For linking code at run-time ] ++ optionals (lib.versionOlder version "5" && cloog != null) [ cloog ] ++ optionals (isl != null) [ isl ] ++ optionals (zlib != null) [ zlib ] ++ optionals langJava [ boehmgc zip unzip ] ++ optionals javaAwtGtk ( [ gtk2 libart_lgpl ] ++ xlibs ) ++ optionals (langGo && stdenv.hostPlatform.isMusl) [ libucontext ]; # threadsCross.package after gcc6 so i assume its okay for 4.8 and 4.9 too depsTargetTarget = optionals ( !withoutTargetLibc && threadsCross != { } && threadsCross.package != null ) [ threadsCross.package ]; }