1.1 --- a/scripts/crosstool.sh Tue Jan 06 22:10:17 2009 +0000
1.2 +++ b/scripts/crosstool.sh Mon Jan 12 18:57:45 2009 +0000
1.3 @@ -141,9 +141,7 @@
1.4
1.5 # Ah! The build directory shall be eradicated, even if we restart!
1.6 if [ -d "${CT_BUILD_DIR}" ]; then
1.7 - mv "${CT_BUILD_DIR}" "${CT_BUILD_DIR}.$$"
1.8 - chmod -R u+w "${CT_BUILD_DIR}.$$"
1.9 - setsid nohup rm -rf "${CT_BUILD_DIR}.$$" >/dev/null 2>&1 &
1.10 + CT_DoExecLog ALL rm -rf "${CT_BUILD_DIR}"
1.11 fi
1.12
1.13 # Don't eradicate directories if we need to restart
1.14 @@ -152,50 +150,40 @@
1.15 # We need to do that _before_ we can safely log, because the log file will
1.16 # most probably be in the toolchain directory.
1.17 if [ "${CT_FORCE_DOWNLOAD}" = "y" -a -d "${CT_TARBALLS_DIR}" ]; then
1.18 - mv "${CT_TARBALLS_DIR}" "${CT_TARBALLS_DIR}.$$"
1.19 - chmod -R u+w "${CT_TARBALLS_DIR}.$$"
1.20 - setsid nohup rm -rf "${CT_TARBALLS_DIR}.$$" >/dev/null 2>&1 &
1.21 + CT_DoExecLog ALL rm -rf "${CT_TARBALLS_DIR}"
1.22 fi
1.23 if [ "${CT_FORCE_EXTRACT}" = "y" -a -d "${CT_SRC_DIR}" ]; then
1.24 - mv "${CT_SRC_DIR}" "${CT_SRC_DIR}.$$"
1.25 - chmod -R u+w "${CT_SRC_DIR}.$$"
1.26 - setsid nohup rm -rf "${CT_SRC_DIR}.$$" >/dev/null 2>&1 &
1.27 + CT_DoExecLog ALL rm -rf "${CT_SRC_DIR}"
1.28 fi
1.29 if [ -d "${CT_INSTALL_DIR}" ]; then
1.30 - mv "${CT_INSTALL_DIR}" "${CT_INSTALL_DIR}.$$"
1.31 - chmod -R u+w "${CT_INSTALL_DIR}.$$"
1.32 - setsid nohup rm -rf "${CT_INSTALL_DIR}.$$" >/dev/null 2>&1 &
1.33 + CT_DoExecLog ALL rm -rf "${CT_INSTALL_DIR}"
1.34 fi
1.35 if [ -d "${CT_DEBUG_INSTALL_DIR}" ]; then
1.36 - mv "${CT_DEBUG_INSTALL_DIR}" "${CT_DEBUG_INSTALL_DIR}.$$"
1.37 - chmod -R u+w "${CT_DEBUG_INSTALL_DIR}.$$"
1.38 - setsid nohup rm -rf "${CT_DEBUG_INSTALL_DIR}.$$" >/dev/null 2>&1 &
1.39 + CT_DoExecLog ALL rm -rf "${CT_DEBUG_INSTALL_DIR}"
1.40 fi
1.41 # In case we start anew, get rid of the previously saved state directory
1.42 if [ -d "${CT_STATE_DIR}" ]; then
1.43 - mv "${CT_STATE_DIR}" "${CT_STATE_DIR}.$$"
1.44 - chmod -R u+w "${CT_STATE_DIR}.$$"
1.45 - setsid nohup rm -rf "${CT_STATE_DIR}.$$" >/dev/null 2>&1 &
1.46 + CT_DoExecLog ALL rm -rf "${CT_STATE_DIR}"
1.47 fi
1.48 fi
1.49
1.50 # Create the directories we'll use, even if restarting: it does no harm to
1.51 # create already existent directories, and CT_BUILD_DIR needs to be created
1.52 # anyway
1.53 -mkdir -p "${CT_TARBALLS_DIR}"
1.54 -mkdir -p "${CT_SRC_DIR}"
1.55 -mkdir -p "${CT_BUILD_DIR}"
1.56 -mkdir -p "${CT_INSTALL_DIR}"
1.57 -mkdir -p "${CT_PREFIX_DIR}"
1.58 -mkdir -p "${CT_DEBUG_INSTALL_DIR}"
1.59 -mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}"
1.60 -mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}"
1.61 -mkdir -p "${CT_STATE_DIR}"
1.62 +CT_DoExecLog ALL mkdir -p "${CT_TARBALLS_DIR}"
1.63 +CT_DoExecLog ALL mkdir -p "${CT_SRC_DIR}"
1.64 +CT_DoExecLog ALL mkdir -p "${CT_BUILD_DIR}"
1.65 +CT_DoExecLog ALL mkdir -p "${CT_INSTALL_DIR}"
1.66 +CT_DoExecLog ALL mkdir -p "${CT_PREFIX_DIR}"
1.67 +CT_DoExecLog ALL mkdir -p "${CT_DEBUG_INSTALL_DIR}"
1.68 +CT_DoExecLog ALL mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}"
1.69 +CT_DoExecLog ALL mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}"
1.70 +CT_DoExecLog ALL mkdir -p "${CT_STATE_DIR}"
1.71
1.72 # Kludge: CT_INSTALL_DIR and CT_PREFIX_DIR might have grown read-only if
1.73 # the previous build was successful. To be able to move the logfile there,
1.74 # switch them back to read/write
1.75 -chmod -R u+w "${CT_INSTALL_DIR}" "${CT_PREFIX_DIR}"
1.76 +CT_DoExecLog ALL chmod -R u+w "${CT_INSTALL_DIR}" "${CT_PREFIX_DIR}"
1.77
1.78 # Redirect log to the actual log file now we can
1.79 # It's quite understandable that the log file will be installed in the install
1.80 @@ -250,19 +238,19 @@
1.81 # Prepare the 'lib' directories in sysroot, else the ../lib64 hack used by
1.82 # 32 -> 64 bit crosscompilers won't work, and build of final gcc will fail with
1.83 # "ld: cannot open crti.o: No such file or directory"
1.84 - mkdir -p "${CT_SYSROOT_DIR}/lib"
1.85 - mkdir -p "${CT_SYSROOT_DIR}/usr/lib"
1.86 + CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}/lib"
1.87 + CT_DoExecLog ALL mkdir -p "${CT_SYSROOT_DIR}/usr/lib"
1.88
1.89 # Prevent gcc from installing its libraries outside of the sys-root
1.90 - ln -sf "sys-root/lib" "${CT_PREFIX_DIR}/${CT_TARGET}/lib"
1.91 + CT_DoExecLog ALL ln -sf "sys-root/lib" "${CT_PREFIX_DIR}/${CT_TARGET}/lib"
1.92
1.93 # Now, in case we're 64 bits, just have lib64/ be a symlink to lib/
1.94 # so as to have all libraries in the same directory (we can do that
1.95 # because we are *not* multilib).
1.96 if [ "${CT_ARCH_64}" = "y" ]; then
1.97 - ln -sf "lib" "${CT_SYSROOT_DIR}/lib64"
1.98 - ln -sf "lib" "${CT_SYSROOT_DIR}/usr/lib64"
1.99 - ln -sf "sys-root/lib" "${CT_PREFIX_DIR}/${CT_TARGET}/lib64"
1.100 + CT_DoExecLog ALL ln -sf "lib" "${CT_SYSROOT_DIR}/lib64"
1.101 + CT_DoExecLog ALL ln -sf "lib" "${CT_SYSROOT_DIR}/usr/lib64"
1.102 + CT_DoExecLog ALL ln -sf "sys-root/lib" "${CT_PREFIX_DIR}/${CT_TARGET}/lib64"
1.103 fi
1.104
1.105 # Determine build system if not set by the user
1.106 @@ -303,7 +291,7 @@
1.107 # Now we have mangled our BUILD and HOST tuples, we must fake the new
1.108 # cross-tools for those mangled tuples.
1.109 CT_DoLog DEBUG "Making build system tools available"
1.110 - mkdir -p "${CT_PREFIX_DIR}/bin"
1.111 + CT_DoExecLog ALL mkdir -p "${CT_PREFIX_DIR}/bin"
1.112 for m in BUILD HOST; do
1.113 r="CT_REAL_${m}"
1.114 v="CT_${m}"
1.115 @@ -341,7 +329,7 @@
1.116 if [ -n "${where}" ]; then
1.117 CT_DoLog DEBUG " '${!v}-${tool}' -> '${where}'"
1.118 printf "#${BANG}${CT_SHELL}\nexec '${where}' \"\${@}\"\n" >"${CT_PREFIX_DIR}/bin/${!v}-${tool}"
1.119 - chmod 700 "${CT_PREFIX_DIR}/bin/${!v}-${tool}"
1.120 + CT_DoExecLog ALL chmod 700 "${CT_PREFIX_DIR}/bin/${!v}-${tool}"
1.121 else
1.122 # We'll at least need some of them...
1.123 case "${tool}" in
1.124 @@ -372,8 +360,9 @@
1.125 # Some makeinfo versions are a pain in [put your most sensible body part here].
1.126 # Go ahead with those, by creating a wrapper that keeps partial files, and that
1.127 # never fails:
1.128 + CT_DoLog DEBUG " 'makeinfo' -> '$(CT_Which makeinfo)'"
1.129 printf "#${BANG}/bin/sh\n$(CT_Which makeinfo) --force \"\${@}\"\ntrue\n" >"${CT_PREFIX_DIR}/bin/makeinfo"
1.130 - chmod 700 "${CT_PREFIX_DIR}/bin/makeinfo"
1.131 + CT_DoExecLog ALL chmod 700 "${CT_PREFIX_DIR}/bin/makeinfo"
1.132
1.133 # Help gcc
1.134 CT_CFLAGS_FOR_HOST=
1.135 @@ -420,8 +409,8 @@
1.136 if [ "${CT_ONLY_DOWNLOAD}" != "y" ]; then
1.137 if [ "${CT_FORCE_EXTRACT}" = "y" ]; then
1.138 mv "${CT_SRC_DIR}" "${CT_SRC_DIR}.force.$$"
1.139 - setsid nohup rm -rf "${CT_SRC_DIR}.force.$$" >/dev/null 2>&1
1.140 - mkdir -p "${CT_SRC_DIR}"
1.141 + CT_DoExecLog ALL rm -rf "${CT_SRC_DIR}.force.$$"
1.142 + CT_DoExecLog ALL mkdir -p "${CT_SRC_DIR}"
1.143 fi
1.144 CT_DoStep INFO "Extracting and patching toolchain components"
1.145 do_kernel_extract
1.146 @@ -474,14 +463,14 @@
1.147 CT_DoLog DEBUG "Removing access to the build system tools"
1.148 find "${CT_PREFIX_DIR}/bin" -name "${CT_BUILD}-"'*' -exec rm -fv {} \; |CT_DoLog DEBUG
1.149 find "${CT_PREFIX_DIR}/bin" -name "${CT_HOST}-"'*' -exec rm -fv {} \; |CT_DoLog DEBUG
1.150 - rm -fv "${CT_PREFIX_DIR}/bin/makeinfo" |CT_DoLog DEBUG
1.151 + CT_DoExecLog DEBUG rm -fv "${CT_PREFIX_DIR}/bin/makeinfo"
1.152
1.153 if [ "${CT_BARE_METAL}" != "y" ]; then
1.154 CT_DoLog EXTRA "Installing the populate helper"
1.155 sed -r -e 's|@@CT_TARGET@@|'"${CT_TARGET}"'|g;' \
1.156 "${CT_LIB_DIR}/scripts/populate.in" \
1.157 >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-populate"
1.158 - chmod 755 "${CT_PREFIX_DIR}/bin/${CT_TARGET}-populate"
1.159 + CT_DoExecLog ALL chmod 755 "${CT_PREFIX_DIR}/bin/${CT_TARGET}-populate"
1.160 fi
1.161
1.162 # Create the aliases to the target tools
1.163 @@ -490,36 +479,33 @@
1.164 for t in "${CT_TARGET}-"*; do
1.165 if [ -n "${CT_TARGET_ALIAS}" ]; then
1.166 _t=$(echo "$t" |sed -r -e 's/^'"${CT_TARGET}"'-/'"${CT_TARGET_ALIAS}"'-/;')
1.167 - ln -sv "${t}" "${_t}" 2>&1
1.168 + CT_DoExecLog ALL ln -sv "${t}" "${_t}"
1.169 fi
1.170 if [ -n "${CT_TARGET_ALIAS_SED_EXPR}" ]; then
1.171 _t=$(echo "$t" |sed -r -e "${CT_TARGET_ALIAS_SED_EXPR}")
1.172 - ln -sv "${t}" "${_t}" 2>&1
1.173 + CT_DoExecLog ALL ln -sv "${t}" "${_t}"
1.174 fi
1.175 - done |CT_DoLog ALL
1.176 + done
1.177 CT_Popd
1.178
1.179 # Remove the generated documentation files
1.180 if [ "${CT_REMOVE_DOCS}" = "y" ]; then
1.181 CT_DoLog INFO "Removing installed documentation"
1.182 - rm -rf "${CT_PREFIX_DIR}/"{,usr/}{man,info}
1.183 - rm -rf "${CT_SYSROOT_DIR}/"{,usr/}{man,info}
1.184 - rm -rf "${CT_DEBUG_INSTALL_DIR}/"{,usr/}{man,info}
1.185 + CT_DoExecLog ALL rm -rf "${CT_PREFIX_DIR}/"{,usr/}{man,info}
1.186 + CT_DoExecLog ALL rm -rf "${CT_SYSROOT_DIR}/"{,usr/}{man,info}
1.187 + CT_DoExecLog ALL rm -rf "${CT_DEBUG_INSTALL_DIR}/"{,usr/}{man,info}
1.188 fi
1.189 fi
1.190
1.191 CT_DoEnd INFO
1.192
1.193 -if [ "${CT_LOG_FILE_COMPRESS}" = y ]; then
1.194 - CT_DoLog EXTRA "Compressing log file"
1.195 - exec >/dev/null
1.196 - bzip2 -9 "${CT_LOG_FILE}"
1.197 -fi
1.198 +# From now-on, it can become impossible to log any time, because
1.199 +# either we're compressing the log file, or it can become RO any
1.200 +# moment... Consign all ouptut to oblivion...
1.201 +CT_DoLog INFO "Finishing installation (may take a few seconds)..."
1.202 +exec >/dev/null 2>&1
1.203
1.204 -if [ "${CT_INSTALL_DIR_RO}" = "y" ]; then
1.205 - # OK, now we're done, set the toolchain read-only
1.206 - # Don't log, the log file may become read-only any moment...
1.207 - chmod -R a-w "${CT_INSTALL_DIR}" >/dev/null 2>&1
1.208 -fi
1.209 +[ "${CT_LOG_FILE_COMPRESS}" = y ] && bzip2 -9 "${CT_LOG_FILE}"
1.210 +[ "${CT_INSTALL_DIR_RO}" = "y" ] && chmod -R a-w "${CT_INSTALL_DIR}"
1.211
1.212 trap - EXIT