summaryrefslogtreecommitdiff
path: root/pkgs/development/ada-modules/gpr2/default.nix
blob: f984a0892f3f203c38e7ba298d3614179edc24ea (plain)
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
{
  lib,
  stdenv,
  fetchurl,
  gprbuild,
  which,
  gnat,
  xmlada,
  gnatcoll-core,
  gnatcoll-iconv,
  gnatcoll-gmp,
  enableShared ? !stdenv.hostPlatform.isStatic,
  # kb database source, if null assume it is pregenerated
  gpr2kbdir ? null,
}:

stdenv.mkDerivation rec {
  pname = "gpr2";
  version = "25.0.0";

  src = fetchurl {
    url = "https://github.com/AdaCore/gpr/releases/download/v${version}/gpr2-with-gprconfig_kb-${lib.versions.majorMinor version}.tgz";
    sha512 = "70fe0fcf541f6d3d90a34cab1638bbc0283dcd765c000406e0cfb73bae1817b30ddfe73f3672247a97c6b6bfc41900bc96a4440ca0c660f9c2f7b9d3cc8f8dcf";
  };

  nativeBuildInputs = [
    which
    gnat
    gprbuild
  ];

  makeFlags = [
    "prefix=$(out)"
    "PROCESSORS=$(NIX_BUILD_CORES)"
    "ENABLE_SHARED=${lib.boolToYesNo enableShared}"
    "GPR2_BUILD=release"
  ]
  ++ lib.optionals (gpr2kbdir != null) [
    "GPR2KBDIR=${gpr2kbdir}"
  ];

  configurePhase = ''
    runHook preConfigure
    make setup "''${makeFlagsArray[@]}" $makeFlags
    runHook postConfigure
  '';

  # fool make into thinking pregenerated targets are up to date
  preBuild = lib.optionalString (gpr2kbdir == null) ''
    touch .build/kb/{*.adb,*.ads,collect_kb}
  '';

  propagatedBuildInputs = [
    xmlada
    gnatcoll-gmp
    gnatcoll-core
    gnatcoll-iconv
  ];

  meta = {
    description = "Framework for analyzing the GNAT Project (GPR) files";
    homepage = "https://github.com/AdaCore/gpr";
    license = with lib.licenses; [
      asl20
      gpl3Only
    ];
    maintainers = with lib.maintainers; [ heijligen ];
    platforms = lib.platforms.all;
    # TODO(@sternenseemann): investigate failure with gnat 13
    broken = lib.versionOlder gnat.version "14";
  };
}