scripts/saveSample.sh.in
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed May 04 00:04:23 2011 +0200 (2011-05-04)
changeset 2608 aa09a36c3d36
parent 2468 90595d1c1017
child 2838 822af73497bf
permissions -rw-r--r--
scripts/functions: test for decompressors before use

./configure does check for the presence of gz and bzip2, so we can
safely use them in the build scripts.

On the other hand, more recent formats (eg. XZ) are not yet widely
available, and we do not want, and can't, force the user to install
them as a pre-requisite.

So, build up a list of allowed tarball formats based on the available
decompressors. For no, this is a static list, but the upcoming XZ
support will conditionnaly add to this list.

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