diff --git a/xbps-src/shutils/check_installed_packages.sh b/xbps-src/shutils/check_installed_packages.sh new file mode 100644 index 00000000000..d2a749ef368 --- /dev/null +++ b/xbps-src/shutils/check_installed_packages.sh @@ -0,0 +1,63 @@ +#- +# Copyright (c) 2010 Juan Romero Pardines. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#- +# +# Check installed package versions against the source packages repository. +# +check_installed_packages() +{ + local f lpkgn lpkgver rv srcpkgver + + msg_normal "Checking for newer packages from srcpkgs, please wait..." + for f in $(xbps-bin.static list|awk '{print $1}'); do + lpkgn=$(xbps-uhelper.static getpkgname ${f}) + lpkgver=$(xbps-uhelper.static getpkgversion ${f}) + + if [ ! -r ${XBPS_SRCPKGDIR}/${lpkgn}/template ]; then + msg_warn "Installed package ${f} not available as source pkg, skipping." + continue + fi + . ${XBPS_SRCPKGDIR}/${lpkgn}/template + if [ -r ${XBPS_SRCPKGDIR}/${lpkgn}/${lpkgn}.template ]; then + unset revision + . ${XBPS_SRCPKGDIR}/${lpkgn}/${lpkgn}.template + fi + if [ -n "$revision" ]; then + srcpkgver="${version}_${revision}" + else + srcpkgver="${version}" + fi + xbps-uhelper.static cmpver ${lpkgver} ${srcpkgver} + rv=$? + if [ $rv -eq 255 ]; then + echo " ${f}: newer version -> ${srcpkgver}" + elif [ $rv -eq 1 ]; then + echo " ${f}: sourcepkg outdated -> ${srcpkgver}" + else + echo >&2 " ${f}: already up to date." + fi + reset_tmpl_vars + done + msg_normal "done." +} diff --git a/xbps-src/xbps-src.sh.in b/xbps-src/xbps-src.sh.in index 24d6f603237..c038834597d 100644 --- a/xbps-src/xbps-src.sh.in +++ b/xbps-src/xbps-src.sh.in @@ -68,27 +68,32 @@ usage() $progname: [-Ch] [-c ] [-m ] [-p ] Targets: - bootstrap Build and install the bootstrap packages into masterdir. + bootstrap Build and install the bootstrap packages into . build Build a package (fetch + extract + configure + build). build-pkg [all] Build a binary package from . Package must be installed into destdir. If the - keyword is used all packages currently installed will - be used. - chroot Enter to the chroot in masterdir. + keyword is used all packages currently installed in + / will be used. + checkvers Checks installed package versions against srcpkgs + for new available versions. + chroot Enter to the chroot in . configure Configure a package (fetch + extract + configure). extract Extract distribution file(s) into build directory. + Build directory is always available in + /pkg-builddir/. fetch Download distribution file(s). info Show information for current pkg build template. install-destdir build + install into destdir. install install-destdir + stow. - list List installed packages in masterdir. + list List installed packages in . listfiles List installed files from . make-repoidx Build a package index for the local repository associated - with the master directory, or updates it. + with the master directory or , + or updates it. remove Remove package completely (destdir + masterdir). - stow Stow files from destdir into masterdir and + stow Stow files from into and register package in database. - unstow Remove files from masterdir and unregister + unstow Remove files from and unregister package from database. Options: @@ -99,7 +104,7 @@ Options: -m Master directory, overwritting the value set in the configuration file at @@XBPS_INSTALL_ETCDIR@@/xbps-src.conf. -p Package directory, overwritting default path at - /pkg-binpkgs. + /pkg-binpkgs. _EOF } @@ -240,7 +245,7 @@ bootstrap) ;; build|configure) . $XBPS_SHUTILSDIR/tmpl_funcs.sh - [ ! -r ./template ] && msg_error "missing build template file." + [ ! -r ./template ] && msg_error "missing build template in $(pwd)." . ./template if [ -z "$base_chroot" -a -z "$in_chroot" ]; then @@ -293,16 +298,23 @@ build-pkg) fi done else + [ ! -r ./template ] && msg_error "missing build template in $(pwd)." setup_tmpl $(basename_cwd) xbps_make_binpkg fi ;; +checkvers) + . $XBPS_SHUTILSDIR/tmpl_funcs.sh + . $XBPS_SHUTILSDIR/check_installed_packages.sh + check_installed_packages + ;; chroot) . $XBPS_SHUTILSDIR/chroot.sh xbps_chroot_handler chroot dummy ;; extract|fetch|info) . $XBPS_SHUTILSDIR/tmpl_funcs.sh + [ ! -r ./template ] && msg_error "missing build template in $(pwd)." setup_tmpl $(basename_cwd) if [ "$target" = "info" ]; then . $XBPS_SHUTILSDIR/tmpl_funcs.sh @@ -319,7 +331,7 @@ extract|fetch|info) ;; install|install-destdir) . $XBPS_SHUTILSDIR/tmpl_funcs.sh - [ ! -r ./template ] && msg_error "missing build template file." + [ ! -r ./template ] && msg_error "missing build template in $(pwd)." . ./template install_destdir_target=no @@ -354,18 +366,21 @@ make-repoidx) ;; remove) . $XBPS_SHUTILSDIR/pkgtarget_funcs.sh + [ ! -r ./template ] && msg_error "missing build template in $(pwd)." setup_tmpl $(basename_cwd) remove_pkg ;; stow) stow_flag=yes . $XBPS_SHUTILSDIR/tmpl_funcs.sh + [ ! -r ./template ] && msg_error "missing build template in $(pwd)." setup_tmpl $(basename_cwd) . $XBPS_SHUTILSDIR/stow_funcs.sh stow_pkg_handler stow ;; unstow) . $XBPS_SHUTILSDIR/tmpl_funcs.sh + [ ! -r ./template ] && msg_error "missing build template in $(pwd)." setup_tmpl $(basename_cwd) . $XBPS_SHUTILSDIR/stow_funcs.sh stow_pkg_handler unstow