pacman/scripts/makeworld.sh.in

193 lines
5.8 KiB
Bash

#!/bin/bash
#
# makeworld
# @configure_input@
#
# Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# gettext initialization
export TEXTDOMAIN='pacman'
export TEXTDOMAINDIR='@localedir@'
myver="@PACKAGE_VERSION@"
BUG_REPORT_EMAIL='@PACKAGE_BUGREPORT@'
toplevel=$(pwd)
usage() {
printf "makeworld (pacman) %s\n" "$myver"
echo "$(gettext "Usage: %s [options] <destdir> <category> [category] ...")" "$0"
echo "$(gettext "Options:")"
echo "$(gettext " -b, --builddeps Build missing dependencies from source")"
echo "$(gettext " -B, --noccache Do not use ccache during build")"
echo "$(gettext " -c, --clean Clean up work files after build")"
echo "$(gettext " -C, --cleancache Clean up source files from the cache")"
echo "$(gettext " -d, --nodeps Skip all dependency checks")"
echo "$(gettext " -e, --noextract Do not extract source files (use existing src/ dir)")"
echo "$(gettext " -f, --force Overwrite existing packages")"
echo "$(gettext " -i, --install Install package after successful build")"
echo "$(gettext " -m, --nocolor Disable colorized output messages")"
echo "$(gettext " -h, --help This help")"
echo "$(gettext " -o, --nobuild Download and extract files only")"
echo "$(gettext " -r, --rmdeps Remove installed dependencies after a successful build")"
echo "$(gettext " -s, --syncdeps Install missing dependencies with pacman")"
echo "$(gettext " -S, --usesudo Use sudo when running pacman commands")"
echo
echo "$(gettext "These options can be passed to pacman:")"
echo
echo "$(gettext " --noconfirm Do not ask for confirmation when resolving dependencies")"
echo "$(gettext " --noprogressbar Do not show a progress bar when downloading files")"
echo
echo "$(gettext "Where <category> is one or more directory names under the ABS root")"
echo "$(gettext "eg: makeworld -c /packages base lib editors")"
echo
echo "$(gettext "This should be run from the toplevel directory of ABS (usually /var/abs)")"
}
version() {
printf "makeworld (pacman) %s\n" "$myver"
printf "$(gettext "\
Copyright (C) 2002-2007 Judd Vinet <jvinet@zeroflux.org>.\n\n\
This is free software; see the source for copying conditions.\n\
There is NO WARRANTY, to the extent permitted by law.\n")"
}
MAKEPKG_OPTS=
for arg in $*; do
case $arg in
# pacman
--noconfirm) MAKEPKG_OPTS="$MAKEPKG_OPTS --noconfirm" ;;
--noprogressbar) MAKEPKG_OPTS="$MAKEPKG_OPTS --noprogressbar" ;;
# makepkg
--clean) MAKEPKG_OPTS="$MAKEPKG_OPTS -c" ;;
--install) MAKEPKG_OPTS="$MAKEPKG_OPTS -i" ;;
--syncdeps) MAKEPKG_OPTS="$MAKEPKG_OPTS -s" ;;
--usesudo) MAKEPKG_OPTS="$MAKEPKG_OPTS -S" ;;
--builddeps) MAKEPKG_OPTS="$MAKEPKG_OPTS -b" ;;
--nodeps) MAKEPKG_OPTS="$MAKEPKG_OPTS -d" ;;
--force) MAKEPKG_OPTS="$MAKEPKG_OPTS -f" ;;
--rmdeps) MAKEPKG_OPTS="$MAKEPKG_OPTS -r" ;;
--noccache) MAKEPKG_OPTS="$MAKEPKG_OPTS -B" ;;
--cleancache) MAKEPKG_OPTS="$MAKEPKG_OPTS -C" ;;
--noextract) MAKEPKG_OPTS="$MAKEPKG_OPTS -e" ;;
--nobuild) MAKEPKG_OPTS="$MAKEPKG_OPTS -o" ;;
--nocolor) MAKEPKG_OPTS="$MAKEPKG_OPTS -m" ;;
--help)
usage
exit 0
;;
--version)
version
exit 0
;;
--*)
usage
exit 1
;;
-*)
while getopts "chisSbdfrBCemoSV-" opt; do
case $opt in
c) MAKEPKG_OPTS="$MAKEPKG_OPTS -c" ;;
i) MAKEPKG_OPTS="$MAKEPKG_OPTS -i" ;;
s) MAKEPKG_OPTS="$MAKEPKG_OPTS -s" ;;
b) MAKEPKG_OPTS="$MAKEPKG_OPTS -b" ;;
d) MAKEPKG_OPTS="$MAKEPKG_OPTS -d" ;;
f) MAKEPKG_OPTS="$MAKEPKG_OPTS -f" ;;
r) MAKEPKG_OPTS="$MAKEPKG_OPTS -r" ;;
B) MAKEPKG_OPTS="$MAKEPKG_OPTS -B" ;;
C) MAKEPKG_OPTS="$MAKEPKG_OPTS -C" ;;
e) MAKEPKG_OPTS="$MAKEPKG_OPTS -e" ;;
m) MAKEPKG_OPTS="$MAKEPKG_OPTS -m" ;;
o) MAKEPKG_OPTS="$MAKEPKG_OPTS -o" ;;
S) MAKEPKG_OPTS="$MAKEPKG_OPTS -S" ;;
h)
usage
exit 0
;;
V)
version
exit 0
;;
-)
OPTIND=0
break
;;
esac
done
;;
*)
dest=$arg
shift
break
;;
esac
shift
if [ "$dest" != "" ]; then
break
fi
done
if [ "$dest" = "" ]; then
usage
exit 1
fi
if [ $# -lt 1 ]; then
usage
exit 1
fi
# convert a (possibly) relative path to absolute
cd "$dest"
dest="$(pwd)"
cd - &>/dev/null
sd=$(date +"[%b %d %H:%M]")
for category in $*; do
for port in $(find "$toplevel/$category" -maxdepth 1 -mindepth 1 -type d | sort); do
cd $port
if [ -f PKGBUILD ]; then
. PKGBUILD
buildstatus=0
if [ ! -f "$dest/$pkgname-$pkgver-$pkgrel.pkg.tar.gz" ]; then
PKGDEST="$dest" makepkg $MAKEPKG_OPTS -m 2>>$toplevel/makepkg.log
if [ $? -gt 0 ]; then
buildstatus=2
else
buildstatus=1
fi
fi
d=$(date +"[%b %d %H:%M]")
echo -n "$d " >>$toplevel/build.log
case $buildstatus in
0) echo "$pkgname already built -- skipping" >>$toplevel/build.log ;;
1) echo "$pkgname was built successfully" >>$toplevel/build.log ;;
2) echo "$pkgname build failed" >>$toplevel/build.log ;;
esac
fi
done
done
ed=$(date +"[%b %d %H:%M]")
echo "makeworld complete." >>$toplevel/build.log
echo " started: $sd" >>$toplevel/build.log
echo " finished: $ed" >>$toplevel/build.log
exit 0
# vim: set ts=2 sw=2 noet: