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 "prefix=$(out)"
34 "PROCESSORS=$(NIX_BUILD_CORES)"
35 "ENABLE_SHARED=${if enableShared then "yes" else "no"}"
36 "GPR2_BUILD=release"
37 ]
38 ++ lib.optionals (gpr2kbdir != null) [
39 "GPR2KBDIR=${gpr2kbdir}"
40 ];
41
42 configurePhase = ''
43 runHook preConfigure
44 make setup "''${makeFlagsArray[@]}" $makeFlags
45 runHook postConfigure
46 '';
47
48 # fool make into thinking pregenerated targets are up to date
49 preBuild = lib.optionalString (gpr2kbdir == null) ''
50 touch .build/kb/{*.adb,*.ads,collect_kb}
51 '';
52
53 propagatedBuildInputs = [
54 xmlada
55 gnatcoll-gmp
56 gnatcoll-core
57 gnatcoll-iconv
58 ];
59
60 meta = with lib; {
61 description = "Framework for analyzing the GNAT Project (GPR) files";
62 homepage = "https://github.com/AdaCore/gpr";
63 license = with licenses; [
64 asl20
65 gpl3Only
66 ];
67 maintainers = with maintainers; [ heijligen ];
68 platforms = platforms.all;
69 # TODO(@sternenseemann): investigate failure with gnat 13
70 broken = lib.versionOlder gnat.version "14";
71 };
72}