This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See crosstool-NG for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1 of 1] refine static linking check to better guide user


Here it is again, as an attachment.  I cannot (apparently) persuade
gmail not to wrap lines.  Apologies.

        -dp

On Mon, Nov 19, 2012 at 2:40 PM, Daniel Price <daniel.price@gmail.com> wrote:
> An IRC discussion with Yann last week led to a request that I submit a
> patch which covers a series of blunders I made as a novice user of
> crosstool.  One was that I didn't have static libc installed on my
> host system, and was stymied by the wording of the message: "Static
> linking impossible on the host system" (solution: install the static
> glibc package).  Two was that I had a misconfigured directory
> structure which had a ':' in it-- this causes $PATH to be misparsed,
> and, ironically, trips the "Static linking impossible" message all
> over again.
>
> Via google, I have noticed that the "static linking" error message has
> come up a number of times, and this patch hopefully will help to
> clarify for the user what they might need to do to make crosstool work
> for them by first proving that gcc is present, can compile a trivial
> program, and can compile trivial static binaries.  I also adjusted the
> error messages somewhat in order to provide some hints if things go
> wrong.
>
> Comments appreciated; I made a number of editorial decisions which
> perhaps not everyone would agree with.  Also, my ability to test this
> on a variety of hosts is very limited.  Thanks,
>
>        -dp
>
> # HG changeset patch
> # User Daniel Price <daniel.price@gmail.com>
> # Date 1353364265 28800
> # Node ID fe774e44305a643f553b509a147e7fc78ed7d3dd
> # Parent  1c68438f44f74e7fcf761838271f1e4d156ceeda
> scripts: refine static linking check to better guide the user
>
> Signed-off-by: Daniel Price <daniel.price@gmail.com>
>
> diff -r 1c68438f44f7 -r fe774e44305a scripts/crosstool-NG.sh.in
> --- a/scripts/crosstool-NG.sh.in    Fri Nov 16 14:59:27 2012 +0100
> +++ b/scripts/crosstool-NG.sh.in    Mon Nov 19 14:31:05 2012 -0800
> @@ -422,8 +422,7 @@
>                  where=$(CT_Which "${tool}")
>              fi
>
> -            # Not all tools are available for all platforms, but some
> are really,
> -            # bally needed
> +            # Not all tools are available for all platforms, but some
> are required.
>              if [ -n "${where}" ]; then
>                  CT_DoLog DEBUG "  '${!v}-${tool}' -> '${where}'"
>                  printf "#${BANG}${CT_CONFIG_SHELL}\nexec '${where}'
> \"\${@}\"\n" >"${CT_BUILDTOOLS_PREFIX_DIR}/bin/${!v}-${tool}"
> @@ -475,17 +474,60 @@
>          *)  ;;
>      esac
>
> +    # Now that we've set up $PATH, sanity test that GCC is runnable so that
> +    # the user can troubleshoot problems if not.
> +    CT_DoLog DEBUG "Sanity testing gcc"
> +    gccout="${CT_BUILD_DIR}/.gcc-output"
> +    GCC=${CT_HOST}-gcc
> +    ret=0
> +    ${GCC} -v > $gccout 2>&1 || ret=$?
> +    if [ $ret != 0 ]; then
> +        CT_DoLog DEBUG "Failed to invoke '${GCC} -v' (exited ${ret}):
> Output Follows:"
> +        CT_DoLog DEBUG "$(cat ${gccout})"
> +    fi
> +    case $ret in
> +    0)
> +        ;;
> +    126)
> +            CT_Abort "${GCC}: cannot execute; check permissions."
> +                ;;
> +    127)
> +            CT_Abort "${GCC}: not found in PATH; check for
> metacharacters or other problems in PATH (PATH=${PATH})"
> +                ;;
> +    *)
> +            CT_Abort "Ran '${GCC} -v', but command failed with exit ${ret}"
> +                ;;
> +    esac
> +    rm -f "${gccout}"
> +
> +    CT_DoLog DEBUG "Testing that gcc can compile a trivial program"
> +    tmp="${CT_BUILD_DIR}/.gcc-test"
> +    # Try a trivial program to ensure the compiler works.
> +    if ! "${CT_HOST}-gcc" -xc - -o "${tmp}"  > ${gccout} 2>&1 <<-_EOF_
> +                int main() {return 0; }
> +            _EOF_
> +    then
> +        CT_DoLog DEBUG "'${GCC}' failed (exited ${ret}): Output Follows:"
> +        CT_DoLog DEBUG "$(cat ${gccout})"
> +        CT_Abort "Couldn't compile a trivial program using ${CT_HOST}-gcc"
> +    fi
> +    rm -f "${tmp}" "${gccout}"
> +
>      # Now we know our host and where to find the host tools, we can check
>      # if static link was requested, but only if it was requested
>      if [ "${CT_WANTS_STATIC_LINK}" = "y" ]; then
>          tmp="${CT_BUILD_DIR}/.static-test"
> -        if ! "${CT_HOST}-gcc" -xc - -static -o "${tmp}" >/dev/null
> 2>&1 <<-_EOF_
> +
> +        CT_DoLog DEBUG "Testing that gcc can compile a trivial
> statically linked program"
> +        if ! "${CT_HOST}-gcc" -xc - -static -o "${tmp}" > ${gccout}
> 2>&1 <<-_EOF_
>                  int main() { return 0; }
>              _EOF_
>          then
> -            CT_Abort "Static linking impossible on the host system
> '${CT_HOST}'"
> +            CT_DoLog DEBUG "'${GCC}' failed (exited ${ret}): Output Follows:"
> +            CT_DoLog DEBUG "$(cat ${gccout})"
> +            CT_Abort "Static linking impossible on the host system
> '${CT_HOST}'; is libc.a installed?"
>          fi
> -        rm -f "${tmp}"
> +        rm -f "${tmp}" "${gccout}"
>      fi
>
>      # Help gcc
>
>
>
> --
> Daniel.Price@gmail.com; Twitter: @danielbprice



-- 
Daniel.Price@gmail.com; Twitter: @danielbprice

Attachment: patch-fe774e44305a643f553b509a147e7fc78ed7d3dd.txt
Description: Text document

--
For unsubscribe information see http://sourceware.org/lists.html#faq

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]