diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index b89ca4c30921..51c7a5ae33bd 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -14740,6 +14740,13 @@ githubId = 54189319; name = "Lilly Cham"; }; + lilyball = { + email = "lily@ballards.net"; + github = "lilyball"; + githubId = 714; + matrix = "@esperlily:matrix.org"; + name = "Lily Ballard"; + }; limeytexan = { email = "limeytexan@gmail.com"; github = "limeytexan"; diff --git a/pkgs/applications/editors/vim/macvim.nix b/pkgs/applications/editors/vim/macvim.nix index fcb8a7de920e..943fd5b3b29e 100644 --- a/pkgs/applications/editors/vim/macvim.nix +++ b/pkgs/applications/editors/vim/macvim.nix @@ -7,20 +7,25 @@ gettext, pkg-config, cscope, - ruby, + ruby_3_4, tcl, perl, luajit, darwin, libiconv, python3, + enablePython ? false, + rcodesign, }: +let + inherit (lib) optional optionals optionalString; +in + # Try to match MacVim's documented script interface compatibility let - #perl = perl540; - # Ruby 3.3 - #ruby = ruby_3_3; + # Ruby 3.4 + ruby = ruby_3_4; # Building requires a few system tools to be in PATH. # Some of these we could patch into the relevant source files (such as xcodebuild and @@ -35,13 +40,13 @@ in stdenv.mkDerivation (finalAttrs: { pname = "macvim"; - version = "179"; + version = "181"; src = fetchFromGitHub { owner = "macvim-dev"; repo = "macvim"; rev = "release-${finalAttrs.version}"; - hash = "sha256-L9LVXyeA09aMtNf+b/Oo+eLpeVEKTD1/oNWCiFn5FbU="; + hash = "sha256-Wdq+eXSaGs+y+75ZbxoNAcyopRkWRHHRm05T0SHBrow="; }; enableParallelBuilding = true; @@ -49,7 +54,8 @@ stdenv.mkDerivation (finalAttrs: { nativeBuildInputs = [ pkg-config buildSymlinks - ]; + ] + ++ optional stdenv.isAarch64 rcodesign; buildInputs = [ gettext ncurses @@ -58,8 +64,8 @@ stdenv.mkDerivation (finalAttrs: { ruby tcl perl - python3 - ]; + ] + ++ optional enablePython python3; patches = [ ./macvim.patch ]; @@ -71,14 +77,22 @@ stdenv.mkDerivation (finalAttrs: { "--enable-multibyte" "--enable-nls" "--enable-luainterp=dynamic" + ] + ++ optionals enablePython [ "--enable-python3interp=dynamic" + ] + ++ [ "--enable-perlinterp=dynamic" "--enable-rubyinterp=dynamic" "--enable-tclinterp=yes" "--without-local-dir" "--with-luajit" "--with-lua-prefix=${luajit}" + ] + ++ optionals enablePython [ "--with-python3-command=${python3}/bin/python3" + ] + ++ [ "--with-ruby-command=${ruby}/bin/ruby" "--with-tclsh=${tcl}/bin/tclsh" "--with-tlib=ncurses" @@ -92,6 +106,13 @@ stdenv.mkDerivation (finalAttrs: { postPatch = '' echo "Patching file src/MacVim/MacVim.xcodeproj/project.pbxproj" sed -e '/Sparkle\.framework/d' -i src/MacVim/MacVim.xcodeproj/project.pbxproj + '' + # Xcode 26.0 sets *_DEPLOYMENT_TARGET env vars for all platforms in shell script build phases. + # This breaks invocations of clang in those phases, as they target the wrong platform. + # Note: The shell script build phase in question uses /bin/zsh. + + '' + substituteInPlace src/MacVim/MacVim.xcodeproj/project.pbxproj \ + --replace-fail 'make \' $'for x in ''${(k)parameters}; do if [[ $x = *_DEPLOYMENT_TARGET ]]; then [[ $x = MACOSX_DEPLOYMENT_TARGET ]] || unset $x; fi; done\nmake \\' ''; # This is unfortunate, but we need to use the same compiler as Xcode, but Xcode doesn't provide a @@ -101,7 +122,7 @@ stdenv.mkDerivation (finalAttrs: { let # ideally we'd recurse, but we don't need that right now inputs = [ ncurses ] ++ perl.propagatedBuildInputs; - ldflags = map (drv: "-L${lib.getLib drv}/lib") inputs; + ldflags = map (drv: "-L${lib.getLib drv}/lib") inputs ++ [ "-headerpad_max_install_names" ]; cppflags = map (drv: "-isystem ${lib.getDev drv}/include") inputs; in '' @@ -131,7 +152,7 @@ stdenv.mkDerivation (finalAttrs: { # as the scheme seems to have the wrong default. + '' configureFlagsArray+=( - XCODEFLAGS="-scheme MacVim -derivedDataPath $NIX_BUILD_TOP/derivedData" + XCODEFLAGS="-scheme MacVim -derivedDataPath $NIX_BUILD_TOP/derivedData LDFLAGS='\$(inherited) -headerpad_max_install_names' ENABLE_CODE_COVERAGE=NO" --with-xcodecfg="Release" ) ''; @@ -149,9 +170,9 @@ stdenv.mkDerivation (finalAttrs: { # Xcode project or pass it as a flag to xcodebuild as well. postConfigure = '' substituteInPlace src/auto/config.mk \ - --replace " -L${stdenv.cc.libc}/lib" "" \ - --replace " -L${darwin.libunwind}/lib" "" \ - --replace " -L${libiconv}/lib" "" + --replace-warn " -L${stdenv.cc.libc}/lib" "" \ + --replace-warn " -L${darwin.libunwind}/lib" "" \ + --replace-warn " -L${libiconv}/lib" "" # All the libraries we stripped have -osx- in their name as of this time. # Assert now that this pattern no longer appears in config.mk. @@ -191,12 +212,21 @@ stdenv.mkDerivation (finalAttrs: { libperl=$(dirname $(find ${perl} -name "libperl.dylib")) install_name_tool -add_rpath ${luajit}/lib $exe install_name_tool -add_rpath ${tcl}/lib $exe + '' + + optionalString enablePython '' install_name_tool -add_rpath ${python3}/lib $exe + '' + + '' install_name_tool -add_rpath $libperl $exe install_name_tool -add_rpath ${ruby}/lib $exe # Remove manpages from tools we aren't providing - find $out/Applications/MacVim.app/Contents/man -name evim.1 -delete + find $out/Applications/MacVim.app/Contents/man \( -name evim.1 -or -name eview.1 \) -delete + rm $out/Applications/MacVim.app/Contents/man/man1/mvim.1 + '' + + optionalString stdenv.isAarch64 '' + # Resign the binary and set the linker-signed flag. + rcodesign sign --code-signature-flags linker-signed $exe ''; # We rely on the user's Xcode install to build. It may be located in an arbitrary place, and @@ -212,33 +242,10 @@ stdenv.mkDerivation (finalAttrs: { description = "Vim - the text editor - for macOS"; homepage = "https://macvim.org/"; license = licenses.vim; - maintainers = [ ]; + maintainers = with maintainers; [ lilyball ]; platforms = platforms.darwin; hydraPlatforms = [ ]; # hydra can't build this as long as we rely on Xcode and sandboxProfile - # Needs updating to a newer MacVim for Python and Ruby version support - broken = true; knownVulnerabilities = [ - "CVE-2023-46246" - "CVE-2023-48231" - "CVE-2023-48232" - "CVE-2023-48233" - "CVE-2023-48234" - "CVE-2023-48235" - "CVE-2023-48236" - "CVE-2023-48237" - "CVE-2023-48706" - "CVE-2023-5344" - "CVE-2023-5441" - "CVE-2023-5535" - "CVE-2024-22667" - "CVE-2024-41957" - "CVE-2024-41965" - "CVE-2024-43374" - "CVE-2024-47814" - "CVE-2025-1215" - "CVE-2025-22134" - "CVE-2025-24014" - "CVE-2025-26603" "CVE-2025-29768" "CVE-2025-53905" "CVE-2025-53906" diff --git a/pkgs/applications/editors/vim/macvim.patch b/pkgs/applications/editors/vim/macvim.patch index 223778acf60c..767c59bd154c 100644 --- a/pkgs/applications/editors/vim/macvim.patch +++ b/pkgs/applications/editors/vim/macvim.patch @@ -199,16 +199,3 @@ index 6e33142..6185f45 100644 #ifdef AMIGA # include "os_amiga.h" #endif -diff --git a/src/vimtutor b/src/vimtutor -index 3b154f2..e89f260 100755 ---- a/src/vimtutor -+++ b/src/vimtutor -@@ -16,7 +16,7 @@ seq="vim vim81 vim80 vim8 vim74 vim73 vim72 vim71 vim70 vim7 vim6 vi" - if test "$1" = "-g"; then - # Try to use the GUI version of Vim if possible, it will fall back - # on Vim if Gvim is not installed. -- seq="gvim gvim81 gvim80 gvim8 gvim74 gvim73 gvim72 gvim71 gvim70 gvim7 gvim6 $seq" -+ seq="mvim gvim gvim81 gvim80 gvim8 gvim74 gvim73 gvim72 gvim71 gvim70 gvim7 gvim6 $seq" - shift - fi -