scripts/saveSample.sh.in
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jan 17 23:06:02 2010 +0100 (2010-01-17)
changeset 1740 c57458bb354d
parent 1529 42a6a2583e24
child 1935 c573e3ef5e07
permissions -rw-r--r--
configure: do not require hg when configuring in an hg clone

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