scripts/functions: add a generic custom location infrastructure

Add a generic custom location infrastructure (inspired by the one in
kernel/linux) to allow the user to use custom tarballs or directories
for any component.

Signed-off-by: "David Holsgrove" <david.holsgrove@xilinx.com>
[yann.morin.1998@free.fr: move config option, improve help text, fix API doc]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Message-Id: <131c163c69f9cc81d2be.1349931191@localhost.localdomain>
PatchWork-Id: 190784
Message-Id: <0bbaba9190a76ba97f72.1349931192@localhost.localdomain>
PatchWork-Id: 190785
This commit is contained in:
David Holsgrove 2012-10-04 13:26:14 +10:00
parent dad17e6e88
commit f242016a09
2 changed files with 44 additions and 0 deletions

View File

@ -19,6 +19,15 @@ config SAVE_TARBALLS
If you say 'y' here, new downloaded tarballs will be saved in the
directory you entered above.
config CUSTOM_LOCATION_ROOT_DIR
string
depends on EXPERIMENTAL
prompt "Directory containing custom source components"
help
This is the path CT-NG will attempt to use as a root for locating
local copies of source components (CUSTOM_LOCATION_ROOT_DIR/component)
unless a component declares its own specific custom location.
config WORK_DIR
string
prompt "Working directory" if ! BACKEND

View File

@ -516,6 +516,41 @@ CT_GetLocal() {
return 1
}
# This function gets the custom source from either a tarball or directory
# Usage: CT_GetCustom <component> <custom_version> <custom_location>
CT_GetCustom() {
local custom_component="$1"
local custom_version="$2"
local custom_location="$3"
local custom_name="${custom_component}-${custom_version}"
CT_TestAndAbort "${custom_name}: CT_CUSTOM_LOCATION_ROOT_DIR or ${custom_component}'s CUSTOM_LOCATION must be set." \
-z "${CT_CUSTOM_LOCATION_ROOT_DIR}" -a -z "${custom_location}"
if [ -n "${CT_CUSTOM_LOCATION_ROOT_DIR}" \
-a -z "${custom_location}" ]; then
custom_location="${CT_CUSTOM_LOCATION_ROOT_DIR}/${custom_component}"
fi
CT_DoLog EXTRA "Using '${custom_name}' from custom location"
if [ ! -d "${custom_location}" ]; then
# We need to know the custom tarball extension,
# so we can create a properly-named symlink, which
# we use later on in 'extract'
case "${custom_location}" in
*.tar.bz2) custom_name="${custom_name}.tar.bz2";;
*.tar.gz|*.tgz) custom_name="${custom_name}.tar.gz";;
*.tar) custom_name="${custom_name}.tar";;
*) CT_Abort "Unknown extension for custom tarball '${custom_location}'";;
esac
CT_DoExecLog DEBUG ln -sf "${custom_location}" \
"${CT_TARBALLS_DIR}/${custom_name}"
else
CT_DoExecLog DEBUG ln -snf "${custom_location}" \
"${CT_SRC_DIR}/${custom_name}"
fi
}
# This function saves the specified to local storage if possible,
# and if so, symlinks it for later usage
# Usage: CT_SaveLocal </full/path/file.name>