1{ lib, stdenv, bison, fetchFromGitHub, flex, perl, postgresql }:
2
3let
4 hashes = {
5 "15" = "sha256-1vmwoflbU3++PFDcsLt9gyLkuzMRGNCD7vWl7/6Q+SE=";
6 "14" = "sha256-w93Q499sZRk4q85A9yqKQjGUd9Pl8UL8K1D3W7mHRTU=";
7 "13" = "sha256-Sot7FR0oW7kWA680pNCMCmlflu4RfJTSWZn9mrXrpzw=";
8 "12" = "sha256-XezcXoHHLCD1/2OHmKhxome2pdjOsYAfZlpvOoU3aS4=";
9 };
10in
11stdenv.mkDerivation rec {
12 pname = "age";
13 version = "1.4.0-rc0";
14
15 src = fetchFromGitHub {
16 owner = "apache";
17 repo = "age";
18 rev = "PG${lib.versions.major postgresql.version}/v${builtins.replaceStrings ["."] ["_"] version}";
19 hash = hashes.${lib.versions.major postgresql.version} or (throw "Source for Age is not available for ${postgresql.version}");
20 };
21
22 buildInputs = [ postgresql ];
23
24 makeFlags = [
25 "BISON=${bison}/bin/bison"
26 "FLEX=${flex}/bin/flex"
27 "PERL=${perl}/bin/perl"
28 ];
29
30 installPhase = ''
31 install -D -t $out/lib *.so
32 install -D -t $out/share/postgresql/extension *.sql
33 install -D -t $out/share/postgresql/extension *.control
34 '';
35
36 passthru.tests = stdenv.mkDerivation {
37 inherit version src;
38
39 pname = "age-regression";
40
41 dontConfigure = true;
42
43 buildPhase = let
44 postgresqlAge = postgresql.withPackages (ps: [ ps.age ]);
45 in ''
46 # The regression tests need to be run in the order specified in the Makefile.
47 echo -e "include Makefile\nfiles:\n\t@echo \$(REGRESS)" > Makefile.regress
48 REGRESS_TESTS=$(make -f Makefile.regress files)
49
50 ${postgresql}/lib/pgxs/src/test/regress/pg_regress \
51 --inputdir=./ \
52 --bindir='${postgresqlAge}/bin' \
53 --encoding=UTF-8 \
54 --load-extension=age \
55 --inputdir=./regress --outputdir=./regress --temp-instance=./regress/instance \
56 --port=61958 --dbname=contrib_regression \
57 $REGRESS_TESTS
58 '';
59
60 installPhase = ''
61 touch $out
62 '';
63 };
64
65 meta = with lib; {
66 broken = !builtins.elem (versions.major postgresql.version) (builtins.attrNames hashes);
67 description = "A graph database extension for PostgreSQL";
68 homepage = "https://age.apache.org/";
69 changelog = "https://github.com/apache/age/raw/v${src.rev}/RELEASE";
70 maintainers = with maintainers; [ ];
71 platforms = postgresql.meta.platforms;
72 license = licenses.asl20;
73 };
74}