[pacman-contrib] [PATCH] Port parseopts to libmakepkg
Eli Schwartz
eschwartz at archlinux.org
Wed Apr 17 03:47:31 UTC 2019
Replace m4 macros with use of libmakepkg extensions. For now, only
parseopts is implemented, as it was directly added to libmakepkg in
2016.
The other major lib/ analogue is message.sh, which does not currently
map together due to deviations, which are fixed in pacman-git.
Signed-off-by: Eli Schwartz <eschwartz at archlinux.org>
---
lib/Makefile.am | 1 -
lib/parseopts.sh | 137 ---------------------------------------------
src/Makefile.am | 5 +-
src/paccache.sh.in | 5 +-
4 files changed, 7 insertions(+), 141 deletions(-)
delete mode 100644 lib/parseopts.sh
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 8b18cb5..d2229f7 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -4,7 +4,6 @@ DIST_SUBDIRS = $(SUBDIRS)
EXTRA_DIST = \
output_format.sh \
- parseopts.sh \
size_to_human.sh \
term_colors.sh
diff --git a/lib/parseopts.sh b/lib/parseopts.sh
deleted file mode 100644
index cf6aa6c..0000000
--- a/lib/parseopts.sh
+++ /dev/null
@@ -1,137 +0,0 @@
-# getopt-like parser
-parseopts() {
- local opt= optarg= i= shortopts=$1
- local -a longopts=() unused_argv=()
-
- shift
- while [[ $1 && $1 != '--' ]]; do
- longopts+=("$1")
- shift
- done
- shift
-
- longoptmatch() {
- local o longmatch=()
- for o in "${longopts[@]}"; do
- if [[ ${o%:} = "$1" ]]; then
- longmatch=("$o")
- break
- fi
- [[ ${o%:} = "$1"* ]] && longmatch+=("$o")
- done
-
- case ${#longmatch[*]} in
- 1)
- # success, override with opt and return arg req (0 == none, 1 == required)
- opt=${longmatch%:}
- if [[ $longmatch = *: ]]; then
- return 1
- else
- return 0
- fi ;;
- 0)
- # fail, no match found
- return 255 ;;
- *)
- # fail, ambiguous match
- printf "@SCRIPTNAME@: $(gettext "option '%s' is ambiguous; possibilities:")" "--$1"
- printf " '%s'" "${longmatch[@]%:}"
- printf '\n'
- return 254 ;;
- esac >&2
- }
-
- while (( $# )); do
- case $1 in
- --) # explicit end of options
- shift
- break
- ;;
- -[!-]*) # short option
- for (( i = 1; i < ${#1}; i++ )); do
- opt=${1:i:1}
-
- # option doesn't exist
- if [[ $shortopts != *$opt* ]]; then
- printf "@SCRIPTNAME@: $(gettext "invalid option") -- '%s'\n" "$opt" >&2
- OPTRET=(--)
- return 1
- fi
-
- OPTRET+=("-$opt")
- # option requires optarg
- if [[ $shortopts = *$opt:* ]]; then
- # if we're not at the end of the option chunk, the rest is the optarg
- if (( i < ${#1} - 1 )); then
- OPTRET+=("${1:i+1}")
- break
- # if we're at the end, grab the the next positional, if it exists
- elif (( i == ${#1} - 1 )) && [[ $2 ]]; then
- OPTRET+=("$2")
- shift
- break
- # parse failure
- else
- printf "@SCRIPTNAME@: $(gettext "option requires an argument") -- '%s'\n" "$opt" >&2
- OPTRET=(--)
- return 1
- fi
- fi
- done
- ;;
- --?*=*|--?*) # long option
- IFS='=' read -r opt optarg <<< "${1#--}"
- longoptmatch "$opt"
- case $? in
- 0)
- # parse failure
- if [[ $optarg ]]; then
- printf "@SCRIPTNAME@: $(gettext "option '%s' does not allow an argument")\n" "--$opt" >&2
- OPTRET=(--)
- return 1
- # --longopt
- else
- OPTRET+=("--$opt")
- fi
- ;;
- 1)
- # --longopt=optarg
- if [[ $optarg ]]; then
- OPTRET+=("--$opt" "$optarg")
- # --longopt optarg
- elif [[ $2 ]]; then
- OPTRET+=("--$opt" "$2" )
- shift
- # parse failure
- else
- printf "@SCRIPTNAME@: $(gettext "option '%s' requires an argument")\n" "--$opt" >&2
- OPTRET=(--)
- return 1
- fi
- ;;
- 254)
- # ambiguous option -- error was reported for us by longoptmatch()
- OPTRET=(--)
- return 1
- ;;
- 255)
- # parse failure
- printf "@SCRIPTNAME@: $(gettext "invalid option") '--%s'\n" "$opt" >&2
- OPTRET=(--)
- return 1
- ;;
- esac
- ;;
- *) # non-option arg encountered, add it as a parameter
- unused_argv+=("$1")
- ;;
- esac
- shift
- done
-
- # add end-of-opt terminator and any leftover positional parameters
- OPTRET+=('--' "${unused_argv[@]}" "$@")
- unset longoptmatch
-
- return 0
-}
diff --git a/src/Makefile.am b/src/Makefile.am
index 08dde4b..f1c6ba2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -92,7 +92,8 @@ AM_CFLAGS = \
$(LIBALPM_CFLAGS)
edit = sed \
- -e 's|@bindir[@]|${bindir}|g' \
+ -e 's|@bindir[@]|$(bindir)|g' \
+ -e 's|@datarootdir[@]|$(datarootdir)|g' \
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
-e 's|@localstatedir[@]|$(localstatedir)|g' \
-e 's|@PACKAGE_VERSION[@]|$(REAL_PACKAGE_VERSION)|g' \
@@ -122,7 +123,7 @@ $(OURFILES): Makefile
all-am: $(OURSCRIPTS) $(OURFILES)
checkupdates: $(srcdir)/checkupdates.sh.in $(top_srcdir)/lib/output_format.sh $(top_srcdir)/lib/term_colors.sh
-paccache: $(srcdir)/paccache.sh.in $(top_srcdir)/lib/output_format.sh $(top_srcdir)/lib/parseopts.sh $(top_srcdir)/lib/size_to_human.sh $(top_srcdir)/lib/term_colors.sh
+paccache: $(srcdir)/paccache.sh.in $(top_srcdir)/lib/output_format.sh $(top_srcdir)/lib/size_to_human.sh $(top_srcdir)/lib/term_colors.sh
pacdiff: $(srcdir)/pacdiff.sh.in $(top_srcdir)/lib/output_format.sh $(top_srcdir)/lib/term_colors.sh
paclist: $(srcdir)/paclist.sh.in
paclog-pkglist: $(srcdir)/paclog-pkglist.sh.in
diff --git a/src/paccache.sh.in b/src/paccache.sh.in
index 9c37c65..8334ecd 100644
--- a/src/paccache.sh.in
+++ b/src/paccache.sh.in
@@ -25,6 +25,8 @@ shopt -s extglob
declare -r myname='paccache'
declare -r myver='@PACKAGE_VERSION@'
+LIBRARY=${LIBRARY:-'@datarootdir@/makepkg'}
+
declare -a cachedirs=() candidates=() cmdopts=() whitelist=() blacklist=()
declare -i delete=0 dryrun=0 filecount=0 move=0 needsroot=0 totalsaved=0 verbose=0
declare -i min_atime=0 min_mtime=0
@@ -34,7 +36,8 @@ QUIET=0
USE_COLOR='y'
m4_include(../lib/output_format.sh)
-m4_include(../lib/parseopts.sh)
+# Import libmakepkg
+source "$LIBRARY"/util/parseopts.sh
die() {
error "$@"
--
2.21.0
More information about the pacman-contrib
mailing list