about summary refs log tree commit diff
path: root/pkgs/development/compilers/dictu/default.nix
blob: fedf3deed62c4222f281c88bca6e51a2d42a109c (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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
{ stdenv
, lib
, fetchFromGitHub
, cmake
, sqlite
, httpSupport ? true, curl
, cliSupport ? true
, linenoiseSupport ? cliSupport, linenoise
, enableLTO ? stdenv.cc.isGNU
}:

assert enableLTO -> stdenv.cc.isGNU;

stdenv.mkDerivation rec {
  pname = "dictu";
  version = "0.25.0";

  src = fetchFromGitHub {
    owner = "dictu-lang";
    repo = pname;
    rev = "v${version}";
    sha256 = "sha256-Tahi2K8Q/KPc9MN7yWhkqp/MzXfzJzrGSsvnTCyI03U=";
  };

  nativeBuildInputs = [ cmake ];

  buildInputs = [
    sqlite
  ] ++ lib.optional httpSupport curl
  ++ lib.optional linenoiseSupport linenoise;

  patches = [
    ./0001-force-sqlite-to-be-found.patch
  ];

  postPatch = lib.optionalString (!enableLTO) ''
    sed -i src/CMakeLists.txt \
        -e 's/-flto/${lib.optionalString stdenv.cc.isGNU "-Wno-error=format-truncation"}/'
  '';

  cmakeFlags = [
    "-DBUILD_CLI=${if cliSupport then "ON" else "OFF"}"
    "-DDISABLE_HTTP=${if httpSupport then "OFF" else "ON"}"
    "-DDISABLE_LINENOISE=${if linenoiseSupport then "OFF" else "ON"}"
  ] ++ lib.optionals enableLTO [ # TODO: LTO with LLVM
    "-DCMAKE_AR=${stdenv.cc.cc}/bin/gcc-ar"
    "-DCMAKE_RANLIB=${stdenv.cc.cc}/bin/gcc-ranlib"
  ];

  postBuild = ''
    cd .. # move out of cmakeBuildDir
  '';

  doCheck = cliSupport;

  preCheck = ''
    sed -i tests/runTests.du \
        -e '/http/d'
    sed -i tests/path/realpath.du \
        -e 's/usr/build/g'
    sed -i tests/path/isDir.du \
        -e "s,/usr/bin,$PWD," \
        -e '/home/d'
  '';

  checkPhase = ''
    runHook preCheck
    ./dictu tests/runTests.du
  '';

  installPhase = ''
    mkdir -p $out
    cp -r src/include $out/include
    mkdir -p $out/lib
    cp build/src/libdictu_api* $out/lib
  '' + lib.optionalString cliSupport ''
    install -Dm755 dictu $out/bin/dictu
  '';

  meta = with lib; {
    description = "High-level dynamically typed, multi-paradigm, interpreted programming language";
    mainProgram = "dictu";
    homepage = "https://dictu-lang.com";
    license = licenses.mit;
    maintainers = with maintainers; [ luc65r ];
    platforms = platforms.all;
    broken = stdenv.hostPlatform.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/staging-next/dictu.x86_64-darwin
  };
}