1{
2 buildEnv,
3 fetchFromGitHub,
4 lib,
5 nix-update-script,
6 pkg-config,
7 postgresql,
8 postgresqlBuildExtension,
9 postgresqlTestExtension,
10 R,
11 rPackages,
12}:
13
14postgresqlBuildExtension (finalAttrs: {
15 pname = "plr";
16 version = "8.4.8";
17
18 src = fetchFromGitHub {
19 owner = "postgres-plr";
20 repo = "plr";
21 tag = "REL${lib.replaceString "." "_" finalAttrs.version}";
22 hash = "sha256-FLL61HsZ6WaWBP9NqrJjhMFSVyVBIpVO0wv+kXMuAaU=";
23 };
24
25 nativeBuildInputs = [ pkg-config ];
26 buildInputs = [ R ];
27
28 makeFlags = [ "USE_PGXS=1" ];
29
30 passthru = {
31 updateScript = nix-update-script {
32 extraArgs = [ "--version-regex=^REL(\\d+)_(\\d+)_(\\d+)$" ];
33 };
34 withPackages =
35 f:
36 let
37 pkgs = f rPackages;
38 paths = lib.concatMapStringsSep ":" (pkg: "${pkg}/library") pkgs;
39 in
40 buildEnv {
41 name = "${finalAttrs.pname}-with-packages-${finalAttrs.version}";
42 paths = [ finalAttrs.finalPackage ];
43 passthru.wrapperArgs = [
44 ''--set R_LIBS_SITE "${paths}"''
45 ];
46 };
47 tests.extension = postgresqlTestExtension {
48 finalPackage = finalAttrs.finalPackage.withPackages (ps: [ ps.base64enc ]);
49 sql = ''
50 CREATE EXTENSION plr;
51 DO LANGUAGE plr $$
52 require('base64enc')
53 base64encode(1:100)
54 $$;
55 '';
56 };
57 };
58
59 meta = {
60 description = "PL/R - R Procedural Language for PostgreSQL";
61 homepage = "https://github.com/postgres-plr/plr";
62 changelog = "https://github.com/postgres-plr/plr/blob/${finalAttrs.src.rev}/changelog.md";
63 maintainers = with lib.maintainers; [ qoelet ];
64 platforms = postgresql.meta.platforms;
65 license = lib.licenses.gpl2Only;
66 };
67})