void-packages/xbps-src
Juan RP fcf24b660f xbps-src: added -t option to create a temporary masterdir.
This temporary masterdir contains hardlinks of files stored in a real
masterdir, and once the target has finished will be removed.

Could be useful to create fully up to date and immutable real masterdirs
that are used as base for the temporary masterdirs.
2015-02-27 23:00:55 +01:00

684 lines
22 KiB
Bash
Executable file

#!/bin/bash
# vim: set ts=4 sw=4 et:
usage() {
cat << _EOF
$(basename $0): [options] <target> [arguments]
Targets: (only one may be specified)
binary-bootstrap [arch]
Install bootstrap packages from host repositories into <masterdir>.
If the optional 'arch' argument is set, it will install bootstrap packages
from this architecture, and its required xbps utilities. The <masterdir>
will be initialized for chroot operations.
bootstrap
Build and install from source the bootstrap packages into <masterdir>.
bootstrap-update
Updates bootstrap packages with latest versions available from registered
repositories in the XBPS configuration file.
build <pkgname>
Build package source (fetch + extract + configure + build).
chroot
Enter to the chroot in <masterdir>.
clean [pkgname]
Removes auto dependencies, cleans up <masterdir>/builddir and <masterdir>/destdir.
If <pkgname> argument is specified, package files from <masterdir>/destdir and its
build directory in <masterdir>/buiddir are removed.
configure <pkgname>
Configure a package (fetch + extract + configure).
extract <pkgname>
Extract package source distribution file(s) into the build directory.
By default set to <masterdir>/builddir.
fetch <pkgname>
Download package source distribution file(s).
install <pkgname>
Install target package into <destdir> but not building the binary package
and not removing build directory for inspection purposes.
list
Lists installed packages in <masterdir>.
pkg <pkgname>
Build binary package for <pkgname> and all required dependencies.
remove <pkgname>
Remove target package from <destdir>. If <pkgname>-<version> is not matched
from build template nothing is removed.
remove-autodeps
Removes all package dependencies that were installed automatically.
show <pkgname>
Show information for the specified package.
show-build-deps <pkgname>
Show required build dependencies for <pkgname>.
show-deps <pkgname>
Show required run-time dependencies for <pkgname>. Package must be
installed into destdir.
show-files <pkgname>
Show files installed by <pkgname>. Package must be installed into destdir.
show-options <pkgname>
Show available build options by <pkgname>.
show-shlib-provides <pkgname>
Show list of provided shlibs for <pkgname>. Package must be installed into destdir.
show-shlib-requires <pkgname>
Show list of required shlibs for <pkgname>. Package must be installed into destdir.
show-var <var>
Prints the value of <var> if it's defined in xbps-src.
show-repo-updates
Prints the list of outdated packages in XBPS repositories.
show-sys-updates
Prints the list of oudated packages in your system.
update-bulk
Rebuilds all packages in the system repositories that are outdated.
update-sys
Rebuilds all packages in your system that are outdated and updates them.
update-check <pkgname>
Check upstream site of <pkgname> for new releases.
zap
Removes a masterdir but preserving ccache, distcc and host directories.
Options:
-a <profile>
Cross compile packages for this profile. Supported values:
armv6hf-musl - for ARMv6 EABI (LE Hard Float) Musl/Linux
armv6hf - for ARMv6 EABI (LE Hard Float) GNU/Linux
armv7hf-musl - for ARMv7 EABI (LE Hard Float) Musl/Linux
armv7hf - for ARMv7 EABI (LE Hard Float) GNU/Linux
i686-musl - for i686 Musl/Linux
i686 - for i686 GNU/Linux
mips - for MIPS o32 (BE Soft Float) GNU/Linux
mipsel - for MIPS o32 (LE Soft Float) GNU/Linux
x86_64-musl - for x86_64 Musl/Linux
-C Do not remove build directory, automatic dependencies and
package destdir after successful install.
-f Force building and registering binary packages into the local repository,
even if same version is already registered.
-G Enable XBPS_USE_GIT_REVS (see etc/defaults.conf for more information).
-g Enable building -dbg packages with debugging symbols.
-H <hostdir>
Absolute path to a directory to be bind mounted at <masterdir>/host.
The host directory stores binary packages, sources and package dependencies
downloaded from remote repositories.
If unset defaults to void-packages/hostdir.
-h Usage output.
-I Ignore required dependencies, useful for extracting/fetching sources.
-j Number of parallel build jobs to use when building packages.
-L Disable ASCII colors.
-m <masterdir>
Absolute path to a directory to be used as masterdir.
The masterdir is the main directory to build/store/compile packages.
If unset defaults to void-packages/masterdir.
-N Disable use of remote repositories to resolve dependencies.
-o <opt,~opt2,...>
Enable or disable (prefixed with ~) package build options. Note this overrides
options set via XBPS_PKG_OPTIONS from 'etc/conf'. This effectively has the same
effect than setting 'XBPS_PKG_OPTIONS_<pkgname>' in 'etc/conf'.
Supported options can be shown with the 'show-options' target.
-r <repo>
Use an alternative local repository to store generated binary packages.
If unset defaults to <hostdir>/binpkgs. If set the binpkgs will
be stored into <hostdir>/binpkgs/<repo>.
This alternative repository will also be used to resolve dependencies
with highest priority order than others.
-t Create a temporary masterdir to not pollute the current one. Note that
the existing masterdir must be fully populated with binary-bootstrap first.
Once the target has finished, this temporary masterdir will be removed.
_EOF
}
check_reqhost_utils() {
local broken
[ -n "$IN_CHROOT" ] && return 0
for f in ${REQHOST_UTILS}; do
if ! command -v ${f} &>/dev/null; then
echo "${f} is missing in your system, can't continue!"
broken=1
fi
done
[ -n "$broken" ] && exit 1
[ -z "$1" ] && return 0
for f in ${REQHOST_UTILS_BOOTSTRAP}; do
if ! command -v ${f} &>/dev/null; then
echo "${f} is missing in your system, can't continue!"
broken=1
fi
done
[ -n "$broken" ] && exit 1
}
check_config_vars() {
if [ -s "$XBPS_CONFIG_FILE" ]; then
. $XBPS_CONFIG_FILE &>/dev/null
fi
if [ -z "$XBPS_MASTERDIR" ]; then
export XBPS_MASTERDIR="${XBPS_DISTDIR}/masterdir"
fi
if [ -z "$XBPS_HOSTDIR" ]; then
export XBPS_HOSTDIR="${XBPS_DISTDIR}/hostdir"
[ ! -d $XBPS_HOSTDIR ] && mkdir -p $XBPS_HOSTDIR
fi
if [ -d "$XBPS_MASTERDIR" -a ! -w "$XBPS_MASTERDIR" ]; then
echo "ERROR: not enough perms for masterdir $XBPS_MASTERDIR."
exit 1
fi
}
create_temporary_masterdir() {
local tmpmdir=$(mktemp -d -q -p $XBPS_DISTDIR masterdir.XXXXXXXXX || exit 1)
echo "=> Creating a temporary masterdir at $tmpmdir, please wait..."
cp -al $XBPS_MASTERDIR/* $tmpmdir/
if [ $? -ne 0 ]; then
echo "ERROR: failed to setup temporary masterdir $tmpmdir!"
exit 1
fi
export CHROOT_READY=1
export XBPS_MASTERDIR=$tmpmdir
}
check_build_requirements() {
local found
for f in $XBPS_SHUTILSDIR/*.sh; do
[ -r $f ] && . $f
done
case "$XBPS_TARGET" in
*bootstrap*) found=1;;
*) ;;
esac
if [ -z "$found" ]; then
xbps-uhelper cmpver "$XBPS_VERSION" "$XBPS_VERSION_REQ"
if [ $? -eq 255 ]; then
echo "ERROR: requires xbps>=${XBPS_VERSION_REQ}"
echo "Bootstrap packages must be updated with 'xbps-src bootstrap-update'"
exit 1
fi
fi
# Set XBPS_REPOSITORY to our current branch.
if [ -z "$XBPS_ALT_REPOSITORY" ]; then
pushd "$PWD" &>/dev/null
cd $XBPS_DISTDIR
_gitbranch="$(chroot-git symbolic-ref --short HEAD 2>/dev/null)"
if [ -n "${_gitbranch}" -a "${_gitbranch}" != "master" ]; then
export XBPS_ALT_REPOSITORY="${_gitbranch}"
export XBPS_REPOSITORY="${XBPS_REPOSITORY}/${_gitbranch}"
msg_normal "Using \`$XBPS_REPOSITORY\' as local repository.\n"
fi
popd &>/dev/null
else
export XBPS_REPOSITORY="${XBPS_REPOSITORY}/${XBPS_ALT_REPOSITORY}"
msg_normal "Using \`$XBPS_REPOSITORY\' as local repository.\n"
fi
}
install_bbootstrap() {
[ -n "$CHROOT_READY" ] && return
# binary bootstrap
msg_normal "Installing bootstrap from binary package repositories...\n"
# XBPS_TARGET_PKG == arch
if [ -n "$XBPS_TARGET_PKG" ]; then
_bootstrap_arch="env XBPS_TARGET_ARCH=$XBPS_TARGET_PKG"
if [ "${XBPS_TARGET_PKG}" != "${XBPS_TARGET_PKG#*-}" ]; then
_subarch="-${XBPS_TARGET_PKG#*-}"
fi
fi
mkdir -p $XBPS_MASTERDIR/var/db/xbps/keys
cd $XBPS_MASTERDIR
cp -f $XBPS_COMMONDIR/repo-keys/*.plist $XBPS_MASTERDIR/var/db/xbps/keys
${_bootstrap_arch} xbps-install -S --repository=${XBPS_REPOSITORY} \
${XBPS_INSTALL_ARGS} -c ${XBPS_HOSTDIR}/repocache \
-r $XBPS_MASTERDIR -y base-chroot${_subarch}
if [ $? -ne 0 ]; then
msg_error "Failed to install bootstrap packages!\n"
fi
# Reconfigure base-directories.
XBPS_ARCH=$XBPS_TARGET_PKG xbps-reconfigure -r $XBPS_MASTERDIR -f base-directories &>/dev/null
msg_normal "Installed bootstrap successfully!\n"
chroot_prepare $XBPS_TARGET_PKG || msg_error "Failed to initialize chroot!\n"
}
masterdir_zap() {
for f in bin boot builddir destdir dev etc home lib lib32 lib64 mnt \
opt proc root run sbin sys tmp usr var host media xbps \
void-packages .xbps_chroot_init; do
if [ -d "$XBPS_MASTERDIR/$f" ]; then
echo "Removing directory $XBPS_MASTERDIR/$f ..."
rm -rf $XBPS_MASTERDIR/$f
elif [ -h "$XBPS_MASTERDIR/$f" ]; then
echo "Removing link $XBPS_MASTERDIR/$f ..."
rm -f $XBPS_MASTERDIR/$f
elif [ -f "$XBPS_MASTERDIR/$f" ]; then
echo "Removing file $XBPS_MASTERDIR/$f ..."
rm -f $XBPS_MASTERDIR/$f
fi
done
echo "$XBPS_MASTERDIR masterdir cleaned up."
}
exit_func() {
wait
if [ -n "$sourcepkg" ]; then
remove_pkg $XBPS_CROSS_BUILD
fi
if [ -z "$IN_CHROOT" ]; then
msg_red "xbps-src: a failure has ocurred! exiting...\n"
fi
exit 2
}
basename_cwd() {
echo $(basename $(pwd))
}
read_pkg() {
if [ -z "${XBPS_TARGET_PKG}" ]; then
[ ! -r ./template ] && msg_error "missing build template in $(pwd).\n"
XBPS_TARGET_PKG=$(basename_cwd)
fi
setup_pkg $XBPS_TARGET_PKG $XBPS_CROSS_BUILD
}
readonly XBPS_VERSION_REQ="0.43.1"
readonly XBPS_VERSION=$(xbps-uhelper -V|awk '{print $2}')
readonly XBPS_SRC_VERSION="113"
export XBPS_MACHINE=$(uname -m)
#
# main()
#
XBPS_OPTIONS=
while getopts "a:CfgGhH:Ij:Lm:No:r:tV" opt; do
case $opt in
a) readonly XBPS_CROSS_BUILD="$OPTARG"; XBPS_OPTIONS+="-a $OPTARG ";;
C) readonly XBPS_KEEP_ALL=1; XBPS_OPTIONS+="-C ";;
f) readonly XBPS_BUILD_FORCEMODE=1; XBPS_OPTIONS+="-f ";;
G) readonly XBPS_USE_GIT_REVS=1; XBPS_OPTIONS+="-G ";;
g) readonly XBPS_DEBUG_PKGS=1; XBPS_OPTIONS+="-g ";;
H) readonly XBPS_HOSTDIR="$(readlink -m $OPTARG 2>/dev/null)"; XBPS_OPTIONS+="-H $XBPS_HOSTDIR ";;
h) usage && exit 0;;
I) readonly XBPS_SKIP_DEPS=1; XBPS_OPTIONS+="-I ";;
j) readonly XBPS_MAKEJOBS="$OPTARG"; XBPS_OPTIONS+="-j $OPTARG ";;
L) export NOCOLORS=1; XBPS_OPTIONS+="-L ";;
m) readonly XBPS_MASTERDIR=$(readlink -m $OPTARG 2>/dev/null); XBPS_OPTIONS+="-m $XBPS_MASTERDIR ";;
N) readonly XBPS_SKIP_REMOTEREPOS=1; XBPS_OPTIONS+="-N ";;
o) readonly XBPS_PKG_OPTIONS="$OPTARG"; XBPS_OPTIONS+="-o $OPTARG ";;
r) readonly XBPS_ALT_REPOSITORY="$OPTARG"; XBPS_OPTIONS+="-r $OPTARG ";;
t) readonly XBPS_TEMP_MASTERDIR=1; XBPS_KEEP_ALL=1; XBPS_OPTIONS+=" -t -C";;
V) echo $XBPS_SRC_VERSION && exit 0;;
--) shift; break;;
esac
done
shift $(($OPTIND - 1))
[ $# -eq 0 -o $# -gt 3 ] && usage && exit 1
umask 022
#
# Check for required utilities in host system.
#
# Required utilities in host system for the bootstrap target.
readonly REQHOST_UTILS_BOOTSTRAP="awk bash bison sed gcc g++ msgfmt makeinfo \
perl tar xz gzip bzip2 patch flex"
# Required utilities in host system for chroot ops.
readonly REQHOST_UTILS="xbps-install xbps-query xbps-rindex xbps-uhelper \
xbps-reconfigure xbps-remove xbps-create git"
check_reqhost_utils
if [ -n "$IN_CHROOT" ]; then
readonly XBPS_CONFIG_FILE=/etc/xbps/xbps-src.conf
readonly XBPS_DISTDIR=/void-packages
else
_distdir="$(readlink -f $(dirname $0))"
if [ "${_distdir}" = "." ]; then
readonly XBPS_DISTDIR="$(pwd -P)"
else
readonly XBPS_DISTDIR="${_distdir}"
fi
# Read defaults and then the local configuration file
if [ -f $XBPS_DISTDIR/etc/defaults.conf ]; then
. $XBPS_DISTDIR/etc/defaults.conf
fi
if [ -s $XBPS_DISTDIR/etc/conf ]; then
# Read user configuration first...
readonly XBPS_CONFIG_FILE=$XBPS_DISTDIR/etc/conf
elif [ -s $HOME/.xbps-src.conf ]; then
# ... fallback to ~/.xbps-src.conf otherwise.
readonly XBPS_CONFIG_FILE=$HOME/.xbps-src.conf
. $XBPS_CONFIG_FILE
fi
fi
#
# Check configuration vars before anyting else, and set defaults vars.
#
check_config_vars
if [ -z "$IN_CHROOT" -a -n "$XBPS_TEMP_MASTERDIR" ]; then
# Create a temporary masterdir (hardlinked) for this build.
create_temporary_masterdir
fi
if [ -n "$XBPS_HOSTDIR" ]; then
export XBPS_REPOSITORY=$XBPS_HOSTDIR/binpkgs
readonly XBPS_SRCDISTDIR=$XBPS_HOSTDIR/sources
else
export XBPS_REPOSITORY=$XBPS_MASTERDIR/host/binpkgs
readonly XBPS_SRCDISTDIR=$XBPS_MASTERDIR/host/sources
fi
if [ -n "$IN_CHROOT" ]; then
readonly XBPS_UHELPER_CMD="xbps-uhelper"
readonly XBPS_INSTALL_CMD="xbps-install"
readonly XBPS_QUERY_CMD="xbps-query"
readonly XBPS_RINDEX_CMD="xbps-rindex"
readonly XBPS_RECONFIGURE_CMD="xbps-reconfigure"
readonly XBPS_REMOVE_CMD="xbps-remove"
readonly XBPS_SRCPKGDIR=/void-packages/srcpkgs
readonly XBPS_COMMONDIR=/void-packages/common
readonly XBPS_DESTDIR=/destdir
readonly XBPS_BUILDDIR=/builddir
readonly XBPS_SHUTILSDIR=$XBPS_COMMONDIR/xbps-src/shutils
readonly XBPS_TRIGGERSDIR=$XBPS_SRCPKGDIR/xbps-triggers/files
readonly XBPS_CROSSPFDIR=$XBPS_COMMONDIR/cross-profiles
readonly XBPS_BUILDSTYLEDIR=$XBPS_COMMONDIR/build-style
readonly XBPS_LIBEXECDIR=$XBPS_COMMONDIR/xbps-src/libexec
else
readonly XBPS_UHELPER_CMD="xbps-uhelper -r $XBPS_MASTERDIR"
readonly XBPS_INSTALL_CMD="xbps-install --repository=$XBPS_REPOSITORY -r $XBPS_MASTERDIR"
readonly XBPS_QUERY_CMD="xbps-query --repository=$XBPS_REPOSITORY -r $XBPS_MASTERDIR"
readonly XBPS_RINDEX_CMD="xbps-rindex"
readonly XBPS_RECONFIGURE_CMD="xbps-reconfigure -r $XBPS_MASTERDIR"
readonly XBPS_REMOVE_CMD="xbps-remove -r $XBPS_MASTERDIR"
readonly XBPS_SRCPKGDIR=$XBPS_DISTDIR/srcpkgs
readonly XBPS_COMMONDIR=$XBPS_DISTDIR/common
readonly XBPS_SHUTILSDIR=$XBPS_COMMONDIR/xbps-src/shutils
readonly XBPS_DESTDIR=$XBPS_MASTERDIR/destdir
readonly XBPS_BUILDDIR=$XBPS_MASTERDIR/builddir
readonly XBPS_TRIGGERSDIR=$XBPS_SRCPKGDIR/xbps-triggers/files
readonly XBPS_CROSSPFDIR=$XBPS_COMMONDIR/cross-profiles
readonly XBPS_BUILDSTYLEDIR=$XBPS_COMMONDIR/build-style
readonly XBPS_LIBEXECDIR=$XBPS_COMMONDIR/xbps-src/libexec
fi
# XBPS_FETCH_CMD can be overriden
export XBPS_FETCH_CMD="xbps-uhelper fetch"
readonly XBPS_DIGEST_CMD="xbps-uhelper digest"
readonly XBPS_CMPVER_CMD="xbps-uhelper cmpver"
XBPS_TARGET="$1"
XBPS_TARGET_PKG="${2##*/}"
# Check if stdout is a tty; if false disable colors.
test -t 1 || export NOCOLORS=1
if [ "$(id -u)" -eq 0 ]; then
echo "ERROR: root cannot use xbps-src, switch to a regular user."
exit 1
fi
if [ -f $XBPS_MASTERDIR/.xbps_chroot_init ]; then
export CHROOT_READY=1
fi
if [ -s $XBPS_MASTERDIR/.xbps_chroot_init ]; then
export XBPS_ARCH=$(cat $XBPS_MASTERDIR/.xbps_chroot_init)
if [ "$XBPS_MACHINE" = "x86_64" -a "$XBPS_ARCH" = "i686" -a -z "$IN_CHROOT" ]; then
# reconfigure pkgs via linux32
linux32 xbps-reconfigure -r ${XBPS_MASTERDIR} -a &>/dev/null
# reexec itself via linux32
exec linux32 $0 ${XBPS_OPTIONS} $@
fi
fi
if [ -n "$XBPS_ARCH" ]; then
export XBPS_MACHINE=$XBPS_ARCH
fi
if [ -z "$XBPS_TARGET_MACHINE" ]; then
export XBPS_TARGET_MACHINE=${XBPS_ARCH:=$XBPS_MACHINE}
fi
export XBPS_SHUTILSDIR XBPS_CROSSPFDIR XBPS_TRIGGERSDIR \
XBPS_SRCPKGDIR XBPS_COMMONDIR XBPS_BUILDDIR XBPS_REPO_DELTAS \
XBPS_REPOSITORY XBPS_ALT_REPOSITORY XBPS_SRCDISTDIR XBPS_DIGEST_CMD \
XBPS_UHELPER_CMD XBPS_INSTALL_CMD XBPS_QUERY_CMD \
XBPS_RINDEX_CMD XBPS_RECONFIGURE_CMD XBPS_REMOVE_CMD \
XBPS_CMPVER_CMD XBPS_FETCH_CMD XBPS_VERSION XBPS_APIVER \
XBPS_BUILDSTYLEDIR XBPS_CFLAGS XBPS_CXXFLAGS XBPS_LDFLAGS \
XBPS_MAKEJOBS XBPS_BUILD_FORCEMODE XBPS_USE_GIT_REVS XBPS_DEBUG_PKGS \
XBPS_CCACHE XBPS_DISTCC XBPS_DISTCC_HOSTS XBPS_SKIP_DEPS \
XBPS_SKIP_REMOTEREPOS XBPS_CROSS_BUILD XBPS_PKG_OPTIONS \
XBPS_CONFIG_FILE XBPS_KEEP_ALL XBPS_HOSTDIR XBPS_MASTERDIR \
XBPS_SRC_VERSION XBPS_DESTDIR XBPS_MACHINE XBPS_TEMP_MASTERDIR
for i in REPOSITORY DESTDIR BUILDDIR SRCDISTDIR; do
eval val="\$XBPS_$i"
if [ ! -d "$val" ]; then
mkdir -p $val
fi
unset val
done
#
# Sanitize PATH.
#
if [ -z "$IN_CHROOT" ]; then
# In non chroot case always prefer host tools.
MYPATH="$XBPS_MASTERDIR/usr/bin:$XBPS_MASTERDIR/usr/sbin"
export PATH="$PATH:$MYPATH"
else
MYPATH="/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
export PATH="$MYPATH"
if [ -n "$XBPS_CCACHE" ]; then
CCACHEPATH="/usr/lib/ccache/bin"
export CCACHE_DIR="$XBPS_HOSTDIR/ccache-${XBPS_CROSS_BUILD:-${XBPS_MACHINE}}"
export PATH="$CCACHEPATH:$PATH"
mkdir -p $CCACHE_DIR
fi
if [ -n "$XBPS_DISTCC" ]; then
DISTCCPATH="/usr/lib/distcc/bin"
export DISTCC_DIR="$XBPS_HOSTDIR/distcc-${XBPS_CROSS_BUILD:-${XBPS_MACHINE}}"
export DISTCC_HOSTS="$XBPS_DISTCC_HOSTS"
export PATH="$DISTCCPATH:$PATH"
mkdir -p $DISTCC_DIR
fi
fi
check_build_requirements
trap 'exit_func' INT TERM
#
# Main switch.
#
case "$XBPS_TARGET" in
binary-bootstrap)
install_bbootstrap
;;
bootstrap)
# bootstrap from sources
# check for required host utils
check_reqhost_utils bootstrap
[ ! -d $XBPS_SRCPKGDIR/base-chroot ] && \
msg_error "Cannot find $XBPS_SRCPKGDIR/base-chroot directory!\n"
XBPS_TARGET_PKG="base-chroot"
bootstrap_vpkg=${XBPS_MASTERDIR}/etc/xbps.d/bootstrap-vpkgs.conf
mkdir -p ${XBPS_MASTERDIR}/etc/xbps.d
if [ ! -s ${bootstrap_vpkg} ]; then
# Fool xbps to resolve dependencies.
echo 'virtualpkg=libgcc-4.4.0_1:base-files' >> ${bootstrap_vpkg}
echo 'virtualpkg=libstdc++-4.4.0_1:base-files' >> ${bootstrap_vpkg}
fi
BEGIN_INSTALL=1
setup_pkg $XBPS_TARGET_PKG
install_pkg $XBPS_TARGET
[ -d $XBPS_MASTERDIR ] && rm -rf $XBPS_MASTERDIR
unset XBPS_TARGET_PKG
install_bbootstrap
;;
bootstrap-update)
if [ -n "$CHROOT_READY" -a -z "$IN_CHROOT" ]; then
chroot_handler ${XBPS_TARGET} dummy
else
remove_pkg_autodeps
${XBPS_INSTALL_CMD} -yu
fi
;;
chroot)
chroot_handler chroot dummy
;;
clean)
if [ -z "$XBPS_TARGET_PKG" ]; then
if [ -n "$CHROOT_READY" -a -z "$IN_CHROOT" ]; then
chroot_handler remove-autodeps
else
remove_pkg_autodeps
fi
msg_normal "xbps-src: cleaning up masterdir...\n"
rm -rf $XBPS_MASTERDIR/builddir $XBPS_MASTERDIR/destdir
else
read_pkg
if [ -n "$CHROOT_READY" -a -z "$IN_CHROOT" ]; then
chroot_handler $XBPS_TARGET $XBPS_TARGET_PKG || exit $?
else
remove_pkg_wrksrc $wrksrc
remove_pkg_statedir
if declare -f do_clean >/dev/null; then
run_func do_clean
fi
fi
remove_pkg $XBPS_CROSS_BUILD
fi
;;
remove-autodeps)
if [ -n "$CHROOT_READY" -a -z "$IN_CHROOT" ]; then
chroot_handler remove-autodeps
else
remove_pkg_autodeps
fi
;;
fetch|extract|build|configure|install|pkg)
BEGIN_INSTALL=1
read_pkg
if [ -n "$CHROOT_READY" -a -z "$IN_CHROOT" ]; then
chroot_handler $XBPS_TARGET $XBPS_TARGET_PKG
else
install_pkg $XBPS_TARGET $XBPS_CROSS_BUILD
fi
;;
remove|remove-destdir)
read_pkg
remove_pkg $XBPS_CROSS_BUILD
;;
list)
$XBPS_QUERY_CMD -l
;;
show)
read_pkg
show_pkg
;;
show-files)
read_pkg
show_pkg_files
;;
show-deps)
read_pkg
show_pkg_deps
;;
show-build-deps)
read_pkg
show_pkg_build_deps
;;
show-options)
read_pkg
show_pkg_build_options
;;
show-shlib-provides)
read_pkg
show_pkg_shlib_provides
;;
show-shlib-requires)
read_pkg
show_pkg_shlib_requires
;;
show-var)
eval value="\${$XBPS_TARGET_PKG}"
echo $value
;;
show-repo-updates)
bulk_build
;;
show-sys-updates)
bulk_build -i
;;
update-bulk)
bulk_update
;;
update-sys)
bulk_update -i
;;
update-check)
read_pkg
update_check
;;
zap)
masterdir_zap
;;
*)
msg_red "xbps-src: invalid target $XBPS_TARGET.\n"
usage && exit 1
;;
esac
if [ -n "$XBPS_TEMP_MASTERDIR" ]; then
msg_normal "Removing temporary masterdir at $XBPS_MASTERDIR...\n"
rm -rf $XBPS_MASTERDIR
fi
# Agur
exit $?