diff options
| author | Mark Ferrell <major@homeonderanged.org> | 2014-04-09 09:20:22 -0700 |
|---|---|---|
| committer | Mark Ferrell <major@homeonderanged.org> | 2014-04-09 09:20:22 -0700 |
| commit | b91e26c9061dadeb909e992d2afdb483c189c8fa (patch) | |
| tree | 4f1e41a1a8d489f455d825ed53cfc2df66cb96de /libexec | |
| parent | ae9b586387ddde3173763d0c708223a6bb15801d (diff) | |
Add build-url
* Removed URL parsing out of build-make-fetch and into its own command.
Diffstat (limited to 'libexec')
| -rwxr-xr-x | libexec/build-fetch-ftp | 2 | ||||
| -rwxr-xr-x | libexec/build-fetch-git | 4 | ||||
| -rwxr-xr-x | libexec/build-fetch-http | 2 | ||||
| -rwxr-xr-x | libexec/build-fetch-svn | 4 | ||||
| -rwxr-xr-x | libexec/build-make-export | 2 | ||||
| -rwxr-xr-x | libexec/build-make-fetch | 113 | ||||
| -rwxr-xr-x | libexec/build-make-package | 2 | ||||
| -rwxr-xr-x | libexec/build-make-source | 2 | ||||
| -rwxr-xr-x | libexec/build-makedeps | 6 | ||||
| -rwxr-xr-x | libexec/build-url | 124 |
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 |
