diff options
Diffstat (limited to 'abs/core/vi')
-rw-r--r-- | abs/core/vi/PKGBUILD | 62 | ||||
-rw-r--r-- | abs/core/vi/fetch_patches.sh | 63 | ||||
-rw-r--r-- | abs/core/vi/fetch_runtime.sh | 117 | ||||
-rw-r--r-- | abs/core/vi/vi.install | 37 |
4 files changed, 279 insertions, 0 deletions
diff --git a/abs/core/vi/PKGBUILD b/abs/core/vi/PKGBUILD new file mode 100644 index 0000000..1165431 --- /dev/null +++ b/abs/core/vi/PKGBUILD @@ -0,0 +1,62 @@ +# $Id: PKGBUILD 3026 2008-06-18 02:38:15Z eric $ +# Maintainer: tobias [ tobias at archlinux org ] + +pkgname=vi +_srcver=7.1 +_patchlevel=330 +pkgver=${_srcver}.${_patchlevel} +pkgrel=10 +pkgdesc="a highly configurable, improved version of the vi text editor (basic version)" +arch=(i686 x86_64) +license=('custom:vim') +url="http://www.vim.org" +groups=('base') +depends=('glibc' 'ncurses' 'coreutils') +makedepends=('wget' 'sed' 'grep') +backup=(etc/virc) +install=${pkgname}.install +# we need the extra-stuff to get all patches applied smoothly +source=(ftp://ftp.vim.org/pub/vim/unix/vim-${_srcver}.tar.bz2 \ + ftp://ftp.vim.org/pub/vim/extra/vim-${_srcver}-extra.tar.gz \ + ftp://ftp.vim.org/pub/vim/extra/vim-${_srcver}-lang.tar.gz \ + fetch_patches.sh fetch_runtime.sh) +md5sums=('44c6b4914f38d6f9aa959640b89da329' '605cc7ae31bcc9d7864bb0bb6025f55d' \ + '144aa049ba70621acf4247f0459f3ee7' '0fbebfbf8464b1e65fb6a9ca4bddefe1' \ + '92e3dc8844d446c1ecd28e7257a47cb7') + +build() +{ + # pull in patches from vim.org (or the src cache alternatively) + . ${startdir}/src/fetch_patches.sh + . ${startdir}/src/fetch_runtime.sh + get_patches || return 1 + cd ${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//") + # set the virc different from vimrc + sed -i 's|^.*\(#define SYS_VIMRC_FILE.*"\) .*$|\1|' src/feature.h + sed -i 's|^.*\(#define VIMRC_FILE.*"\) .*$|\1|' src/feature.h + sed -i 's|^.*\(#define USR_VIMRC_FILE\t"\).*$|\1$HOME/.virc"|' src/feature.h + sed -i 's|/etc/vimrc|/etc/virc|' src/feature.h + sed -i 's|\.vimrc|.virc|' src/feature.h + # build party + ./configure --prefix=/usr --localstatedir=/var/lib/vim --mandir=/usr/share/man \ + --with-compiledby=ArchLinux --with-features=normal \ + --with-global-runtime=/usr/share/vim --with-vim-name=vi \ + --disable-gpm --disable-acl --with-x=no --disable-gui --enable-multibyte + make || return 1 + make VIMRCLOC=/etc DESTDIR=${startdir}/pkg VIMRTDIR= install + cd ${startdir}/pkg/usr/bin + rm -f vim rvim view rview + ln -s vi evi + + _runtimedir="${startdir}/pkg/usr/share/vim/" + update_runtime + # kill vim and x specific stuff + sed -i '/vms/,+4 d;/Convenient command/,+3 d;/mouse work/,+2 d'\ + ${startdir}/pkg/usr/share/vim/vimrc_example.vim + install -Dm644 ${startdir}/pkg/usr/share/vim/vimrc_example.vim \ + ${startdir}/pkg/etc/virc + rm -f ${startdir}/pkg/usr/share/vim/gvimrc_example.vim + install -dm755 ${startdir}/pkg/usr/share/licenses/vim + cd ${startdir}/pkg/usr/share/licenses/vim + ln -s ../../vim/doc/uganda.txt license.txt +} diff --git a/abs/core/vi/fetch_patches.sh b/abs/core/vi/fetch_patches.sh new file mode 100644 index 0000000..1f38e42 --- /dev/null +++ b/abs/core/vi/fetch_patches.sh @@ -0,0 +1,63 @@ +# the external logic for pulling in patches + +get_patches() { + _patchdir=${startdir}/src/patches + cd ${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//") + if [ -d ${_patchdir} ]; then + rm -rf ${_patchdir} + echo -e "\tremove patches from old build" + fi + mkdir ${_patchdir} && cd ${_patchdir} + _rpath=ftp://ftp.vim.org/pub/vim/patches/${_srcver} + + # change IFS to loop line-by-line + _OLDIFS=$IFS + IFS=" +" + echo -e "\tfetching checksumfile for patches" + wget ${_rpath}/MD5SUMS >/dev/null 2>&1 + + downloads=0 + for _line in $(/bin/cat MD5SUMS); do + downloads=$((${downloads} + 1)) + _md5=$(echo $_line | cut -d ' ' -f1) + _file=$(echo $_line | cut -d ' ' -f3) + if [ -f ${SRCDEST}/vim-${_srcver}/${_file} ]; then + echo -e "\thaving patch file:${_file}" + cp ${SRCDEST}/vim-${_srcver}/${_file} ./ + else + echo -n -e "\t... fetching patch file: ${_file} ..." + wget ${_rpath}/${_file} >/dev/null 2>&1 + if [ -w ${SRCDEST} ]; then + if [ ! -d ${SRCDEST}/vim-${_srcver} ]; then + mkdir -p ${SRCDEST}/vim-${_srcver} + fi + cp ${_file} ${SRCDEST}/vim-${_srcver}/ + echo " done!" + fi + fi + + if [ $(echo "${_md5} ${_file}" | md5sum --status -c -) ]; then + echo ${_file} md5sums do not match + return 1 + fi + done + + ## TEMPFIX stupid fuckup upstream + mv ./7.1.126ne ./7.1.126 + downloads=$((${downloads} - 1)) + ######## + + if [ ${downloads} != ${_patchlevel} ]; then + echo -e "Number of patches does not match the patchlevel!\nEdit the PKGBUILD accordingly!" + return 1 + fi + IFS=$_OLDIFS + rm MD5SUMS + cd ${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//") + for _patch in $(/bin/ls ${_patchdir}); do + patch -Np0 -i ${_patchdir}/${_patch} || return 1 + done + rm -rf ${_patchdir} + return 0 +} diff --git a/abs/core/vi/fetch_runtime.sh b/abs/core/vi/fetch_runtime.sh new file mode 100644 index 0000000..f244ea5 --- /dev/null +++ b/abs/core/vi/fetch_runtime.sh @@ -0,0 +1,117 @@ +# the purpose of this magic is to pull in the latest runtime files for vim +# we start withe theruntime provoded by the tarballs and compare MD5s against +# the latest runtime +# if this fails we look in the local source cache if they have been fetched +# for an earlier build and compare those MD5 files +# if this fails, we fetch the stuff from online and store it in the local src +# cache. +# The local cache has to be set (makepkg.conf) AND it has to be writable + +update_runtime() { + _OLDDIR=$(pwd) #get absolute path + _errors=0 + _ftp="ftp://ftp.vim.org/pub/vim/runtime" + + # we're gonna be sneaky and grok the A-A-P recipe for the files we need + _recipe="getunix.aap" + _srccache="${SRCDEST}/vim-${_srcver}/" + + echo "getting runtime recipe" + cd ${startdir}/src + [ -f "${_recipe}" ] && rm "${_recipe}" + wget "${_ftp}/${_recipe}" >/dev/null 2>&1 + + cd "${_runtimedir}" + _runtimedir=$(pwd) #get absolute path + + # change IFS to loop line-by-line + _OLDIFS=$IFS + IFS=" +" + echo "begin fetching updated runtime files..." + for _file in $(grep "file = " "${startdir}/src/${_recipe}"); do + _file=$(echo ${_file} | sed "s|.*file = \(.*\)|\1|") + _md5=$(grep -A2 "file = ${_file} *$" "${startdir}/src/${_recipe}" | \ + grep "get_md5" | \ + sed 's|@if get_md5(file) != "\(.*\)":|\1|g') + _dir=$(dirname "${_file}") + + mkdir -p "${_dir}" + + echo -e "\t${_file}" + _havefile=0 + # if we have the file and the MD5sum fails, we technically don't have the file + if [ -f ${_file} ]; then + # MD5 fails ? ... we don't have the file + if [ $(echo "${_md5} ${_file}" | md5sum --status -c -) ]; then + rm ${_file} + else + _havefile=1 + fi + fi + # look files that were not copied from the unzipped sources + _cachefile=${startdir}/src/vim$(echo ${_srcver} | sed "s/\.//")/runtime/${_file} + if [ ${_havefile} -ne 1 -a -f ${_cachefile} ]; then + # MD5 fails ? ... we lookup if we downloaded another version earlier + if [ $(echo "${_md5} ${_cachefile}" | md5sum --status -c -) ]; then + _cachefile=${_srccache}/${_file} + if [ -f ${_cachefile} ]; then + if [ $(echo "${_md5} ${_cachefile}" | md5sum --status -c -) ]; then + rm ${_cachefile} + else + cp ${_cachefile} ${_dir} + _havefile=1 + fi + fi + else + cp ${_cachefile} ${_dir} + _havefile=1 + fi + fi + # look up the local $SRCDEST + _cachefile=${_srccache}/${_file} + if [ ${_havefile} -ne 1 -a -f ${_cachefile} ]; then + # MD5 fails ? ... we don't have the file + if [ $(echo "${_md5} ${_cachefile}" | md5sum --status -c -) ]; then + rm ${_cachefile} + else + cp ${_cachefile} ${_dir} + _havefile=1 + fi + fi + # so we finally have to fetch it and store it to $SRCDEST (cache) + if [ ${_havefile} -ne 1 ]; then + echo -n -e "\t ... fetching file ${_file} ..." + cd "${_dir}" + wget "${_ftp}/${_file}" >/dev/null 2>&1 + cd "${_runtimedir}" + # store freshly downloaded file in SRCDEST + mkdir -p ${_srccache}/${_dir} + cp ${_file} ${_srccache}/${_dir} + echo -e " done!" + fi + + # check the MD5 sum finally + if [ $(echo "${_md5} ${_file}" | md5sum --status -c -) ]; then + echo "!!!! md5sum check for ${_file} failed !!!!" + errors=$((${_errors} + 1)) + fi + done + IFS=${_OLDIFS} + + echo "vim runtime got updated" + + if [ ${_errors} -gt 0 ]; then + echo "${_errors} failed MD5 checks while updating runtime files -> build can't be completed" + return 1 + else + echo -e "\tpatching filetype.vim for better handling of pacman related files ..." + sed -i "s/rpmsave/pacsave/;s/rpmnew/pacnew/;s/,\*\.ebuild/\0,PKGBUILD*,*.install/" filetype.vim + sed -i "/find the end/,+3{s/changelog_date_entry_search/changelog_date_end_entry_search/}" ftplugin/changelog.vim + fi + # make Aaron happy + wget http://www.vim.org/scripts/download_script.php\?src_id=7766 \ + -O autoload/pythoncomplete.vim + cd "${_OLDDIR}" + return 0 +} diff --git a/abs/core/vi/vi.install b/abs/core/vi/vi.install new file mode 100644 index 0000000..ebb73c0 --- /dev/null +++ b/abs/core/vi/vi.install @@ -0,0 +1,37 @@ +post_install() { + # if we have vim installed create view/rview symlinks to vim + if [ ! -f usr/bin/vim ] ; then + cd usr/bin + ln -s vi view + ln -s vi rview + cd ${OLDPWD} + echo "Create vi related symlinks..." + fi + echo -n "Updating vi help tags..." + usr/bin/vi --noplugins -u NONE -U NONE \ + --cmd ":helptags usr/share/vim/doc" --cmd ":q" > /dev/null 2>&1 + echo "done." +} + +pre_remove() { + # if vi is a binary instead of a symlink we have an intact gvim installation + # with a different binary/symlink structure + # we recover what pacmans database knows about Vim + if [ ! -f usr/bin/vim ] ; then + rm -f usr/bin/view usr/bin/rview + echo "Remove vi related symlinks ..." + fi +} + +post_upgrade() { + post_install $1 +} + +pre_upgrade() { + pre_remove $2 +} + + +op=$1 +shift +[ "$(type -t "$op")" = "function" ] && $op "$@" |