diff --git a/config/common_full.mk b/config/common_full.mk index 72b423a1..0a8bd850 100644 --- a/config/common_full.mk +++ b/config/common_full.mk @@ -27,4 +27,5 @@ PRODUCT_PACKAGES += \ unrar \ unzip \ vim \ + wget \ zip diff --git a/prebuilt/common/Android.mk b/prebuilt/common/Android.mk new file mode 100644 index 00000000..f15b178c --- /dev/null +++ b/prebuilt/common/Android.mk @@ -0,0 +1,10 @@ +LOCAL_PATH := $(call my-dir) + +# a wrapper for curl which provides wget syntax, for compatibility +include $(CLEAR_VARS) +LOCAL_MODULE := wget +LOCAL_SRC_FILES := bin/wget +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) +include $(BUILD_PREBUILT) diff --git a/prebuilt/common/bin/wget b/prebuilt/common/bin/wget new file mode 100755 index 00000000..1d04de54 --- /dev/null +++ b/prebuilt/common/bin/wget @@ -0,0 +1,184 @@ +#!/system/bin/sh +# wget-curl, a curl wrapper acting as a wget drop-in replacement - version git-HEAD +# Usage: wget [wget args] [i need to fill this in later] +# Download all URLs given using curl, but using wget's options. +# +# +# End of help. +# Copyright (c) 2015 Kylie McClain +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# End of copyright. +# + +set -o pipefail +shopt -u shift_verbose >/dev/null 2>&1 + +help() { + sed -n '/^#/!d;s/^# //;s/^#//;3,${p;}' "$0" | \ + while IFS= read help_line;do + if [[ "$help_line" == "End of help." ]];then + exit 0 + else + printf "%s\n" "$help_line" + fi + done + exit 0 +} + +version() { + sed 's/^# //;s/, .* - version / /;2q;$!d' "$0" + copyright + exit 0 +} + +copyright() { + sed -n '/^#/!d;s/^# //;s/^#//;/End of help./,${p;}' "$0" | \ + while IFS= read copyright_line;do + if [[ "$copyright_line" == "End of help." ]];then + true + elif [[ "$copyright_line" == "End of copyright." ]];then + break + else + printf '%s\n' "$copyright_line" + fi + done +} + +stderr() { + printf "$@" >&2 +} + +error() { + stderr "$0: $1\n" + exit "$2" +} + +invalid_arg() { + error "invalid option -- '$1'" 2 +} + +append_opt() { + for opt in $@;do + CURL_OPTS="${CURL_OPTS} ${opt}" + done +} + +curl() { + eval "command curl $@ ${CURL_RAW}" +} + +append_raw_arg() { + CURL_RAW="$CURL_RAW $@" +} + +has_opt() { # exit 0 if CURL_OPTS has arg, non-zero if doesn't + if [[ "$CURL_OPTS" == *" $1"* ]];then + return 0 + else + return 1 + fi +} + +reexec_without() { # download afterwards without $1 in OPTS + reexec_args_without="$reexec_args_without $@" + reexec=1 +} + +reexec_only() { + for arg in $@;do + CURL_OPTS_REEXEC_ONLY="${CURL_OPTS_REEXEC_ONLY} $arg" + done +} + +print_url() { + has_opt -s || printf "%s\n" "$1" +} + +# 46ABDFHIKLNOPQRSTUVXabcdhiklm nH nc nd np nv opqrtvwx +while getopts ':46ABDFHIKLNO:PQRST:U:VXa:bcdhiklmopqrtvwx' argument "$@";do + case "$argument" in + # a lot of these are noop right now because they are wget mirror args + # which curl doesn't really do, and i am not sure if i should implement them + 4) append_opt -4 ;; + 6) append_opt -6 ;; + A) true ;; # probably can't implement this easily... + B) true ;; + D) true ;; + E) true ;; + F) true ;; # curl doesn't care what the input is + H) true ;; + I) true ;; + K) true ;; + L) true ;; + N) true ;; + O) append_opt "-o $OPTARG" ;; + P) true ;; + Q) true ;; + R) true ;; + S) append_opt -I;reexec_without -I -s ;; + T) append_opt "-m $OPTARG" ;; + U) append_opt "--user-agent \"$OPTARG\"" ;; + V) version; curl --version; exit 0 ;; + X) true ;; + a) append_raw_arg "2>&1 | tee -a $OPTARG" ;; + b) + wget_log="wget-log" + i=1 + while [[ -f "${wget_log}" ]];do + # if that exists, increment until we find something that doesn't + i=$(($i+1)) + wget_log="wget-log.${i}" + done + append_raw_arg ">\"$wget_log\" 2>&1 &" + printf "Continuing in background, pid %s.\nOutput will be written to '$wget_log'.\n" "$$" + ;; + c) append_opt "-C -" ;; + d) append_opt "-v" ;; + e) true ;; + h) help ;; + i) + [[ ! -f "$OPTARG" ]] && error "$OPTARG does not exist" 3 + for url in $(<"$OPTARG");do + URLS=( ${URLS[@]} "$url" ) + done + ;; + q) append_opt "-s" ;; + esac + shift $(($OPTIND-1)) +done + +# set wget default equivilants +append_opt -L # follow redirects +append_opt -# # progress bar + +if [[ -z "${URLS[@]}" ]];then + URLS=( ${@} ) +fi + +for url in ${URLS[@]};do + url_file=${url##*/} + if [[ "$url" == "$url_file" ]];then + # has no remote file name and -o is not in CURL_OPTS... assume index.html + has_opt -o || append_opt "-o index.html" + fi + + eval "print_url '$url';curl ${CURL_OPTS} -- $url" + if [[ "$reexec" ]];then + for reexec_arg in ${reexec_args_without};do + CURL_OPTS_REEXEC=$(echo "${CURL_OPTS_REEXEC:-$CURL_OPTS}" | sed "s# $reexec_arg##") + done + eval "print_url '$url';curl ${CURL_OPTS_REEXEC} ${CURL_OPTS_REEXEC_ONLY} -- $url" + fi +done