2019-06-10 06:35:11 +01:00
|
|
|
{ stdenv, fetchFromGitHub, runCommand, ncurses, gettext
|
|
|
|
, pkgconfig, cscope, ruby, tcl, perl, luajit
|
2016-05-07 01:50:52 +01:00
|
|
|
, darwin
|
2019-06-10 06:35:11 +01:00
|
|
|
|
|
|
|
, usePython27 ? false
|
|
|
|
, python27 ? null, python37 ? null
|
2014-06-06 22:45:22 +01:00
|
|
|
}:
|
|
|
|
|
2019-06-10 06:35:11 +01: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
|
|
|
|
'';
|
|
|
|
in
|
|
|
|
|
2019-08-13 22:52:01 +01:00
|
|
|
stdenv.mkDerivation {
|
2019-08-15 13:41:18 +01:00
|
|
|
pname = "macvim";
|
2014-06-06 22:45:22 +01:00
|
|
|
|
2019-10-19 08:19:46 +01:00
|
|
|
version = "8.1.2234";
|
2014-06-06 22:45:22 +01:00
|
|
|
|
2015-11-15 05:50:31 +00:00
|
|
|
src = fetchFromGitHub {
|
|
|
|
owner = "macvim-dev";
|
|
|
|
repo = "macvim";
|
2019-10-19 08:19:46 +01:00
|
|
|
rev = "snapshot-161";
|
|
|
|
sha256 = "1hp3y85pj1icz053g627a1wp5pnwgxhk07pyd4arwcxs2103agw4";
|
2014-06-06 22:45:22 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2019-06-10 06:35:11 +01:00
|
|
|
nativeBuildInputs = [ pkgconfig buildSymlinks ];
|
2014-06-06 22:45:22 +01:00
|
|
|
buildInputs = [
|
2019-06-10 06:35:11 +01:00
|
|
|
gettext ncurses cscope luajit ruby tcl perl python.pkg
|
2014-06-06 22:45:22 +01:00
|
|
|
];
|
|
|
|
|
2019-06-10 06:35:11 +01:00
|
|
|
patches = [ ./macvim.patch ./macvim-sparkle.patch ];
|
2014-06-06 22:45:22 +01:00
|
|
|
|
2019-06-10 06:35:11 +01:00
|
|
|
# The sparkle patch modified the nibs, so we have to recompile them
|
2014-06-06 22:45:22 +01:00
|
|
|
postPatch = ''
|
2019-06-10 06:35:11 +01:00
|
|
|
for nib in MainMenu Preferences; do
|
2019-09-12 00:40:49 +01:00
|
|
|
# redirect stdin/stdout/stderr to /dev/null because ibtool marks them nonblocking
|
|
|
|
# and not redirecting screws with subsequent commands.
|
|
|
|
# redirecting stderr is unfortunate but I don't know of a reasonable way to remove O_NONBLOCK
|
|
|
|
# from the fds.
|
|
|
|
/usr/bin/ibtool --compile src/MacVim/English.lproj/$nib.nib/keyedobjects.nib src/MacVim/English.lproj/$nib.nib >/dev/null 2>/dev/null </dev/null
|
2019-06-10 06:35:11 +01:00
|
|
|
done
|
2014-06-06 22:45:22 +01:00
|
|
|
'';
|
|
|
|
|
|
|
|
configureFlags = [
|
2019-06-10 06:35:11 +01:00
|
|
|
"--enable-cscope"
|
2014-06-06 22:45:22 +01:00
|
|
|
"--enable-fail-if-missing"
|
|
|
|
"--with-features=huge"
|
|
|
|
"--enable-gui=macvim"
|
|
|
|
"--enable-multibyte"
|
|
|
|
"--enable-nls"
|
|
|
|
"--enable-luainterp=dynamic"
|
2019-06-10 06:35:11 +01:00
|
|
|
"--enable-${python.name}interp=dynamic"
|
2014-06-06 22:45:22 +01:00
|
|
|
"--enable-perlinterp=dynamic"
|
|
|
|
"--enable-rubyinterp=dynamic"
|
|
|
|
"--enable-tclinterp=yes"
|
2014-10-18 06:15:45 +01:00
|
|
|
"--without-local-dir"
|
2014-06-06 22:45:22 +01:00
|
|
|
"--with-luajit"
|
|
|
|
"--with-lua-prefix=${luajit}"
|
2019-06-10 06:35:11 +01:00
|
|
|
"--with-${python.name}-command=${python.pkg}/bin/${python.name}"
|
2014-06-06 22:45:22 +01:00
|
|
|
"--with-ruby-command=${ruby}/bin/ruby"
|
|
|
|
"--with-tclsh=${tcl}/bin/tclsh"
|
|
|
|
"--with-tlib=ncurses"
|
|
|
|
"--with-compiledby=Nix"
|
2019-11-18 01:16:47 +00:00
|
|
|
"LDFLAGS=-headerpad_max_install_names"
|
2014-06-06 22:45:22 +01:00
|
|
|
];
|
|
|
|
|
2014-10-18 06:15:45 +01:00
|
|
|
makeFlags = ''PREFIX=$(out) CPPFLAGS="-Wno-error"'';
|
|
|
|
|
2019-06-10 06:35:11 +01:00
|
|
|
# This is unfortunate, but we need to use the same compiler as Xcode,
|
|
|
|
# but Xcode doesn't provide a way to configure the compiler.
|
2015-11-15 05:50:31 +00:00
|
|
|
#
|
|
|
|
# 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 22:45:22 +01:00
|
|
|
preConfigure = ''
|
2015-11-15 05:50:31 +00:00
|
|
|
CC=/usr/bin/clang
|
|
|
|
|
2014-06-06 22:45:22 +01:00
|
|
|
DEV_DIR=$(/usr/bin/xcode-select -print-path)/Platforms/MacOSX.platform/Developer
|
|
|
|
configureFlagsArray+=(
|
|
|
|
"--with-developer-dir=$DEV_DIR"
|
|
|
|
)
|
2019-06-10 06:35:11 +01: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 22:45:22 +01:00
|
|
|
|
2016-05-07 01:50:52 +01:00
|
|
|
postConfigure = ''
|
|
|
|
substituteInPlace src/auto/config.mk --replace "PERL_CFLAGS =" "PERL_CFLAGS = -I${darwin.libutil}/include"
|
2019-06-10 06:35:11 +01:00
|
|
|
|
|
|
|
substituteInPlace src/MacVim/vimrc --subst-var-by CSCOPE ${cscope}/bin/cscope
|
2016-05-07 01:50:52 +01:00
|
|
|
'';
|
|
|
|
|
2014-06-06 22:45:22 +01:00
|
|
|
postInstall = ''
|
2014-06-30 13:56:10 +01:00
|
|
|
mkdir -p $out/Applications
|
2014-06-07 21:18:27 +01:00
|
|
|
cp -r src/MacVim/build/Release/MacVim.app $out/Applications
|
2016-03-10 16:38:13 +00:00
|
|
|
rm -rf $out/MacVim.app
|
2014-06-06 22:45:22 +01:00
|
|
|
|
2019-06-10 06:35:11 +01:00
|
|
|
rm $out/bin/*
|
2014-06-06 22:45:22 +01:00
|
|
|
|
|
|
|
cp src/vimtutor $out/bin
|
2019-06-10 06:35:11 +01:00
|
|
|
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 22:45:22 +01:00
|
|
|
done
|
|
|
|
|
|
|
|
# Fix rpaths
|
2014-06-07 21:18:27 +01:00
|
|
|
exe="$out/Applications/MacVim.app/Contents/MacOS/Vim"
|
2014-06-06 22:45:22 +01:00
|
|
|
libperl=$(dirname $(find ${perl} -name "libperl.dylib"))
|
|
|
|
install_name_tool -add_rpath ${luajit}/lib $exe
|
|
|
|
install_name_tool -add_rpath ${tcl}/lib $exe
|
2019-06-10 06:35:11 +01:00
|
|
|
install_name_tool -add_rpath ${python.pkg}/lib $exe
|
2014-06-06 22:45:22 +01:00
|
|
|
install_name_tool -add_rpath $libperl $exe
|
|
|
|
install_name_tool -add_rpath ${ruby}/lib $exe
|
2019-06-10 06:35:11 +01:00
|
|
|
|
|
|
|
# Remove manpages from tools we aren't providing
|
|
|
|
find $out/share/man \( -name eVim.1 -or -name xxd.1 \) -delete
|
2014-06-06 22:45:22 +01:00
|
|
|
'';
|
|
|
|
|
2019-09-26 20:17:06 +01: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 22:45:22 +01:00
|
|
|
meta = with stdenv.lib; {
|
2017-08-06 23:05:18 +01:00
|
|
|
description = "Vim - the text editor - for macOS";
|
2019-06-10 06:35:11 +01:00
|
|
|
homepage = https://github.com/macvim-dev/macvim;
|
2015-05-28 18:20:29 +01:00
|
|
|
license = licenses.vim;
|
2019-06-10 06:35:11 +01:00
|
|
|
maintainers = with maintainers; [ cstrahan lilyball ];
|
2014-06-06 22:45:22 +01:00
|
|
|
platforms = platforms.darwin;
|
2019-10-19 08:19:46 +01:00
|
|
|
hydraPlatforms = []; # hydra can't build this as long as we rely on Xcode and sandboxProfile
|
2014-06-06 22:45:22 +01:00
|
|
|
};
|
|
|
|
}
|