summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlad Wenter <alad@archlinux.info>2016-10-10 10:47:38 +0200
committerAllan McRae <allan@archlinux.org>2016-10-22 20:50:54 +1000
commit1f8f0bd9ac4c11cdc1b9506f9f64d8192ecad4ee (patch)
tree209a9b9e48a558b8b75ff062e4f86d86cb29df95
parentdfc78129be7acaa0ebe71fe407d63b5141c10150 (diff)
downloadpacman-1f8f0bd9ac4c11cdc1b9506f9f64d8192ecad4ee.tar.xz
makepkg: Move parseopts from library to libmakepkg
parseopts is used in makepkg and other scripts such as pacman-key as a getopt replacement. Instead of including it in those scripts via a macro, move it to libmakepkg/util/parseopts.sh and have scripts source this file where appropriate. To keep the parseopts test, a new variable was introduced: PM_LIBMAKEPKG_DIR Signed-off-by: Alad Wenter <alad@archlinux.info> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--Makefile.am3
-rw-r--r--scripts/.gitignore2
-rw-r--r--scripts/Makefile.am14
-rw-r--r--scripts/libmakepkg/util/parseopts.sh.in (renamed from scripts/library/parseopts.sh)50
-rw-r--r--scripts/library/README20
-rw-r--r--scripts/makepkg.sh.in2
-rw-r--r--scripts/pacman-db-upgrade.sh.in5
-rw-r--r--scripts/pacman-key.sh.in7
-rw-r--r--scripts/pkgdelta.sh.in7
-rw-r--r--scripts/po/POTFILES.in2
-rwxr-xr-xtest/scripts/parseopts_test.sh2
11 files changed, 70 insertions, 44 deletions
diff --git a/Makefile.am b/Makefile.am
index f4ff187b..9fe3367a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -39,7 +39,8 @@ TEST_EXTENSIONS = .py
AM_TESTS_ENVIRONMENT = \
PMTEST_UTIL_DIR=$(top_builddir)/src/util/; export PMTEST_UTIL_DIR; \
PMTEST_SCRIPT_DIR=$(top_builddir)/scripts/; export PMTEST_SCRIPT_DIR; \
- PMTEST_SCRIPTLIB_DIR=$(top_srcdir)/scripts/library/; export PMTEST_SCRIPTLIB_DIR;
+ PMTEST_SCRIPTLIB_DIR=$(top_srcdir)/scripts/library/; export PMTEST_SCRIPTLIB_DIR; \
+ PMTEST_LIBMAKEPKG_DIR=$(top_builddir)/scripts/libmakepkg/; export PMTEST_LIBMAKEPKG_DIR;
LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
$(top_srcdir)/build-aux/tap-driver.sh
PY_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
diff --git a/scripts/.gitignore b/scripts/.gitignore
index b0cb23fb..3a5ac8a7 100644
--- a/scripts/.gitignore
+++ b/scripts/.gitignore
@@ -1,9 +1,9 @@
makepkg
makepkg-template
-makepkg-wrapper
pacman-db-upgrade
pacman-key
pkgdelta
repo-add
repo-elephant
repo-remove
+*-wrapper
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 3863a2c1..448057dc 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -36,7 +36,6 @@ EXTRA_DIST = \
LIBRARY = \
library/output_format.sh \
- library/parseopts.sh \
library/human_to_size.sh \
library/size_to_human.sh \
library/term_colors.sh
@@ -97,6 +96,7 @@ LIBMAKEPKG_IN = \
libmakepkg/util.sh \
libmakepkg/util/message.sh \
libmakepkg/util/option.sh \
+ libmakepkg/util/parseopts.sh \
libmakepkg/util/pkgbuild.sh \
libmakepkg/util/source.sh \
libmakepkg/util/util.sh
@@ -105,7 +105,10 @@ LIBMAKEPKG_DIST = \
$(addsuffix .in, $(LIBMAKEPKG_IN))
WRAPPER = \
- makepkg-wrapper
+ makepkg-wrapper \
+ pacman-db-upgrade-wrapper \
+ pacman-key-wrapper \
+ pkgdelta-wrapper
COMPLETION_IN = \
completion/bash_completion \
@@ -180,7 +183,6 @@ all-am: $(COMPLETION_IN)
makepkg: \
$(srcdir)/makepkg.sh.in \
$(srcdir)/wrapper.sh.in \
- $(srcdir)/library/parseopts.sh \
$(LIBMAKEPKG_IN)
makepkg-template: \
@@ -197,13 +199,11 @@ pacman-db-upgrade: \
pacman-key: \
$(srcdir)/pacman-key.sh.in \
- $(srcdir)/library/output_format.sh \
- $(srcdir)/library/parseopts.sh
+ $(srcdir)/library/output_format.sh
pkgdelta: \
$(srcdir)/pkgdelta.sh.in \
- $(srcdir)/library/output_format.sh \
- $(srcdir)/library/parseopts.sh
+ $(srcdir)/library/output_format.sh
repo-add: \
$(srcdir)/repo-add.sh.in \
diff --git a/scripts/library/parseopts.sh b/scripts/libmakepkg/util/parseopts.sh.in
index cf6aa6c6..802275e5 100644
--- a/scripts/library/parseopts.sh
+++ b/scripts/libmakepkg/util/parseopts.sh.in
@@ -1,4 +1,40 @@
-# getopt-like parser
+#!/bin/bash
+#
+# parseopts.sh - getopt_long-like parser
+#
+# Copyright (c) 2012-2016 Pacman Development Team <pacman-dev@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
+# 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/>.
+#
+# A getopt_long-like parser which portably supports longopts and
+# shortopts with some GNU extensions. It does not allow for options
+# with optional arguments. For both short and long opts, options
+# requiring an argument should be suffixed with a colon. After the
+# first argument containing the short opts, any number of valid long
+# opts may be be passed. The end of the options delimiter must then be
+# added, followed by the user arguments to the calling program.
+#
+# Recommended Usage:
+# OPT_SHORT='fb:z'
+# OPT_LONG=('foo' 'bar:' 'baz')
+# if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then
+# exit 1
+# fi
+# set -- "${OPTRET[@]}"
+# Returns:
+# 0: parse success
+# 1: parse failure (error message supplied)
parseopts() {
local opt= optarg= i= shortopts=$1
local -a longopts=() unused_argv=()
@@ -34,7 +70,7 @@ parseopts() {
return 255 ;;
*)
# fail, ambiguous match
- printf "@SCRIPTNAME@: $(gettext "option '%s' is ambiguous; possibilities:")" "--$1"
+ printf "${0##*/}: $(gettext "option '%s' is ambiguous; possibilities:")" "--$1"
printf " '%s'" "${longmatch[@]%:}"
printf '\n'
return 254 ;;
@@ -53,7 +89,7 @@ parseopts() {
# option doesn't exist
if [[ $shortopts != *$opt* ]]; then
- printf "@SCRIPTNAME@: $(gettext "invalid option") -- '%s'\n" "$opt" >&2
+ printf "${0##*/}: $(gettext "invalid option") -- '%s'\n" "$opt" >&2
OPTRET=(--)
return 1
fi
@@ -72,7 +108,7 @@ parseopts() {
break
# parse failure
else
- printf "@SCRIPTNAME@: $(gettext "option requires an argument") -- '%s'\n" "$opt" >&2
+ printf "${0##*/}: $(gettext "option requires an argument") -- '%s'\n" "$opt" >&2
OPTRET=(--)
return 1
fi
@@ -86,7 +122,7 @@ parseopts() {
0)
# parse failure
if [[ $optarg ]]; then
- printf "@SCRIPTNAME@: $(gettext "option '%s' does not allow an argument")\n" "--$opt" >&2
+ printf "${0##*/}: $(gettext "option '%s' does not allow an argument")\n" "--$opt" >&2
OPTRET=(--)
return 1
# --longopt
@@ -104,7 +140,7 @@ parseopts() {
shift
# parse failure
else
- printf "@SCRIPTNAME@: $(gettext "option '%s' requires an argument")\n" "--$opt" >&2
+ printf "${0##*/}: $(gettext "option '%s' requires an argument")\n" "--$opt" >&2
OPTRET=(--)
return 1
fi
@@ -116,7 +152,7 @@ parseopts() {
;;
255)
# parse failure
- printf "@SCRIPTNAME@: $(gettext "invalid option") '--%s'\n" "$opt" >&2
+ printf "${0##*/}: $(gettext "invalid option") '--%s'\n" "$opt" >&2
OPTRET=(--)
return 1
;;
diff --git a/scripts/library/README b/scripts/library/README
index e9615a2e..a9d15f1e 100644
--- a/scripts/library/README
+++ b/scripts/library/README
@@ -8,26 +8,6 @@ stdout and can be silenced by defining 'QUIET'. The 'warning' and 'error'
functions print to stderr with the appropriate prefix added to the
message.
-parseopts.sh:
-A getopt_long-like parser which portably supports longopts and shortopts
-with some GNU extensions. It does not allow for options with optional
-arguments. For both short and long opts, options requiring an argument
-should be suffixed with a colon. After the first argument containing
-the short opts, any number of valid long opts may be be passed. The end
-of the options delimiter must then be added, followed by the user arguments
-to the calling program.
-
-Recommended Usage:
- OPT_SHORT='fb:z'
- OPT_LONG=('foo' 'bar:' 'baz')
- if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then
- exit 1
- fi
- set -- "${OPTRET[@]}"
-Returns:
- 0: parse success
- 1: parse failure (error message supplied)
-
human_to_size.sh:
A function to convert human readable sizes (such as "5.3 GiB") to raw byte
equivalents. base10 and base2 suffixes are supported, case sensitively. If
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 82c9367b..fd5c2f5b 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1153,8 +1153,6 @@ run_split_packaging() {
pkgname=("${pkgname_backup[@]}")
}
-m4_include(library/parseopts.sh)
-
usage() {
printf "makepkg (pacman) %s\n" "$makepkg_version"
echo
diff --git a/scripts/pacman-db-upgrade.sh.in b/scripts/pacman-db-upgrade.sh.in
index 79e1c590..2bf444e1 100644
--- a/scripts/pacman-db-upgrade.sh.in
+++ b/scripts/pacman-db-upgrade.sh.in
@@ -30,7 +30,10 @@ declare -r myver='@PACKAGE_VERSION@'
m4_include(library/output_format.sh)
-m4_include(library/parseopts.sh)
+LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
+
+# Import parseopts.sh
+source "$LIBRARY"/util/parseopts.sh
usage() {
printf "pacman-db-upgrade (pacman) %s\n" "${myver}"
diff --git a/scripts/pacman-key.sh.in b/scripts/pacman-key.sh.in
index ffefc68c..81bea0be 100644
--- a/scripts/pacman-key.sh.in
+++ b/scripts/pacman-key.sh.in
@@ -26,6 +26,11 @@ export TEXTDOMAINDIR='@localedir@'
declare -r myver="@PACKAGE_VERSION@"
+LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
+
+# Import parseopts.sh
+source "$LIBRARY"/util/parseopts.sh
+
# Options
ADD=0
DELETE=0
@@ -50,8 +55,6 @@ DEFAULT_KEYSERVER='hkp://pool.sks-keyservers.net'
m4_include(library/output_format.sh)
-m4_include(library/parseopts.sh)
-
usage() {
printf "pacman-key (pacman) %s\n" ${myver}
echo
diff --git a/scripts/pkgdelta.sh.in b/scripts/pkgdelta.sh.in
index fe63974d..9f87185b 100644
--- a/scripts/pkgdelta.sh.in
+++ b/scripts/pkgdelta.sh.in
@@ -28,6 +28,12 @@ export TEXTDOMAINDIR='@localedir@'
declare -r myver='@PACKAGE_VERSION@'
+LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
+
+# Import parseopts.sh
+source "$LIBRARY"/util/parseopts.sh
+
+# Options
QUIET=0
USE_COLOR='y'
@@ -41,7 +47,6 @@ max_delta_size=70
# ensure we have a sane umask set
umask 0022
-m4_include(library/parseopts.sh)
m4_include(library/output_format.sh)
# print usage instructions
diff --git a/scripts/po/POTFILES.in b/scripts/po/POTFILES.in
index 4792bdfa..aa9e6764 100644
--- a/scripts/po/POTFILES.in
+++ b/scripts/po/POTFILES.in
@@ -49,6 +49,6 @@ scripts/libmakepkg/tidy/staticlibs.sh.in
scripts/libmakepkg/tidy/strip.sh.in
scripts/libmakepkg/tidy/zipman.sh.in
scripts/libmakepkg/util/message.sh.in
+scripts/libmakepkg/util/parseopts.sh.in
scripts/libmakepkg/util/source.sh.in
scripts/library/output_format.sh
-scripts/library/parseopts.sh
diff --git a/test/scripts/parseopts_test.sh b/test/scripts/parseopts_test.sh
index a8738a4c..a5821986 100755
--- a/test/scripts/parseopts_test.sh
+++ b/test/scripts/parseopts_test.sh
@@ -3,7 +3,7 @@
source "$(dirname "$0")"/../tap.sh || exit 1
# source the library function
-lib=${1:-${PMTEST_SCRIPTLIB_DIR}parseopts.sh}
+lib=${1:-${PMTEST_LIBMAKEPKG_DIR}util/parseopts.sh}
if [[ -z $lib || ! -f $lib ]]; then
tap_bail "parseopts library ($lib) could not be located"
exit 1