python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / pkgs / development / libraries / ada / gnatcoll / db.nix
blob6c87d63063facdc5f9be3fe3f030e7a155e47feb
1 { stdenv
2 , lib
3 , fetchFromGitHub
4 , gnat
5 , gprbuild
6 , which
7 , gnatcoll-core
8 , xmlada
9 , component
10 # components built by this derivation other components depend on
11 , gnatcoll-sql
12 , gnatcoll-sqlite
13 , gnatcoll-xref
14 # component specific extra dependencies
15 , gnatcoll-iconv
16 , gnatcoll-readline
17 , sqlite
18 , postgresql
21 let
22   libsFor = {
23     gnatcoll_db2ada = [
24       gnatcoll-sql
25     ];
26     gnatinspect = [
27       gnatcoll-sqlite
28       gnatcoll-readline
29       gnatcoll-xref
30     ];
31     postgres = [
32       gnatcoll-sql
33       postgresql
34     ];
35     sqlite = [
36       gnatcoll-sql
37       sqlite
38     ];
39     xref = [
40       gnatcoll-iconv
41       gnatcoll-sqlite
42     ];
43   };
45   # These components are just tools and don't install a library
46   onlyExecutable = builtins.elem component [
47     "gnatcoll_db2ada"
48     "gnatinspect"
49   ];
52 stdenv.mkDerivation rec {
53   pname = "gnatcoll-${component}";
54   version = "22.0.0";
56   src = fetchFromGitHub {
57     owner = "AdaCore";
58     repo = "gnatcoll-db";
59     rev = "v${version}";
60     sha256 = "1c39yg13faadg5mzpq3s83rn24npmpc4yjj0cvj7kqwpqxci4m55";
61   };
63   patches = lib.optionals (component == "sqlite") [
64     # fixes build of the static sqlite component
65     # when building against the system libsqlite3
66     # See https://github.com/AdaCore/gprbuild/issues/27#issuecomment-298444608
67     ./gnatcoll-db-sqlite-static-external.patch
68   ];
70   # Link executables dynamically unless specified by the platform,
71   # as we usually do in nixpkgs where possible
72   postPatch = lib.optionalString (!stdenv.hostPlatform.isStatic) ''
73     for f in gnatcoll_db2ada/Makefile gnatinspect/Makefile; do
74       substituteInPlace "$f" --replace "=static" "=relocatable"
75     done
76   '';
78   nativeBuildInputs = [
79     gnat
80     gprbuild
81     which
82   ];
84   # Propagate since GPRbuild needs to find referenced .gpr files
85   # and other libraries to link against when static linking is used.
86   # For executables this is of course not relevant and we can reduce
87   # the closure size dramatically
88   ${if onlyExecutable then "buildInputs" else "propagatedBuildInputs"} = [
89     gnatcoll-core
90   ] ++ libsFor."${component}" or [];
92   makeFlags = [
93     "-C" component
94     "PROCESSORS=$(NIX_BUILD_CORES)"
95     # confusingly, for gprbuild --target is autoconf --host
96     "TARGET=${stdenv.hostPlatform.config}"
97     "prefix=${placeholder "out"}"
98   ] ++ lib.optionals (component == "sqlite") [
99     # link against packaged, not vendored libsqlite3
100     "GNATCOLL_SQLITE=external"
101   ];
103   meta = with lib; {
104     description = "GNAT Components Collection - Database packages";
105     homepage = "https://github.com/AdaCore/gnatcoll-db";
106     license = licenses.gpl3Plus;
107     maintainers = [ maintainers.sternenseemann ];
108     platforms = platforms.all;
109   };