I’ll post my current solution, courtesy of this reply:
# flake.nix
{
inputs = {
utils.url = "github:numtide/flake-utils";
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs, utils }: utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
llvm = pkgs.llvmPackages_latest;
lib = nixpkgs.lib;
in
{
devShell = pkgs.mkShell rec {
nativeBuildInputs = [
pkgs.cmake
llvm.lldb
pkgs.clang-tools
llvm.clang
pkgs.gtest
pkgs.gnumake
pkgs.libpq
pkgs.libpq.pg_config
(pkgs.postgresql_18.withPackages
(ps: [
(ps.callPackage ./cao.nix { })
])
)
];
buildInputs = [
llvm.libcxx
];
CPATH = builtins.concatStringsSep ":" [
(lib.makeSearchPathOutput "dev" "include" [ llvm.libcxx ])
(lib.makeSearchPath "resource-root/include" [ llvm.clang ])
(lib.makeSearchPath "include/postgresql/server" [ pkgs.libpq.dev ])
];
#
# makeFlags = [
# "USE_PGXS=1"
# ];
shellHook = ''
# Augment the dynamic linker path
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${CPATH}"
export LIBCLANG_PATH="${pkgs.libclang.lib}/lib";
export PGDATA=./pg_data
'';
};
}
);
}
# cao.nix
{ postgresql
, postgresqlBuildExtension
,
}:
postgresqlBuildExtension (finalAttrs: {
name = "cao";
src = ./.;
makeFlags = [ "USE_PGXS=1" ];
meta = {
platforms = postgresql.meta.platforms;
};
})
# makefile
EXTENSION = cao
EXTVERSION = $(shell grep default_version $(EXTENSION).control | \
sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/")
PG_CONFIG = pg_config
MODULE_big = cao
OBJS = src/cao_main.o
# make sure
all: all-lib
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)