diff --git a/pkgs/tools/admin/pgadmin/default.nix b/pkgs/tools/admin/pgadmin/default.nix index 8f1af271341d..ab78cdeee48c 100644 --- a/pkgs/tools/admin/pgadmin/default.nix +++ b/pkgs/tools/admin/pgadmin/default.nix @@ -13,15 +13,17 @@ libtool, libpng, nasm, + cmake, pkg-config, stdenv, + srcOnly, server-mode ? true, }: let pname = "pgadmin"; version = "9.3"; - yarnHash = "sha256-75FwwQ67j0aTHGvD4YwAaR8CWV4u4KsuMghidbkgVsw="; + yarnHash = "sha256-T6RKWuAAoJgbzJKef4ioOoUDtoGM9s9BFqxFdy5EtyQ="; src = fetchFromGitHub { owner = "pgadmin-org"; @@ -30,6 +32,13 @@ let hash = "sha256-4uupF1dw6OE/briAI5PWiQ7h6RPx1sUqf8PB8cJsNSU="; }; + mozjpeg-bin = fetchFromGitHub { + owner = "imagemin"; + repo = "mozjpeg-bin"; + rev = "c0587fbc00b21ed8cad8bae499a0827baeaf7ffa"; + hash = "sha256-D/pXQBlIIyk7KAgxJ1gKqxYxtlfBbLzUSmYZbH659cA="; + }; + # keep the scope, as it is used throughout the derivation and tests # this also makes potential future overrides easier pythonPackages = python3.pkgs.overrideScope (final: prev: { }); @@ -51,6 +60,14 @@ pythonPackages.buildPythonApplication rec { inherit pname version src; offlineCache = yarn-berry_3.fetchYarnBerryDeps { + # mozjpeg fails to build on darwin due to a hardocded path + # this has been fixed upstream on master but no new version + # has been released. We therefore point yarn to upstream + # see https://github.com/imagemin/mozjpeg-bin/issues/64 + # and https://github.com/imagemin/mozjpeg-bin/issues/81 + patches = [ + ./mozjpeg.patch + ]; src = src + "/web"; hash = yarnHash; }; @@ -68,6 +85,11 @@ pythonPackages.buildPythonApplication rec { ]; postPatch = '' + # the patch needs to be executed inside the /web subfolder + # therefore it is included here and not in `patches` + cd web + patch -u yarn.lock ${./mozjpeg.patch} + cd .. # patching Makefile, so it doesn't try to build sphinx documentation here # (will do so later) substituteInPlace Makefile \ @@ -89,6 +111,8 @@ pythonPackages.buildPythonApplication rec { ''; dontYarnBerryInstallDeps = true; + env.YARN_ENABLE_SCRIPTS = "0"; + dontUseCmakeConfigure = true; preBuild = '' # Adapted from pkg/pip/build.sh @@ -117,6 +141,25 @@ pythonPackages.buildPythonApplication rec { export LD=$CC # https://github.com/imagemin/optipng-bin/issues/108 yarnBerryConfigHook ) + # mozjpeg vendored source isn't included in the checkout for yarn. If we copy it before the + # yarnConfigHook it will just get overwritten. So we first run the configHook without build, + # then copy the vendored source and then build the dependencies + # This has the disadvantage of repeating some of the yarnConfigHooks logic here + mkdir -p node_modules/mozjpeg/vendor/source + cp ${mozjpeg-bin}/vendor/source/mozjpeg.tar.gz node_modules/mozjpeg/vendor/source/ + ( + # https://github.com/mozilla/mozjpeg/issues/438 + substituteInPlace node_modules/mozjpeg/lib/install.js --replace-fail "cmake -DCMAKE" "cmake -DENABLE_STATIC=FALSE -DCMAKE" + substituteInPlace node_modules/mozjpeg/lib/install.js --replace-fail "cp cjpeg-static" "cp cjpeg" + export LD=$CC + export HOME=$(mktemp -d) + export YARN_ENABLE_SCRIPTS=1 + YARN_IGNORE_PATH=1 ${yarn-berry_3.yarn-berry-offline}/bin/yarn config set enableTelemetry false + YARN_IGNORE_PATH=1 ${yarn-berry_3.yarn-berry-offline}/bin/yarn config set enableGlobalCache false + export npm_config_nodedir="${srcOnly nodejs}" + export npm_config_node_gyp="${nodejs}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" + YARN_IGNORE_PATH=1 ${yarn-berry_3.yarn-berry-offline}/bin/yarn install --inline-builds + ) yarn webpacker cp -r * ../pip-build/pgadmin4 # save some disk space @@ -147,6 +190,7 @@ pythonPackages.buildPythonApplication rec { nodejs # for building mozjpeg2 + cmake autoconf automake libtool diff --git a/pkgs/tools/admin/pgadmin/mozjpeg.patch b/pkgs/tools/admin/pgadmin/mozjpeg.patch new file mode 100644 index 000000000000..dc73c7b4957a --- /dev/null +++ b/pkgs/tools/admin/pgadmin/mozjpeg.patch @@ -0,0 +1,45 @@ +diff --git a/yarn.lock b/yarn.lock +index fa189ef..54066a6 100644 +--- a/yarn.lock ++++ b/yarn.lock +@@ -7299,6 +7299,23 @@ __metadata: + languageName: node + linkType: hard + ++"execa@npm:^7.1.1": ++ version: 7.1.1 ++ resolution: "execa@npm:7.1.1" ++ dependencies: ++ cross-spawn: ^7.0.3 ++ get-stream: ^6.0.1 ++ human-signals: ^3.0.1 ++ is-stream: ^3.0.0 ++ merge-stream: ^2.0.0 ++ npm-run-path: ^5.1.0 ++ onetime: ^6.0.0 ++ signal-exit: ^3.0.7 ++ strip-final-newline: ^3.0.0 ++ checksum: 21fa46fc69314ace4068cf820142bdde5b643a5d89831c2c9349479c1555bff137a291b8e749e7efca36535e4e0a8c772c11008ca2e84d2cbd6ca141a3c8f937 ++ languageName: node ++ linkType: hard ++ + "executable@npm:^4.1.0": + version: 4.1.1 + resolution: "executable@npm:4.1.1" +@@ -11027,13 +11044,14 @@ __metadata: + + "mozjpeg@npm:^8.0.0": + version: 8.0.0 +- resolution: "mozjpeg@npm:8.0.0" ++ resolution: "mozjpeg@https://github.com/imagemin/mozjpeg-bin.git#commit=c0587fbc00b21ed8cad8bae499a0827baeaf7ffa" + dependencies: + bin-build: ^3.0.0 + bin-wrapper: ^4.0.0 ++ execa: ^7.1.1 + bin: + mozjpeg: cli.js +- checksum: cba27c2efbc21a48434da1c6c8d6886988432430f958315fc59ef9b52bc2d6ee597e19f1cf6aae0fd611d5b2a113561fe2e85ec30a1ccd55c007340c638eb557 ++ checksum: cba27c2efbc21a48434da1c6c8d6886988432430f958315fc59ef9b52bc2d6ee597e19f1cf6aae0fd611d5b2a113561fe2e85ec30a1ccd55c007340c638eb556 + languageName: node + linkType: hard +