From a000a47cffd973c2573341d104b91c8a05ec6623 Mon Sep 17 00:00:00 2001 From: Sayan Chowdhury Date: Wed, 29 Jun 2022 17:08:47 +0530 Subject: [PATCH] eclass/vim-{doc,plugins}: Sync with Gentoo upstream to support EAPI8 Signed-off-by: Sayan Chowdhury --- .../portage-stable/eclass/vim-doc.eclass | 72 ++++++---- .../portage-stable/eclass/vim-plugin.eclass | 124 ++++++++++++++---- 2 files changed, 147 insertions(+), 49 deletions(-) diff --git a/sdk_container/src/third_party/portage-stable/eclass/vim-doc.eclass b/sdk_container/src/third_party/portage-stable/eclass/vim-doc.eclass index ba9d00f4f5..119ce79307 100644 --- a/sdk_container/src/third_party/portage-stable/eclass/vim-doc.eclass +++ b/sdk_container/src/third_party/portage-stable/eclass/vim-doc.eclass @@ -1,10 +1,10 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: vim-doc.eclass # @MAINTAINER: # vim@gentoo.org -# @SUPPORTED_EAPIS: 6 7 +# @SUPPORTED_EAPIS: 6 7 8 # @BLURB: Eclass for vim{,-plugin}.eclass to update documentation tags. # @DESCRIPTION: # This eclass is used by vim.eclass and vim-plugin.eclass to update @@ -16,26 +16,31 @@ # DEPEND in vim-plugin or by whatever version of vim is being # installed by the eclass. -case ${EAPI:-0} in - [67]) ;; +case ${EAPI} in + 6|7|8) ;; *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac -if [[ -z ${_VIM_DOC_ECLASS} ]] ; then -_VIM_DOC_ECLASS=1 +if [[ ! ${_VIM_DOC_ECLASS} ]] ; then +# @FUNCTION: update_vim_helptags +# @USAGE: +# @DESCRIPTION: +# Update the documentation tags in the versioned Vim directory. update_vim_helptags() { - local vimfiles vim d s + debug-print-function ${FUNCNAME} "${@}" + + local vimfiles helpfile files vim d # This is where vim plugins are installed vimfiles="${EROOT}"/usr/share/vim/vimfiles - if [[ $PN != vim-core ]]; then + if [[ ${PN} != vim-core ]]; then # Find a suitable vim binary for updating tags :helptags vim=$(type -P vim 2>/dev/null) - [[ -z "$vim" ]] && vim=$(type -P gvim 2>/dev/null) - [[ -z "$vim" ]] && vim=$(type -P kvim 2>/dev/null) - if [[ -z "$vim" ]]; then + [[ -z "${vim}" ]] && vim=$(type -P gvim 2>/dev/null) + [[ -z "${vim}" ]] && vim=$(type -P kvim 2>/dev/null) + if [[ -z "${vim}" ]]; then ewarn "No suitable vim binary to rebuild documentation tags" fi fi @@ -43,44 +48,57 @@ update_vim_helptags() { # Make vim not try to connect to X. See :help gui-x11-start # in vim for how this evil trickery works. if [[ -n "${vim}" ]] ; then - ln -s "${vim}" "${T}/tagvim" + ln -s "${vim}" "${T}/tagvim" || die vim="${T}/tagvim" fi # Install the documentation symlinks into the versioned vim # directory and run :helptags for d in "${EROOT%/}"/usr/share/vim/vim[0-9]*; do - [[ -d "$d/doc" ]] || continue # catch a failed glob + [[ -d "${d}/doc" ]] || continue # catch a failed glob - # Remove links, and possibly remove stale dirs - find $d/doc -name \*.txt -type l | while read s; do - [[ $(readlink "$s") = $vimfiles/* ]] && rm -f "$s" + # Remove links + readarray -d '' files < <(find "${d}"/doc -name "*.txt" -type l -print0 || die "cannot traverse ${d}/doc" ) + for helpfile in "${files[@]}"; do + if [[ $(readlink -f "${helpfile}") == "${vimfiles}"/* ]]; then + rm "${helpfile}" || die + fi done - if [[ -f "$d/doc/tags" && $(find "$d" | wc -l | tr -d ' ') = 3 ]]; then + + # Remove stale dirs, if possible + readarray -d '' files < <(find "${d}" -print0 || die "cannot traverse ${d}") + if [[ -f "${d}/doc/tags" && ${#files[@]} -eq 3 ]]; then # /usr/share/vim/vim61 # /usr/share/vim/vim61/doc # /usr/share/vim/vim61/doc/tags - einfo "Removing $d" - rm -r "$d" + einfo "Removing ${d}" + rm -r "${d}" || die continue fi # Re-create / install new links - if [[ -d $vimfiles/doc ]]; then - ln -s $vimfiles/doc/*.txt $d/doc 2>/dev/null + if [[ -d "${vimfiles}"/doc ]]; then + for helpfile in "${vimfiles}"/doc/*.txt; do + if [[ ! -e "${d}/doc/$(basename "${helpfile}")" ]]; then + ln -s "${helpfile}" "${d}/doc" || die + fi + done fi # Update tags; need a vim binary for this - if [[ -n "$vim" ]]; then - einfo "Updating documentation tags in $d" - DISPLAY= $vim -u NONE -U NONE -T xterm -X -n -f \ + if [[ -n "${vim}" ]]; then + einfo "Updating documentation tags in ${d}" + DISPLAY= "${vim}" -u NONE -U NONE -T xterm -X -n -f \ '+set nobackup nomore' \ - "+helptags $d/doc" \ - '+qa!' /dev/null + "+helptags ${d}/doc" \ + '+qa!' /dev/null || die fi done - [[ -n "${vim}" && -f "${vim}" ]] && rm "${vim}" + if [[ -n "${vim}" && -f "${vim}" ]]; then + rm "${vim}" || die + fi } +_VIM_DOC_ECLASS=1 fi diff --git a/sdk_container/src/third_party/portage-stable/eclass/vim-plugin.eclass b/sdk_container/src/third_party/portage-stable/eclass/vim-plugin.eclass index 50e727e98f..edf1c94d31 100644 --- a/sdk_container/src/third_party/portage-stable/eclass/vim-plugin.eclass +++ b/sdk_container/src/third_party/portage-stable/eclass/vim-plugin.eclass @@ -1,10 +1,10 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # @ECLASS: vim-plugin.eclass # @MAINTAINER: # vim@gentoo.org -# @SUPPORTED_EAPIS: 6 7 +# @SUPPORTED_EAPIS: 6 7 8 # @BLURB: used for installing vim plugins # @DESCRIPTION: # This eclass simplifies installation of app-vim plugins into @@ -13,14 +13,19 @@ # documentation, for which we make a special case via vim-doc.eclass. case ${EAPI} in - 6|7);; - *) die "EAPI ${EAPI:-0} unsupported (too old)";; + 6|7) ;; + 8) _DEFINE_VIM_PLUGIN_SRC_PREPARE=true ;; + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac -inherit vim-doc -EXPORT_FUNCTIONS src_install pkg_postinst pkg_postrm +if [[ ! ${_VIM_PLUGIN_ECLASS} ]]; then -VIM_PLUGIN_VIM_VERSION="${VIM_PLUGIN_VIM_VERSION:-7.3}" +inherit vim-doc + +# @ECLASS_VARIABLE: VIM_PLUGIN_VIM_VERSION +# @DESCRIPTION: +# Minimum Vim version the plugin supports. +: ${VIM_PLUGIN_VIM_VERSION:=7.3} DEPEND="|| ( >=app-editors/vim-${VIM_PLUGIN_VIM_VERSION} >=app-editors/gvim-${VIM_PLUGIN_VIM_VERSION} )" @@ -31,14 +36,59 @@ if [[ ${PV} != 9999* ]] ; then fi SLOT="0" +if [[ ${_DEFINE_VIM_PLUGIN_SRC_PREPARE} ]]; then +# @FUNCTION: vim-plugin_src_prepare +# @USAGE: +# @DESCRIPTION: +# Moves "after/syntax" plugins to directories to avoid file collisions with +# other packages. +# Note that this function is only defined and exported in EAPIs >= 8. +vim-plugin_src_prepare() { + debug-print-function ${FUNCNAME} "${@}" + + default_src_prepare + + # return if there's nothing to do + [[ -d after/syntax ]] || return + + pushd after/syntax >/dev/null || die + for file in *.vim; do + [[ -f "${file}" ]] || continue + mkdir "${file%.vim}" || die + mv "${file}" "${file%.vim}/${PN}.vim" || die + done + popd >/dev/null || die +} +fi + +# @ECLASS_VARIABLE: _VIM_PLUGIN_ALLOWED_DIRS +# @INTERNAL +# @DESCRIPTION: +# Vanilla Vim dirs. +# See /usr/share/vim/vim* for reference. +_VIM_PLUGIN_ALLOWED_DIRS=( + after autoload colors compiler doc ftdetect ftplugin indent keymap + macros plugin spell syntax +) + # @FUNCTION: vim-plugin_src_install +# @USAGE: [...] # @DESCRIPTION: # Overrides the default src_install phase. In order, this function: -# * fixes file permission across all files in ${S}. +# # * installs help and documentation files. -# * installs all files in "${ED}"/usr/share/vim/vimfiles. +# +# * installs all files recognized by default Vim installation and directories +# passed to this function as arguments in "${ED}"/usr/share/vim/vimfiles. +# +# Example use: +# @CODE +# src_install() { +# vim-plugin_src_install syntax_checkers +# } +# @CODE vim-plugin_src_install() { - has "${EAPI:-0}" 0 1 2 && ! use prefix && ED="${D}" + debug-print-function ${FUNCNAME} "${@}" # Install non-vim-help-docs einstalldocs @@ -46,21 +96,35 @@ vim-plugin_src_install() { # Install remainder of plugin insinto /usr/share/vim/vimfiles/ local d - for d in *; do - [[ -d "${d}" ]] || continue - doins -r "${d}" - done + case ${EAPI:-0} in + 6|7) + for d in *; do + [[ -d "${d}" ]] || continue + doins -r "${d}" + done ;; + *) + for d in "${_VIM_PLUGIN_ALLOWED_DIRS[@]}" "${@}"; do + [[ -d "${d}" ]] || continue + doins -r "${d}" + done ;; + esac } # @FUNCTION: vim-plugin_pkg_postinst +# @USAGE: # @DESCRIPTION: # Overrides the pkg_postinst phase for this eclass. # The following functions are called: +# # * update_vim_helptags +# # * update_vim_afterscripts +# # * display_vim_plugin_help vim-plugin_pkg_postinst() { - update_vim_helptags # from vim-doc + debug-print-function ${FUNCNAME} "${@}" + + update_vim_helptags # from vim-doc update_vim_afterscripts # see below display_vim_plugin_help # see below } @@ -71,8 +135,9 @@ vim-plugin_pkg_postinst() { # This function calls the update_vim_helptags and update_vim_afterscripts # functions and eventually removes a bunch of empty directories. vim-plugin_pkg_postrm() { - has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX= - update_vim_helptags # from vim-doc + debug-print-function ${FUNCNAME} "${@}" + + update_vim_helptags # from vim-doc update_vim_afterscripts # see below # Remove empty dirs; this allows @@ -82,25 +147,26 @@ vim-plugin_pkg_postrm() { } # @FUNCTION: update_vim_afterscripts +# @USAGE: # @DESCRIPTION: # Creates scripts in /usr/share/vim/vimfiles/after/* # comprised of the snippets in /usr/share/vim/vimfiles/after/*/*.d update_vim_afterscripts() { - has "${EAPI:-0}" 0 1 2 && ! use prefix && EROOT="${ROOT}" - has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX= + debug-print-function ${FUNCNAME} "${@}" + local d f afterdir="${EROOT}"/usr/share/vim/vimfiles/after # Nothing to do if the dir isn't there - [ -d "${afterdir}" ] || return 0 + [[ -d "${afterdir}" ]] || return 0 - einfo "Updating scripts in ${EPREFIX}/usr/share/vim/vimfiles/after" + einfo "Updating scripts in ${afterdir}" find "${afterdir}" -type d -name \*.vim.d | while read d; do echo '" Generated by update_vim_afterscripts' > "${d%.d}" || die find "${d}" -name \*.vim -type f -maxdepth 1 -print0 | sort -z | \ xargs -0 cat >> "${d%.d}" || die "update_vim_afterscripts failed" done - einfo "Removing dead scripts in ${EPREFIX}/usr/share/vim/vimfiles/after" + einfo "Removing dead scripts in ${afterdir}" find "${afterdir}" -type f -name \*.vim | \ while read f; do [[ "$(head -n 1 ${f})" == '" Generated by update_vim_afterscripts' ]] \ @@ -115,6 +181,7 @@ update_vim_afterscripts() { } # @FUNCTION: display_vim_plugin_help +# @USAGE: # @DESCRIPTION: # Displays a message with the plugin's help file if one is available. Uses the # VIM_PLUGIN_HELPFILES env var. If multiple help files are available, they @@ -124,6 +191,8 @@ update_vim_afterscripts() { # extra message regarding enabling filetype plugins is displayed if # VIM_PLUGIN_MESSAGES includes the word "filetype". display_vim_plugin_help() { + debug-print-function ${FUNCNAME} "${@}" + local h if [[ -z ${REPLACING_VERSIONS} ]]; then @@ -160,3 +229,14 @@ display_vim_plugin_help() { fi fi } + +_VIM_PLUGIN_ECLASS=1 +fi + +EXPORT_FUNCTIONS src_install pkg_postinst pkg_postrm + +# src_prepare is only exported in EAPI >= 8 +case ${EAPI} in + 6|7) ;; + *) EXPORT_FUNCTIONS src_prepare ;; +esac