diff options
author | Alexey Neyman <stilor@att.net> | 2018-02-22 00:25:36 -0800 |
---|---|---|
committer | Alexey Neyman <stilor@att.net> | 2018-04-07 12:03:17 -0700 |
commit | 69df9ae9ddb806b42d962ae8a0b2b8f7b31f480e (patch) | |
tree | 5e23600df2ad384e15b1c6131e3e235993a6d4b6 /scripts/saveSample.sh | |
parent | dbe3877285549d1cdc549826673cdf8f07cf154c (diff) | |
download | crosstool-ng-69df9ae9ddb806b42d962ae8a0b2b8f7b31f480e.tar.gz crosstool-ng-69df9ae9ddb806b42d962ae8a0b2b8f7b31f480e.tar.bz2 crosstool-ng-69df9ae9ddb806b42d962ae8a0b2b8f7b31f480e.zip |
Remove the need for configure substitutions in scripts
... so that scripts/ directory can be installed verbatim.
Signed-off-by: Alexey Neyman <stilor@att.net>
Diffstat (limited to 'scripts/saveSample.sh')
-rw-r--r-- | scripts/saveSample.sh | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/scripts/saveSample.sh b/scripts/saveSample.sh new file mode 100644 index 00000000..5fab6d9c --- /dev/null +++ b/scripts/saveSample.sh @@ -0,0 +1,110 @@ +# This script is responsible for saving the current configuration into a +# sample to be used later on as a pre-configured target. + +# What we need to save: +# - the .config file +# - the uClibc .config file if uClibc selected +# - info about who reported the sample + +# Parse the tools' paths configuration +. "${CT_LIB_DIR}/paths.sh" +. "${CT_LIB_DIR}/scripts/functions" + +CT_LoadConfig + +# We can not reliably save a sample which either uses local patches +# and/or custom Linux kernel headers. Warn the user about this issue +# and continue if he/she confirms sving the sample. +if [ "${CT_CUSTOM_PATCH}" = "y" ]; then + echo "You are using local patches." + echo "You will not be able to (easily) share this sample in this case." + read -p "Press Ctrl-C to stop now, or Enter to continue..." +fi + +# Do not use a progress bar +unset CT_LOG_PROGRESS_BAR + +# Override log options +unset CT_LOG_PROGRESS_BAR CT_LOG_ERROR CT_LOG_INFO CT_LOG_EXTRA CT_LOG_DEBUG LOG_ALL +CT_LOG_WARN=y +CT_LOG_LEVEL_MAX="WARN" + +# Compute the name of the sample directory +case "${CT_TOOLCHAIN_TYPE}" in + cross) samp_name="${CT_TARGET}";; + canadian) samp_name="${CT_HOST},${CT_TARGET}";; + *) CT_Abort "Unsupported toolchain type '${CT_TOOLCHAIN_TYPE}'";; +esac +samp_dir="samples/${samp_name}" +mkdir -p "${samp_dir}" + +# Tweak the .config file: remove the options that we want to keep +# at default setting in samples. +force_default_opts=( \ + PREFIX_DIR LOG_TO_FILE LOG_FILE_COMPRESS \ + LOCAL_TARBALLS_DIR SAVE_TARBALLS \ + LOG_ERROR LOG_WARN LOG_INFO LOG_EXTRA LOG_ALL LOG_DEBUG \ + LOG_PROGRESS_BAR + ) +regexp=${force_default_opts[*]} +regexp=${regexp// /|} +${grep} -v -E '^(# )?CT_('"${regexp}"')' .config > .defconfig + +# Function to copy a file to the sample directory +# Needed in case the file is already there (think of a previously available sample) +# Usage: CT_DoAddFileToSample <source> <dest> +CT_DoAddFileToSample() { + source="$1" + dest="$2" + inode_s=$(ls -i "${source}" | ${awk} '{ print $1; }') + inode_d=$(ls -i "${dest}" 2>/dev/null | ${awk} '{ print $1; }' || true) + if [ "${inode_s}" != "${inode_d}" ]; then + cp "${source}" "${dest}" + fi +} + +if [ "${CT_TOP_DIR}" = "${CT_LIB_DIR}" ]; then + samp_top_dir="\${CT_LIB_DIR}" +else + samp_top_dir="\${CT_TOP_DIR}" +fi + +# Save the uClibc .config file +if [ -n "${CT_LIBC_UCLIBC_CONFIG_FILE}" ]; then + # We save the file, and then point the saved sample to this file + CT_DoAddFileToSample "${CT_LIBC_UCLIBC_CONFIG_FILE}" "${samp_dir}/${CT_LIBC}.config" + "${sed}" -r -i -e 's|^(CT_LIBC_UCLIBC_CONFIG_FILE)=.+$|\1="'"${samp_top_dir}"'/samples/${CT_TARGET}/${CT_LIBC}.config"|;' \ + .defconfig +else + # remove any dangling files + for f in "${samp_dir}/${CT_LIBC}-"*.config; do + if [ -f "${f}" ]; then rm -f "${f}"; fi + done +fi + +# Now, actually save the defconfig +export KCONFIG_CONFIG="$(pwd)/.defconfig" +srctree="${CT_LIB_DIR}" ${CONF} --savedefconfig="${samp_dir}/crosstool.config" "${KCONFIG_TOP}" +rm -f .defconfig + +# Fill-in the reported-by info +[ -f "${samp_dir}/reported.by" ] && . "${samp_dir}/reported.by" +old_name="${reporter_name}" +old_url="${reporter_url}" +old_comment="${reporter_comment}" +read -p "Reporter name [${reporter_name}]: " reporter_name +read -p "Reporter URL [${reporter_url}]: " reporter_url +if [ -n "${reporter_comment}" ]; then + echo "Old comment:" + printf "${reporter_comment}\n" | ${sed} -r -e 's/^/ > /;' +fi +echo "Reporter comment (Ctrl-D to finish, '.' to use previous):" +reporter_comment=$(cat) +if [ "${reporter_comment}" = "." ]; then + reporter_comment="${old_comment}" +fi + +( echo "reporter_name=\"${reporter_name:=${old_name}}\"" + echo "reporter_url=\"${reporter_url:=${old_url}}\"" + printf "reporter_comment=\"${reporter_comment}\"\n" +) >"${samp_dir}/reported.by" |