diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/.gitignore | 2 | ||||
-rw-r--r-- | scripts/Makefile.am | 19 | ||||
-rw-r--r-- | scripts/gensync.sh.in | 169 | ||||
-rw-r--r-- | scripts/makepkg.sh.in | 272 | ||||
-rw-r--r-- | scripts/repo-add.sh.in | 28 | ||||
-rw-r--r-- | scripts/repo-remove.sh.in | 16 | ||||
-rw-r--r-- | scripts/updatesync.sh.in | 172 |
7 files changed, 180 insertions, 498 deletions
diff --git a/scripts/.gitignore b/scripts/.gitignore index 53164a41..f2f19fd8 100644 --- a/scripts/.gitignore +++ b/scripts/.gitignore @@ -1,7 +1,5 @@ -gensync makepkg pacman-optimize rankmirrors repo-add repo-remove -updatesync diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 24b9c12d..e6c051b0 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -2,33 +2,36 @@ AUTOMAKE_OPTIONS = std-options bin_SCRIPTS = \ - gensync \ makepkg \ pacman-optimize \ rankmirrors \ repo-add \ - repo-remove \ - updatesync + repo-remove EXTRA_DIST = \ - gensync.sh.in \ makepkg.sh.in \ pacman-optimize.sh.in \ rankmirrors.py.in \ repo-add.sh.in \ - repo-remove.sh.in \ - updatesync.sh.in + repo-remove.sh.in # Files that should be removed, but which Automake does not know. MOSTLYCLEANFILES = $(bin_SCRIPTS) *.tmp +if USE_GIT_VERSION +GIT_VERSION := $(shell sh -c 'git describe --abbrev=4 | sed s/^v//')-dirty +REAL_PACKAGE_VERSION = $(GIT_VERSION) +else +REAL_PACKAGE_VERSION = $(PACKAGE_VERSION) +endif + #### Taken from the autoconf scripts Makefile.am #### edit = sed \ -e 's|@localedir[@]|$(localedir)|g' \ -e 's|@sysconfdir[@]|$(sysconfdir)|g' \ -e 's|@localstatedir[@]|$(localstatedir)|g' \ -e 's|@prefix[@]|$(prefix)|g' \ - -e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' \ + -e 's|@PACKAGE_VERSION[@]|$(REAL_PACKAGE_VERSION)|g' \ -e 's|@PACKAGE_BUGREPORT[@]|$(PACKAGE_BUGREPORT)|g' \ -e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' \ -e 's|@DBEXT[@]|$(DBEXT)|g' \ @@ -48,13 +51,11 @@ $(bin_SCRIPTS): Makefile chmod a-w $@.tmp mv $@.tmp $@ -gensync: $(srcdir)/gensync.sh.in makepkg: $(srcdir)/makepkg.sh.in pacman-optimize: $(srcdir)/pacman-optimize.sh.in rankmirrors: $(srcdir)/rankmirrors.py.in repo-add: $(srcdir)/repo-add.sh.in repo-remove: $(srcdir)/repo-remove.sh.in re-pacman: $(srcdir)/re-pacman.sh.in -updatesync: $(srcdir)/updatesync.sh.in # vim:set ts=2 sw=2 noet: diff --git a/scripts/gensync.sh.in b/scripts/gensync.sh.in deleted file mode 100644 index d5dec275..00000000 --- a/scripts/gensync.sh.in +++ /dev/null @@ -1,169 +0,0 @@ -#!/bin/bash -# -# gensync -# @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@' - -# functions - -usage() { - printf "gensync (pacman) %s\n\n" "$myver" - printf "$(gettext "Usage: %s <root> <destfile> [package_directory]")\n\n" "$0" - printf "$(gettext "\ -NOTE: this script is DEPRECATED. It will be removed in the next major\n\ -release of pacman, so please use repo-add and repo-remove instead.\n\n")" - printf "$(gettext "\ -gensync will generate a sync database by reading all PKGBUILD files\n\ -from <root>. gensync builds the database in a temporary directory\n\ -and then compresses it to <destfile>.\n\n")" - printf "$(gettext "\ -gensync will calculate md5sums of packages in the same directory as\n\ -<destfile>, unless an alternate [package_directory] is specified.\n\n")" - printf "$(gettext "\ -note: The <destfile> name is important. It must be of the form\n\ - {treename}.db.tar.gz where {treename} is the name of the custom\n\ - package repository you configured in /etc/pacman.conf. The\n\ - generated database must reside in the same directory as your\n\ - custom packages (also configured in /etc/pacman.conf)\n\n")" - echo "$(gettext "Example: gensync /var/abs/local /home/mypkgs/custom.db.tar.gz")" -} - -version() { - printf "gensync (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")" -} - -error () { - local mesg=$1; shift - printf "==> ERROR: ${mesg}\n" "$@" >&2 -} - -die () { - error $* - exit 1 -} - -check_force () { - local i - for i in ${options[@]}; do - local lc=$(echo $i | tr [:upper:] [:lower:]) - if [ "$lc" = "force" ]; then - true - fi - done - false -} - -# PROGRAM START - -# determine whether we have gettext; make it a no-op if we do not -if [ ! $(type -t gettext) ]; then - gettext() { - echo "$@" - } -fi - -if [ "$1" = "-h" -o "$1" = "--help" ]; then - usage - exit 0 -fi - -if [ "$1" = "-V" -o "$1" = "--version" ]; then - version - exit 0 -fi - -if [ $# -lt 2 ]; then - usage - exit 1 -fi - -# source system and user makepkg.conf -if [ -r @sysconfdir@/makepkg.conf ]; then - source @sysconfdir@/makepkg.conf -else - die "$(gettext "%s not found. Can not continue.")" "@sysconfdir@/makepkg.conf" -fi - -if [ -r ~/.makepkg.conf ]; then - source ~/.makepkg.conf -fi - - -d=$(dirname $1) -rootdir="$(cd $d && pwd)/$(basename $1)" -d="$(dirname $2)" -destdir="$(cd $d && pwd)" -destfile="$destdir/$(basename $2)" -pkgdir="" -if [ "$3" != "" ]; then - pkgdir="$3" -fi - -[ ! -d "$rootdir" ] && die "$(gettext "invalid root dir: %s")" $rootdir - -printf "$(gettext "\ -NOTE: this script is DEPRECATED. It will be removed in the next major\n\ -release of pacman, so please use repo-add and repo-remove instead.\n\n")" - -echo "$(gettext "gensync: building database entries, generating md5sums...")" >&2 -cd "$destdir" - -pkgs="" -forcepkgs="" - -for file in $(find "$rootdir"/* -name "$BUILDSCRIPT"); do - unset pkgname pkgver pkgrel options - - source $file || die "$(gettext "failed to parse %s")" $file - if [ "$arch" = 'any' ]; then - CARCH='any' - fi - if [ "$pkgdir" != "" ]; then - pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}" - else - pkgfile="$destdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}" - fi - - if [ ! -f "$pkgfile" ]; then - error "$(gettext "could not find %s-%s-%s-%s%s - skipping")" $pkgname $pkgver $pkgrel $CARCH $PKGEXT - else - if check_force; then - forcepkgs="$forcepkgs $pkgfile" - else - pkgs="$pkgs $pkgfile" - fi - fi -done - -echo "$(gettext "creating repo DB...")" - -# we'll trim the output just a tad, as gensync may be used on large repos -repo-add $destfile $pkgs --force $force_pkgs \ - | grep -e "package" -e "database" - -# vim: set ts=2 sw=2 noet: diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 175edb8f..5bdc5bc9 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -33,18 +33,26 @@ export TEXTDOMAIN='pacman' export TEXTDOMAINDIR='@localedir@' +# file -i does not work on Mac OSX unless legacy mode is set +export COMMAND_MODE='legacy' + +# when fileglobbing, we want * in an empty directory to expand to the null +# string rather than itself +shopt -s nullglob + myver='@PACKAGE_VERSION@' confdir='@sysconfdir@' startdir="$PWD" srcdir="$startdir/src" pkgdir="$startdir/pkg" +known_options=('strip' 'docs' 'libtool' 'emptydirs' 'zipman' 'ccache' 'distcc' 'makeflags' 'force') +readonly -a known_options # Options ASROOT=0 CLEANUP=0 CLEANCACHE=0 DEP_BIN=0 -DEP_SRC=0 FORCE=0 INFAKEROOT=0 GENINTEG=0 @@ -182,25 +190,6 @@ check_option() { return fi - # BEGIN DEPRECATED - # TODO: This code should be removed in the next release of makepkg. - local needle=$(echo $1 | tr [:upper:] [:lower:]) - local opt - for opt in ${options[@]}; do - opt=$(echo $opt | tr [:upper:] [:lower:]) - if [ "$opt" = "no$needle" ]; then - warning "$(gettext "Options beginning with 'no' will be deprecated in the next version of makepkg!")" - plain "$(gettext "Please replace 'no' with '!': %s -> %s.")" "no$needle" "!$needle" - echo 'n' # Disabled - return - elif [ "$opt" = "keepdocs" -a "$needle" = "docs" ]; then - warning "$(gettext "Option 'keepdocs' may not work as intended. Please replace with 'docs'.")" - echo 'y' # Enabled - return - fi - done - # END DEPRECATED - # fall back to makepkg.conf options ret=$(in_opt_array "$1" ${OPTIONS[@]}) if [ "$ret" != '?' ]; then @@ -299,6 +288,20 @@ get_downloadclient() { echo "$agent" } +get_downloadcmd() { + local dlagent=$1 + local netfile=$2 + local file=$3 + + if echo "$dlagent" | grep -q "%u" ; then + local dlcmd=$(echo "$dlagent" | sed "s|%o|$file.part|" | sed "s|%u|$netfile|") + else + local dlcmd="$dlagent $netfile" + fi + + echo "$dlcmd" +} + check_deps() { [ $# -gt 0 ] || return @@ -325,7 +328,7 @@ handledeps() { striplist="$striplist $depstrip" done - if [ "$DEP_SRC" = "0" -a "$DEP_BIN" = "0" ]; then + if [ "$DEP_BIN" = "0" ]; then return $R_DEPS_MISSING fi @@ -344,40 +347,6 @@ handledeps() { error "$(gettext "Pacman failed to install missing dependencies.")" exit 1 # TODO: error code fi - elif [ "$DEP_SRC" = "1" ]; then - msg "$(gettext "Building missing dependencies...")" - - # install missing deps by building them from source. - # we look for each package name in $SRCROOT and build it. - if [ "$SRCROOT" = "" ]; then - error "$(gettext "Source root cannot be found - please make sure it is specified in %s.")" "$confdir/makepkg.conf" - exit 1 # TODO: error code - fi - - # TODO: handle version comparators (eg, glibc>=2.2.5) - for dep in $striplist; do - local candidates="$(find "$SRCROOT" -type d -name "$dep")" - if [ "$candidates" = "" ]; then - error "$(gettext "Could not find '%s' under %s")" "$dep" "$SRCROOT" - exit 1 # TODO: error code - fi - - local makepkg_opts='-i -c -b' - [ "$RMDEPS" = "1" ] && makepkg_opts="$makepkg_opts -r" - [ "$ASROOT" = "1" ] && makepkg_opts="$makepkg_opts --asroot" - local ret packagedir - for packagedir in $candidates; do - if [ -f "$packagedir/$BUILDSCRIPT" ]; then - cd "$packagedir" - ret=0 - PKGDEST="$PKGDEST" makepkg $makepkg_opts $PACMAN_OPTS || ret=$? - [ $ret -eq 0 ] && continue 2 - fi - done - - error "$(gettext "Failed to build '%s'")" "$dep" - exit 1 # TODO: error code - done fi # rerun any additional sh scripts found in /etc/profile.d/ @@ -407,7 +376,7 @@ resolve_deps() { # check deps again to make sure they were resolved deplist="$(check_deps $*)" [ "$deplist" = "" ] && return $R_DEPS_SATISFIED - elif [ "$DEP_BIN" = "1" -o "$DEP_SRC" = "1" ]; then + elif [ "$DEP_BIN" = "1" ]; then error "$(gettext "Failed to install all missing dependencies.")" fi @@ -433,10 +402,17 @@ remove_deps() { done msg "Removing installed dependencies..." + local ret=0 if [ "$ASROOT" = "0" ]; then - sudo pacman $PACMAN_OPTS -Rns $deplist + sudo pacman $PACMAN_OPTS -Rns $deplist || ret=$? else - pacman $PACMAN_OPTS -Rns $deplist + pacman $PACMAN_OPTS -Rns $deplist || ret=$? + fi + + # Fixes FS#10039 - exit cleanly as package has built successfully + if [ $ret -ne 0 ]; then + warning "$(gettext "Failed to remove installed dependencies.")" + return 0 fi } @@ -456,11 +432,13 @@ download_sources() { local file=$(strip_url "$netfile") if [ -f "$startdir/$file" ]; then msg2 "$(gettext "Found %s in build dir")" "$file" - cp -s --remove-destination "$startdir/$file" "$srcdir/" + rm -f "$srcdir/$file" + ln -s "$startdir/$file" "$srcdir/" continue elif [ -f "$SRCDEST/$file" ]; then msg2 "$(gettext "Using cached copy of %s")" "$file" - cp -s --remove-destination "$SRCDEST/$file" "$srcdir/" + rm -f "$srcdir/$file" + ln -s "$SRCDEST/$file" "$srcdir/" continue fi @@ -471,18 +449,22 @@ download_sources() { fi # find the client we should use for this URL - local dlclient=$(get_downloadclient $netfile) || exit $? + local dlclient=$(get_downloadclient "$netfile") || exit $? msg2 "$(gettext "Downloading %s...")" "$file" # fix flyspray bug #3289 local ret=0 - $dlclient "$netfile" || ret=$? + $(get_downloadcmd "$dlclient" "$netfile" "$file") || ret=$? if [ $ret -gt 0 ]; then error "$(gettext "Failure while downloading %s")" "$file" plain "$(gettext "Aborting...")" exit 1 fi - cp -s --remove-destination "$SRCDEST/$file" "$srcdir/" + if echo "$dlclient" | grep -q "%o" ; then + mv -f "$SRCDEST/$file.part" "$SRCDEST/$file" + fi + rm -f "$srcdir/$file" + ln -s "$SRCDEST/$file" "$srcdir/" done popd &>/dev/null @@ -647,8 +629,8 @@ extract_sources() { done if [ $EUID -eq 0 ]; then - # chown all source files to root.root - chown -R root.root "$srcdir" + # change perms of all source files to root user & root group + chown -R 0:0 "$srcdir" fi } @@ -716,37 +698,41 @@ tidy_install() { rm -rf ${DOC_DIRS[@]} fi - msg2 "$(gettext "Compressing man pages...")" - local manpage mandirs ext file link hardlinks hl - mandirs="usr/man usr/share/man usr/local/man usr/local/share/man opt/*/man" - find ${mandirs} -type f 2>/dev/null | while read manpage ; do - # check file still exists (potentially compressed with hard link) - if [ -f ${manpage} ]; then - ext="${manpage##*.}" - file="${manpage##*/}" - if [ "$ext" != "gz" -a "$ext" != "bz2" ]; then - # update symlinks to this manpage - find ${mandirs} -lname "$file" 2>/dev/null | while read link ; do - rm -f "$link" - ln -sf "${file}.gz" "${link}.gz" - done - # find hard links and remove them - # the '|| true' part keeps the script from bailing if find returned an - # error, such as when one of the man directories doesn't exist - hardlinks="$(find ${mandirs} \! -name "$file" -samefile "$manpage" 2>/dev/null)" || true - for hl in ${hardlinks}; do - rm -f "${hl}"; - done - # compress the original - gzip -9 "$manpage" - # recreate hard links removed earlier - for hl in ${hardlinks}; do - ln "${manpage}.gz" "${hl}.gz" - chmod 644 ${hl}.gz - done + if [ "$(check_option zipman)" = "y" ]; then + msg2 "$(gettext "Compressing man pages...")" + local manpage mandirs ext file link hardlinks hl + mandirs="usr/man usr/share/man usr/local/man usr/local/share/man opt/*/man" + find ${mandirs} -type f 2>/dev/null | + while read manpage ; do + # check file still exists (potentially compressed with hard link) + if [ -f ${manpage} ]; then + ext="${manpage##*.}" + file="${manpage##*/}" + if [ "$ext" != "gz" -a "$ext" != "bz2" ]; then + # update symlinks to this manpage + find ${mandirs} -lname "$file" 2>/dev/null | + while read link ; do + rm -f "$link" + ln -sf "${file}.gz" "${link}.gz" + done + # find hard links and remove them + # the '|| true' part keeps the script from bailing if find returned an + # error, such as when one of the man directories doesn't exist + hardlinks="$(find ${mandirs} \! -name "$file" -samefile "$manpage" 2>/dev/null)" || true + for hl in ${hardlinks}; do + rm -f "${hl}"; + done + # compress the original + gzip -9 "$manpage" + # recreate hard links removed earlier + for hl in ${hardlinks}; do + ln "${manpage}.gz" "${hl}.gz" + chmod 644 ${hl}.gz + done + fi fi - fi - done + done + fi if [ "$(check_option strip)" = "y" ]; then @@ -790,7 +776,7 @@ create_package() { else local packager="Unknown Packager" fi - local size=$(du -sb | awk '{print $1}') + local size=$(du -sk | awk '{print $1 * 1024}') # write the .PKGINFO file msg2 "$(gettext "Generating .PKGINFO file...")" @@ -849,7 +835,6 @@ create_package() { local comp_files=".PKGINFO" # check for an install script - # TODO: should we include ${pkgname}.install if it exists and $install is unset? if [ "$install" != "" ]; then msg2 "$(gettext "Adding install script...")" cp "$startdir/$install" .INSTALL @@ -868,7 +853,7 @@ create_package() { local pkg_file="$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}" - if ! bsdtar -czf "$pkg_file" $comp_files $(ls); then + if ! bsdtar -czf "$pkg_file" $comp_files *; then error "$(gettext "Failed to create package file.")" exit 1 # TODO: error code fi @@ -940,14 +925,26 @@ create_xdelta() { create_srcpackage() { cd "$startdir" + if [ "$SOURCEONLY" = "2" ]; then + # get back to our src directory so we can begin with sources + mkdir -p "$srcdir" + cd "$srcdir" + download_sources + # we can only check checksums if we have all files + check_checksums + cd "$startdir" + fi msg "$(gettext "Creating source package...")" - local comp_files="$BUILDSCRIPT" + local srclinks="$(mktemp -d "$startdir"/srclinks.XXXXXXXXX)" + mkdir "${srclinks}"/${pkgname} + msg2 "$(gettext "Adding %s...")" "$BUILDSCRIPT" + ln -s "${startdir}/${BUILDSCRIPT}" "${srclinks}/${pkgname}/" if [ "$install" != "" ]; then if [ -f $install ]; then msg2 "$(gettext "Adding install script...")" - comp_files="$comp_files $install" + ln -s "${startdir}/$install" "${srclinks}/${pkgname}/" else error "$(gettext "Install script %s not found.")" "$install" fi @@ -955,14 +952,18 @@ create_srcpackage() { if [ -f ChangeLog ]; then msg2 "$(gettext "Adding %s...")" "ChangeLog" - comp_files="$comp_files ChangeLog" + ln -s "${startdir}/ChangeLog" "${srclinks}/${pkgname}" fi - local i - for i in ${source[@]}; do - if [ -f $i ]; then - msg2 "$(gettext "Adding %s...")" "$i" - comp_files="$comp_files $i" + local netfile + for netfile in ${source[@]}; do + local file=$(strip_url "$netfile") + if [ -f $netfile ]; then + msg2 "$(gettext "Adding %s...")" "$netfile" + ln -s $netfile ${srclinks}/${pkgname} + elif [ "$SOURCEONLY" = "2" -a -f "$SRCDEST/$file" ]; then + msg2 "$(gettext "Adding %s...")" "$file" + ln -s "$SRCDEST/$file" "${srclinks}/${pkgname}/" fi done @@ -970,10 +971,13 @@ create_srcpackage() { # tar it up msg2 "$(gettext "Compressing source package...")" - if ! bsdtar -czf "$pkg_file" $comp_files; then + cd ${srclinks} + if ! bsdtar -czLf "$pkg_file" ${pkgname}; then error "$(gettext "Failed to create source package file.")" exit 1 # TODO: error code fi + cd ${startdir} + rm -rf ${srclinks} } install_package() { @@ -1071,7 +1075,6 @@ usage() { echo echo "$(gettext "Options:")" printf "$(gettext " -A, --ignorearch Ignore incomplete arch field in %s")\n" "$BUILDSCRIPT" - echo "$(gettext " -b, --builddeps Build missing dependencies from source")" 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")" @@ -1145,9 +1148,11 @@ SRCDEST=${_SRCDEST:-$SRCDEST} SRCDEST=${SRCDEST:-$startdir} #default to $startdir if undefined # Parse Command Line Options. -OPT_SHORT="AbcCdefFghiLmop:rRsSV" -OPT_LONG="ignorearch,asroot,builddeps,clean,cleancache,nodeps,noextract,force,forcever:,geninteg,help,holdver" -OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,rmdeps,repackage,source,syncdeps,usesudo,version" +OPT_SHORT="AbcCdefFghiLmop:rRsV" +OPT_LONG="allsource,asroot,ignorearch,builddeps,clean,cleancache,nodeps" +OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,help,holdver" +OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,rmdeps,repackage,source" +OPT_LONG="$OPT_LONG,syncdeps,version" # Pacman Options OPT_LONG="$OPT_LONG,noconfirm,noprogressbar" OPT_TEMP="$(getopt -o "$OPT_SHORT" -l "$OPT_LONG" -n "$(basename "$0")" -- "$@" || echo 'GETOPT GO BANG!')" @@ -1165,9 +1170,9 @@ while true; do --noprogressbar) PACMAN_OPTS="$PACMAN_OPTS --noprogressbar" ;; # Makepkg Options + --allsource) SOURCEONLY=2 ;; --asroot) ASROOT=1 ;; -A|--ignorearch) IGNOREARCH=1 ;; - -b|--builddeps) DEP_SRC=1 ;; -c|--clean) CLEANUP=1 ;; -C|--cleancache) CLEANCACHE=1 ;; -d|--nodeps) NODEPS=1 ;; @@ -1188,11 +1193,6 @@ while true; do --source) SOURCEONLY=1 ;; -s|--syncdeps) DEP_BIN=1 ;; - # BEGIN DEPRECATED - -S|--usesudo) - warning "$(gettext "Sudo is used by default now. The --usesudo option is deprecated!")" ;; - # END DEPRECATED - -h|--help) usage; exit 0 ;; # E_OK -V|--version) version; exit 0 ;; # E_OK @@ -1276,7 +1276,7 @@ else fi # check for sudo if we will need it during makepkg execution -if [ "$ASROOT" = "0" -a \( "$DEP_BIN" = "1" -o "$DEP_SRC" = "1" \ +if [ "$ASROOT" = "0" -a \( "$DEP_BIN" = "1" \ -o "$RMDEPS" = "1" -o "$INSTALL" = "1" \) ]; then if [ ! "$(type -p sudo)" ]; then error "$(gettext "Cannot find the sudo binary! Is sudo installed?")" @@ -1293,13 +1293,6 @@ unset optdepends options noextract if [ ! -f "$BUILDSCRIPT" ]; then error "$(gettext "%s does not exist.")" "$BUILDSCRIPT" exit 1 - #TODO this is an attempt at a generic way to unset all package specific - #variables in a PKGBUILD - #else - # #this is fun.... we'll unset - # for var in $(grep "=" $BUILDSCRIPT | sed "s|.*\(\<.*\>\)=.*|\1|g"); do - # unset $var - # done fi source "$BUILDSCRIPT" @@ -1348,6 +1341,25 @@ if [ "$install" -a ! -f "$install" ]; then exit 1 fi +valid_options=1 +for opt in ${options[@]}; do + known=0 + # check if option matches a known option or its inverse + for kopt in ${known_options[@]}; do + if [ "${opt}" = "${kopt}" -o "${opt}" = "!${kopt}" ]; then + known=1 + fi + done + if [ $known -eq 0 ]; then + error "$(gettext "options array contains unknown option '%s'")" "$opt" + valid_options=0 + fi +done +if [ $valid_options -eq 0 ]; then + exit 1 +fi +unset valid_options opt known kopt + # We need to run devel_update regardless of whether we are in the fakeroot # build process so that if the user runs makepkg --forcever manually, we # 1) output the correct pkgver, and 2) use the correct filename when @@ -1383,14 +1395,14 @@ if [ "$INFAKEROOT" = "1" ]; then exit 0 # $E_OK fi -msg "$(gettext "Making package: %s")" "$pkgname $pkgver-$pkgrel ($(date))" +msg "$(gettext "Making package: %s")" "$pkgname $pkgver-$pkgrel $CARCH ($(date))" if [ $EUID -eq 0 ]; then warning "$(gettext "Running makepkg as root...")" fi # if we are creating a source-only package, go no further -if [ "$SOURCEONLY" = "1" ]; then +if [ "$SOURCEONLY" != "0" ]; then if [ -f "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}${SRCEXT}" \ -a "$FORCE" = "0" ]; then error "$(gettext "A package has already been built. (use -f to overwrite)")" @@ -1470,8 +1482,8 @@ else mkdir -p "$pkgdir" cd "$startdir" - if [ $EUID -eq 0 ]; then - # if we are root, then we don't need to recall makepkg with fakeroot + if [ "$(check_buildenv fakeroot)" != "y" -o $EUID -eq 0 ]; then + # if we are root or if fakeroot is not enabled, then we don't use it if [ "$REPKG" = "1" ]; then warning "$(gettext "Skipping build.")" else @@ -1494,7 +1506,7 @@ else create_xdelta "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}" fi -msg "$(gettext "Finished making: %s")" "$pkgname ($(date))" +msg "$(gettext "Finished making: %s")" "$pkgname $pkgver-$pkgrel $CARCH ($(date))" install_package diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in index 63d94d37..e90f0e89 100644 --- a/scripts/repo-add.sh.in +++ b/scripts/repo-add.sh.in @@ -3,7 +3,7 @@ # repo-add - add a package to a given repo database file # @configure_input@ # -# Copyright (c) 2006 Aaron Griffin <aaron@archlinux.org> +# Copyright (c) 2006-2008 Aaron Griffin <aaron@archlinux.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 @@ -25,18 +25,20 @@ export TEXTDOMAINDIR='@localedir@' myver='@PACKAGE_VERSION@' confdir='@sysconfdir@' -FORCE=0 +QUIET=0 REPO_DB_FILE="" # ensure we have a sane umask set umask 0022 msg() { + [ $QUIET -ne 0 ] && return local mesg=$1; shift printf "==> ${mesg}\n" "$@" >&1 } msg2() { + [ $QUIET -ne 0 ] && return local mesg=$1; shift printf " -> ${mesg}\n" "$@" >&1 } @@ -54,21 +56,20 @@ error() { # print usage instructions usage() { printf "repo-add (pacman) %s\n\n" "$myver" - printf "$(gettext "Usage: %s <path-to-db> [--force] <package> ...\n\n")" "$0" + printf "$(gettext "Usage: %s [-q] <path-to-db> <package> ...\n\n")" "$0" printf "$(gettext "\ repo-add will update a package database by reading a package file.\n\ Multiple packages to add can be specified on the command line.\n\n")" printf "$(gettext "\ -The --force flag will add a 'force' entry to the sync database, which\n\ -tells pacman to skip its internal version number checking and update\n\ -the package regardless.\n\n")" +The -q/--quiet flag will force this program to run silently except\n\ +in the case of warnings or errors.\n\n")" echo "$(gettext "Example: repo-add /path/to/repo.db.tar.gz pacman-3.0.0.pkg.tar.gz")" } version() { printf "repo-add (pacman) %s\n" "$myver" printf "$(gettext "\ -Copyright (C) 2006 Aaron Griffin <aaron@archlinux.org>.\n\n\ +Copyright (C) 2006-2008 Aaron Griffin <aaron@archlinux.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")" } @@ -117,7 +118,7 @@ db_write_delta() # get md5sum and size of delta md5sum="$(md5sum "$deltafile" | cut -d ' ' -f 1)" - csize=$(du -b -L "$deltafile" | cut -f 1) + csize=$(du -kL "$deltafile" | awk '{print $1 * 1024}') # ensure variables were found if [ -z "$pkgname" -o -z "$fromver" -o -z "$tover" -o -z "$arch" ]; then @@ -164,7 +165,7 @@ db_write_entry() IFS=$OLDIFS # get compressed size of package - csize=$(du -b -L "$pkgfile" | cut -f 1) + csize=$(du -kL "$pkgfile" | awk '{print $1 * 1024}') startdir=$(pwd) pushd "$gstmpdir" 2>&1 >/dev/null @@ -209,7 +210,7 @@ db_write_entry() [ -n "$builddate" ] && echo -e "%BUILDDATE%\n$builddate\n" >>desc [ -n "$packager" ] && echo -e "%PACKAGER%\n$packager\n" >>desc write_list_entry "REPLACES" "$_replaces" "desc" - [ $FORCE -eq 1 -o -n "$force" ] && echo -e "%FORCE%\n" >>desc + [ -n "$force" ] && echo -e "%FORCE%\n" >>desc # create depends entry msg2 "$(gettext "Creating 'depends' db entry...")" @@ -236,7 +237,7 @@ db_write_entry() if db_write_delta "$delta"; then msg2 "$(gettext "Added delta '%s'")" "$(basename "$delta")" else - msg2 "$(gettext "Could not add delta '%s'")" "$(basename "$delta")" + warning "$(gettext "Could not add delta '%s'")" "$(basename "$delta")" fi fi done @@ -298,7 +299,10 @@ success=0 # parse arguments for arg in "$@"; do if [ "$arg" == "--force" -o "$arg" == "-f" ]; then - FORCE=1 + warning "$(gettext "the -f and --force options are no longer recognized")" + msg2 "$(gettext "use options=(force) in the PKGBUILD instead")" + elif [ "$arg" == "--quiet" -o "$arg" == "-q" ]; then + QUIET=1 elif [ -z "$REPO_DB_FILE" ]; then REPO_DB_FILE=$(readlink -f "$arg") if ! test_repo_db_file; then diff --git a/scripts/repo-remove.sh.in b/scripts/repo-remove.sh.in index 47a0d5ae..08786eec 100644 --- a/scripts/repo-remove.sh.in +++ b/scripts/repo-remove.sh.in @@ -3,7 +3,7 @@ # repo-remove - remove a package entry from a given repo database file # @configure_input@ # -# Copyright (c) 2002-2007 by Judd Vinet <jvinet@zeroflux.org> +# Copyright (c) 2007-2008 Dan McGee <dan@archlinux.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 @@ -25,14 +25,17 @@ export TEXTDOMAINDIR='@localedir@' myver='@PACKAGE_VERSION@' confdir='@sysconfdir@' +QUIET=0 REPO_DB_FILE="" msg() { + [ $QUIET -ne 0 ] && return local mesg=$1; shift printf "==> ${mesg}\n" "$@" >&1 } msg2() { + [ $QUIET -ne 0 ] && return local mesg=$1; shift printf " -> ${mesg}\n" "$@" >&1 } @@ -50,18 +53,21 @@ error() { # print usage instructions usage() { printf "$(gettext "repo-remove %s\n\n")" $myver - printf "$(gettext "usage: %s <path-to-db> <packagename> ...\n\n")" "$0" + printf "$(gettext "usage: %s [-q] <path-to-db> <packagename> ...\n\n")" "$0" printf "$(gettext "\ repo-remove will update a package database by removing the package name\n\ specified on the command line from the given repo database. Multiple\n\ packages to remove can be specified on the command line.\n\n")" + printf "$(gettext "\ +The -q/--quiet flag will force this program to run silently except\n\ +in the case of warnings or errors.\n\n")" echo "$(gettext "Example: repo-remove /path/to/repo.db.tar.gz kernel26")" } version() { printf "repo-remove (pacman) %s\n" "$myver" printf "$(gettext "\ -Copyright (C) 2002-2007 Judd Vinet <jvinet@zeroflux.org>.\n\n\ +Copyright (c) 2007-2008 Dan McGee <dan@archlinux.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")" } @@ -140,7 +146,9 @@ gstmpdir=$(mktemp -d /tmp/repo-remove.XXXXXXXXXX) || (\ success=0 # parse arguments for arg in "$@"; do - if [ -z "$REPO_DB_FILE" ]; then + if [ "$arg" == "--quiet" -o "$arg" == "-q" ]; then + QUIET=1 + elif [ -z "$REPO_DB_FILE" ]; then REPO_DB_FILE=$(readlink -f "$arg") if ! test_repo_db_file; then error "$(gettext "Repository file '%s' is not a proper pacman database.")\n" "$REPO_DB_FILE" diff --git a/scripts/updatesync.sh.in b/scripts/updatesync.sh.in deleted file mode 100644 index 5f5cc6c9..00000000 --- a/scripts/updatesync.sh.in +++ /dev/null @@ -1,172 +0,0 @@ -#!/bin/bash -# -# updatesync -# @configure_input@ -# -# Copyright (c) 2004 by Jason Chu <jason@archlinux.org> -# Derived from gensync (c) 2002-2006 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@' - -# functions - -usage() { - printf "updatesync (pacman) %s\n\n" "$myver" - printf "$(gettext "Usage: %s <action> <destfile> <option> [package_directory]")\n\n" "$0" - printf "$(gettext "\ -NOTE: this script is DEPRECATED. It will be removed in the next major\n\ -release of pacman, so please use repo-add and repo-remove instead.\n\n")" - printf "$(gettext "\ -updatesync will update a sync database by reading a PKGBUILD and\n\ -modifying the destfile. updatesync updates the database in a temporary\n\ -directory and then compresses it to <destfile>.\n\n")" - printf "$(gettext "There are two types of actions:\n\n")" - printf "$(gettext "upd - Will update a package's entry or create it if it doesn't exist.\n It takes the package's PKGBUILD as an option.\n")" - printf "$(gettext "del - Will remove a package's entry from the db. It takes the package's\n name as an option.\n")" - echo - printf "$(gettext "\ -updatesync will calculate md5sums of packages in the same directory as\n\ -<destfile>, unless an alternate [package_directory] is specified.\n\n")" - echo "$(gettext "Example: updatesync upd /home/mypkgs/custom.db.tar.gz PKGBUILD")" -} - -version() { - printf "updatesync (pacman) %s\n" "$myver" - printf "$(gettext "\ -Copyright (C) 2004 Jason Chu <jason@archlinux.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")" -} - -error () { - local mesg=$1; shift - printf "==> ERROR: ${mesg}\n" "$@" >&2 -} - -die () { - error $* - exit 1 -} - -check_force () { - local i - for i in ${options[@]}; do - local lc=$(echo $i | tr [:upper:] [:lower:]) - if [ "$lc" = "force" ]; then - true - fi - done - false -} - -# PROGRAM START - -# determine whether we have gettext; make it a no-op if we do not -if [ ! $(type -t gettext) ]; then - gettext() { - echo "$@" - } -fi - -if [ "$1" = "-h" -o "$1" = "--help" ]; then - usage - exit 0 -fi - -if [ "$1" = "-V" -o "$1" = "--version" ]; then - version - exit 0 -fi - -if [ $# -lt 3 ]; then - usage - exit 1 -fi - -# source system and user makepkg.conf -if [ -r @sysconfdir@/makepkg.conf ]; then - source @sysconfdir@/makepkg.conf -else - die "$(gettext "%s not found. Can not continue.")" "@sysconfdir@/makepkg.conf" -fi - -if [ -r ~/.makepkg.conf ]; then - source ~/.makepkg.conf -fi - -if [ "$1" != "upd" -a "$1" != "del" ]; then - usage - exit 1 -fi - -action=$1 -pkgdb=$2 -option=$3 -pkgdir="$(pwd)" -if [ "$4" != "" ]; then - pkgdir="$4" -fi -opt_force="" - -printf "$(gettext "\ -NOTE: this script is DEPRECATED. It will be removed in the next major\n\ -release of pacman, so please use repo-add and repo-remove instead.\n\n")" - -if [ "$action" = "upd" ]; then # INSERT / UPDATE - if [ ! -f "$option" ]; then - die "$(gettext "%s not found")" $option - fi - - unset pkgname pkgver pkgrel options - - source $option || die "$(gettext "failed to parse %s")" $option - if [ "$arch" = 'any' ]; then - CARCH='any' - fi - pkgfile="$pkgdir/$pkgname-$pkgver-$pkgrel-${CARCH}${PKGEXT}" - - if [ ! -f "$pkgfile" ]; then - die "$(gettext "could not find %s-%s-%s-%s%s - aborting")" $pkgname $pkgver $pkgrel $CARCH $PKGEXT - fi - - if check_force; then - opt_force="--force" - fi - - repo-add "$pkgdb" $opt_force "$pkgfile" -else # DELETE - fname="$(basename $option)" - if [ "$fname" = "PKGBUILD" ]; then - if [ ! -f "$option" ]; then - die "$(gettext "%s not found")" $option - fi - - unset pkgname pkgver pkgrel options - source $option - else - pkgname=$option - fi - - repo-remove "$pkgdb" "$pkgname" -fi - -exit 0 -# vim: set ts=2 sw=2 noet: |