diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/sql/postgresql/ext/plv8')
-rw-r--r-- | nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/0001-build-Allow-using-V8-from-system.patch | 47 | ||||
-rw-r--r-- | nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/default.nix | 144 |
2 files changed, 191 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/0001-build-Allow-using-V8-from-system.patch b/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/0001-build-Allow-using-V8-from-system.patch new file mode 100644 index 000000000000..05f607911f20 --- /dev/null +++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/0001-build-Allow-using-V8-from-system.patch @@ -0,0 +1,47 @@ +diff --git a/Makefile b/Makefile +index 38879cc..6e78eeb 100644 +--- a/Makefile ++++ b/Makefile +@@ -20,6 +20,7 @@ OBJS = $(SRCS:.cc=.o) + MODULE_big = plv8-$(PLV8_VERSION) + EXTENSION = plv8 + PLV8_DATA = plv8.control plv8--$(PLV8_VERSION).sql ++USE_SYSTEM_V8 = 0 + + + # Platform detection +@@ -41,6 +42,7 @@ PGXS := $(shell $(PG_CONFIG) --pgxs) + PG_VERSION_NUM := $(shell cat `$(PG_CONFIG) --includedir-server`/pg_config*.h \ + | perl -ne 'print $$1 and exit if /PG_VERSION_NUM\s+(\d+)/') + ++ifeq ($(USE_SYSTEM_V8),0) + AUTOV8_DIR = build/v8 + AUTOV8_OUT = build/v8/out.gn/obj + AUTOV8_STATIC_LIBS = -lv8_libplatform -lv8_libbase +@@ -66,6 +68,7 @@ v8: + make -f Makefiles/Makefile.macos v8 + endif + endif ++endif + + # enable direct jsonb conversion by default + CCFLAGS += -DJSONB_DIRECT_CONVERSION +@@ -83,6 +86,7 @@ ifdef BIGINT_GRACEFUL + endif + + ++ifeq ($(USE_SYSTEM_V8),0) + # We're gonna build static link. Rip it out after include Makefile + SHLIB_LINK := $(filter-out -lv8, $(SHLIB_LINK)) + +@@ -101,6 +105,7 @@ else + SHLIB_LINK += -lrt -std=c++14 + endif + endif ++endif + + DATA = $(PLV8_DATA) + ifndef DISABLE_DIALECT +-- +2.37.3 + diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/default.nix new file mode 100644 index 000000000000..fa2f1b7ad2d8 --- /dev/null +++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/default.nix @@ -0,0 +1,144 @@ +{ stdenv +, lib +, fetchFromGitHub +, v8 +, perl +, postgresql +, jitSupport +# For test +, runCommand +, coreutils +, gnugrep +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "plv8"; + version = "3.1.10"; + + src = fetchFromGitHub { + owner = "plv8"; + repo = "plv8"; + rev = "v${finalAttrs.version}"; + hash = "sha256-g1A/XPC0dX2360Gzvmo9/FSQnM6Wt2K4eR0pH0p9fz4="; + }; + + patches = [ + # Allow building with system v8. + # https://github.com/plv8/plv8/pull/505 (rejected) + ./0001-build-Allow-using-V8-from-system.patch + ]; + + nativeBuildInputs = [ + perl + ]; + + buildInputs = [ + v8 + postgresql + ]; + + buildFlags = [ "all" ]; + + makeFlags = [ + # Nixpkgs build a v8 monolith instead of separate v8_libplatform. + "USE_SYSTEM_V8=1" + "SHLIB_LINK=-lv8" + "V8_OUTDIR=${v8}/lib" + ]; + + installFlags = [ + # PGXS only supports installing to postgresql prefix so we need to redirect this + "DESTDIR=${placeholder "out"}" + ]; + + # No configure script. + dontConfigure = true; + + postPatch = '' + patchShebangs ./generate_upgrade.sh + # https://github.com/plv8/plv8/pull/506 + substituteInPlace generate_upgrade.sh \ + --replace " 2.3.10 " " 2.3.10 2.3.11 2.3.12 2.3.13 2.3.14 2.3.15 " + ''; + + postInstall = '' + # Move the redirected to proper directory. + # There appear to be no references to the install directories + # so changing them does not cause issues. + mv "$out/nix/store"/*/* "$out" + rmdir "$out/nix/store"/* "$out/nix/store" "$out/nix" + ''; + + passthru = { + tests = + let + postgresqlWithSelf = postgresql.withPackages (_: [ + finalAttrs.finalPackage + ]); + in { + smoke = runCommand "plv8-smoke-test" {} '' + export PATH=${lib.makeBinPath [ + postgresqlWithSelf + coreutils + gnugrep + ]} + db="$PWD/testdb" + initdb "$db" + postgres -k "$db" -D "$db" & + pid="$!" + + for i in $(seq 1 100); do + if psql -h "$db" -d postgres -c "" 2>/dev/null; then + break + elif ! kill -0 "$pid"; then + exit 1 + else + sleep 0.1 + fi + done + + psql -h "$db" -d postgres -c 'CREATE EXTENSION plv8; DO $$ plv8.elog(NOTICE, plv8.version); $$ LANGUAGE plv8;' 2> "$out" + grep -q "${finalAttrs.version}" "$out" + kill -0 "$pid" + ''; + + regression = stdenv.mkDerivation { + name = "plv8-regression"; + inherit (finalAttrs) src patches nativeBuildInputs buildInputs dontConfigure; + + buildPhase = '' + runHook preBuild + + # The regression tests need to be run in the order specified in the Makefile. + echo -e "include Makefile\nprint_regress_files:\n\t@echo \$(REGRESS)" > Makefile.regress + REGRESS_TESTS=$(make -f Makefile.regress print_regress_files) + + ${postgresql}/lib/pgxs/src/test/regress/pg_regress \ + --bindir='${postgresqlWithSelf}/bin' \ + --temp-instance=regress-instance \ + --dbname=contrib_regression \ + $REGRESS_TESTS + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + touch "$out" + + runHook postInstall + ''; + }; + }; + }; + + meta = with lib; { + description = "V8 Engine Javascript Procedural Language add-on for PostgreSQL"; + homepage = "https://plv8.github.io/"; + maintainers = with maintainers; [ marsam ]; + platforms = [ "x86_64-linux" "aarch64-linux" ]; + license = licenses.postgresql; + broken = jitSupport; + }; +}) |