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