[pacman-contrib] [PATCH] Port parseopts to libmakepkg
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@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
participants (1)
-
Eli Schwartz