From 48d92c9461c378157de1e1e8049bd1c01b03271c Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 18 Jun 2019 16:13:23 +0200 Subject: [PATCH 1/5] sublime3: remove GTK 2 support No version in the repo uses it anymore --- .../applications/editors/sublime/3/common.nix | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/pkgs/applications/editors/sublime/3/common.nix b/pkgs/applications/editors/sublime/3/common.nix index 214e53262b5..0df513cf796 100644 --- a/pkgs/applications/editors/sublime/3/common.nix +++ b/pkgs/applications/editors/sublime/3/common.nix @@ -1,13 +1,11 @@ { buildVersion, x32sha256, x64sha256, dev ? false }: -{ fetchurl, stdenv, xorg, glib, glibcLocales, gtk2, gtk3, cairo, pango, libredirect, makeWrapper, wrapGAppsHook -, pkexecPath ? "/run/wrappers/bin/pkexec", gksuSupport ? false, gksu +{ fetchurl, stdenv, xorg, glib, glibcLocales, gtk3, cairo, pango, libredirect, makeWrapper, wrapGAppsHook +, pkexecPath ? "/run/wrappers/bin/pkexec" , writeScript, common-updater-scripts, curl, gnugrep , openssl, bzip2, bash, unzip, zip }: -assert gksuSupport -> gksu != null; - let pname = "sublimetext3"; packageAttribute = "sublime3${stdenv.lib.optionalString dev "-dev"}"; @@ -18,7 +16,6 @@ let downloadArchiveType = "tar.bz2"; versionUrl = "https://www.sublimetext.com/${if dev then "3dev" else "3"}"; versionFile = "pkgs/applications/editors/sublime/3/packages.nix"; - usesGtk2 = stdenv.lib.versionOlder buildVersion "3181"; archSha256 = if stdenv.hostPlatform.system == "i686-linux" then x32sha256 @@ -30,9 +27,8 @@ let else "x64"; - libPath = stdenv.lib.makeLibraryPath [ xorg.libX11 glib (if usesGtk2 then gtk2 else gtk3) cairo pango ]; - redirects = [ "/usr/bin/pkexec=${pkexecPath}" ] - ++ stdenv.lib.optional gksuSupport "/usr/bin/gksudo=${gksu}/bin/gksudo"; + libPath = stdenv.lib.makeLibraryPath [ xorg.libX11 glib gtk3 cairo pango ]; + redirects = [ "/usr/bin/pkexec=${pkexecPath}" ]; in let binaryPackage = stdenv.mkDerivation { pname = "${pname}-bin"; @@ -46,8 +42,8 @@ in let dontStrip = true; dontPatchELF = true; - buildInputs = stdenv.lib.optionals (!usesGtk2) [ glib gtk3 ]; # for GSETTINGS_SCHEMAS_PATH - nativeBuildInputs = [ zip unzip makeWrapper ] ++ stdenv.lib.optional (!usesGtk2) wrapGAppsHook; + buildInputs = [ glib gtk3 ]; # for GSETTINGS_SCHEMAS_PATH + nativeBuildInputs = [ zip unzip makeWrapper wrapGAppsHook ]; # make exec.py in Default.sublime-package use own bash with an LD_PRELOAD instead of "/bin/bash" patchPhase = '' @@ -76,7 +72,7 @@ in let $binary done - # Rewrite pkexec|gksudo argument. Note that we can't delete bytes in binary. + # Rewrite pkexec argument. Note that we cannot delete bytes in binary. sed -i -e 's,/bin/cp\x00,cp\x00\x00\x00\x00\x00\x00,g' ${primaryBinary} runHook postBuild @@ -105,7 +101,7 @@ in let --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \ --set NIX_REDIRECTS ${builtins.concatStringsSep ":" redirects} \ --set LOCALE_ARCHIVE "${glibcLocales.out}/lib/locale/locale-archive" \ - ${stdenv.lib.optionalString (!usesGtk2) ''"''${gappsWrapperArgs[@]}"''} + "''${gappsWrapperArgs[@]}" # Without this, plugin_host crashes, even though it has the rpath wrapProgram $out/plugin_host --prefix LD_PRELOAD : ${stdenv.cc.cc.lib}/lib${stdenv.lib.optionalString stdenv.is64bit "64"}/libgcc_s.so.1:${openssl.out}/lib/libssl.so:${bzip2.out}/lib/libbz2.so From e8cdece9ce36b8d84d4f849325624f39e5f46cdf Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 18 Jun 2019 16:14:29 +0200 Subject: [PATCH 2/5] sublime3: add maintainer --- pkgs/applications/editors/sublime/3/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/editors/sublime/3/common.nix b/pkgs/applications/editors/sublime/3/common.nix index 0df513cf796..2daa551ebae 100644 --- a/pkgs/applications/editors/sublime/3/common.nix +++ b/pkgs/applications/editors/sublime/3/common.nix @@ -148,7 +148,7 @@ in stdenv.mkDerivation (rec { meta = with stdenv.lib; { description = "Sophisticated text editor for code, markup and prose"; homepage = https://www.sublimetext.com/; - maintainers = with maintainers; [ wmertens demin-dmitriy zimbatm ]; + maintainers = with maintainers; [ jtojnar wmertens demin-dmitriy zimbatm ]; license = licenses.unfree; platforms = [ "x86_64-linux" "i686-linux" ]; }; From a3667ee6be57c9dd51a692aba6be94eef4f2d6f5 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 16 Jun 2019 17:27:22 +0200 Subject: [PATCH 3/5] libredirect: add posix_spawnp support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After bumping sublime3 in #61636 we realized that saving files as root doesn’t work anymore and somehow the paths weren’t patched by `libredirect`. After some debugging it came out that Sublime switched from `posix_spawn(3)` to `posix_spawnp(3)` to start new processes internally. Since `libredirect` only handled the former, `/usr/bin/pkexec` stopped being redirected. Wrapping `posix_spawnp` fixes the problem. --- pkgs/build-support/libredirect/libredirect.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkgs/build-support/libredirect/libredirect.c b/pkgs/build-support/libredirect/libredirect.c index 655399af58f..8e8da00b02a 100644 --- a/pkgs/build-support/libredirect/libredirect.c +++ b/pkgs/build-support/libredirect/libredirect.c @@ -160,6 +160,19 @@ int posix_spawn(pid_t * pid, const char * path, return posix_spawn_real(pid, rewrite(path, buf), file_actions, attrp, argv, envp); } +int posix_spawnp(pid_t * pid, const char * file, + const posix_spawn_file_actions_t * file_actions, + const posix_spawnattr_t * attrp, + char * const argv[], char * const envp[]) +{ + int (*posix_spawnp_real) (pid_t *, const char *, + const posix_spawn_file_actions_t *, + const posix_spawnattr_t *, + char * const argv[], char * const envp[]) = dlsym(RTLD_NEXT, "posix_spawnp"); + char buf[PATH_MAX]; + return posix_spawnp_real(pid, rewrite(file, buf), file_actions, attrp, argv, envp); +} + int execv(const char *path, char *const argv[]) { int (*execv_real) (const char *path, char *const argv[]) = dlsym(RTLD_NEXT, "execv"); From 9819cc2ca623920680423c52160f67b734afa804 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 18 Jun 2019 22:53:04 +0200 Subject: [PATCH 4/5] sublime-merge: remove GTK 2 support Sublime Merge does not support GTK 2 from build 1092 so we do not need this anymore. Also brings the expression in sync with Sublime Text. --- .../sublime-merge/common.nix | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/pkgs/applications/version-management/sublime-merge/common.nix b/pkgs/applications/version-management/sublime-merge/common.nix index a232b78aacf..67be180e08c 100644 --- a/pkgs/applications/version-management/sublime-merge/common.nix +++ b/pkgs/applications/version-management/sublime-merge/common.nix @@ -1,12 +1,10 @@ { buildVersion, sha256, dev ? false }: -{ fetchurl, stdenv, xorg, glib, glibcLocales, gtk2, gtk3, cairo, pango, libredirect, makeWrapper, wrapGAppsHook -, pkexecPath ? "/run/wrappers/bin/pkexec", gksuSupport ? false, gksu +{ fetchurl, stdenv, xorg, glib, glibcLocales, gtk3, cairo, pango, libredirect, makeWrapper, wrapGAppsHook +, pkexecPath ? "/run/wrappers/bin/pkexec" , writeScript, common-updater-scripts, curl, gnugrep }: -assert gksuSupport -> gksu != null; - let pname = "sublime-merge"; packageAttribute = "sublime-merge${stdenv.lib.optionalString dev "-dev"}"; @@ -17,13 +15,11 @@ let downloadArchiveType = "tar.xz"; versionUrl = "https://www.sublimemerge.com/${if dev then "dev" else "download"}"; versionFile = "pkgs/applications/version-management/sublime-merge/default.nix"; - usesGtk2 = false; archSha256 = sha256; arch = "x64"; - libPath = stdenv.lib.makeLibraryPath [ xorg.libX11 glib (if usesGtk2 then gtk2 else gtk3) cairo pango ]; - redirects = [ "/usr/bin/pkexec=${pkexecPath}" ] - ++ stdenv.lib.optional gksuSupport "/usr/bin/gksudo=${gksu}/bin/gksudo"; + libPath = stdenv.lib.makeLibraryPath [ xorg.libX11 glib gtk3 cairo pango ]; + redirects = [ "/usr/bin/pkexec=${pkexecPath}" ]; in let binaryPackage = stdenv.mkDerivation { pname = "${pname}-bin"; @@ -37,8 +33,8 @@ in let dontStrip = true; dontPatchELF = true; - buildInputs = stdenv.lib.optionals (!usesGtk2) [ glib gtk3 ]; # for GSETTINGS_SCHEMAS_PATH - nativeBuildInputs = [ makeWrapper ] ++ stdenv.lib.optional (!usesGtk2) wrapGAppsHook; + buildInputs = [ glib gtk3 ]; # for GSETTINGS_SCHEMAS_PATH + nativeBuildInputs = [ makeWrapper wrapGAppsHook ]; buildPhase = '' runHook preBuild @@ -50,7 +46,7 @@ in let $binary done - # Rewrite pkexec|gksudo argument. Note that we can't delete bytes in binary. + # Rewrite pkexec argument. Note that we cannot delete bytes in binary. sed -i -e 's,/bin/cp\x00,cp\x00\x00\x00\x00\x00\x00,g' ${primaryBinary} runHook postBuild @@ -72,7 +68,7 @@ in let --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \ --set NIX_REDIRECTS ${builtins.concatStringsSep ":" redirects} \ --set LOCALE_ARCHIVE "${glibcLocales.out}/lib/locale/locale-archive" \ - ${stdenv.lib.optionalString (!usesGtk2) ''"''${gappsWrapperArgs[@]}"''} + "''${gappsWrapperArgs[@]}" ''; }; in stdenv.mkDerivation (rec { From b75a43f9e0bc525c9dbb601cb935f97c7d9f04fd Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 18 Jun 2019 23:42:07 +0200 Subject: [PATCH 5/5] sublime{3,-merge}: simplify code --- pkgs/applications/editors/sublime/3/common.nix | 4 +--- pkgs/applications/version-management/sublime-merge/common.nix | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/editors/sublime/3/common.nix b/pkgs/applications/editors/sublime/3/common.nix index 2daa551ebae..8e52237d949 100644 --- a/pkgs/applications/editors/sublime/3/common.nix +++ b/pkgs/applications/editors/sublime/3/common.nix @@ -13,9 +13,8 @@ let primaryBinary = "sublime_text"; primaryBinaryAliases = [ "subl" "sublime" "sublime3" ]; downloadUrl = "https://download.sublimetext.com/sublime_text_3_build_${buildVersion}_${arch}.tar.bz2"; - downloadArchiveType = "tar.bz2"; versionUrl = "https://www.sublimetext.com/${if dev then "3dev" else "3"}"; - versionFile = "pkgs/applications/editors/sublime/3/packages.nix"; + versionFile = builtins.toString ./packages.nix; archSha256 = if stdenv.hostPlatform.system == "i686-linux" then x32sha256 @@ -35,7 +34,6 @@ in let version = buildVersion; src = fetchurl { - name = "${pname}-bin-${buildVersion}.${downloadArchiveType}"; url = downloadUrl; sha256 = archSha256; }; diff --git a/pkgs/applications/version-management/sublime-merge/common.nix b/pkgs/applications/version-management/sublime-merge/common.nix index 67be180e08c..f69fdbefe18 100644 --- a/pkgs/applications/version-management/sublime-merge/common.nix +++ b/pkgs/applications/version-management/sublime-merge/common.nix @@ -12,9 +12,8 @@ let primaryBinary = "sublime_merge"; primaryBinaryAliases = [ "smerge" ]; downloadUrl = "https://download.sublimetext.com/sublime_merge_build_${buildVersion}_${arch}.tar.xz"; - downloadArchiveType = "tar.xz"; versionUrl = "https://www.sublimemerge.com/${if dev then "dev" else "download"}"; - versionFile = "pkgs/applications/version-management/sublime-merge/default.nix"; + versionFile = builtins.toString ./default.nix; archSha256 = sha256; arch = "x64"; @@ -26,7 +25,6 @@ in let version = buildVersion; src = fetchurl { - name = "${pname}-bin-${buildVersion}.${downloadArchiveType}"; url = downloadUrl; sha256 = archSha256; };