From patchwork Wed Apr 17 03:47:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eli Schwartz X-Patchwork-Id: 1082 Return-Path: Delivered-To: patchwork@archlinux.org Received: from apollo.archlinux.org (localhost [127.0.0.1]) by apollo.archlinux.org (Postfix) with ESMTP id A4F5AD5C850D for ; Wed, 17 Apr 2019 03:48:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on apollo X-Spam-Level: X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00=-1, DKIMWL_WL_HIGH=-0.024,DKIM_SIGNED=0.1,DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,MAILING_LIST_MULTI=-1,RCVD_IN_DNSWL_MED=-2.3, T_DMARC_POLICY_NONE=0.01 autolearn=ham autolearn_force=no version=3.4.2 X-Spam-BL-Results: [127.0.9.2] Received: from orion.archlinux.org (orion.archlinux.org [88.198.91.70]) by apollo.archlinux.org (Postfix) with ESMTPS for ; Wed, 17 Apr 2019 03:48:04 +0000 (UTC) Received: from orion.archlinux.org (localhost [127.0.0.1]) by orion.archlinux.org (Postfix) with ESMTP id 982C411FBB7887; Wed, 17 Apr 2019 03:48:00 +0000 (UTC) Received: from luna.archlinux.org (luna.archlinux.org [5.9.250.164]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by orion.archlinux.org (Postfix) with ESMTPS; Wed, 17 Apr 2019 03:48:00 +0000 (UTC) Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1]) by luna.archlinux.org (Postfix) with ESMTP id 6798220F2C; Wed, 17 Apr 2019 03:48:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=archlinux.org; s=luna2; t=1555472880; bh=xRuxw95fAucUKshNarwPenRfUJfphYw49x9IZ8oK0VE=; h=From:To:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe; b=e9uXRjAcM6Kd4VyATE5FLFnCa8kIhR5xvM2kOL4ODYNro8RQ4FAMrqSyen4ZSmlN0 ayV0pXeROFtqJiy3k9Yvug5vkuCS2Zs7w1cLaIzd91Mb1GZRW9U4cvg3qlS444AEov FAlQnnF2+GoInT8oKiqkzAwD3P62Jnty//AMHRudZr7la87h+16E2KAKjt9beiRu2T 4KrR9n14qsrVr4xCfZG4BE0wk0YZ75m21RXtcXCicOi/2w/ttBDPpIJcxsi2QFtPfY uEc91lh6R9FuKQOz4r6ICHV7BdJBXb6wNOr9GETFlmsgk5gviNu+KNAmzPzzOPMcB5 xpZmBpeQfNCMntkB32NgHTWehfTmW5ws21egATVpFN0jS9tR8E3G5ZKoS+OSxNThYB QUHY41uyLwNKwOjJlR2DM4O8fGPw+Wdi3fztd/UU89ykT7CKY4yuXd/L/HX00MfZO+ EuvDpuxpKSkgHN5wsB+CNTx7QRfKZkIKRQerBuvGTaQ1Jyz25ue2YELkJY6sJSqN3V QbXboNAN8TzNMS3j8GpxXgbVzZ0ka1vTujBdNhNr6kc481An3SdlRYGSnk8NXeOvvP CdNj1bNq6LmOZquwJ/uUffIkI7TRZTPo/i+lpgNTjXgYft3qAmZDBwmcI9Kq5zUNJ8 yu5G1WjSr3tXJ/4ePXrteUZY= Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1]) by luna.archlinux.org (Postfix) with ESMTP id 0EE0B20F3F for ; Wed, 17 Apr 2019 03:47:56 +0000 (UTC) Received: from orion.archlinux.org (orion.archlinux.org [IPv6:2a01:4f8:160:6087::1]) by luna.archlinux.org (Postfix) with ESMTPS for ; Wed, 17 Apr 2019 03:47:56 +0000 (UTC) Received: from orion.archlinux.org (localhost [127.0.0.1]) by orion.archlinux.org (Postfix) with ESMTP id 932D311FBB7883; Wed, 17 Apr 2019 03:47:49 +0000 (UTC) Received: from didactylos.attlocal.net (unknown [IPv6:2600:1700:57f0:ca20:763a:c795:fcf6:91ea]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: eschwartz) by orion.archlinux.org (Postfix) with ESMTPSA id 00BA511FBB7882; Wed, 17 Apr 2019 03:47:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=archlinux.org; s=orion; t=1555472869; bh=xRuxw95fAucUKshNarwPenRfUJfphYw49x9IZ8oK0VE=; h=From:To:Subject:Date; b=Nqp1GZ8x2xpvDjXiX+j76ng/ogSqFTM8gIDWbfZdYogcMbSvi8TkxVOsUcaZMGaFW kYnpE0850QNbCO3LrCXdXA4GJQ81+Vdos0BI6EFaq+Vk5VorG88IhgAgJeT9P6UySJ n0UtsR4zphnd4d0pVcbFotrD8Ic8t6XiF1zp6HiqMag6c+sCNvwtPdHH9RrREsPZ/R Sw5f58RK1qoi94CI0fQ1itbM0ZNcswVygewLb190+6PGb1H7ZdwTNmvhUH9O9rjRC6 WP4RuJU98YaYl5OvzUM51cFRXyxY5WGQrz2x/YXhS4TPNBQ4R4RAevM8b81H9SZKsK 0OAtELwaJzHbAVQMfJ/9kISHdyRciHflwhPjT7FsBgdBceaQ+uf4tK7DO5KxNsj6MQ h7iUv+0krtWJmQcPA8HOBJooEMvLS0/H82hZBRdy7S93FaGzwjFU3Dftk3EkOaqLnB MloT+I/TbbUb96/UfyypPNOOIA4keTFqiRvGw3k5/xnbsDNfSnEwjiIYiK3h9P6WzZ 4LmDrTennu7dsRG7nv+IKtCwOyJfYeewrBQtPOaeW0/tpUKBAFdeqbGxB8m9f6KJGi wtiUTXZ7nejSkNmWHAC9dau6MGS+8NUo8oM+lDcam2+o1NnayGElRWDOQ7Oue4qg5z Kw6peUMsAMKm3HIdMCXcc0Dw= From: Eli Schwartz To: pacman-contrib@lists.archlinux.org Subject: [pacman-contrib] [PATCH] Port parseopts to libmakepkg Date: Tue, 16 Apr 2019 23:47:31 -0400 Message-Id: <20190417034731.24591-1-eschwartz@archlinux.org> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 X-BeenThere: pacman-contrib@lists.archlinux.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for pacman-contrib development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: pacman-contrib-bounces@lists.archlinux.org Sender: "pacman-contrib" 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 --- 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 "$@"