scripts/addToolsVersion: properly handle .in vs. .in.2
While most components have their version in the .in file, some
have it in the .in.2 (eg. elf2flt).
Currently, to handle this case, we indiscriminately munge both files,
but this is wrong: in the elf2flt case, if we add a binutils version,
we do not want it to be added to elf2flt, and conversely.
So, for each tool, we need to explicitly know what file to munge.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
3 # This script is responsible for saving the current configuration into a
4 # sample to be used later on as a pre-configured target.
6 # What we need to save:
8 # - the uClibc .config file if uClibc selected
9 # - info about who reported the sample
11 # Parse the tools' paths configuration
12 . "${CT_LIB_DIR}/paths.sh"
14 # We'll need the stdout later, save it
17 . "${CT_LIB_DIR}/scripts/functions"
19 # Don't care about any log file
21 rm -f "${tmp_log_file}"
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."
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
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..."
40 if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y" ]; then
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..."
47 # Do not use a progress bar
48 unset CT_LOG_PROGRESS_BAR
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"
54 # Target tuple: CT_TARGET needs a little love:
57 # Kludge: if any of the config options needs either CT_TARGET or CT_TOP_DIR,
61 # Override log options
62 unset CT_LOG_PROGRESS_BAR CT_LOG_ERROR CT_LOG_INFO CT_LOG_EXTRA CT_LOG_DEBUG LOG_ALL
64 CT_LOG_LEVEL_MAX="WARN"
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}'";;
72 samp_dir="samples/${samp_name}"
73 mkdir -p "${samp_dir}"
75 # Tweak the .config file
76 # We need to be based on the real .config with kconfig's values,
77 # not our mangled .config.2 with shell arrays
79 "${sed}" -r -e 's|^(CT_PREFIX_DIR)=.*|\1="${HOME}/x-tools/${CT_TARGET}"|;' \
80 -e 's|^# CT_LOG_TO_FILE is not set$|CT_LOG_TO_FILE=y|;' \
81 -e 's|^# CT_LOG_FILE_COMPRESS is not set$|CT_LOG_FILE_COMPRESS=y|;' \
82 -e 's|^(CT_LOCAL_TARBALLS_DIR)=.*|\1="${HOME}/src"|;' \
86 # Function to copy a file to the sample directory
87 # Needed in case the file is already there (think of a previously available sample)
88 # Usage: CT_DoAddFileToSample <source> <dest>
89 CT_DoAddFileToSample() {
92 inode_s=$(ls -i "${source}" |awk '{ print $1; }')
93 inode_d=$(ls -i "${dest}" 2>/dev/null |awk '{ print $1; }' || true)
94 if [ "${inode_s}" != "${inode_d}" ]; then
95 cp "${source}" "${dest}"
99 if [ "${CT_TOP_DIR}" = "${CT_LIB_DIR}" ]; then
100 samp_top_dir="\${CT_LIB_DIR}"
102 samp_top_dir="\${CT_TOP_DIR}"
105 # Save the uClibc .config file
106 if [ -n "${CT_LIBC_UCLIBC_CONFIG_FILE}" ]; then
107 # We save the file, and then point the saved sample to this file
108 CT_DoAddFileToSample "${CT_LIBC_UCLIBC_CONFIG_FILE}" "${samp_dir}/${CT_LIBC}-${CT_LIBC_VERSION}.config"
109 "${sed}" -r -i -e 's|^(CT_LIBC_UCLIBC_CONFIG_FILE)=.+$|\1="'"${samp_top_dir}"'/samples/${CT_TARGET}/${CT_LIBC}-${CT_LIBC_VERSION}.config"|;' \
112 # remove any dangling files
113 for f in "${samp_dir}/${CT_LIBC}-"*.config; do
114 if [ -f "${f}" ]; then rm -f "${f}"; fi
118 # Now, actually save the defconfig
119 export KCONFIG_CONFIG="$(pwd)/.defconfig"
120 ${CONF} --savedefconfig="${samp_dir}/crosstool.config" "${KCONFIG_TOP}"
123 # Restore stdout now, to be interactive
126 # Fill-in the reported-by info
127 [ -f "${samp_dir}/reported.by" ] && . "${samp_dir}/reported.by"
128 old_name="${reporter_name}"
129 old_url="${reporter_url}"
130 old_comment="${reporter_comment}"
131 read -p "Reporter name [${reporter_name}]: " reporter_name
132 read -p "Reporter URL [${reporter_url}]: " reporter_url
133 if [ -n "${reporter_comment}" ]; then
135 printf "${reporter_comment}\n" |sed -r -e 's/^/ > /;'
137 echo "Reporter comment (Ctrl-D to finish, '.' to use previous):"
138 reporter_comment=$(cat)
139 if [ "${reporter_comment}" = "." ]; then
140 reporter_comment="${old_comment}"
143 ( echo "reporter_name=\"${reporter_name:=${old_name}}\""
144 echo "reporter_url=\"${reporter_url:=${old_url}}\""
145 printf "reporter_comment=\"${reporter_comment}\"\n"
146 ) >"${samp_dir}/reported.by"