4a1a222f73
Our vim derivations have been disabling fortify for 10 years, due to a crash at the time that had yet to be fixed upstream. The vim configure script tries to strip out any `_FORTIFY_SOURCE` definition provided by the caller in favor of setting `-D_FORTIFY_SOURCE=1` itself and cites a crash introduced in gcc 4.0 as the reason, but our MacVim package has been running with fortify enabled without any known issues. After testing it seems that compiling vim with clang works just fine with fortify, but compiling it with gcc detects a buffer overflow and aborts. We do still need to disable `strictflexarrays1` though, as vim's `ufunc_S` struct ends with a `uf_name[4]` field that is treated as a flexible array with a minimum length of 4.
226 lines
6.4 KiB
Nix
226 lines
6.4 KiB
Nix
{
|
|
source ? "default",
|
|
callPackage,
|
|
lib,
|
|
stdenv,
|
|
ncurses,
|
|
pkg-config,
|
|
gettext,
|
|
writeText,
|
|
config,
|
|
glib,
|
|
gtk2-x11,
|
|
gtk3-x11,
|
|
lua,
|
|
python3,
|
|
perl,
|
|
tcl,
|
|
ruby,
|
|
libx11,
|
|
libxext,
|
|
libsm,
|
|
libxpm,
|
|
libxt,
|
|
libxaw,
|
|
libxau,
|
|
libxmu,
|
|
libsodium,
|
|
libice,
|
|
wayland-scanner,
|
|
vimPlugins,
|
|
makeWrapper,
|
|
wrapGAppsHook3,
|
|
|
|
features ? "huge", # One of tiny, small, normal, big or huge
|
|
wrapPythonDrv ? false,
|
|
guiSupport ? config.vim.gui or (if stdenv.hostPlatform.isDarwin then "gtk2" else "gtk3"),
|
|
waylandSupport ? !stdenv.hostPlatform.isDarwin,
|
|
luaSupport ? config.vim.lua or true,
|
|
perlSupport ? config.vim.perl or false, # Perl interpreter
|
|
pythonSupport ? config.vim.python or true, # Python interpreter
|
|
rubySupport ? config.vim.ruby or true, # Ruby interpreter
|
|
nlsSupport ? config.vim.nls or false, # Enable NLS (gettext())
|
|
tclSupport ? config.vim.tcl or false, # Include Tcl interpreter
|
|
multibyteSupport ? config.vim.multibyte or false, # Enable multibyte editing support
|
|
cscopeSupport ? config.vim.cscope or true, # Enable cscope interface
|
|
netbeansSupport ? config.netbeans or true, # Enable NetBeans integration support.
|
|
ximSupport ? config.vim.xim or true, # less than 15KB, needed for deadkeys
|
|
darwinSupport ? config.vim.darwin or false, # Enable Darwin support
|
|
ftNixSupport ? config.vim.ftNix or true, # Add nix indentation support from vim-nix (not needed for basic syntax highlighting)
|
|
sodiumSupport ? config.vim.sodium or true, # Enable sodium based encryption
|
|
}:
|
|
|
|
let
|
|
nixosRuntimepath = writeText "nixos-vimrc" ''
|
|
set nocompatible
|
|
syntax on
|
|
|
|
function! NixosPluginPath()
|
|
let seen = {}
|
|
for p in reverse(split($NIX_PROFILES))
|
|
for d in split(glob(p . '/share/vim-plugins/*'))
|
|
let pluginname = substitute(d, ".*/", "", "")
|
|
if !has_key(seen, pluginname)
|
|
exec 'set runtimepath^='.d
|
|
let after = d."/after"
|
|
if isdirectory(after)
|
|
exec 'set runtimepath^='.after
|
|
endif
|
|
let seen[pluginname] = 1
|
|
endif
|
|
endfor
|
|
endfor
|
|
endfunction
|
|
|
|
execute NixosPluginPath()
|
|
|
|
if filereadable("/etc/vimrc")
|
|
source /etc/vimrc
|
|
elseif filereadable("/etc/vim/vimrc")
|
|
source /etc/vim/vimrc
|
|
endif
|
|
'';
|
|
|
|
common = callPackage ./common.nix { inherit stdenv; };
|
|
|
|
in
|
|
stdenv.mkDerivation {
|
|
|
|
pname = "vim-full";
|
|
|
|
inherit (common)
|
|
version
|
|
outputs
|
|
postPatch
|
|
hardeningDisable
|
|
enableParallelBuilding
|
|
meta
|
|
;
|
|
|
|
src = builtins.getAttr source {
|
|
default = common.src; # latest release
|
|
};
|
|
|
|
patches = [ ./cflags-prune.diff ];
|
|
|
|
configureFlags = [
|
|
"--with-features=${features}"
|
|
"--disable-xsmp" # XSMP session management
|
|
"--disable-xsmp_interact" # XSMP interaction
|
|
"--disable-workshop" # Sun Visual Workshop support
|
|
"--disable-sniff" # Sniff interface
|
|
"--disable-hangulinput" # Hangul input support
|
|
"--disable-fontset" # X fontset output support
|
|
"--disable-acl" # ACL support
|
|
"--disable-gpm" # GPM (Linux mouse daemon)
|
|
"--disable-mzschemeinterp"
|
|
"--disable-gtk_check"
|
|
"--disable-gtk2_check"
|
|
"--disable-gnome_check"
|
|
"--disable-motif_check"
|
|
"--disable-athena_check"
|
|
"--disable-nextaf_check"
|
|
"--disable-carbon_check"
|
|
"--disable-gtktest"
|
|
(lib.strings.enableFeature waylandSupport "wayland")
|
|
]
|
|
++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
|
"vim_cv_toupper_broken=no"
|
|
"--with-tlib=ncurses"
|
|
"vim_cv_terminfo=yes"
|
|
"vim_cv_tgetent=zero" # it does on native anyway
|
|
"vim_cv_tty_group=tty"
|
|
"vim_cv_tty_mode=0660"
|
|
"vim_cv_getcwd_broken=no"
|
|
"vim_cv_stat_ignores_slash=yes"
|
|
"vim_cv_memmove_handles_overlap=yes"
|
|
]
|
|
++ lib.optional (guiSupport == "gtk2" || guiSupport == "gtk3") "--enable-gui=${guiSupport}"
|
|
++ lib.optional stdenv.hostPlatform.isDarwin (
|
|
if darwinSupport then "--enable-darwin" else "--disable-darwin"
|
|
)
|
|
++ lib.optionals luaSupport [
|
|
"--with-lua-prefix=${lua}"
|
|
"--enable-luainterp"
|
|
]
|
|
++ lib.optionals lua.pkgs.isLuaJIT [
|
|
"--with-luajit"
|
|
]
|
|
++ lib.optionals pythonSupport [
|
|
"--enable-python3interp=yes"
|
|
"--with-python3-config-dir=${python3}/lib"
|
|
# Disables Python 2
|
|
"--disable-pythoninterp"
|
|
]
|
|
++ lib.optional nlsSupport "--enable-nls"
|
|
++ lib.optional perlSupport "--enable-perlinterp"
|
|
++ lib.optional rubySupport "--enable-rubyinterp"
|
|
++ lib.optional tclSupport "--enable-tclinterp"
|
|
++ lib.optional multibyteSupport "--enable-multibyte"
|
|
++ lib.optional cscopeSupport "--enable-cscope"
|
|
++ lib.optional netbeansSupport "--enable-netbeans"
|
|
++ lib.optional ximSupport "--enable-xim"
|
|
++ lib.optional sodiumSupport "--enable-sodium";
|
|
|
|
nativeBuildInputs = [
|
|
pkg-config
|
|
]
|
|
++ lib.optional wrapPythonDrv makeWrapper
|
|
++ lib.optional nlsSupport gettext
|
|
++ lib.optional perlSupport perl
|
|
++ lib.optional (guiSupport == "gtk3") wrapGAppsHook3
|
|
++ lib.optional waylandSupport wayland-scanner;
|
|
|
|
buildInputs = [
|
|
ncurses
|
|
glib
|
|
]
|
|
# All X related dependencies
|
|
++ lib.optionals (guiSupport == "gtk2" || guiSupport == "gtk3") [
|
|
libsm
|
|
libice
|
|
libx11
|
|
libxext
|
|
libxpm
|
|
libxt
|
|
libxaw
|
|
libxau
|
|
libxmu
|
|
]
|
|
++ lib.optional (guiSupport == "gtk2") gtk2-x11
|
|
++ lib.optional (guiSupport == "gtk3") gtk3-x11
|
|
++ lib.optional luaSupport lua
|
|
++ lib.optional pythonSupport python3
|
|
++ lib.optional tclSupport tcl
|
|
++ lib.optional rubySupport ruby
|
|
++ lib.optional sodiumSupport libsodium;
|
|
|
|
# error: '__declspec' attributes are not enabled; use '-fdeclspec' or '-fms-extensions' to enable support for __declspec attributes
|
|
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin "-fdeclspec";
|
|
|
|
preConfigure = lib.optionalString ftNixSupport ''
|
|
cp ${vimPlugins.vim-nix.src}/ftplugin/nix.vim runtime/ftplugin/nix.vim
|
|
cp ${vimPlugins.vim-nix.src}/indent/nix.vim runtime/indent/nix.vim
|
|
'';
|
|
|
|
preInstall = ''
|
|
mkdir -p $out/share/applications $out/share/icons/{hicolor,locolor}/{16x16,32x32,48x48}/apps
|
|
'';
|
|
|
|
postInstall = ''
|
|
ln -s $out/bin/vim $out/bin/vi
|
|
''
|
|
+ lib.optionalString stdenv.hostPlatform.isLinux ''
|
|
ln -sfn '${nixosRuntimepath}' "$out"/share/vim/vimrc
|
|
'';
|
|
|
|
postFixup =
|
|
common.postFixup
|
|
+ lib.optionalString wrapPythonDrv ''
|
|
wrapProgram "$out/bin/vim" --prefix PATH : "${python3}/bin" \
|
|
--set NIX_PYTHONPATH "${python3}/${python3.sitePackages}"
|
|
'';
|
|
|
|
dontStrip = true;
|
|
}
|