This move the getopt replacement function parse_options out of
makepkg.sh.in and into a separate file.  The code is inserted
into the relevant place in makepkg using m4.

This will allow the reuse of the option parsing code in other
scripts (i.e. pacman-key) while avoiding code duplication.

Signed-off-by: Allan McRae <[email protected]>
---

Is there a better way to do this that I am missing?

 scripts/Makefile.am              |   10 +++--
 scripts/library/parse_options.sh |   87 +++++++++++++++++++++++++++++++++++++
 scripts/makepkg.sh.in            |   88 +-------------------------------------
 3 files changed, 94 insertions(+), 91 deletions(-)
 create mode 100644 scripts/library/parse_options.sh

diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index fd9b20d..6335ba1 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -56,10 +56,12 @@ edit = sed \
 # third 'test' line- make sure one of the two checks succeeded
 $(OURSCRIPTS): Makefile
        @echo '    ' GEN $@;
-       @rm -f $@ [email protected]
-       @test -f $(srcdir)/[email protected] && $(edit) $(srcdir)/[email protected] >[email protected] || 
true
-       @test -f $(srcdir)/[email protected] && $(edit) $(srcdir)/[email protected] >[email protected] || 
true
-       @test -f [email protected] || false
+       @rm -f $@ [email protected] [email protected]
+       @test -f $(srcdir)/[email protected] && $(edit) $(srcdir)/[email protected] >[email protected] || true
+       @test -f $(srcdir)/[email protected] && $(edit) $(srcdir)/[email protected] >[email protected] || true
+       @test -f [email protected] || false
+       @m4 -P [email protected] >[email protected]
+       @rm -f [email protected]
        @chmod +x [email protected]
        @chmod a-w [email protected]
        @mv [email protected] $@
diff --git a/scripts/library/parse_options.sh b/scripts/library/parse_options.sh
new file mode 100644
index 0000000..878cff1
--- /dev/null
+++ b/scripts/library/parse_options.sh
@@ -0,0 +1,87 @@
+# getopt like parser
+parse_options() {
+       local short_options=$1; shift;
+       local long_options=$1; shift;
+       local ret=0;
+       local unused_options=""
+       local i
+
+       while [[ -n $1 ]]; do
+               if [[ ${1:0:2} = '--' ]]; then
+                       if [[ -n ${1:2} ]]; then
+                               local match=""
+                               for i in ${long_options//,/ }; do
+                                       if [[ ${1:2} = ${i//:} ]]; then
+                                               match=$i
+                                               break
+                                       fi
+                               done
+                               if [[ -n $match ]]; then
+                                       if [[ ${1:2} = $match ]]; then
+                                               printf ' %s' "$1"
+                                       else
+                                               if [[ -n $2 ]]; then
+                                                       printf ' %s' "$1"
+                                                       shift
+                                                       printf " '%s'" "$1"
+                                               else
+                                                       echo "makepkg: option 
'$1' $(gettext "requires an argument")" >&2
+                                                       ret=1
+                                               fi
+                                       fi
+                               else
+                                       echo "makepkg: $(gettext "unrecognized 
option") '$1'" >&2
+                                       ret=1
+                               fi
+                       else
+                               shift
+                               break
+                       fi
+               elif [[ ${1:0:1} = '-' ]]; then
+                       for ((i=1; i<${#1}; i++)); do
+                               if [[ $short_options =~ ${1:i:1} ]]; then
+                                       if [[ $short_options =~ ${1:i:1}: ]]; 
then
+                                               if [[ -n ${1:$i+1} ]]; then
+                                                       printf ' -%s' "${1:i:1}"
+                                                       printf " '%s'" 
"${1:$i+1}"
+                                               else
+                                                       if [[ -n $2 ]]; then
+                                                               printf ' -%s' 
"${1:i:1}"
+                                                               shift
+                                                               printf " '%s'" 
"${1}"
+                                                       else
+                                                               echo "makepkg: 
option $(gettext "requires an argument") -- '${1:i:1}'" >&2
+                                                               ret=1
+                                                       fi
+                                               fi
+                                               break
+                                       else
+                                               printf ' -%s' "${1:i:1}"
+                                       fi
+                               else
+                                       echo "makepkg: $(gettext "invalid 
option") -- '${1:i:1}'" >&2
+                                       ret=1
+                               fi
+                       done
+               else
+                       unused_options="${unused_options} '$1'"
+               fi
+               shift
+       done
+
+       printf " --"
+       if [[ -n $unused_options ]]; then
+               for i in ${unused_options[@]}; do
+                       printf ' %s' "$i"
+               done
+       fi
+       if [[ -n $1 ]]; then
+               while [[ -n $1 ]]; do
+                       printf " '%s'" "${1}"
+                       shift
+               done
+       fi
+       printf "\n"
+
+       return $ret
+}
\ No newline at end of file
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index b3081fc..0639fbd 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1506,93 +1506,7 @@ canonicalize_path() {
        fi
 }
 
-# getopt like parser
-parse_options() {
-       local short_options=$1; shift;
-       local long_options=$1; shift;
-       local ret=0;
-       local unused_options=""
-       local i
-
-       while [[ -n $1 ]]; do
-               if [[ ${1:0:2} = '--' ]]; then
-                       if [[ -n ${1:2} ]]; then
-                               local match=""
-                               for i in ${long_options//,/ }; do
-                                       if [[ ${1:2} = ${i//:} ]]; then
-                                               match=$i
-                                               break
-                                       fi
-                               done
-                               if [[ -n $match ]]; then
-                                       if [[ ${1:2} = $match ]]; then
-                                               printf ' %s' "$1"
-                                       else
-                                               if [[ -n $2 ]]; then
-                                                       printf ' %s' "$1"
-                                                       shift
-                                                       printf " '%s'" "$1"
-                                               else
-                                                       echo "makepkg: option 
'$1' $(gettext "requires an argument")" >&2
-                                                       ret=1
-                                               fi
-                                       fi
-                               else
-                                       echo "makepkg: $(gettext "unrecognized 
option") '$1'" >&2
-                                       ret=1
-                               fi
-                       else
-                               shift
-                               break
-                       fi
-               elif [[ ${1:0:1} = '-' ]]; then
-                       for ((i=1; i<${#1}; i++)); do
-                               if [[ $short_options =~ ${1:i:1} ]]; then
-                                       if [[ $short_options =~ ${1:i:1}: ]]; 
then
-                                               if [[ -n ${1:$i+1} ]]; then
-                                                       printf ' -%s' "${1:i:1}"
-                                                       printf " '%s'" 
"${1:$i+1}"
-                                               else
-                                                       if [[ -n $2 ]]; then
-                                                               printf ' -%s' 
"${1:i:1}"
-                                                               shift
-                                                               printf " '%s'" 
"${1}"
-                                                       else
-                                                               echo "makepkg: 
option $(gettext "requires an argument") -- '${1:i:1}'" >&2
-                                                               ret=1
-                                                       fi
-                                               fi
-                                               break
-                                       else
-                                               printf ' -%s' "${1:i:1}"
-                                       fi
-                               else
-                                       echo "makepkg: $(gettext "invalid 
option") -- '${1:i:1}'" >&2
-                                       ret=1
-                               fi
-                       done
-               else
-                       unused_options="${unused_options} '$1'"
-               fi
-               shift
-       done
-
-       printf " --"
-       if [[ -n $unused_options ]]; then
-               for i in ${unused_options[@]}; do
-                       printf ' %s' "$i"
-               done
-       fi
-       if [[ -n $1 ]]; then
-               while [[ -n $1 ]]; do
-                       printf " '%s'" "${1}"
-                       shift
-               done
-       fi
-       printf "\n"
-
-       return $ret
-}
+m4_include(library/parse_options.sh)
 
 usage() {
        printf "makepkg (pacman) %s\n" "$myver"
-- 
1.7.5.4


Reply via email to