[PATCH] Remove . from $PATH
Arnaud Lacombe
lacombar@gmail.com
Fri Jul 30 01:29:00 GMT 2010
Hi,
On Thu, Jul 29, 2010 at 11:19 AM, Johannes Stezenbach <js@sig21.net> wrote:
> Remove . from $PATH
>
> Add CT_SanitizePath function which removes entries referring to ., /tmp
> and non-existing directories from $PATH, and call it early in the
> build script.
>
> If . is in PATH, gcc-4.4.4 build breaks:
>
> [ALL ] checking what assembler to use...
> /tmp/build/targets/arm-unknown-linux-uclibcgnueabi/build/gcc-core-static/arm-unknown-linux-uclibcgnueabi/bin/as
> ...
> [ALL ] config.status: creating as
>
> i.e. "as" is supposed to be the arm-unknown-linux-uclibcgnueabi cross assembler,
> but config.status creates a local "as" script which is calling the
> host assembler.
>
> Signed-off-by: Johannes Stezenbach <js@sig21.net>
>
> diff -r c5a2e4ee7fb8 scripts/crosstool-NG.sh.in
> --- a/scripts/crosstool-NG.sh.in Mon Jul 26 00:07:17 2010 +0200
> +++ b/scripts/crosstool-NG.sh.in Thu Jul 29 15:34:42 2010 +0200
> @@ -28,6 +28,9 @@
> # Overide the locale early, in case we ever translate crosstool-NG messages
> [ -z "${CT_NO_OVERIDE_LC_MESSAGES}" ] && export LC_ALL=C
>
> +# remove . from PATH since it can cause gcc build failures
> +CT_SanitizePath
> +
> # Some sanity checks in the environment and needed tools
> CT_DoLog INFO "Performing some trivial sanity checks"
> CT_TestAndAbort "Don't set LD_LIBRARY_PATH. It screws up the build." -n "${LD_LIBRARY_PATH}"
> diff -r c5a2e4ee7fb8 scripts/functions
> --- a/scripts/functions Mon Jul 26 00:07:17 2010 +0200
> +++ b/scripts/functions Thu Jul 29 15:34:42 2010 +0200
> @@ -137,6 +137,22 @@
> CT_DoLog ${level:-INFO} "(elapsed: ${elapsed_min}:${elapsed_sec}.${elapsed_csec})"
> }
>
> +# Remove entries referring to ., /tmp and non-existing directories from $PATH
> +# Usage: CT_SanitizePath
> +CT_SanitizePath() {
> + local new
> + local tmp
> + local IFS=:
> + for p in $PATH; do
> + tmp=`(cd /tmp; cd $p 2>/dev/null || :; pwd -P)`
this is broken... If you refer to POSIX description of PATH (see [0]),
"::" stands as synonym for ":.:" which is translated to the current
directory. In your script, you will end up in doing a chdir to the
HOME directory (if "set to a non-empty value") and still accepting the
(empty) value.
Why not only accepting absolute directory or directory starting with "~":
test -n "${var}" -a -z "${var%%[~/]*}" && new=...
should do the job.
- Arnaud
[0]: http://www.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03
> + if [ "$tmp" != "/tmp" ]; then
> + new="$new${new:+:}$p"
> + fi
> + done
> + PATH="$new"
> + return 0
> +}
> +
> # Abort the execution with an error message
> # Usage: CT_Abort <message>
> CT_Abort() {
>
> --
> For unsubscribe information see http://sourceware.org/lists.html#faq
>
>
--
For unsubscribe information see http://sourceware.org/lists.html#faq
More information about the crossgcc
mailing list