1{
2 lib,
3 stdenv,
4 fetchurl,
5 gprbuild,
6 which,
7 gnat,
8 xmlada,
9 gnatcoll-core,
10 gnatcoll-iconv,
11 gnatcoll-gmp,
12 enableShared ? !stdenv.hostPlatform.isStatic,
13 # kb database source, if null assume it is pregenerated
14 gpr2kbdir ? null,
15}:
16
17stdenv.mkDerivation rec {
18 pname = "gpr2";
19 version = "25.0.0";
20
21 src = fetchurl {
22 url = "https://github.com/AdaCore/gpr/releases/download/v${version}/gpr2-with-gprconfig_kb-${lib.versions.majorMinor version}.tgz";
23 sha512 = "70fe0fcf541f6d3d90a34cab1638bbc0283dcd765c000406e0cfb73bae1817b30ddfe73f3672247a97c6b6bfc41900bc96a4440ca0c660f9c2f7b9d3cc8f8dcf";
24 };
25
26 nativeBuildInputs = [
27 which
28 gnat
29 gprbuild
30 ];
31
32 makeFlags =
33 [
34 "prefix=$(out)"
35 "PROCESSORS=$(NIX_BUILD_CORES)"
36 "ENABLE_SHARED=${if enableShared then "yes" else "no"}"
37 "GPR2_BUILD=release"
38 ]
39 ++ lib.optionals (gpr2kbdir != null) [
40 "GPR2KBDIR=${gpr2kbdir}"
41 ];
42
43 configurePhase = ''
44 runHook preConfigure
45 make setup "''${makeFlagsArray[@]}" $makeFlags
46 runHook postConfigure
47 '';
48
49 # fool make into thinking pregenerated targets are up to date
50 preBuild = lib.optionalString (gpr2kbdir == null) ''
51 touch .build/kb/{*.adb,*.ads,collect_kb}
52 '';
53
54 propagatedBuildInputs = [
55 xmlada
56 gnatcoll-gmp
57 gnatcoll-core
58 gnatcoll-iconv
59 ];
60
61 meta = with lib; {
62 description = "The framework for analyzing the GNAT Project (GPR) files";
63 homepage = "https://github.com/AdaCore/gpr";
64 license = with licenses; [
65 asl20
66 gpl3Only
67 ];
68 maintainers = with maintainers; [ heijligen ];
69 platforms = platforms.all;
70 # TODO(@sternenseemann): investigate failure with gnat 13
71 broken = lib.versionOlder gnat.version "14";
72 };
73}