<commit_before>{ stdenv, fetchurl, m4, cxx ? true, withStatic ? false }:

let inherit (stdenv.lib) optional optionalString; in

let self = stdenv.mkDerivation rec {
  name = "gmp-6.1.2";

  src = fetchurl { # we need to use bz2, others aren't in bootstrapping stdenv
    urls = [ "mirror://gnu/gmp/${name}.tar.bz2" "ftp://ftp.gmplib.org/pub/${name}/${name}.tar.bz2" ];
    sha256 = "1clg7pbpk6qwxj5b2mw0pghzawp2qlm3jf9gdd8i6fl6yh2bnxaj";
  };

  #outputs TODO: split $cxx due to libstdc++ dependency
  # maybe let ghc use a version with *.so shared with rest of nixpkgs and *.a added
  # - see #5855 for related discussion
  outputs = [ "out" "dev" "info" ];
  passthru.static = self.out;

  nativeBuildInputs = [ m4 ];

  configureFlags =
    # Build a "fat binary", with routines for several sub-architectures
    # (x86), except on Solaris where some tests crash with "Memory fault".
    # See <http://hydra.nixos.org/build/2760931>, for instance.
    #
    # no darwin because gmp uses ASM that clang doesn't like
    optional (!stdenv.isSunOS) "--enable-fat"
    ++ (if cxx then [ "--enable-cxx"  ]
               else [ "--disable-cxx" ])
    ++ optional (cxx && stdenv.isDarwin) "CPPFLAGS=-fexceptions"
    ++ optional stdenv.isDarwin "ABI=64"
    ++ optional stdenv.is64bit "--with-pic"
    ;

  # The config.guess in GMP tries to runtime-detect various
  # ARM optimization flags via /proc/cpuinfo (and is also
  # broken on multicore CPUs). Avoid this impurity.
  preConfigure = optionalString stdenv.isArm ''
      configureFlagsArray+=("--build=$(./configfsf.guess)")
    '';

  doCheck = true;

  dontDisableStatic = withStatic;

  enableParallelBuilding = true;

  meta = with stdenv.lib; {
    homepage = "http://gmplib.org/";
    description = "GNU multiple precision arithmetic library";
    license = licenses.gpl3Plus;

    longDescription =
      '' GMP is a free library for arbitrary precision arithmetic, operating
         on signed integers, rational numbers, and floating point numbers.
         There is no practical limit to the precision except the ones implied
         by the available memory in the machine GMP runs on.  GMP has a rich
         set of functions, and the functions have a regular interface.
<commit_msg>gmp 6: Fix for cross<commit_after>{ stdenv, fetchurl, m4, cxx ? true
, buildPackages
, buildPlatform, hostPlatform
, withStatic ? false }:

let inherit (stdenv.lib) optional optionalString; in

let self = stdenv.mkDerivation rec {
  name = "gmp-6.1.2";

  src = fetchurl { # we need to use bz2, others aren't in bootstrapping stdenv
    urls = [ "mirror://gnu/gmp/${name}.tar.bz2" "ftp://ftp.gmplib.org/pub/${name}/${name}.tar.bz2" ];
    sha256 = "1clg7pbpk6qwxj5b2mw0pghzawp2qlm3jf9gdd8i6fl6yh2bnxaj";
  };

  #outputs TODO: split $cxx due to libstdc++ dependency
  # maybe let ghc use a version with *.so shared with rest of nixpkgs and *.a added
  # - see #5855 for related discussion
  outputs = [ "out" "dev" "info" ];
  passthru.static = self.out;

  nativeBuildInputs = [ m4 ]
    ++ stdenv.lib.optional (buildPlatform != hostPlatform) buildPackages.stdenv.cc;

  configureFlags =
    # Build a "fat binary", with routines for several sub-architectures
    # (x86), except on Solaris where some tests crash with "Memory fault".
    # See <http://hydra.nixos.org/build/2760931>, for instance.
    #
    # no darwin because gmp uses ASM that clang doesn't like
    optional (!stdenv.isSunOS) "--enable-fat"
    ++ (if cxx then [ "--enable-cxx"  ]
               else [ "--disable-cxx" ])
    ++ optional (cxx && stdenv.isDarwin) "CPPFLAGS=-fexceptions"
    ++ optional stdenv.isDarwin "ABI=64"
    ++ optional stdenv.is64bit "--with-pic"
    ;

  # The config.guess in GMP tries to runtime-detect various
  # ARM optimization flags via /proc/cpuinfo (and is also
  # broken on multicore CPUs). Avoid this impurity.
  preConfigure = optionalString stdenv.isArm ''
      configureFlagsArray+=("--build=$(./configfsf.guess)")
    '';

  doCheck = buildPlatform == hostPlatform;

  dontDisableStatic = withStatic;

  enableParallelBuilding = true;

  meta = with stdenv.lib; {
    homepage = "http://gmplib.org/";
    description = "GNU multiple precision arithmetic library";
    license = licenses.gpl3Plus;

    longDescription =
      '' GMP is a free library for arbitrary precision arithmetic, operating
         on signed integers, rational numbers, and floating point numbers.
         There is no practical limit to the precision except the ones implied
         by the available memory in the machine GMP runs on.  GMP has a rich
         set of functions, and the functions have a regular interface.

{'fraction_non_alphanumeric': 0.11149228130360206, 'fraction_numerical': 0.018224699828473412, 'mean_word_length': 3.1913746630727764, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7543004', 'n_tokens_mistral': 1590, 'n_tokens_neox': 1502, 'n_words': 472}