# HG changeset patch # User David Holsgrove # Date 1349321174 -36000 # Node ID aadd4647dd9148509c50b46e38df40b068ab5e4f # Parent bcfcd68a4e0d123877c4373bf6f4df29702076bb 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" [yann.morin.1998@free.fr: move config option, improve help text, fix API doc] Signed-off-by: "Yann E. MORIN" Message-Id: <131c163c69f9cc81d2be.1349931191@localhost.localdomain> PatchWork-Id: 190784 Message-Id: <0bbaba9190a76ba97f72.1349931192@localhost.localdomain> PatchWork-Id: 190785 diff -r bcfcd68a4e0d -r aadd4647dd91 config/global/paths.in --- a/config/global/paths.in Sat Oct 13 18:26:26 2012 +0200 +++ b/config/global/paths.in Thu Oct 04 13:26:14 2012 +1000 @@ -19,6 +19,15 @@ 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 diff -r bcfcd68a4e0d -r aadd4647dd91 scripts/functions --- a/scripts/functions Sat Oct 13 18:26:26 2012 +0200 +++ b/scripts/functions Thu Oct 04 13:26:14 2012 +1000 @@ -516,6 +516,41 @@ return 1 } +# This function gets the custom source from either a tarball or directory +# Usage: CT_GetCustom +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