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