# Created by: David O'Brien <obrien@cs.ucdavis.edu>
# $FreeBSD: head/editors/vim/Makefile 469730 2018-05-12 14:00:22Z adamw $

PORTNAME=	vim
PORTVERSION=	8.0.1817
DISTVERSIONPREFIX=	v
CATEGORIES=	editors

MAINTAINER=	adamw@FreeBSD.org
COMMENT?=	Improved version of the vi editor

LICENSE=	VIM
LICENSE_NAME=	VIM License
LICENSE_FILE=	${WRKSRC}/runtime/doc/uganda.txt
LICENSE_PERMS=	dist-mirror dist-sell pkg-mirror pkg-sell auto-accept

CONFLICTS_INSTALL?=	vim-console vim-tiny

USES=		cpe iconv ncurses pkgconfig shebangfix
USE_GITHUB=	yes

CONFIGURE_ARGS=	--enable-gui=${GUI} \
		--enable-multibyte \
		--with-tlib=ncurses
MAKE_ARGS=	STRIP="${STRIP_CMD}" \
		VIMRCLOC=${ETCDIR} \
		VIMRUNTIMEDIR=${PREFIX}/share/vim/${VIM_VER}

CPE_VERSION=	${PORTVERSION:R}
GNU_CONFIGURE=	yes
MAKE_JOBS_UNSAFE=	yes
PLIST_SUB=	VIM_VER=${VIM_VER}
PORTDATA?=	${VIM_VER}
PORTSCOUT=	ignore:1
REINPLACE_ARGS=	-i ''
SHEBANG_FILES=	runtime/tools/demoserver.py runtime/tools/efm_perl.pl
VIM_VER=	${PORTNAME}${PORTVERSION:R:S|.||g}

# OPTIONS
OPTIONS_DEFAULT=	CSCOPE DEFAULT_VIMRC EXUBERANT_CTAGS GTK2 PERL PYTHON2 RUBY
OPTIONS_DEFINE=		CSCOPE DEFAULT_VIMRC EXUBERANT_CTAGS NLS XTERM_SAVE
OPTIONS_SINGLE=		UI
OPTIONS_SINGLE_UI=	ATHENA CONSOLE GNOME GTK2 GTK3 MOTIF X11
OPTIONS_GROUP=		LANGBIND
OPTIONS_GROUP_LANGBIND=	LUA PERL PYTHON2 PYTHON3 RUBY SCHEME TCL
OPTIONS_SUB=		yes

.if defined(CONSOLE)
OPTIONS_DEFAULT=	DEFAULT_VIMRC
OPTIONS_SLAVE=		CONSOLE
# Exclude everything except the two options above
OPTIONS_EXCLUDE:=	${OPTIONS_DEFINE:NDEFAULT_VIMRC} \
			${OPTIONS_SINGLE_UI:NCONSOLE} \
			${OPTIONS_GROUP_LANGBIND}
.elif defined(TINY)
OPTIONS_SLAVE=		CONSOLE
OPTIONS_EXCLUDE:=	${OPTIONS_DEFINE} \
			${OPTIONS_SINGLE_UI:NCONSOLE} \
			${OPTIONS_GROUP_LANGBIND}
.endif

DEFAULT_VIMRC_DESC=	Install bundled vimrc as default setting
EXUBERANT_CTAGS_DESC=	Use exctags instead of ctags
XTERM_SAVE_DESC=	Restore xterm screen after exit

UI_DESC=		User interface
ATHENA_DESC=		Athena GUI toolkit
CSCOPE_DESC=		cscope support
CONSOLE_DESC=		Console/terminal mode

LANGBIND_DESC=		Optional language bindings
SCHEME_DESC=		MzScheme (Racket) bindings

# BROKEN: ruby.h: error: wrong number of arguments specified for 'deprecated' attribute
OPTIONS_EXCLUDE_powerpc64=	RUBY

# GENERAL OPTIONS
CSCOPE_CONFIGURE_ENABLE=cscope
CSCOPE_RUN_DEPENDS=	cscope:devel/cscope

EXUBERANT_CTAGS_RUN_DEPENDS=	exctags:devel/ctags

NLS_CONFIGURE_ENABLE=	nls
NLS_USES=		gettext

# UI
ATHENA_PLIST_SUB=	GUI="" DESKTOP="@comment "
ATHENA_USE=		XORG=ice,sm,x11,xaw,xmu,xpm,xt
ATHENA_VARS=		GUI=athena

CONSOLE_CONFIGURE_OFF=	--enable-xim --enable-fontset
CONSOLE_PLIST_SUB=	GUI="@comment " DESKTOP="@comment "
CONSOLE_VARS=		GUI=no

GNOME_PLIST_SUB=	GUI="" DESKTOP=""
GNOME_IMPLIES=		NLS
GNOME_USE=		GNOME=gdkpixbuf2,libgnomeui XORG=ice,sm,glproto,x11,xpm,xt
GNOME_USES=		desktop-file-utils
GNOME_VARS=		GUI=gnome2 INSTALLS_ICONS=yes

GTK2_PLIST_SUB=		GUI="" DESKTOP=""
GTK2_USE=		GNOME=gdkpixbuf2,gtk20 XORG=ice,sm,x11,xpm,xt
GTK2_USES=		desktop-file-utils
GTK2_VARS=		GUI=gtk2 INSTALLS_ICONS=yes

GTK3_PLIST_SUB=		GUI="" DESKTOP=""
GTK3_USE=		GNOME=cairo,gdkpixbuf2,gtk30 XORG=ice,sm,x11,xpm,xt
GTK3_USES=		desktop-file-utils
GTK3_VARS=		GUI=gtk3 INSTALLS_ICONS=yes

MOTIF_CONFIGURE_ENV=	MOTIFHOME=${LOCALBASE}
MOTIF_CONFIGURE_WITH=	motif-lib="${MOTIFLIB}"
MOTIF_PLIST_SUB=	GUI="" DESKTOP="@comment "
MOTIF_USE=		XORG=ice,sm,x11,xmu,xt
MOTIF_USES=		motif
MOTIF_VARS=		GUI=motif

X11_CONFIGURE_WITH=	x
X11_PLIST_SUB=		GUI="@comment " DESKTOP="@comment "
X11_USE=		XORG=ice,sm,x11,xt
X11_VARS=		GUI=no

# LANGUAGE BINDINGS
LUA_CONFIGURE_ENABLE=	luainterp
LUA_CONFIGURE_WITH=	lua-prefix=${LOCALBASE}
LUA_USES=		lua

PERL_CONFIGURE_ENABLE=	perlinterp
PERL_USES=		perl5

PYTHON2_CONFIGURE_ENABLE=	pythoninterp
PYTHON2_BUILD_DEPENDS=	python${PYTHON2_DEFAULT}:lang/python${PYTHON2_DEFAULT:S/.//}
PYTHON2_RUN_DEPENDS=	${PYTHON2_BUILD_DEPENDS}

PYTHON3_CONFIGURE_ENABLE=	python3interp
PYTHON3_USES=		python:3.4+

RUBY_CONFIGURE_ENABLE=	rubyinterp
RUBY_USE=		RUBY=yes

SCHEME_CONFIGURE_ENABLE=mzschemeinterp
SCHEME_BUILD_DEPENDS=	mzscheme:lang/racket
SCHEME_RUN_DEPENDS=	${SCHEME_BUILD_DEPENDS}

TCL_CONFIGURE_ENABLE=	tclinterp
TCL_CONFIGURE_WITH=	tclsh=tclsh${TCL_VER}
TCL_USES=		tcl:85+

post-extract:
	${INSTALL_DATA} ${FILESDIR}/vietnamese_viscii.vim ${WRKSRC}/runtime/keymap

post-patch:
	@${ECHO_CMD} '#define SYS_VIMRC_FILE "'${ETCDIR}'/vimrc"' >> ${WRKSRC}/src/feature.h
	@${ECHO_CMD} '#define SYS_GVIMRC_FILE "'${ETCDIR}'/gvimrc"' >> ${WRKSRC}/src/feature.h
	@${REINPLACE_CMD} -e 's|-liconv|${ICONV_LIB}|g; s|/usr/local|${LOCALBASE}|g' \
		${WRKSRC}/src/auto/configure
# Work around qa-check shebang error
	@${REINPLACE_CMD} -e 1d ${WRKSRC}/runtime/tools/demoserver.py

post-configure:
# Needed when devel/libsysinfo is installed:
	@${REINPLACE_CMD} -e '/#define HAVE_SYSINFO 1/ d' ${WRKSRC}/src/auto/config.h

.if !defined(TINY)
post-install:
	@${RM} ${STAGEDIR}${PREFIX}/bin/ex
	@${RM} ${STAGEDIR}${PREFIX}/bin/view
.for F in eview evim gview gvim gvimdiff rgview rgvim rview rvim vimdiff
	${LN} -sf vim ${STAGEDIR}${PREFIX}/bin/$F
.endfor

# OPTIONS
post-patch-EXUBERANT_CTAGS-off:
	@${FIND} ${WRKSRC}/runtime/ -name 'menu*.vim' -print0 | ${XARGS} -0 ${REINPLACE_CMD} -Ee 's!ctags -R ?\.!${FIND} . -type f \\| ${XARGS} ctags!g'

post-patch-EXUBERANT_CTAGS-on:
	@${FIND} ${WRKSRC}/runtime/ -name 'menu*.vim' -print0 | ${XARGS} -0 ${REINPLACE_CMD} -e 's|ctags -R|exctags -R|g'

post-patch-LUA-on:
	@${REINPLACE_CMD} -e 's|set dummy lua;|set dummy ${LUA_CMD};|g' ${WRKSRC}/src/auto/configure
	@${REINPLACE_CMD} -e '/$$LUA_LIBS/ s|^|LUA_LIBS="-L${LUA_LIBDIR} -llua-${LUA_VER}";|' ${WRKSRC}/src/auto/configure
	@${REINPLACE_CMD} -e '/LUA_CFLAGS=/s|".*"|"-I${LUA_INCDIR}"|' ${WRKSRC}/src/auto/configure

post-patch-XTERM_SAVE-on:
	@${REINPLACE_CMD} -e '/FEAT_XTERM_SAVE/ s|.*|#define FEAT_XTERM_SAVE|' ${WRKSRC}/src/feature.h

post-install-DEFAULT_VIMRC-on:
	@${MKDIR} ${STAGEDIR}${ETCDIR}
	${SED} -e '/set nocompatible/d' ${FILESDIR}/vimrc > ${STAGEDIR}${ETCDIR}/gvimrc.sample
	${INSTALL_DATA} ${FILESDIR}/vimrc ${STAGEDIR}${ETCDIR}/vimrc.sample

post-install-NLS-off:
	@${MKDIR} ${STAGEDIR}${DATADIR}/${VIM_VER}/lang
	@${MKDIR} ${STAGEDIR}${DATADIR}/${VIM_VER}/keymap
	${INSTALL_DATA} ${WRKSRC}/runtime/keymap/* ${STAGEDIR}${DATADIR}/${VIM_VER}/keymap
.endif	#!defined(TINY)

.include <bsd.port.mk>
