[pacman-dev] [PATCH] makepkg : switch from getopt to getopts builtin
Xavier
shiningxc at gmail.com
Mon Jun 2 05:54:31 EDT 2008
>From f5c5a277e2df14650ae441f32950aa6d4deee50f Mon Sep 17 00:00:00 2001
From: Xavier Chantry <shiningxc at gmail.com>
Date: Wed, 28 May 2008 21:57:28 +0200
Subject: [PATCH] makepkg : switch from getopt to getopts builtin
getopt is an external script for parsing and is less portable than getopts
which is a bash builtin.
The main problem is that it only supports short opts, so long opts had to be
dropped.
The benefits are a much better portability and a simpler code for the
arguments parsing.
TODO: better testing, fix man page.
Signed-off-by: Xavier Chantry <shiningxc at gmail.com>
---
scripts/makepkg.sh.in | 143 +++++++++++++++++++++---------------------------
1 files changed, 63 insertions(+), 80 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index cc44c68..f880091 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -27,7 +27,7 @@
# makepkg uses quite a few external programs during its execution. You
# need to have at least the following installed for makepkg to function:
# awk, bsdtar (libarchive), bzip2, coreutils, fakeroot, find (findutils),
-# getopt (util-linux), gettext, grep, gzip, sed
+# gettext, grep, gzip, sed
# gettext initialization
export TEXTDOMAIN='pacman'
@@ -1056,31 +1056,31 @@ usage() {
printf "$(gettext "Usage: %s [options]")\n" "$0"
echo
echo "$(gettext "Options:")"
- printf "$(gettext " -A, --ignorearch Ignore incomplete arch field
in %s")\n" "$BUILDSCRIPT"
- 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 package")"
- echo "$(gettext " -g, --geninteg Generate integrity checks for
source files")"
- echo "$(gettext " -h, --help This help")"
- echo "$(gettext " -i, --install Install package after successful build")"
- echo "$(gettext " -L, --log Log package build process")"
- echo "$(gettext " -m, --nocolor Disable colorized output messages")"
- echo "$(gettext " -o, --nobuild Download and extract files only")"
+ printf "$(gettext " -A Ignore incomplete arch field in %s")\n"
"$BUILDSCRIPT"
+ echo "$(gettext " -c Clean up work files after build")"
+ echo "$(gettext " -C Clean up source files from the cache")"
+ echo "$(gettext " -d Skip all dependency checks")"
+ echo "$(gettext " -e Do not extract source files (use existing
src/ dir)")"
+ echo "$(gettext " -f Overwrite existing package")"
+ echo "$(gettext " -g Generate integrity checks for source files")"
+ echo "$(gettext " -h This help")"
+ echo "$(gettext " -i Install package after successful build")"
+ echo "$(gettext " -L Log package build process")"
+ echo "$(gettext " -m Disable colorized output messages")"
+ echo "$(gettext " -o Download and extract files only")"
printf "$(gettext " -p <buildscript> Use an alternate build script
(instead of '%s')")\n" "$BUILDSCRIPT"
- echo "$(gettext " -r, --rmdeps Remove installed dependencies
after a successful build")"
+ echo "$(gettext " -r Remove installed dependencies after a
successful build")"
# fix flyspray feature request #2978
- echo "$(gettext " -R, --repackage Repackage contents of pkg/
without building")"
- echo "$(gettext " -s, --syncdeps Install missing dependencies
with pacman")"
- echo "$(gettext " --asroot Allow makepkg to run as root user")"
- echo "$(gettext " --holdver Prevent automatic version
bumping for development PKGBUILDs")"
- echo "$(gettext " --source Do not build package; generate a
source-only tarball")"
+ echo "$(gettext " -R Repackage contents of pkg/ without building")"
+ echo "$(gettext " -s Install missing dependencies with pacman")"
+ echo "$(gettext " -O Allow makepkg to run as root user")"
+ echo "$(gettext " -H Prevent automatic version bumping for
development PKGBUILDs")"
+ echo "$(gettext " -S Do not build package; generate a
source-only tarball")"
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 "$(gettext " -n Do not ask for confirmation when
resolving dependencies")"
+ echo "$(gettext " -N Do not show a progress bar when
downloading files")"
echo
printf "$(gettext "If -p is not specified, makepkg will look for
'%s'")\n" "$BUILDSCRIPT"
echo
@@ -1130,66 +1130,49 @@ 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"
-# Pacman Options
-OPT_LONG="$OPT_LONG,noconfirm,noprogressbar"
-OPT_TEMP="$(getopt -o "$OPT_SHORT" -l "$OPT_LONG" -n "$(basename
"$0")" -- "$@" || echo 'GETOPT GO BANG!')"
-if echo "$OPT_TEMP" | grep -q 'GETOPT GO BANG!'; then
- # This is a small hack to stop the script bailing with 'set -e'
- echo; usage; exit 1 # E_INVALID_OPTION;
-fi
-eval set -- "$OPT_TEMP"
-unset OPT_SHORT OPT_LONG OPT_TEMP
+OPT_SHORT="AcCdefF:ghHiLmnNoOp:rRsSVX"
-while true; do
- case "$1" in
+while getopts "$OPT_SHORT" name; do
+ case $name in
# Pacman Options
- --noconfirm) PACMAN_OPTS="$PACMAN_OPTS --noconfirm" ;;
- --noprogressbar) PACMAN_OPTS="$PACMAN_OPTS --noprogressbar" ;;
+ n) PACMAN_OPTS="$PACMAN_OPTS --noconfirm" ;;
+ N) PACMAN_OPTS="$PACMAN_OPTS --noprogressbar" ;;
# Makepkg Options
- --asroot) ASROOT=1 ;;
- -A|--ignorearch) IGNOREARCH=1 ;;
- -c|--clean) CLEANUP=1 ;;
- -C|--cleancache) CLEANCACHE=1 ;;
- -d|--nodeps) NODEPS=1 ;;
- -e|--noextract) NOEXTRACT=1 ;;
- -f|--force) FORCE=1 ;;
- #hidden opt used by fakeroot call for svn/cvs/etc PKGBUILDs to set pkgver
- --forcever) shift; FORCE_VER=$1;;
- -F) INFAKEROOT=1 ;;
- -g|--geninteg) GENINTEG=1 ;;
- --holdver) HOLDVER=1 ;;
- -i|--install) INSTALL=1 ;;
- -L|--log) LOGGING=1 ;;
- -m|--nocolor) USE_COLOR='n' ;;
- -o|--nobuild) NOBUILD=1 ;;
- -p) shift; BUILDSCRIPT=$1 ;;
- -r|--rmdeps) RMDEPS=1 ;;
- -R|--repackage) REPKG=1 ;;
- --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
-
- --) OPT_IND=0; shift; break;;
- *) usage; exit 1 ;; # E_INVALID_OPTION
+ A) IGNOREARCH=1 ;;
+ c) CLEANUP=1 ;;
+ C) CLEANCACHE=1 ;;
+ d) NODEPS=1 ;;
+ e) NOEXTRACT=1 ;;
+ f) FORCE=1 ;;
+ # hidden opt used by fakeroot call for svn/cvs/etc PKGBUILDs to set pkgver
+ F) FORCE_VER="$OPTARG";;
+ g) GENINTEG=1 ;;
+ H) HOLDVER=1 ;;
+ i) INSTALL=1 ;;
+ L) LOGGING=1 ;;
+ m) USE_COLOR='n' ;;
+ o) NOBUILD=1 ;;
+ O) ASROOT=1 ;;
+ p) BUILDSCRIPT="$OPTARG" ;;
+ r) RMDEPS=1 ;;
+ R) REPKG=1 ;;
+ s) DEP_BIN=1 ;;
+ S) SOURCEONLY=1 ;;
+ # hidden opt to indicate fakeroot call
+ X) INFAKEROOT=1 ;;
+
+ h) usage; exit 0 ;; # E_OK
+ V) version; exit 0 ;; # E_OK
+
+ ?) usage; exit 1 ;; # E_INVALID_OPTION
esac
- shift
done
if [ "$HOLDVER" = "1" -a "$FORCE_VER" != "" ]; then
- # The extra '--' is here to prevent gettext from thinking --holdver is
+ # The extra '--' is here to prevent gettext from thinking -H is
# an option
- error "$(gettext "\\0--holdver and --forcever cannot both be specified" )"
+ error "$(gettext "\\0-H and -F cannot both be specified" )"
exit 1
fi
@@ -1233,12 +1216,12 @@ if [ "$INFAKEROOT" = "0" ]; then
# Warn those who like to live dangerously.
error "$(gettext "Running makepkg as root is a BAD idea and can cause")"
plain "$(gettext "permanent, catastrophic damage to your system. If you")"
- plain "$(gettext "wish to run as root, please use the --asroot option.")"
+ plain "$(gettext "wish to run as root, please use the -O option.")"
exit 1 # $E_USER_ABORT
elif [ $EUID -gt 0 -a "$ASROOT" = "1" ]; then
- # Warn those who try to use the --asroot option when they are not root
- error "$(gettext "The --asroot option is meant for the root user only.")"
- plain "$(gettext "Please rerun makepkg without the --asroot flag.")"
+ # Warn those who try to use the -O option when they are not root
+ error "$(gettext "The -O option is meant for the root user only.")"
+ plain "$(gettext "Please rerun makepkg without the -O flag.")"
exit 1 # $E_USER_ABORT
elif [ "$(check_buildenv fakeroot)" = "y" -a $EUID -gt 0 ]; then
if [ ! $(type -p fakeroot) ]; then
@@ -1254,7 +1237,7 @@ if [ "$INFAKEROOT" = "0" ]; then
fi
else
if [ "$FAKEROOTKEY" = "" ]; then
- error "$(gettext "Do not use the '-F' option. This option is only
for use by makepkg.")"
+ error "$(gettext "Do not use the '-X' option. This option is only
for use by makepkg.")"
exit 1 # TODO: error code
fi
fi
@@ -1333,7 +1316,7 @@ if [ "$install" -a ! -f "$install" ]; then
fi
# 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
+# build process so that if the user runs makepkg -F (forcever) manually, we
# 1) output the correct pkgver, and 2) use the correct filename when
# checking if the package file already exists - fixes FS #9194
devel_check
@@ -1469,9 +1452,9 @@ else
msg "$(gettext "Entering fakeroot environment...")"
if [ "$newpkgver" != "" ]; then
- fakeroot -- $0 --forcever $newpkgver -F $ARGLIST || exit $?
+ fakeroot -- $0 -F $newpkgver -X $ARGLIST || exit $?
else
- fakeroot -- $0 -F $ARGLIST || exit $?
+ fakeroot -- $0 -X $ARGLIST || exit $?
fi
fi
--
1.5.5.1
More information about the pacman-dev
mailing list