about summary refs log tree commit diff
path: root/pkgs/development/compilers/tinycc/default.nix
blob: 435747e12486770f8efcdb0b7024ff91c73f8ae7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{ stdenv, fetchurl, perl, texinfo }:

assert stdenv ? glibc;

let version = "0.9.24"; in
  stdenv.mkDerivation {
    name = "tinycc-${version}";

    src = fetchurl {
      url = "mirror://savannah/tinycc/tcc-${version}.tar.bz2";
      sha256 = "0yafz627ky0lhppa6g1mfmisnis745m39l15aixmmv5n383x9bi7";
    };

    buildInputs = [ perl texinfo ];

    patchPhase = ''
      substituteInPlace "texi2pod.pl" \
        --replace "/usr/bin/perl" "${perl}/bin/perl"

      # To produce executables, `tcc' needs to know where `crt*.o' are.
      sed -i "tcc.c" \
        -e's|define CONFIG_TCC_CRT_PREFIX.*$|define CONFIG_TCC_CRT_PREFIX "${stdenv.glibc}/lib"|g ;
           s|tcc_add_library_path(s, "/usr/lib");|tcc_add_library_path(s, "${stdenv.glibc}/lib");|g'

      # Tell it about the loader's location.
      sed -i "tccelf.c" \
        -e's|".*/ld-linux\([^"]\+\)"|"${stdenv.glibc}/lib/ld-linux\1"|g'
    '';

    postInstall = ''
      makeinfo --force tcc-doc.texi || true

      ensureDir "$out/share/info"
      mv tcc-doc.info* "$out/share/info"
    '';

    meta = {
      description = "TinyCC, a small, fast, and embeddable C compiler and interpreter";
      homepage = http://www.tinycc.org/;
      license = "LGPLv2+";
    };
  }