scripts/saveSample.sh.in
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 10 00:02:05 2011 +0200 (2011-07-10)
changeset 2543 0e8ff5707383
parent 1935 c573e3ef5e07
child 2576 af55c37bbd84
permissions -rw-r--r--
scripts: on startup, also remove the buildtools dir

In case there's one lingering around (whether the previous build was
successful, or failed), we have to remove the buildtools directory
as well as the toochain build dir.

This should also fix the case where out makeinfo wrapper calls
itself recursively.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@1186
     1
#!@@CT_bash@@
yann@63
     2
yann@63
     3
# This script is responsible for saving the current configuration into a
yann@63
     4
# sample to be used later on as a pre-configured target.
yann@63
     5
yann@63
     6
# What we need to save:
yann@63
     7
#  - the .config file
yann@63
     8
#  - the uClibc .config file if uClibc selected
yann@935
     9
#  - info about who reported the sample
yann@935
    10
yann@1186
    11
# Parse the tools' paths configuration
yann@1186
    12
. "${CT_LIB_DIR}/paths.mk"
yann@1186
    13
yann@935
    14
# We'll need the stdout later, save it
yann@935
    15
exec 7>&1
yann@63
    16
yann@182
    17
. "${CT_LIB_DIR}/scripts/functions"
yann@63
    18
yann@165
    19
# Don't care about any log file
yann@115
    20
exec >/dev/null
yann@165
    21
rm -f "${tmp_log_file}"
yann@84
    22
yann@63
    23
# Parse the configuration file
yann@1935
    24
# Don't use CT_TestOrAbort, it prints the test string to [DEBUG]
yann@2468
    25
if [ ! -f .config.2 ]; then
yann@1935
    26
    CT_Abort "Configuration file not found. Please create one."
yann@1935
    27
fi
yann@2468
    28
. .config.2
yann@63
    29
yann@1223
    30
# We can not reliably save a sample which either uses local patches
yann@1223
    31
# and/or custom Linux kernel headers. Warn the user about this issue
yann@1223
    32
# and continue if he/she confirms sving the sample.
yann@1223
    33
if [ "${CT_CUSTOM_PATCH}" = "y" ]; then
yann@1223
    34
    exec >&7
yann@1223
    35
    echo "You are using local patches."
yann@1223
    36
    echo "You will not be able to (easily) share this sample in this case."
yann@1223
    37
    read -p "Press Ctrl-C to stop now, or Enter to continue..."
yann@1223
    38
fi
yann@1223
    39
if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y" ]; then
yann@1223
    40
    exec >&7
yann@1223
    41
    echo "You are using custom Linux headers."
yann@1223
    42
    echo "You will not be able to (easily) share this sample in this case."
yann@1223
    43
    read -p "Press Ctrl-C to stop now, or Enter to continue..."
yann@1223
    44
fi
yann@1223
    45
yann@682
    46
# Do not use a progress bar
yann@682
    47
unset CT_LOG_PROGRESS_BAR
yann@682
    48
yann@967
    49
# Parse architecture and kernel specific functions
yann@927
    50
. "${CT_LIB_DIR}/scripts/build/arch/${CT_ARCH}.sh"
yann@967
    51
. "${CT_LIB_DIR}/scripts/build/kernel/${CT_KERNEL}.sh"
yann@394
    52
yann@335
    53
# Target tuple: CT_TARGET needs a little love:
yann@335
    54
CT_DoBuildTargetTuple
yann@63
    55
yann@64
    56
# Kludge: if any of the config options needs either CT_TARGET or CT_TOP_DIR,
yann@64
    57
# re-parse them:
yann@2468
    58
. .config.2
yann@64
    59
yann@682
    60
# Override log options
yann@682
    61
unset CT_LOG_PROGRESS_BAR CT_LOG_ERROR CT_LOG_INFO CT_LOG_EXTRA CT_LOG_DEBUG LOG_ALL
yann@603
    62
CT_LOG_WARN=y
yann@603
    63
CT_LOG_LEVEL_MAX="WARN"
yann@126
    64
yann@1424
    65
# Compute the name of the sample directory
yann@1424
    66
case "${CT_TOOLCHAIN_TYPE}" in
yann@1424
    67
    cross)      samp_name="${CT_TARGET}";;
yann@1427
    68
    canadian)   samp_name="${CT_HOST},${CT_TARGET}";;
yann@1424
    69
    *)          CT_Abort "Unsupported toolchain type '${CT_TOOLCHAIN_TYPE}'";;
yann@1424
    70
esac
yann@1424
    71
samp_dir="samples/${samp_name}"
yann@1424
    72
mkdir -p "${samp_dir}"
yann@63
    73
yann@63
    74
# Save the crosstool-NG config file
yann@2468
    75
# We need to save the real .config with kconfig's values,
yann@2468
    76
# not our mangled .config.2 with arrays
yann@1529
    77
"${sed}" -r -e 's|^(CT_PREFIX_DIR)=.*|\1="${HOME}/x-tools/${CT_TARGET}"|;'      \
yann@1186
    78
            -e 's|^# CT_LOG_TO_FILE is not set$|CT_LOG_TO_FILE=y|;'             \
yann@1186
    79
            -e 's|^# CT_LOG_FILE_COMPRESS is not set$|CT_LOG_FILE_COMPRESS=y|;' \
yann@1186
    80
            -e 's|^(CT_LOCAL_TARBALLS_DIR)=.*|\1="${HOME}/src"|;'               \
yann@1186
    81
         <.config                                                               \
yann@1424
    82
    >"${samp_dir}/crosstool.config"
yann@63
    83
yann@64
    84
# Function to copy a file to the sample directory
yann@64
    85
# Needed in case the file is already there (think of a previously available sample)
yann@64
    86
# Usage: CT_DoAddFileToSample <source> <dest>
yann@64
    87
CT_DoAddFileToSample() {
yann@64
    88
    source="$1"
yann@64
    89
    dest="$2"
yann@1299
    90
    inode_s=$(ls -i "${source}" |awk '{ print $1; }')
yann@1299
    91
    inode_d=$(ls -i "${dest}" 2>/dev/null |awk '{ print $1; }' || true)
yann@64
    92
    if [ "${inode_s}" != "${inode_d}" ]; then
yann@64
    93
        cp "${source}" "${dest}"
yann@64
    94
    fi
yann@64
    95
}
yann@64
    96
yann@182
    97
if [ "${CT_TOP_DIR}" = "${CT_LIB_DIR}" ]; then
yann@182
    98
    samp_top_dir="\${CT_LIB_DIR}"
yann@182
    99
else
yann@182
   100
    samp_top_dir="\${CT_TOP_DIR}"
yann@182
   101
fi
yann@182
   102
yann@63
   103
# Save the uClibc .config file
yann@63
   104
if [ -n "${CT_LIBC_UCLIBC_CONFIG_FILE}" ]; then
yann@63
   105
    # We save the file, and then point the saved sample to this file
yann@1424
   106
    CT_DoAddFileToSample "${CT_LIBC_UCLIBC_CONFIG_FILE}" "${samp_dir}/${CT_LIBC}-${CT_LIBC_VERSION}.config"
yann@1539
   107
    "${sed}" -r -i -e 's|^(CT_LIBC_UCLIBC_CONFIG_FILE)=.+$|\1="'"${samp_top_dir}"'/samples/${CT_TARGET}/${CT_LIBC}-${CT_LIBC_VERSION}.config"|;' \
yann@1424
   108
             "${samp_dir}/crosstool.config"
yann@63
   109
else
yann@63
   110
    # remove any dangling files
yann@1424
   111
    for f in "${samp_dir}/${CT_LIBC}-"*.config; do
yann@182
   112
        if [ -f "${f}" ]; then rm -f "${f}"; fi
yann@63
   113
    done
yann@63
   114
fi
yann@935
   115
yann@935
   116
# Restore stdout now, to be interactive
yann@935
   117
exec >&7
yann@935
   118
yann@935
   119
# Fill-in the reported-by info
yann@1424
   120
[ -f "${samp_dir}/reported.by" ] && . "${samp_dir}/reported.by"
yann@935
   121
old_name="${reporter_name}"
yann@935
   122
old_url="${reporter_url}"
yann@935
   123
read -p "Reporter name [${reporter_name}]: " reporter_name
yann@935
   124
read -p "Reporter URL [${reporter_url}]: " reporter_url
yann@935
   125
if [ -n "${reporter_comment}" ]; then
yann@935
   126
  echo "Old comment if you need to copy-paste:"
yann@958
   127
  printf "${reporter_comment}\n"
yann@935
   128
fi
yann@935
   129
echo "Reporter comment (Ctrl-D to finish):"
yann@935
   130
reporter_comment=$(cat)
yann@935
   131
yann@935
   132
( echo "reporter_name=\"${reporter_name:=${old_name}}\""
yann@935
   133
  echo "reporter_url=\"${reporter_url:=${old_url}}\""
yann@935
   134
  printf "reporter_comment=\"${reporter_comment}\"\n"
yann@1424
   135
) >"${samp_dir}/reported.by"