diff options
author | Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> | 2007-05-20 13:48:26 (GMT) |
---|---|---|
committer | Yann E. MORIN" <yann.morin.1998@anciens.enib.fr> | 2007-05-20 13:48:26 (GMT) |
commit | 4fb8055bf7165d681dbe7ba5d10d8f98a5043d92 (patch) | |
tree | f240fc986f75cb724a2e7d416ea92b89c172c317 /scripts/crosstool.sh | |
parent | 5d2b862edcc5c39e7a336c7a4868701495b5be57 (diff) |
Ah! I finally have a progress bar that doesn't stall the build!
- pipe size in Linux is only 8*512=4096 bytes
- pipe size is not setable
- when the feeding process spits out data faster than the eating
process can read it, then the feeding process stalls after 4KiB
of data sent to the pipe
- for us, the progress bar would spawn a sub-shell every line,
and the sub-shell would in turn spawn a 'date' command.
Which was sloooww as hell, and would cause some kind of a
starvation: the pipe was full most of the time, and the
feeding process was stalled all this time.
Now, we use internal variables and a little hack based onan offset
to determine the elapsed time. Much faster this way, but still
CPU-intensive.
Diffstat (limited to 'scripts/crosstool.sh')
-rwxr-xr-x | scripts/crosstool.sh | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/scripts/crosstool.sh b/scripts/crosstool.sh index 90d0eba..bcb1ebc 100755 --- a/scripts/crosstool.sh +++ b/scripts/crosstool.sh @@ -27,8 +27,12 @@ fi CT_STAR_DATE=`CT_DoDate +%s%N` CT_STAR_DATE_HUMAN=`CT_DoDate +%Y%m%d.%H%M%S` -# Log to a temporary file until we have built our environment -CT_ACTUAL_LOG_FILE="${CT_TOP_DIR}/$$.log" +# Log policy: +# - what goes to the log file goes to fd #1 (stdout) +# - what goes to the screen goes to fd #6 +tmp_log_file="${CT_TOP_DIR}/$$.log" +exec 6>&1 +exec >>"${tmp_log_file}" # Are we configured? We'll need that later... CT_TestOrAbort "Configuration file not found. Please create one." -f "${CT_TOP_DIR}/.config" @@ -182,22 +186,22 @@ mkdir -p "${CT_CC_CORE_PREFIX_DIR}" # It's quite understandable that the log file will be installed in the install # directory, so we must first ensure it exists and is writeable (above) before # we can log there +exec >/dev/null case "${CT_LOG_TO_FILE},${CT_LOG_FILE}" in - ,*) rm -f "${CT_ACTUAL_LOG_FILE}" - CT_ACTUAL_LOG_FILE=/dev/null + ,*) rm -f "${tmp_log_file}" ;; y,/*) mkdir -p "`dirname \"${CT_LOG_FILE}\"`" - mv "${CT_ACTUAL_LOG_FILE}" "${CT_LOG_FILE}" - CT_ACTUAL_LOG_FILE="${CT_LOG_FILE}" + mv "${tmp_log_file}" "${CT_LOG_FILE}" + exec >>"${CT_LOG_FILE}" ;; y,*) mkdir -p "`pwd`/`dirname \"${CT_LOG_FILE}\"`" - mv "${CT_ACTUAL_LOG_FILE}" "`pwd`/${CT_LOG_FILE}" - CT_ACTUAL_LOG_FILE="`pwd`/${CT_LOG_FILE}" + mv "${tmp_log_file}" "`pwd`/${CT_LOG_FILE}" + exec >>"${CT_LOG_FILE}" ;; esac # Determine build system if not set by the user -CT_Test "You did not specify the build system. Guessing." -z "${CT_BUILD}" +CT_Test "You did not specify the build system. That's OK, I can guess..." -z "${CT_BUILD}" CT_BUILD="`${CT_TOP_DIR}/tools/config.sub \"${CT_BUILD:-\`${CT_TOP_DIR}/tools/config.guess\`}\"`" # Arrange paths depending on wether we use sys-root or not. |