# 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 }