scripts/saveSample.sh.in
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
parent 2838 822af73497bf
child 2981 80151a249b85
permissions -rw-r--r--
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

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