scripts/saveSample.sh.in
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Jun 11 21:47:19 2009 +0000 (2009-06-11)
changeset 1352 d7ddcb75e0f7
parent 1223 df01ad996322
child 1424 8e87e701cf4c
permissions -rw-r--r--
populate: fix installing dynamic linker 'ld.so'

The dynamic linker, ld.so, needs the execute bit to be set.
Detect tht the library being installed is in fact ld.so and
install it with 0755 instead of 0644.

Fix detecting src == dst.

Use a simpler command to copy src -> dst.

Also change echo to printf, get rid of 'echo -n', which is
highly non-portable.


-------- diffstat follows --------
/trunk/scripts/populate.in | 76 43 33 0 +++++++++++++++++++++++++++++-----------------------
1 file changed, 43 insertions(+), 33 deletions(-)
     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 # Create the sample directory
    63 if [ ! -d "samples/${CT_TARGET}" ]; then
    64     mkdir -p "samples/${CT_TARGET}"
    65 fi
    66 
    67 # Save the crosstool-NG config file
    68 "${sed}" -r -e 's|^(CT_PREFIX_DIR)=.*|\1="${HOME}/x-tools/${CT_TARGET}"|;'      \
    69             -e 's|^# CT_LOG_TO_FILE is not set$|CT_LOG_TO_FILE=y|;'             \
    70             -e 's|^# CT_LOG_FILE_COMPRESS is not set$|CT_LOG_FILE_COMPRESS=y|;' \
    71             -e 's|^(CT_LOCAL_TARBALLS_DIR)=.*|\1="${HOME}/src"|;'               \
    72          <.config                                                               \
    73     >"samples/${CT_TARGET}/crosstool.config"
    74 
    75 # Function to copy a file to the sample directory
    76 # Needed in case the file is already there (think of a previously available sample)
    77 # Usage: CT_DoAddFileToSample <source> <dest>
    78 CT_DoAddFileToSample() {
    79     source="$1"
    80     dest="$2"
    81     inode_s=$(ls -i "${source}" |awk '{ print $1; }')
    82     inode_d=$(ls -i "${dest}" 2>/dev/null |awk '{ print $1; }' || true)
    83     if [ "${inode_s}" != "${inode_d}" ]; then
    84         cp "${source}" "${dest}"
    85     fi
    86 }
    87 
    88 if [ "${CT_TOP_DIR}" = "${CT_LIB_DIR}" ]; then
    89     samp_top_dir="\${CT_LIB_DIR}"
    90 else
    91     samp_top_dir="\${CT_TOP_DIR}"
    92 fi
    93 
    94 # Save the uClibc .config file
    95 if [ -n "${CT_LIBC_UCLIBC_CONFIG_FILE}" ]; then
    96     # We save the file, and then point the saved sample to this file
    97     CT_DoAddFileToSample "${CT_LIBC_UCLIBC_CONFIG_FILE}" "samples/${CT_TARGET}/${CT_LIBC}-${CT_LIBC_VERSION}.config"
    98     "${sed}" -r -i -e 's|^(CT_LIBC_UCLIBC_CONFIG_FILE)=.+$|\1="'"${samp_top_dir}"'/samples/${CT_TARGET}/${CT_LIBC}-${CT_LIBC_VERSION}.config"|;' \
    99              "samples/${CT_TARGET}/crosstool.config"
   100 else
   101     # remove any dangling files
   102     for f in "samples/${CT_TARGET}/${CT_LIBC}-"*.config; do
   103         if [ -f "${f}" ]; then rm -f "${f}"; fi
   104     done
   105 fi
   106 
   107 # Restore stdout now, to be interactive
   108 exec >&7
   109 
   110 # Fill-in the reported-by info
   111 [ -f "samples/${CT_TARGET}/reported.by" ] && . "samples/${CT_TARGET}/reported.by"
   112 old_name="${reporter_name}"
   113 old_url="${reporter_url}"
   114 read -p "Reporter name [${reporter_name}]: " reporter_name
   115 read -p "Reporter URL [${reporter_url}]: " reporter_url
   116 if [ -n "${reporter_comment}" ]; then
   117   echo "Old comment if you need to copy-paste:"
   118   printf "${reporter_comment}\n"
   119 fi
   120 echo "Reporter comment (Ctrl-D to finish):"
   121 reporter_comment=$(cat)
   122 
   123 ( echo "reporter_name=\"${reporter_name:=${old_name}}\""
   124   echo "reporter_url=\"${reporter_url:=${old_url}}\""
   125   printf "reporter_comment=\"${reporter_comment}\"\n"
   126 ) >"samples/${CT_TARGET}/reported.by"