aboutsummaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
authorMark Ferrell <major@homeonderanged.org>2014-04-09 09:20:22 -0700
committerMark Ferrell <major@homeonderanged.org>2014-04-09 09:20:22 -0700
commitb91e26c9061dadeb909e992d2afdb483c189c8fa (patch)
tree4f1e41a1a8d489f455d825ed53cfc2df66cb96de /libexec
parentae9b586387ddde3173763d0c708223a6bb15801d (diff)
Add build-url
* Removed URL parsing out of build-make-fetch and into its own command.
Diffstat (limited to 'libexec')
-rwxr-xr-xlibexec/build-fetch-ftp2
-rwxr-xr-xlibexec/build-fetch-git4
-rwxr-xr-xlibexec/build-fetch-http2
-rwxr-xr-xlibexec/build-fetch-svn4
-rwxr-xr-xlibexec/build-make-export2
-rwxr-xr-xlibexec/build-make-fetch113
-rwxr-xr-xlibexec/build-make-package2
-rwxr-xr-xlibexec/build-make-source2
-rwxr-xr-xlibexec/build-makedeps6
-rwxr-xr-xlibexec/build-url124
10 files changed, 140 insertions, 121 deletions
diff --git a/libexec/build-fetch-ftp b/libexec/build-fetch-ftp
index 1824eb7..23e6c7d 100755
--- a/libexec/build-fetch-ftp
+++ b/libexec/build-fetch-ftp
@@ -9,7 +9,7 @@ build_fetch_wget() { wget --quiet -O "${2}" "${1}"; }
build_fetch_ftp()
{
- set -- "${1}" "`build-make-fetch --name "${1}"`"
+ set -- "${1}" "`build-url --archive "${1}"`"
test -d "${BUILDER_SRCDIR}" || mkdir -p "${BUILDER_SRCDIR}"
test -f "${BUILDER_SRCDIR}/${2}" && return
diff --git a/libexec/build-fetch-git b/libexec/build-fetch-git
index 9ecfcc7..e8cd5ec 100755
--- a/libexec/build-fetch-git
+++ b/libexec/build-fetch-git
@@ -2,12 +2,12 @@
build_fetch_git()
{
- build_fetch_git_uri="$(build-make-fetch --uri "${1}")"
+ build_fetch_git_uri="$(build-url --base "${1}")"
build_fetch_git_uri="${build_fetch_git_uri#git://}"
build_fetch_git_uri="${build_fetch_git_uri%%\?*}"
build_fetch_git_tag=
build_fetch_git_var=
- for arg in $(build-make-fetch --args "${1}"); do
+ for arg in $(build-url --arg "${1}"); do
case "${arg}" in
(archive=*) build_fetch_git_var="${arg##*=}";;
(*) build_fetch_git_tag="${arg}";;
diff --git a/libexec/build-fetch-http b/libexec/build-fetch-http
index aa285de..66e6314 100755
--- a/libexec/build-fetch-http
+++ b/libexec/build-fetch-http
@@ -9,7 +9,7 @@ build_fetch_wget() { wget --quiet -O "${2}" "${1}"; }
build_fetch_http()
{
- set -- "${1}" "`build-make-fetch --name "${1}"`"
+ set -- "${1}" "`build-url --archive "${1}"`"
test -d "${BUILDER_SRCDIR}" || mkdir -p "${BUILDER_SRCDIR}"
test -f "${BUILDER_SRCDIR}/${2}" && return
diff --git a/libexec/build-fetch-svn b/libexec/build-fetch-svn
index 910c5f9..5a6d32e 100755
--- a/libexec/build-fetch-svn
+++ b/libexec/build-fetch-svn
@@ -2,10 +2,10 @@
build_fetch_svn()
{
- build_fetch_svn_uri="$(build-make-fetch --uri "${1}")"
+ build_fetch_svn_uri="$(build-url --base "${1}")"
build_fetch_svn_uri="${build_fetch_svn_uri%%\?*}"
build_fetch_svn_proto=svn
- for arg in $(build-make-fetch --args "${1}"); do
+ for arg in $(build-url --arg "${1}"); do
case "${arg}" in
(archive=*) build_fetch_svn_var="${arg##*=}";;
(proto=*) build_fetch_svn_proto="${arg##*=}";;
diff --git a/libexec/build-make-export b/libexec/build-make-export
index 9cc7f67..a93906d 100755
--- a/libexec/build-make-export
+++ b/libexec/build-make-export
@@ -32,7 +32,7 @@ fi
cd "${T}"
for url in ${SOURCE_URI}; do
- file="$(build-make-fetch --name "${url}")"
+ file="$(build-url --archive "${url}")"
test -f "${BUILDER_SRCDIR}/${file}" || die "source does not exist '${file}'"
cp "${BUILDER_SRCDIR}/${file}" "${NAME}-${VERSION}.builder/"
done
diff --git a/libexec/build-make-fetch b/libexec/build-make-fetch
index b4b98f1..b2031da 100755
--- a/libexec/build-make-fetch
+++ b/libexec/build-make-fetch
@@ -1,20 +1,6 @@
#!/usr/bin/env build
-usage()
-{
-cat<<END_OF_USAGE
-usage: build-fetch [options] <url>
-
-options:
-
- -A, --args Return the argument portion of the URL
- -N, --name Return the filename portion of the URL
- -V, --var Return the variable portion of the URL
- -U, --uri Return the URI portion of the URL
- -h, --help Display this help
-
-END_OF_USAGE
-}
+build_fetch_usage() { echo 'usage: build-fetch [options] <url>'; }
build_fetch_clean()
{
@@ -27,101 +13,10 @@ build_fetch_clean()
done
}
-build_fetch_uri() { printf '%s' "${1%%\?*}"; }
-
-build_fetch_args()
-{
- set -- $(echo "${1##$(build_fetch_uri "${1}")\?}"|sed -e 's/&/ /')
- printf '%s' "${*}"
-}
-
-build_fetch_name()
-{
- build_fetch_name_var="$(build_fetch_uri "${1}")"
- build_fetch_name_var="${build_fetch_name_var##*/}"
- build_fetch_name_var="${build_fetch_name_var%%\?*}"
-
- build_fetch_name_complete="0"
- case "${build_fetch_name_var}" in
- (*.tar.*) build_fetch_name_complete=1;;
- (*.t[bgx]z) build_fetch_name_complete=1;;
- (*.tbz2) build_fetch_name_complete=1;;
- (*.tz) build_fetch_name_complete=1;;
- (*.zip|*.jar) build_fetch_name_complete=1;;
- esac
-
- if [ "${build_fetch_name_complete}" -eq "1" ]; then
- printf '%s' "${build_fetch_name_var}"
- unset build_fetch_name_var
- return
- fi
-
- # The filename to archive has to be supplied on the SOURCES_URI, else
- # we can't do anything about packages which share common sources.
- build_fetch_name_var=
- for arg in $(build_fetch_args "${1}"); do
- case "${arg}" in
- (archive=*) build_fetch_name_var="${arg##*=}";;
- esac
- done
-
- if [ -z "${build_fetch_name_var}" ]; then
- die "do not know how to store source from '${1}'"
- fi
-
- printf '%s' "${build_fetch_name_var}"
- unset build_fetch_name_var
-}
-
-build_fetch_var()
-{
- printf 'fetch_%s' "$(build_fetch_name "${1}" | sed -e 's/[+.-]/_/g')"
-}
-
-# Look for requests for help "anywhere" in the command line
-for arg; do
- case "${arg}" in
- (-h|-help|--help) usage; exit 0;;
- esac
-done
-
-FETCH_ACTION="fetch"
-while [ "$#" -gt "0" ]; do
- case "${1}" in
- (-A|-args|--args)
- FETCH_ACTION="args"
- shift
- ;;
- (-N|-name|--name)
- FETCH_ACTION="name"
- shift
- ;;
- (-V|-var|--var|--variable)
- FETCH_ACTION="var"
- shift
- ;;
- (-U|-uri|--uri)
- FETCH_ACTION="uri"
- shift
- ;;
- (-*) die "unknown fetch action '${1}'";;
- (*) break;;
- esac
-done
-
-case "${FETCH_ACTION}" in
-(args) build_fetch_args "${1}"; exit $?;;
-(name) build_fetch_name "${1}"; exit $?;;
-(var) build_fetch_var "${1}"; exit $?;;
-(uri) build_fetch_uri "${1}"; exit $?;;
-(fetch) break;;
-(*) die "unknown fetch action '${FETCH_ACTION}'";;
-esac
-
if ! test -d "${BUILDER_TMPDIR}/fetch"; then
mkdir -p "${BUILDER_TMPDIR}/fetch"
fi
-FETCH_LOG="${BUILDER_TMPDIR}/fetch/$(build_fetch_name "${1}").log"
+FETCH_LOG="${BUILDER_TMPDIR}/fetch/$(build-url --archive "${1}").log"
rm -f "${FETCH_LOG}"
touch "${FETCH_LOG}"
@@ -129,7 +24,7 @@ trap build_fetch_clean 0
build_fetch()
{
echo "trying: fetch ${1}"
- build_fetch_proto="${1%%:*}"
+ build_fetch_proto="$(build-url --proto "${1}")"
if ! test -x "${BUILDER_LIBDIR}/build-fetch-${build_fetch_proto}"; then
die "do not know how to handle '${build_fetch_proto}'"
@@ -138,7 +33,7 @@ build_fetch()
unset build_fetch_proto
}
-build_fetch_file="$(build_fetch_name "${1}")"
+build_fetch_file="$(build-url --archive "${1}")"
for mirror in ${MIRRORS}; do
build_fetch "${mirror}/${build_fetch_file}" && exit
done
diff --git a/libexec/build-make-package b/libexec/build-make-package
index 24e364f..fe501c7 100755
--- a/libexec/build-make-package
+++ b/libexec/build-make-package
@@ -69,7 +69,7 @@ if [ -d "${SOURCE_DIR}" -o -L "${SOURCE_DIR}" ]; then
else
# FIXME this stuff needs a lot of work
for url in ${SOURCE_URI}; do
- file="$(build-make-fetch --name "${url}")"
+ file="$(build-url --archive "${url}")"
if [ ! -f "${BUILDER_SRCDIR}/${file}" ]; then
die "source does not exist '${file}'"
fi
diff --git a/libexec/build-make-source b/libexec/build-make-source
index 975fa27..a03c658 100755
--- a/libexec/build-make-source
+++ b/libexec/build-make-source
@@ -34,7 +34,7 @@ build_source_args()
build_source()
{
- file="$(build-make-fetch --name "${1}")"
+ file="$(build-url --archive "${1}")"
if [ ! -f "${BUILDER_SRCDIR}/${file}" ]; then
die "source does not exist '${file}'"
fi
diff --git a/libexec/build-makedeps b/libexec/build-makedeps
index 73802f3..7528ca6 100755
--- a/libexec/build-makedeps
+++ b/libexec/build-makedeps
@@ -67,7 +67,7 @@ for package in $(echo "${BUILDER_PKGDIR}"/*/*); do
(file://*|/*) package_sources="${package_sources} ${url##file://}";;
# Assume anything else with :// in the name is remote
- (*://*) pkg_src="$(build-make-fetch --name "${url}")"
+ (*://*) pkg_src="$(build-url --archive "${url}")"
if test "$?" -ne "0"; then
exit 1
fi
@@ -146,10 +146,10 @@ EOF
# Assume anything else with :// in the name is remote
(*://*)
- var="$(build-make-fetch --var "${url}")"
+ var="fetch_$(build-url --archive "${url}"|sed 's/[+.-]/_/g')"
if test -z "$(eval echo -n "\$${var}")"; then
eval "${var}='${url}'"
- echo "${BUILDER_SRCDIR}/$(build-make-fetch --name "${url}"):"
+ echo "${BUILDER_SRCDIR}/$(build-url --archive "${url}"):"
echo " @build-make-fetch \"${url}\""
fi
;;
diff --git a/libexec/build-url b/libexec/build-url
new file mode 100755
index 0000000..f875f8d
--- /dev/null
+++ b/libexec/build-url
@@ -0,0 +1,124 @@
+#!/usr/bin/env build
+
+build_url_usage()
+{
+cat<<END_OF_USAGE
+usage: build-url [options] <url>
+
+options:
+ -a, --archive Return the archive portion of the URL.
+ -A, --arg [key] Return the specified URL argument, or all arguments if
+ not specified.
+ -B, --base Return the proto://host/path portion of the URL
+ -P, --proto Return the protocol portion of the URL
+ -h, --help Display this help
+
+END_OF_USAGE
+}
+
+build_url_proto() { printf '%s' "${1%%://*}"; }
+build_url_base() { printf '%s' "${1%%\?*}"; }
+
+build_url_arg()
+{
+ build_url_arg_match=
+ if test "$#" -gt '1'; then
+ build_url_arg_match="${1}"
+ shift
+ fi
+ set -- $(echo "${1##$(build_url_base "${1}")\?}"|sed -e 's/&/ /')
+
+ if test -z "${build_url_arg_match}"; then
+ printf '%s' "${*}"
+ return
+ fi
+
+ for arg; do
+ case "${arg}" in
+ (${build_url_arg_match}=*)
+ echo "${arg#*=}"; return;;
+ esac
+ done
+}
+
+build_url_archive()
+{
+ build_url_name_var="$(build_url_base "${1}")"
+ build_url_name_var="${build_url_name_var##*/}"
+ build_url_name_var="${build_url_name_var%%\?*}"
+
+ build_url_name_complete="0"
+ case "${build_url_name_var}" in
+ (*.tar.*) build_url_name_complete=1;;
+ (*.t[bgx]z) build_url_name_complete=1;;
+ (*.tbz2) build_url_name_complete=1;;
+ (*.tz) build_url_name_complete=1;;
+ (*.zip|*.jar) build_url_name_complete=1;;
+ (*.rpm) build_url_name_complete=1;;
+ esac
+
+ if [ "${build_url_name_complete}" -eq "1" ]; then
+ printf '%s' "${build_url_name_var}"
+ unset build_url_name_var
+ return
+ fi
+
+ # The filename to archive has to be supplied on the SOURCES_URI, else
+ # we can't do anything about packages which share common sources.
+ build_url_name_var=
+ for arg in $(build_url_arg "${1}"); do
+ case "${arg}" in
+ (archive=*) build_url_name_var="${arg##*=}";;
+ esac
+ done
+
+ if [ -z "${build_url_name_var}" ]; then
+ die "do not know how to store source from '${1}'"
+ fi
+
+ printf '%s' "${build_url_name_var}"
+ unset build_url_name_var
+}
+
+if test "${BUILDER_CALL_STACK}" = '__main__'; then
+# Look for requests for help "anywhere" in the command line
+ for arg; do
+ case "${arg}" in
+ (-h|-help|--help) build_url_usage; exit 0;;
+ esac
+ done
+
+ URL_ACTION="url"
+ while [ "$#" -gt "0" ]; do
+ case "${1}" in
+ (-a|-archive|--archive)
+ URL_ACTION="archive"
+ shift
+ ;;
+ (-A|-arg|--arg)
+ URL_ACTION="arg"
+ shift
+ ;;
+ (-B|-base|--base)
+ URL_ACTION="base"
+ shift
+ ;;
+ (-P|-proto|--proto|-protocol|--protocol)
+ URL_ACTION="proto"
+ shift
+ ;;
+ (-*) die "unknown url action '${1}'";;
+ (*) break;;
+ esac
+ done
+
+ case "${URL_ACTION}" in
+ (arg) build_url_arg "${@}"; exit $?;;
+ (archive) build_url_archive "${@}"; exit $?;;
+ (base) build_url_base "${@}"; exit $?;;
+ (proto) build_url_proto "${@}"; exit $?;;
+ (*) die "unknown url action '${URL_ACTION}'";;
+ esac
+fi
+
+# vim: filetype=sh