summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorAlexey Neyman <stilor@att.net>2019-02-13 09:05:13 (GMT)
committerAlexey Neyman <stilor@att.net>2019-02-13 09:05:13 (GMT)
commit2219aab336c19e3d9f0a67a016f5d28efe43d65c (patch)
treec042c684b09335b5b0df2eff9d6ce69a2abd3c7c /scripts
parent2da27758a9638b07f06d490251f0e44abf398057 (diff)
Implement an option to store downloads in subdirs
... following the buildroot model. Signed-off-by: Alexey Neyman <stilor@att.net>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/build/cc/gcc.sh4
-rw-r--r--scripts/functions57
2 files changed, 42 insertions, 19 deletions
diff --git a/scripts/build/cc/gcc.sh b/scripts/build/cc/gcc.sh
index c6b068c..038db38 100644
--- a/scripts/build/cc/gcc.sh
+++ b/scripts/build/cc/gcc.sh
@@ -14,8 +14,8 @@ do_cc_get() {
# GCC source tree, which will not be there unless we get it and
# put it there ourselves
if [ "${CT_CC_LANG_JAVA_USE_ECJ}" = "y" ]; then
- if ! CT_GetFile package=ecj basename=ecj-latest extensions=.jar \
- mirrors=$(CT_Mirrors sourceware java); then
+ if ! CT_GetFile package=ecj basename=ecj-latest extensions=.jar dir_name=gcc \
+ mirrors="$(CT_Mirrors sourceware java)"; then
# Should be a package, too - but with Java retirement in GCC,
# it may not make sense.
CT_Abort "Failed to download ecj-latest.jar"
diff --git a/scripts/functions b/scripts/functions
index 618298a..f71ea04 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -761,29 +761,34 @@ CT_DoGetFile()
# and if so, symlinks it for later usage. This function is called from
# the `if' condition (via the CT_GetFile) and therefore must return
# on error rather than relying on the shell's ERR trap to catch it.
-# Usage: CT_SaveLocal </full/path/file.name>
+# Usage: CT_SaveLocal </full/path/file.name> <subdirectory>
CT_SaveLocal()
{
local file="$1"
+ local savedir="${CT_LOCAL_TARBALLS_DIR}${CT_TARBALLS_BUILDROOT_LAYOUT:+/$2}"
local basename="${file##*/}"
if [ "${CT_SAVE_TARBALLS}" = "y" ]; then
CT_DoLog EXTRA "Saving '${basename}' to local storage"
+ # The subdirectory for this package may not exist yet; create it
+ if [ ! -d "${savedir}" ]; then
+ CT_DoExecLog ALL mkdir -p "${savedir}"
+ fi
# The file may already exist if downloads are forced: remove it first
- if ! CT_DoExecLog ALL rm -f "${CT_LOCAL_TARBALLS_DIR}/${basename}"; then
+ if ! CT_DoExecLog ALL rm -f "${savedir}/${basename}"; then
return 1
fi
- if ! CT_DoExecLog ALL mv -f "${file}" "${CT_LOCAL_TARBALLS_DIR}"; then
+ if ! CT_DoExecLog ALL mv -f "${file}" "${savedir}"; then
# Move may have failed if the local tarball storage is on a different
# filesystem. Fallback to copy+delete.
- if ! CT_DoExecLog ALL cp -f "${file}" "${CT_LOCAL_TARBALLS_DIR}"; then
+ if ! CT_DoExecLog ALL cp -f "${file}" "${savedir}"; then
return 1
fi
if ! CT_DoExecLog ALL rm -f "${file}"; then
return 1
fi
fi
- if ! CT_DoExecLog ALL ln -s "${CT_LOCAL_TARBALLS_DIR}/${basename}" "${file}"; then
+ if ! CT_DoExecLog ALL ln -s "${savedir}/${basename}" "${file}"; then
return 1
fi
fi
@@ -854,7 +859,7 @@ CT_ZCat()
# Verify the file against a detached signature.
# Fetched from the URL, or obtained from the package directory.
-# Usage: CT_DoVerifySignature <local-file-path> <URL-used-for-download> <signature-format>
+# Usage: CT_DoVerifySignature <local-file-path> <URL-used-for-download> <signature-format> <save-subdirectory>
CT_DoVerifySignature()
{
local path="$1"
@@ -865,6 +870,7 @@ CT_DoVerifySignature()
local format="$3"
local method="${format%/*}"
local ext="${format#*/}"
+ local save_subdir="$4"
local sigfile
local cat
@@ -908,7 +914,7 @@ CT_DoVerifySignature()
CT_Popd
# If we get here, verification succeeded.
- if ! CT_SaveLocal "${CT_TARBALLS_DIR}/${sigfile}${ext}"; then
+ if ! CT_SaveLocal "${CT_TARBALLS_DIR}/${sigfile}${ext}" "${save_subdir}"; then
CT_Popd
return 1
fi
@@ -922,12 +928,14 @@ CT_GetFile()
local -a argnames=(
package # Name of the package
pkg_dir # Directory with package's auxiliary files
+ dir_name # Package's directory name in downloads dir
basename # Base name of file/archive
extensions # Extension(s) for the file/archive
digest # If 'y', verify the digest
signature_format # Format of the signature
mirrors # Mirrors to download from
)
+ local dl_dir
local -a URLS
local ext url
@@ -935,6 +943,9 @@ CT_GetFile()
eval "local ${arg//[[:space:]]/\\ }"
done
+ CT_TestOrAbort "Internal error: dir_name not set" -n "${dir_name}"
+ dl_dir="${CT_LOCAL_TARBALLS_DIR:+${CT_LOCAL_TARBALLS_DIR}${CT_TARBALLS_BUILDROOT_LAYOUT:+/${dir_name}}}"
+
# Does any of the requested files exist localy?
for ext in ${extensions}; do
# Do we already have it in *our* tarballs dir?
@@ -943,12 +954,24 @@ CT_GetFile()
return 0
fi
- if [ -n "${CT_LOCAL_TARBALLS_DIR}" -a "${CT_FORCE_DOWNLOAD}" != "y" -a \
- -r "${CT_LOCAL_TARBALLS_DIR}/${basename}${ext}" ]; then
- CT_DoLog DEBUG "Got '${basename}' from local storage"
- CT_DoExecLog ALL ln -s "${CT_LOCAL_TARBALLS_DIR}/${basename}${ext}" \
- "${CT_TARBALLS_DIR}/${basename}${ext}"
- return 0
+ if [ "${CT_FORCE_DOWNLOAD}" != "y" ]; then
+ if [ -n "${dl_dir}" -a -r "${dl_dir}/${basename}${ext}" ]; then
+ CT_DoLog DEBUG "Got '${basename}' from local storage"
+ CT_DoExecLog ALL ln -s "${dl_dir}/${basename}${ext}" \
+ "${CT_TARBALLS_DIR}/${basename}${ext}"
+ return 0
+ elif [ -n "${CT_LOCAL_TARBALLS_DIR}" -a -r "${CT_LOCAL_TARBALLS_DIR}/${basename}${ext}" ]; then
+ # Only different if we're using new buildroot layout
+ CT_DoLog DEBUG "Got '${basename}' from local storage"
+ CT_DoLog INFO "Moving the ${basename}${ext} into ${dir_name}/${basename}${ext}"
+ if [ ! -d "${dl_dir}" ]; then
+ CT_DoExecLog ALL mkdir -p "${dl_dir}"
+ fi
+ CT_DoExecLog ALL mv "${CT_LOCAL_TARBALLS_DIR}/${basename}${ext}" "${dl_dir}/${basename}${ext}"
+ CT_DoExecLog ALL ln -s "${dl_dir}/${basename}${ext}" \
+ "${CT_TARBALLS_DIR}/${basename}${ext}"
+ return 0
+ fi
fi
done
@@ -998,7 +1021,7 @@ CT_GetFile()
CT_DoExecLog ALL rm "${CT_TARBALLS_DIR}/${basename}${ext}"
return 1
fi
- if ! CT_SaveLocal "${CT_TARBALLS_DIR}/${basename}${ext}"; then
+ if ! CT_SaveLocal "${CT_TARBALLS_DIR}/${basename}${ext}" "${dir_name}"; then
return 1
fi
return 0
@@ -2055,7 +2078,7 @@ CT_DoFetch()
basename="${pkg_name}-${version}"
fi
pkg_dir="${pkg_name}/${version}"
- if ! CT_GetFile package="${pkg_name}" pkg_dir="${pkg_dir}" \
+ if ! CT_GetFile package="${pkg_name}" pkg_dir="${pkg_dir}" dir_name="${dir_name}" \
basename="${archive_filename}" extensions="${archive_formats}" \
digest="${CT_VERIFY_DOWNLOAD_DIGEST}" \
signature_format="${CT_VERIFY_DOWNLOAD_SIGNATURE:+${signature_format}}" \
@@ -2090,7 +2113,7 @@ CT_DoFetch()
# attempt getting it from local storage or from the mirror if configured.
# Bzip2 offers a reasonable compromise between compression speed and size.
if [ "${unique_id}" != "to.be.determined" ] && \
- CT_GetFile package="${pkg_name}" \
+ CT_GetFile package="${pkg_name}" dir_name="${dir_name}" \
basename="${basename}" extensions='.tar.bz2'; then
return 0
fi
@@ -2112,7 +2135,7 @@ CT_DoFetch()
CT_DoExecLog ALL mv "${pkg_name}${devel_subdir:+/${devel_subdir}}" "${basename}"
CT_DoExecLog ALL tar cjf "${CT_TARBALLS_DIR}/${basename}.tar.bz2" "${basename}"
- if ! CT_SaveLocal "${CT_TARBALLS_DIR}/${basename}.tar.bz2"; then
+ if ! CT_SaveLocal "${CT_TARBALLS_DIR}/${basename}.tar.bz2" "${dir_name}"; then
CT_Abort "${pkg_name}: failed to save to local storage"
fi
CT_Popd