Moved functions out in preparation for splitting out download functions.
scripts/libmakepkg/*.sh files only import the files from their relevant
directory.
All libmakepkg files have an inclusion guard.
Also added libmakepkg targets to Makefile.am.

Signed-off-by: Ashley Whetter <[email protected]>
---
 scripts/.gitignore                 |   4 +
 scripts/Makefile.am                |  38 +++++++-
 scripts/libmakepkg/util.sh.in      |  30 +++++++
 scripts/libmakepkg/util/message.sh |  55 ++++++++++++
 scripts/libmakepkg/util/url.sh.in  | 145 ++++++++++++++++++++++++++++++
 scripts/libmakepkg/util/util.sh.in |  58 ++++++++++++
 scripts/makepkg.sh.in              | 180 ++-----------------------------------
 7 files changed, 333 insertions(+), 177 deletions(-)
 create mode 100644 scripts/libmakepkg/util.sh.in
 create mode 100644 scripts/libmakepkg/util/message.sh
 create mode 100644 scripts/libmakepkg/util/url.sh.in
 create mode 100644 scripts/libmakepkg/util/util.sh.in

diff --git a/scripts/.gitignore b/scripts/.gitignore
index 8dac503..6f2e84d 100644
--- a/scripts/.gitignore
+++ b/scripts/.gitignore
@@ -8,3 +8,7 @@ pkgdelta
 repo-add
 repo-elephant
 repo-remove
+
+libmakepkg/util.sh
+libmakepkg/util/url.sh
+libmakepkg/util/util.sh
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 8130704..4c52bd4 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -36,13 +36,22 @@ LIBRARY = \
        library/size_to_human.sh \
        library/term_colors.sh
 
+LIBMAKEPKG = \
+       $(LIBMAKEPKG_INC) \
+       util/message.sh
+
+LIBMAKEPKG_INC = \
+       util.sh \
+       util/url.sh \
+       util/util.sh
+
 # Files that should be removed, but which Automake does not know.
 MOSTLYCLEANFILES = $(bin_SCRIPTS)
 
 libmakepkgdir = $(libdir)/makepkg
 
 clean-local:
-       $(AM_V_at)$(RM) -r .lib
+       $(AM_V_at)$(RM) -r .lib $(addprefix libmakepkg/,$(LIBMAKEPKG_INC))
 
 if USE_GIT_VERSION
 GIT_VERSION := $(shell sh -c 'git describe --abbrev=4 --dirty | sed s/^v//')
@@ -83,7 +92,20 @@ $(OURSCRIPTS): Makefile
        $(AM_V_at)chmod +x,a-w $@
        @$(BASH_SHELL) -O extglob -n $@
 
+$(addprefix libmakepkg/,$(LIBMAKEPKG_INC)): Makefile
+       $(AM_V_at)$(RM) $@
+       $(AM_V_GEN)test -f $(srcdir)/[email protected] && m4 -P -I $(srcdir) 
$(srcdir)/[email protected] | $(edit) >$@
+       $(AM_V_at)chmod a-w $@
+       @$(BASH_SHELL) -O extglob -n $@
+
+libmakepkg: \
+       $(srcdir)/libmakepkg/util.sh \
+       $(srcdir)/libmakepkg/util/message.sh \
+       $(srcdir)/libmakepkg/util/url.sh \
+       $(srcdir)/libmakepkg/util/util.sh
+
 makepkg: \
+       libmakepkg \
        $(srcdir)/makepkg.sh.in \
        $(srcdir)/makepkg-wrapper.sh.in \
        $(srcdir)/library/parseopts.sh
@@ -131,7 +153,12 @@ makepkg-wrapper: \
        $(srcdir)/makepkg-wrapper.sh.in \
        $(srcdir)/makepkg.sh.in \
        $(srcdir)/library/parseopts.sh \
-       | makepkg
+       $(srcdir)/libmakepkg/util.sh \
+       $(srcdir)/libmakepkg/util/message.sh \
+       $(srcdir)/libmakepkg/util/url.sh \
+       $(srcdir)/libmakepkg/util/util.sh \
+       | libmakepkg \
+       makepkg
        $(AM_V_at)$(MKDIR_P) .lib
        $(AM_V_at)mv -f makepkg .lib
        $(AM_V_at)$(RM) $@
@@ -146,6 +173,10 @@ install-data-hook:
        cd $(DESTDIR)$(bindir) && \
                $(RM) makepkg makepkg-wrapper
        $(INSTALL) .lib/makepkg $(DESTDIR)$(bindir)/makepkg
+       $(AM_V_at)$(MKDIR_P) $(DESTDIR)$(libmakepkgdir)/util
+       for lib in $(LIBMAKEPKG); do \
+               $(INSTALL) libmakepkg/$$lib $(DESTDIR)$(libmakepkgdir)/$$lib; \
+       done
        cd $(DESTDIR)$(bindir) && \
                $(RM) repo-elephant && \
                ( $(LN_S) repo-add repo-elephant || \
@@ -160,5 +191,8 @@ install-data-hook:
 uninstall-hook:
        cd $(DESTDIR)$(bindir) && \
                $(RM) repo-remove repo-elephant
+       for lib in $(LIBMAKEPKG); do \
+               $(RM) -r $(DESTDIR)$(libmakepkgdir)/$$lib; \
+       done
 
 # vim:set ts=2 sw=2 noet:
diff --git a/scripts/libmakepkg/util.sh.in b/scripts/libmakepkg/util.sh.in
new file mode 100644
index 0000000..11626bd
--- /dev/null
+++ b/scripts/libmakepkg/util.sh.in
@@ -0,0 +1,30 @@
+#!/bin/bash
+#
+#   util.sh
+#
+#   Copyright (c) 2006-2013 Pacman Development Team <[email protected]>
+#
+#   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/>.
+#
+
+[ -n "$LIBMAKEPKG_UTIL_SH" ] && return
+LIBMAKEPKG_UTIL_SH=1
+
+LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
+
+for lib in "$LIBRARY/util/"*.sh; do
+       source "$lib"
+done
+
+# vim: set ts=2 sw=2 noet:
diff --git a/scripts/libmakepkg/util/message.sh 
b/scripts/libmakepkg/util/message.sh
new file mode 100644
index 0000000..ad134fe
--- /dev/null
+++ b/scripts/libmakepkg/util/message.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+#
+#   message.sh
+#
+#   Copyright (c) 2006-2013 Pacman Development Team <[email protected]>
+#   Copyright (c) 2002-2006 by Judd Vinet <[email protected]>
+#   Copyright (c) 2005 by Aurelien Foret <[email protected]>
+#   Copyright (c) 2006 by Miklos Vajna <[email protected]>
+#   Copyright (c) 2005 by Christian Hamar <[email protected]>
+#   Copyright (c) 2006 by Alex Smith <[email protected]>
+#   Copyright (c) 2006 by Andras Voroskoi <[email protected]>
+#
+#   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/>.
+#
+
+[ -n "$LIBMAKEPKG_UTIL_MESSAGE_SH" ] && return
+LIBMAKEPKG_UTIL_MESSAGE_SH=1
+
+error() {
+       local mesg=$1; shift
+       printf "${RED}==> $(gettext "ERROR:")${ALL_OFF}${BOLD} 
${mesg}${ALL_OFF}\n" "$@" >&2
+}
+
+msg() {
+       local mesg=$1; shift
+       printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
+}
+
+msg2() {
+       local mesg=$1; shift
+       printf "${BLUE}  ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
+}
+
+plain() {
+       local mesg=$1; shift
+       printf "${BOLD}    ${mesg}${ALL_OFF}\n" "$@" >&2
+}
+
+warning() {
+       local mesg=$1; shift
+       printf "${YELLOW}==> $(gettext "WARNING:")${ALL_OFF}${BOLD} 
${mesg}${ALL_OFF}\n" "$@" >&2
+}
+
+# vim: set ts=2 sw=2 noet:
diff --git a/scripts/libmakepkg/util/url.sh.in 
b/scripts/libmakepkg/util/url.sh.in
new file mode 100644
index 0000000..595ce16
--- /dev/null
+++ b/scripts/libmakepkg/util/url.sh.in
@@ -0,0 +1,145 @@
+#!/bin/bash
+#
+#   url.sh
+#
+#   Copyright (c) 2006-2013 Pacman Development Team <[email protected]>
+#
+#   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/>.
+#
+
+[ -n "$LIBMAKEPKG_UTIL_URL_SH" ] && return
+LIBMAKEPKG_UTIL_URL_SH=1
+
+LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
+
+source "$LIBRARY/util/message.sh"
+
+get_downloadclient() {
+       local proto=$1
+
+       # loop through DOWNLOAD_AGENTS variable looking for protocol
+       local i
+       for i in "${DLAGENTS[@]}"; do
+               local handler="${i%%::*}"
+               if [[ $proto = "$handler" ]]; then
+                       local agent="${i##*::}"
+                       break
+               fi
+       done
+
+       # if we didn't find an agent, return an error
+       if [[ -z $agent ]]; then
+               error "$(gettext "Unknown download protocol: %s")" "$proto"
+               plain "$(gettext "Aborting...")"
+               exit 1 # $E_CONFIG_ERROR
+       fi
+
+       # ensure specified program is installed
+       local program="${agent%% *}"
+       if [[ ! -x $program ]]; then
+               local baseprog="${program##*/}"
+               error "$(gettext "The download program %s is not installed.")" 
"$baseprog"
+               plain "$(gettext "Aborting...")"
+               exit 1 # $E_MISSING_PROGRAM
+       fi
+
+       printf "%s\n" "$agent"
+}
+
+# extract the filename from a source entry
+get_filename() {
+       local netfile=$1
+
+       # if a filename is specified, use it
+       if [[ $netfile = *::* ]]; then
+               printf "%s\n" ${netfile%%::*}
+               return
+       fi
+
+       local proto=$(get_protocol "$netfile")
+
+       case $proto in
+               bzr*|git*|hg*|svn*)
+                       filename=${netfile%%#*}
+                       filename=${filename%/}
+                       filename=${filename##*/}
+                       if [[ $proto = bzr* ]]; then
+                               filename=${filename#*lp:}
+                       fi
+                       if [[ $proto = git* ]]; then
+                               filename=${filename%%.git*}
+                       fi
+                       ;;
+               *)
+                       # if it is just an URL, we only keep the last component
+                       filename="${netfile##*/}"
+                       ;;
+       esac
+       printf "%s\n" "${filename}"
+}
+
+# a source entry can have two forms :
+# 1) "filename::http://path/to/file";
+# 2) "http://path/to/file";
+
+# Return the absolute filename of a source entry
+get_filepath() {
+       local file="$(get_filename "$1")"
+       local proto="$(get_protocol "$1")"
+
+       case $proto in
+               bzr*|git*|hg*|svn*)
+                       if [[ -d "$startdir/$file" ]]; then
+                               file="$startdir/$file"
+                       elif [[ -d "$SRCDEST/$file" ]]; then
+                               file="$SRCDEST/$file"
+                       else
+                               return 1
+                       fi
+                       ;;
+               *)
+                       if [[ -f "$startdir/$file" ]]; then
+                               file="$startdir/$file"
+                       elif [[ -f "$SRCDEST/$file" ]]; then
+                               file="$SRCDEST/$file"
+                       else
+                               return 1
+                       fi
+                       ;;
+       esac
+
+       printf "%s\n" "$file"
+}
+
+# extract the protocol from a source entry - return "local" for local sources
+get_protocol() {
+       if [[ $1 = *://* ]]; then
+               # strip leading filename
+               local proto="${1##*::}"
+               printf "%s\n" "${proto%%://*}"
+       elif [[ $1 = *lp:* ]]; then
+               local proto="${1##*::}"
+               printf "%s\n" "${proto%%lp:*}"
+       else
+               printf "%s\n" local
+       fi
+}
+
+# extract the URL from a source entry
+get_url() {
+       # strip an eventual filename
+       printf "%s\n" "${1#*::}"
+}
+
+# vim: set ts=2 sw=2 noet:
diff --git a/scripts/libmakepkg/util/util.sh.in 
b/scripts/libmakepkg/util/util.sh.in
new file mode 100644
index 0000000..76418b0
--- /dev/null
+++ b/scripts/libmakepkg/util/util.sh.in
@@ -0,0 +1,58 @@
+#!/bin/bash
+#
+#      util.sh
+#
+#   Copyright (c) 2006-2013 Pacman Development Team <[email protected]>
+#
+#   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/>.
+#
+
+[ -n "$LIBMAKEPKG_UTIL_UTIL_SH" ] && return
+LIBMAKEPKG_UTIL_UTIL_SH=1
+
+LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
+
+source "$LIBRARY/util/message.sh"
+
+cd_safe() {
+       if ! cd "$1"; then
+               error "$(gettext "Failed to change to directory %s")" "$1"
+               plain "$(gettext "Aborting...")"
+               exit 1
+       fi
+}
+
+dir_is_empty() {
+       (
+               shopt -s dotglob nullglob
+               files=("$1"/*)
+               (( ${#files} == 0 ))
+       )
+}
+
+##
+#  usage : in_array( $needle, $haystack )
+# return : 0 - found
+#          1 - not found
+##
+in_array() {
+       local needle=$1; shift
+       local item
+       for item in "$@"; do
+               [[ $item = "$needle" ]] && return 0 # Found
+       done
+       return 1 # Not Found
+}
+
+# vim: set ts=2 sw=2 noet:
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 5ac00a1..d1dd964 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -97,33 +97,12 @@ PACMAN_OPTS=
 
 shopt -s extglob
 
-### SUBROUTINES ###
-
-plain() {
-       local mesg=$1; shift
-       printf "${BOLD}    ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-msg() {
-       local mesg=$1; shift
-       printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-msg2() {
-       local mesg=$1; shift
-       printf "${BLUE}  ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-warning() {
-       local mesg=$1; shift
-       printf "${YELLOW}==> $(gettext "WARNING:")${ALL_OFF}${BOLD} 
${mesg}${ALL_OFF}\n" "$@" >&2
-}
-
-error() {
-       local mesg=$1; shift
-       printf "${RED}==> $(gettext "ERROR:")${ALL_OFF}${BOLD} 
${mesg}${ALL_OFF}\n" "$@" >&2
-}
+# Import libmakepkg
+for lib in "$LIBRARY"/*.sh; do
+       source "$lib"
+done
 
+### SUBROUTINES ###
 
 ##
 # Special exit call for traps, Don't print any error messages when inside,
@@ -198,124 +177,6 @@ enter_fakeroot() {
        fakeroot -- $0 -F "${ARGLIST[@]}" || exit $?
 }
 
-
-# a source entry can have two forms :
-# 1) "filename::http://path/to/file";
-# 2) "http://path/to/file";
-
-# Return the absolute filename of a source entry
-get_filepath() {
-       local file="$(get_filename "$1")"
-       local proto="$(get_protocol "$1")"
-
-       case $proto in
-               bzr*|git*|hg*|svn*)
-                       if [[ -d "$startdir/$file" ]]; then
-                               file="$startdir/$file"
-                       elif [[ -d "$SRCDEST/$file" ]]; then
-                               file="$SRCDEST/$file"
-                       else
-                               return 1
-                       fi
-                       ;;
-               *)
-                       if [[ -f "$startdir/$file" ]]; then
-                               file="$startdir/$file"
-                       elif [[ -f "$SRCDEST/$file" ]]; then
-                               file="$SRCDEST/$file"
-                       else
-                               return 1
-                       fi
-                       ;;
-       esac
-
-       printf "%s\n" "$file"
-}
-
-# extract the filename from a source entry
-get_filename() {
-       local netfile=$1
-
-       # if a filename is specified, use it
-       if [[ $netfile = *::* ]]; then
-               printf "%s\n" ${netfile%%::*}
-               return
-       fi
-
-       local proto=$(get_protocol "$netfile")
-
-       case $proto in
-               bzr*|git*|hg*|svn*)
-                       filename=${netfile%%#*}
-                       filename=${filename%/}
-                       filename=${filename##*/}
-                       if [[ $proto = bzr* ]]; then
-                               filename=${filename#*lp:}
-                       fi
-                       if [[ $proto = git* ]]; then
-                               filename=${filename%%.git*}
-                       fi
-                       ;;
-               *)
-                       # if it is just an URL, we only keep the last component
-                       filename="${netfile##*/}"
-                       ;;
-       esac
-       printf "%s\n" "${filename}"
-}
-
-# extract the URL from a source entry
-get_url() {
-       # strip an eventual filename
-       printf "%s\n" "${1#*::}"
-}
-
-# extract the protocol from a source entry - return "local" for local sources
-get_protocol() {
-       if [[ $1 = *://* ]]; then
-               # strip leading filename
-               local proto="${1##*::}"
-               printf "%s\n" "${proto%%://*}"
-       elif [[ $1 = *lp:* ]]; then
-               local proto="${1##*::}"
-               printf "%s\n" "${proto%%lp:*}"
-       else
-               printf "%s\n" local
-       fi
-}
-
-get_downloadclient() {
-       local proto=$1
-
-       # loop through DOWNLOAD_AGENTS variable looking for protocol
-       local i
-       for i in "${DLAGENTS[@]}"; do
-               local handler="${i%%::*}"
-               if [[ $proto = "$handler" ]]; then
-                       local agent="${i##*::}"
-                       break
-               fi
-       done
-
-       # if we didn't find an agent, return an error
-       if [[ -z $agent ]]; then
-               error "$(gettext "Unknown download protocol: %s")" "$proto"
-               plain "$(gettext "Aborting...")"
-               exit 1 # $E_CONFIG_ERROR
-       fi
-
-       # ensure specified program is installed
-       local program="${agent%% *}"
-       if [[ ! -x $program ]]; then
-               local baseprog="${program##*/}"
-               error "$(gettext "The download program %s is not installed.")" 
"$baseprog"
-               plain "$(gettext "Aborting...")"
-               exit 1 # $E_MISSING_PROGRAM
-       fi
-
-       printf "%s\n" "$agent"
-}
-
 download_local() {
        local netfile=$1
        local filepath=$(get_filepath "$netfile")
@@ -966,21 +827,6 @@ in_opt_array() {
        return 127
 }
 
-
-##
-#  usage : in_array( $needle, $haystack )
-# return : 0 - found
-#          1 - not found
-##
-in_array() {
-       local needle=$1; shift
-       local item
-       for item in "$@"; do
-               [[ $item = "$needle" ]] && return 0 # Found
-       done
-       return 1 # Not Found
-}
-
 source_has_signatures() {
        local file
        for file in "${source[@]}"; do
@@ -1372,14 +1218,6 @@ error_function() {
        exit 2 # $E_BUILD_FAILED
 }
 
-cd_safe() {
-       if ! cd "$1"; then
-               error "$(gettext "Failed to change to directory %s")" "$1"
-               plain "$(gettext "Aborting...")"
-               exit 1
-       fi
-}
-
 source_safe() {
        shopt -u extglob
        if ! source "$@"; then
@@ -2473,14 +2311,6 @@ canonicalize_path() {
        fi
 }
 
-dir_is_empty() {
-       (
-               shopt -s dotglob nullglob
-               files=("$1"/*)
-               (( ${#files} == 0 ))
-       )
-}
-
 m4_include(library/parseopts.sh)
 
 usage() {
-- 
1.8.4


Reply via email to