2014-10-21 16:05:56 +02:00
|
|
|
#!/usr/bin/env bash
|
2014-07-02 23:11:26 +02:00
|
|
|
|
2014-08-03 19:53:36 +02:00
|
|
|
# We want to catch any unexpected failure, and exit immediately
|
2014-07-02 23:11:26 +02:00
|
|
|
set -e
|
|
|
|
|
2014-08-03 19:53:36 +02:00
|
|
|
# Download helper for cp, to be called from the download wrapper script
|
2015-01-02 16:53:39 +01:00
|
|
|
#
|
2018-04-02 10:14:22 +02:00
|
|
|
# Options:
|
|
|
|
# -q Be quiet.
|
|
|
|
# -o FILE Copy to file FILE.
|
2018-04-04 18:22:39 +02:00
|
|
|
# -f FILE Copy from basename file FILE.
|
|
|
|
# -u DIR Copy from FILE in DIR.
|
2015-01-02 16:53:39 +01:00
|
|
|
#
|
|
|
|
# Environment:
|
2014-07-02 23:11:26 +02:00
|
|
|
# LOCALFILES: the cp command to call
|
|
|
|
|
2015-07-26 12:26:26 +02:00
|
|
|
# 'cp' usually does not print anything on its stdout, whereas the
|
|
|
|
# other download backends, even if not verbose, at least print some
|
|
|
|
# progress information.
|
|
|
|
# Make 'cp' verbose by default, so it behaves a bit like the others.
|
2015-01-02 16:53:39 +01:00
|
|
|
verbose=-v
|
2015-07-26 12:26:26 +02:00
|
|
|
|
2018-04-02 10:14:22 +02:00
|
|
|
while getopts "${BR_BACKEND_DL_GETOPTS}" OPT; do
|
2015-01-02 16:53:39 +01:00
|
|
|
case "${OPT}" in
|
|
|
|
q) verbose=;;
|
2018-04-02 10:14:22 +02:00
|
|
|
o) output="${OPTARG}";;
|
2018-04-04 18:22:39 +02:00
|
|
|
f) file="${OPTARG}";;
|
|
|
|
u) dir="${OPTARG}";;
|
2018-04-02 10:14:22 +02:00
|
|
|
:) printf "option '%s' expects a mandatory argument\n" "${OPTARG}"; exit 1;;
|
2015-01-02 16:53:39 +01:00
|
|
|
\?) printf "unknown option '%s'\n" "${OPTARG}" >&2; exit 1;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2018-04-02 10:14:22 +02:00
|
|
|
shift $((OPTIND-1)) # Get rid of our options
|
2016-08-23 14:19:44 +02:00
|
|
|
|
support/download: protect from custom commands with spaces in args
Some users may provide custom download commands with spaces in their
arguments, like so:
BR2_HG="hg --config foo.bar='some space-separated value'"
However, the way we currently call those commands does not account
for the extra quotes, and each space-separated part of the command is
interpreted as separate arguments.
Fix that by calling 'eval' on the commands.
Because of the eval, we must further quote our own arguments, to avoid
the eval further splitting them in case there are spaces (even though
we do not support paths with spaces, better be clean from the onset to
avoid breakage in the future).
We change all the wrappers to use a wrapper-function, even those with
a single call, so they all look alike.
Note that we do not single-quote some of the variables, like ${verbose}
because it can be empty and we really do not want to generate an
empty-string argument. That's not a problem, as ${verbose} would not
normally contain space-separated values (it could get set to something
like '-q -v' but in that case we'd still want two arguments, so that's
fine).
Reported-by: Thomas De Schampheleire <patrickdepinguin@gmail.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas De Schampheleire <patrickdepinguin@gmail.com>
Reviewed-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Tested-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2015-12-07 10:26:55 +01:00
|
|
|
# Caller needs to single-quote its arguments to prevent them from
|
|
|
|
# being expanded a second time (in case there are spaces in them)
|
|
|
|
_localfiles() {
|
|
|
|
eval ${LOCALFILES} "${@}"
|
|
|
|
}
|
|
|
|
|
2018-05-08 15:28:31 +02:00
|
|
|
_localfiles ${verbose} "'${dir##file://}/${file}'" "'${output}'"
|