about summary refs log tree commit diff
path: root/pkgs/applications/editors/pulsar
diff options
context:
space:
mode:
authorCOLAMAroro <github@rondier.io>2023-04-17 11:59:28 +0200
committerCOLAMAroro <github@rondier.io>2023-04-17 18:33:00 +0200
commit20dde675235e1e58f08f1175fcb6d7e4bf49fa58 (patch)
tree0206226d3e8925b9407a15c5f93bee669396b1a3 /pkgs/applications/editors/pulsar
parent4c3edba85629ec304b5269e4b0ac7f26c433df23 (diff)
downloadnixlib-20dde675235e1e58f08f1175fcb6d7e4bf49fa58.tar
nixlib-20dde675235e1e58f08f1175fcb6d7e4bf49fa58.tar.gz
nixlib-20dde675235e1e58f08f1175fcb6d7e4bf49fa58.tar.bz2
nixlib-20dde675235e1e58f08f1175fcb6d7e4bf49fa58.tar.lz
nixlib-20dde675235e1e58f08f1175fcb6d7e4bf49fa58.tar.xz
nixlib-20dde675235e1e58f08f1175fcb6d7e4bf49fa58.tar.zst
nixlib-20dde675235e1e58f08f1175fcb6d7e4bf49fa58.zip
pulsar: 1.103.0 -> 1.104.0
List of changes in the build:
- Updates to release [1.104.0](https://github.com/pulsar-edit/pulsar/releases/tag/v1.104.0)
- Set the `pname` to small caps (fixes #225755)
- Unpacks/repacks the app.asar bundle to patch binaries for the missing libstdc++.so.6
  - Fixes non-starting Pulsar encountered on non NixOS devices
  - This requires adding asar (and Python3) as dependencies
- Removes the unused imports in the update script
- Made the update script CWD-independant
Diffstat (limited to 'pkgs/applications/editors/pulsar')
-rw-r--r--pkgs/applications/editors/pulsar/default.nix26
-rwxr-xr-xpkgs/applications/editors/pulsar/update.mjs8
2 files changed, 25 insertions, 9 deletions
diff --git a/pkgs/applications/editors/pulsar/default.nix b/pkgs/applications/editors/pulsar/default.nix
index 545cd95f6f55..85b28061e45d 100644
--- a/pkgs/applications/editors/pulsar/default.nix
+++ b/pkgs/applications/editors/pulsar/default.nix
@@ -17,23 +17,26 @@
 , makeDesktopItem
 , copyDesktopItems
 , makeWrapper
+, nodePackages
+, python3
 }:
 
 let
-  pname = "Pulsar";
-  version = "1.103.0";
+  pname = "pulsar";
+  version = "1.104.0";
 
   sourcesPath = {
     x86_64-linux.tarname = "Linux.${pname}-${version}.tar.gz";
-    x86_64-linux.hash = "sha256-C9La+rMpxyFthNPwPBZfV1goP/F1TiNYYYwmPCSkKdw=";
+    x86_64-linux.hash = "sha256-HEMUQVNPb6qWIXX25N79HwHo7j11MyFiBRsq9otdAL8=";
     aarch64-linux.tarname = "ARM.Linux.${pname}-${version}-arm64.tar.gz";
-    aarch64-linux.hash = "sha256-uVGxDLqFgm5USZT6i7pLYJZq8jFxZviVXXYTL3RVhpw=";
+    aarch64-linux.hash = "sha256-f+s54XtLLdhTFY9caKTKngJF6zLai0F7ur9v37bwuNE=";
   }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
 
   additionalLibs = lib.makeLibraryPath [
     xorg.libxshmfence
     libxkbcommon
     xorg.libxkbfile
+    stdenv.cc.cc.lib
   ];
   newLibpath = "${atomEnv.libPath}:${additionalLibs}";
 
@@ -57,6 +60,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [
     wrapGAppsHook
     copyDesktopItems
+    nodePackages.asar
   ];
 
   buildInputs = [
@@ -110,12 +114,26 @@ stdenv.mkDerivation rec {
     ln -s ${git}/bin/git $dugite/git/bin/git
     rm -f $dugite/git/libexec/git-core/git
     ln -s ${git}/bin/git $dugite/git/libexec/git-core/git
+
+    # We have to patch a prebuilt binary in the asar archive
+    # But asar complains because the node_gyp unpacked dependency uses a prebuilt Python3 itself
+
+    rm $opt/resources/app.asar.unpacked/node_modules/tree-sitter-bash/build/node_gyp_bins/python3
+    ln -s ${python3}/bin/python3 $opt/resources/app.asar.unpacked/node_modules/tree-sitter-bash/build/node_gyp_bins/python3
   '' + ''
     # Patch the bundled node executables
     find $opt -name "*.node" -exec patchelf --set-rpath "${newLibpath}:$opt" {} \;
     # Also patch the node executable for apm
     patchelf --set-rpath "${newLibpath}:$opt" $opt/resources/app/ppm/bin/node
 
+    # The pre-packaged ASAR bundle comes with prebuild binaries, expecting libstdc++.so.6
+    asarBundle=$TMPDIR/asarbundle
+    asar e $opt/resources/app.asar $asarBundle
+    find $asarBundle -name "*.node" -exec patchelf --set-rpath "${newLibpath}:$opt" --add-needed libstdc++.so.6 {} \;
+    unlink $asarBundle/node_modules/document-register-element/dre # Self referencing symlink, breaking asar rebundling
+    asar p $asarBundle $opt/resources/app.asar
+    rm -rf $asarBundle
+
     # We have patched the original wrapper, but now it needs the "PULSAR_PATH" env var
     mkdir -p $out/bin
     wrapProgram $opt/resources/pulsar.sh \
diff --git a/pkgs/applications/editors/pulsar/update.mjs b/pkgs/applications/editors/pulsar/update.mjs
index ecddbbbb9b8a..82e86be072d4 100755
--- a/pkgs/applications/editors/pulsar/update.mjs
+++ b/pkgs/applications/editors/pulsar/update.mjs
@@ -4,15 +4,13 @@
 */
 
 import { promises as fs } from 'node:fs';
-import { promisify } from 'node:util';
-import { exec as _exec } from 'node:child_process';
-const exec = promisify(_exec);
 
 const constants = {
     githubUrl: "https://api.github.com/repos/pulsar-edit/pulsar/releases",
     sha256FileURL: (newVersion) => `https://github.com/pulsar-edit/pulsar/releases/download/v${newVersion}/SHA256SUMS.txt`,
     x86_64FileName: (newVersion) => `Linux.pulsar-${newVersion}.tar.gz`,
     aarch64FileName: (newVersion) => `ARM.Linux.pulsar-${newVersion}-arm64.tar.gz`,
+    targetFile: new URL("default.nix", import.meta.url).pathname,
 };
 
 async function getLatestVersion() {
@@ -69,10 +67,10 @@ async function updateFile(newVersion, sha256Sums, currentFile) {
     newFile = newFile.replace(/x86_64-linux\.hash = "(.*)";/, `x86_64-linux.hash = "${sha256Sums.x86_64}";`);
     newFile = newFile.replace(/aarch64-linux\.hash = "(.*)";/, `aarch64-linux.hash = "${sha256Sums.aarch64}";`);
 
-    await fs.writeFile('default.nix', newFile);
+    await fs.writeFile(constants.targetFile, newFile);
 };
 
-let currentFile = await fs.readFile('default.nix', 'utf8');
+let currentFile = await fs.readFile(constants.targetFile, 'utf8');
 let currentVersion = currentFile.match(/version = "(.*)";/)[1];
 const newVersion = await getLatestVersion();
 if (currentVersion === newVersion) {