mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 11:58:52 +00:00
Fix downloader not working with curl
The codec/dpma downloader wasn't handling curl correctly. The logic that transforms makeopts into a bash-sourceable file wasn't handling the make 'or' command in DOWNLOAD_TIMEOUT so bash was looking for an 'or' command. That logic has been eliminated. Instead of trying to transform and source makeopts, the downloader now calls a make scriptlet to print the value of a specific variable. This way, make handles the ors (or any other make construct that happens to creep into that file). ASTERISK-27202 Reported by: Sean McCord Change-Id: Iadfb6693528e4d4da7b8bb201fa66da2c71c7f99
This commit is contained in:
@@ -5,7 +5,24 @@ if [[ ( ${BASH_VERSINFO[0]} == 4 && ${BASH_VERSINFO[1]} > 1 ) || ${BASH_VERSINFO
|
|||||||
fi
|
fi
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
|
||||||
ASTTOPDIR=${ASTTOPDIR:-.}
|
ASTTOPDIR=${ASTTOPDIR:-.}
|
||||||
|
export make=`sed -n -r -e "s/^MAKE\s*=\s*//gp" ${ASTTOPDIR}/makeopts`
|
||||||
|
|
||||||
|
getvar() {
|
||||||
|
$make --quiet --no-print-directory -f- <<EOF
|
||||||
|
include ${ASTTOPDIR}/makeopts
|
||||||
|
all:
|
||||||
|
@echo "\$($1)"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
XMLSTARLET=`getvar XMLSTARLET`
|
||||||
|
ASTMODDIR=`getvar ASTMODDIR`
|
||||||
|
cache_dir=`getvar EXTERNALS_CACHE_DIR`
|
||||||
|
DOWNLOAD_TO_STDOUT=`getvar DOWNLOAD_TO_STDOUT`
|
||||||
|
HOST_CPU=`getvar HOST_CPU`
|
||||||
|
INSTALL=`getvar INSTALL`
|
||||||
|
|
||||||
module_name=${1%%-*}
|
module_name=${1%%-*}
|
||||||
variant=${1##*-}
|
variant=${1##*-}
|
||||||
@@ -26,24 +43,16 @@ if [[ -z "${tmpdir}" ]] ; then
|
|||||||
fi
|
fi
|
||||||
trap "rm -rf ${tmpdir}" EXIT
|
trap "rm -rf ${tmpdir}" EXIT
|
||||||
|
|
||||||
# We have to pre-process the makeopts file so it will be parsable by bash
|
|
||||||
# Surround values with double quotes
|
|
||||||
# Convert make $(or) functions to bash ${name:-value}
|
|
||||||
sed -r -e "s/^([^ =]+)\s*=\s*(.*)$/\1=\"\2\"/g" \
|
|
||||||
-e 's/^([^ =]+)="\$\(or ([^,]*),([^)]+)\)"/_tmp="\2"\n\1="${_tmp:-\3}"/g' ${ASTTOPDIR}/makeopts >${tmpdir}/makeopts
|
|
||||||
source ${tmpdir}/makeopts
|
|
||||||
if [[ -z "${ASTMODDIR}" ]] ; then
|
if [[ -z "${ASTMODDIR}" ]] ; then
|
||||||
echo "${module_name}: Unable to parse ${ASTTOPDIR}/makeopts."
|
echo "${module_name}: Unable to parse ${ASTTOPDIR}/makeopts."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
XMLSTARLET=${XMLSTARLET:-xmlstarlet}
|
|
||||||
if [[ "${XMLSTARLET}" = ":" ]] ; then
|
if [[ "${XMLSTARLET}" = ":" ]] ; then
|
||||||
echo "${module_name}: The externals downloader requires xmlstarlet to be installed."
|
echo "${module_name}: The externals downloader requires xmlstarlet to be installed."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cache_dir="${EXTERNALS_CACHE_DIR}"
|
|
||||||
if [[ -z ${cache_dir} ]] ; then
|
if [[ -z ${cache_dir} ]] ; then
|
||||||
cache_dir=${tmpdir}
|
cache_dir=${tmpdir}
|
||||||
fi
|
fi
|
||||||
@@ -191,7 +200,7 @@ if [[ -f ${cache_dir}/${full_name}.manifest.xml ]] ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ${need_download} = 1 ]] ; then
|
if [[ ${need_download} = 1 ]] ; then
|
||||||
echo "${full_name}: Downloading ${remote_url}/${tarball}"
|
echo "${full_name}: Downloading ${remote_url}/${tarball} to ${cache_dir}/${tarball}"
|
||||||
${DOWNLOAD_TO_STDOUT} ${remote_url}/${tarball} > ${cache_dir}/${tarball} || {
|
${DOWNLOAD_TO_STDOUT} ${remote_url}/${tarball} > ${cache_dir}/${tarball} || {
|
||||||
echo "${full_name}: Unable to fetch ${remote_url}/${tarball}"
|
echo "${full_name}: Unable to fetch ${remote_url}/${tarball}"
|
||||||
exit 1
|
exit 1
|
||||||
|
@@ -6,6 +6,23 @@ fi
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
ASTTOPDIR=${ASTTOPDIR:-.}
|
ASTTOPDIR=${ASTTOPDIR:-.}
|
||||||
|
export make=`sed -n -r -e "s/^MAKE\s*=\s*//gp" ${ASTTOPDIR}/makeopts`
|
||||||
|
|
||||||
|
getvar() {
|
||||||
|
$make --quiet --no-print-directory -f- <<EOF
|
||||||
|
include ${ASTTOPDIR}/makeopts
|
||||||
|
all:
|
||||||
|
@echo "\$($1)"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
XMLSTARLET=`getvar XMLSTARLET`
|
||||||
|
ASTMODDIR=`getvar ASTMODDIR`
|
||||||
|
cache_dir=`getvar EXTERNALS_CACHE_DIR`
|
||||||
|
DOWNLOAD_TO_STDOUT=`getvar DOWNLOAD_TO_STDOUT`
|
||||||
|
HOST_CPU=`getvar HOST_CPU`
|
||||||
|
INSTALL=`getvar INSTALL`
|
||||||
|
|
||||||
tmpdir=$(mktemp -d)
|
tmpdir=$(mktemp -d)
|
||||||
if [[ -z "${tmpdir}" ]] ; then
|
if [[ -z "${tmpdir}" ]] ; then
|
||||||
@@ -14,18 +31,11 @@ if [[ -z "${tmpdir}" ]] ; then
|
|||||||
fi
|
fi
|
||||||
trap "rm -rf ${tmpdir}" EXIT
|
trap "rm -rf ${tmpdir}" EXIT
|
||||||
|
|
||||||
# We have to pre-process the makeopts file so it will be parsable by bash
|
|
||||||
# Surround values with double quotes
|
|
||||||
# Convert make $(or) functions to bash ${name:-value}
|
|
||||||
sed -r -e "s/^([^ =]+)\s*=\s*(.*)$/\1=\"\2\"/g" \
|
|
||||||
-e 's/^([^ =]+)="\$\(or ([^,]*),([^)]+)\)"/_tmp="\2"\n\1="${_tmp:-\3}"/g' ${ASTTOPDIR}/makeopts >${tmpdir}/makeopts
|
|
||||||
source ${tmpdir}/makeopts
|
|
||||||
if [[ -z "${ASTMODDIR}" ]] ; then
|
if [[ -z "${ASTMODDIR}" ]] ; then
|
||||||
echo "${module_name}: Unable to parse ${ASTTOPDIR}/makeopts."
|
echo "${module_name}: Unable to parse ${ASTTOPDIR}/makeopts."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
XMLSTARLET=${XMLSTARLET:-xmlstarlet}
|
|
||||||
if [[ "${XMLSTARLET}" = ":" ]] ; then
|
if [[ "${XMLSTARLET}" = ":" ]] ; then
|
||||||
echo "${module_name}: The externals downloader requires xmlstarlet to be installed."
|
echo "${module_name}: The externals downloader requires xmlstarlet to be installed."
|
||||||
exit 1
|
exit 1
|
||||||
|
Reference in New Issue
Block a user