nixpkgs/pkgs/applications/editors/vim/macvim.nix

163 lines
5.7 KiB
Nix
Raw Normal View History

{ stdenv, fetchFromGitHub, runCommand, ncurses, gettext
, pkgconfig, cscope, ruby, tcl, perl, luajit
2016-05-07 00:50:52 +00:00
, darwin
, usePython27 ? false
, python27 ? null, python37 ? null
2014-06-06 21:45:22 +00:00
}:
let
python = if usePython27
then { pkg = python27; name = "python"; }
else { pkg = python37; name = "python3"; };
in
assert python.pkg != null;
let
# 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
# qlmanage) but some are used by Xcode itself and we have no choice but to put them in PATH.
# Symlinking them in this way is better than just putting all of /usr/bin in there.
buildSymlinks = runCommand "macvim-build-symlinks" {} ''
mkdir -p $out/bin
ln -s /usr/bin/xcrun /usr/bin/xcodebuild /usr/bin/tiffutil /usr/bin/qlmanage $out/bin
'';
# I'm not really sure how configure finds Nix Libsystem, but we get link errors when using
# Xcode 11.4 if we're compiling against Xcode's SDK but using Nix Libsystem. We can't just pass
# Libsystem's includes though as that causes other issues, particularly with availability macros.
# This is a horrible hack but let's just pass the header that's causing problems.
fakeLibsystemInclude = runCommand "macvim-libsystem-include-shim" {} ''
mkdir -p $out/include/sys/_types
ln -s ${darwin.Libsystem}/include/sys/_types/_fd_def.h $out/include/sys/_types
'';
in
2019-08-13 21:52:01 +00:00
stdenv.mkDerivation {
pname = "macvim";
2014-06-06 21:45:22 +00:00
2020-04-14 20:49:27 +00:00
version = "8.2.539";
2014-06-06 21:45:22 +00:00
src = fetchFromGitHub {
owner = "macvim-dev";
repo = "macvim";
2020-04-14 20:49:27 +00:00
rev = "snapshot-163";
sha256 = "0ibc6h7zmk81dygkxd8a2rcq72zbqmr9kh64xhsm9h0p70505cdk";
2014-06-06 21:45:22 +00:00
};
enableParallelBuilding = true;
nativeBuildInputs = [ pkgconfig buildSymlinks ];
2014-06-06 21:45:22 +00:00
buildInputs = [
gettext ncurses cscope luajit ruby tcl perl python.pkg
2014-06-06 21:45:22 +00:00
];
2020-03-04 02:02:27 +00:00
patches = [ ./macvim.patch ];
2014-06-06 21:45:22 +00:00
configureFlags = [
"--enable-cscope"
2014-06-06 21:45:22 +00:00
"--enable-fail-if-missing"
"--with-features=huge"
"--enable-gui=macvim"
"--enable-multibyte"
"--enable-nls"
"--enable-luainterp=dynamic"
"--enable-${python.name}interp=dynamic"
2014-06-06 21:45:22 +00:00
"--enable-perlinterp=dynamic"
"--enable-rubyinterp=dynamic"
"--enable-tclinterp=yes"
2014-10-18 05:15:45 +00:00
"--without-local-dir"
2014-06-06 21:45:22 +00:00
"--with-luajit"
"--with-lua-prefix=${luajit}"
"--with-${python.name}-command=${python.pkg}/bin/${python.name}"
2014-06-06 21:45:22 +00:00
"--with-ruby-command=${ruby}/bin/ruby"
"--with-tclsh=${tcl}/bin/tclsh"
"--with-tlib=ncurses"
"--with-compiledby=Nix"
2020-03-04 02:02:27 +00:00
"--disable-sparkle"
"LDFLAGS=-headerpad_max_install_names"
2014-06-06 21:45:22 +00:00
];
2014-10-18 05:15:45 +00:00
makeFlags = ''PREFIX=$(out) CPPFLAGS="-Wno-error"'';
2020-03-04 02:02:27 +00:00
# Remove references to Sparkle.framework from the project.
# It's unused (we disabled it with --disable-sparkle) and this avoids
# copying the unnecessary several-megabyte framework into the result.
postPatch = ''
echo "Patching file src/MacVim/MacVim.xcodeproj/project.pbxproj"
sed -e '/Sparkle\.framework/d' -i src/MacVim/MacVim.xcodeproj/project.pbxproj
'';
# This is unfortunate, but we need to use the same compiler as Xcode,
# but Xcode doesn't provide a way to configure the compiler.
#
# If you're willing to modify the system files, you can do this:
# http://hamelot.co.uk/programming/add-gcc-compiler-to-xcode-6/
#
# But we don't have that option.
2014-06-06 21:45:22 +00:00
preConfigure = ''
CC=/usr/bin/clang
2014-06-06 21:45:22 +00:00
DEV_DIR=$(/usr/bin/xcode-select -print-path)/Platforms/MacOSX.platform/Developer
configureFlagsArray+=(
"--with-developer-dir=$DEV_DIR"
# Also pass `-g -O` because configure would add those if we weren't setting CFLAGS.
"CFLAGS=-g -O -isystem ${fakeLibsystemInclude}/include"
2014-06-06 21:45:22 +00:00
)
''
# For some reason having LD defined causes PSMTabBarControl to fail at link-time as it
# passes arguments to ld that it meant for clang.
+ ''
unset LD
''
;
2014-06-06 21:45:22 +00:00
2016-05-07 00:50:52 +00:00
postConfigure = ''
substituteInPlace src/auto/config.mk --replace "PERL_CFLAGS =" "PERL_CFLAGS = -I${darwin.libutil}/include"
substituteInPlace src/MacVim/vimrc --subst-var-by CSCOPE ${cscope}/bin/cscope
2016-05-07 00:50:52 +00:00
'';
2014-06-06 21:45:22 +00:00
postInstall = ''
mkdir -p $out/Applications
cp -r src/MacVim/build/Release/MacVim.app $out/Applications
rm -rf $out/MacVim.app
2014-06-06 21:45:22 +00:00
rm $out/bin/*
2014-06-06 21:45:22 +00:00
cp src/vimtutor $out/bin
for prog in mvim ex vi vim vimdiff view rvim rvimdiff rview; do
ln -s $out/Applications/MacVim.app/Contents/bin/mvim $out/bin/$prog
2014-06-06 21:45:22 +00:00
done
# Fix rpaths
exe="$out/Applications/MacVim.app/Contents/MacOS/Vim"
2014-06-06 21:45:22 +00:00
libperl=$(dirname $(find ${perl} -name "libperl.dylib"))
install_name_tool -add_rpath ${luajit}/lib $exe
install_name_tool -add_rpath ${tcl}/lib $exe
install_name_tool -add_rpath ${python.pkg}/lib $exe
2014-06-06 21:45:22 +00:00
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/share/man \( -name eVim.1 -or -name xxd.1 \) -delete
2014-06-06 21:45:22 +00:00
'';
# We rely on the user's Xcode install to build. It may be located in an arbitrary place, and
# it's not clear what system-level components it may require, so for now we'll just allow full
# filesystem access. This way the package still can't access the network.
sandboxProfile = ''
(allow file-read* file-write* process-exec mach-lookup)
; block homebrew dependencies
(deny file-read* file-write* process-exec mach-lookup (subpath "/usr/local") (with no-log))
'';
2014-06-06 21:45:22 +00:00
meta = with stdenv.lib; {
description = "Vim - the text editor - for macOS";
homepage = "https://github.com/macvim-dev/macvim";
license = licenses.vim;
maintainers = with maintainers; [ cstrahan lilyball ];
2014-06-06 21:45:22 +00:00
platforms = platforms.darwin;
2019-10-19 07:19:46 +00:00
hydraPlatforms = []; # hydra can't build this as long as we rely on Xcode and sandboxProfile
2014-06-06 21:45:22 +00:00
};
}