> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Behalf Of Richard Fish
> Sent: Wednesday, June 07, 2006 9:24 PM
> To: gentoo-user@lists.gentoo.org
> Subject: Re: [gentoo-user] gcc-4.1.1
>
>
> On 6/7/06, Bob Young <[EMAIL PROTECTED]> wrote:
> > chain. At the end of the first emerge -e system you may have a
> new compiler,
> > but that new compiler was built with the old compiler.
>
> This is false.  Gcc uses itself to build itself.  It uses the system
> compiler to build an initial version of itself, and then uses that
> version to build itself.  And then for good measure, it uses that
> version to build the final version.  It's called a 3-stage bootstrap,
> and is documented in the file INSTALL/build.html in the gcc sources.
> You can also look at /usr/portage/eclass/toolchain.eclass to determine
> that Gentoo uses the "bootstrap-lean" target by default.

No, sorry that's just wrong. gcc is slotted, if the above were true there
would be no need for gcc-config in order to select a default compiler. When
a new compiler is emerged, it does *not* automatically become the default
system compiler, it must be selected, and that can only happen after it has
successfully been emerged. The first time a new gcc compiler is emerged, it
is indeed built with the previous version of the compiler that is currently
istalled as the system default.


> Frankly, anybody who claims that gcc needs to be merged twice so it
> can be built with itself and produce better object code does not have
> a clue what they are talking about and you should simply disregard
> anything else they have to say about what is necessary/useful when
> upgrading gcc.

It does have to be emerged twice in order for it to be built with itself,
anybody who thinks otherwise doesn't understand the basic principles of
compiling and linking.

> > happen before glibc is rebuilt are linked against a glibc that was built
> > with the old compiler.
>
> And guess what difference this makes to the end result.  None.
> Nada.  Nothing.
>
> Because for basically every program on your system, they are
> *dynamically linked* against glibc.

Are you absolutely 100% sure that every single system utility and
application is *dynamically* linked, and that no apps or utilities anywhere
in the system specifies *static* linking?

> There are a few statically linked programs that will include glibc
> internally.  These are used only for system recovery purposes...there
> is no need to worry about them at all.

Really, so people who intentionally and specifically want to upgrade
absolutely *everything* should not worry about what gets left out because
Richard says it's unimportant?

The issue is about upgrading gcc and even the gcc upgrade howto recommends
an emerge -e world. It's clear that gcc it self at least has to be emerged
twice in order to build the new gcc *with* the new gcc. Whether this is
strictly necessary or not is certaintly debatable, but since it executes
fairly quickly, and seems a prudent step, I'd argue that it's a reasonable
course. Of course a selecting the new gcc as the default with gcc-config is
also required in between, but that's self evident. Adding gcc-config, glibc,
binutils, libstdc++-v3, quickly covers the most important parts of the basic
tool chain, and covers most utilities or apps that might specify static
linking, and executes much much faster than an emerge -e system.

> There is no value to having glibc or libstdc++-v3 in the first line.
> There is no value at all to doing that twice.

Twice is the only way to build the new gcc *with* the new gcc. I should have
added the gcc-config select command in between, but I thought that was
pretty clearly necessary.

> Also, libstdc++-v3 is only needed by a few binary-only programs on
> Gentoo.  Moreover, it is simply a build of gcc-3.3.6, which as I
> already said uses itself to build itself,  so I cannot see any point in
> ever re-merging libstdc++-v3 due to a gcc upgrade

I know you said it, but that doesn't mean you were correct. The fact is that
anything emerged is built with the currently selected system compiler, the
first time a new compiler is emerged it is built with the current (old)
compiler (duh). *After* it is successfuly emerged, it can be selected as the
default system compiler, then re-emergeing gcc will result in the new
compiler being built with the new compiler.

The same holds true for libstdc++-v3 orginally it was built with the default
system compiler, it makes sense to have it rebuilt with the new compiler.

Regards,
Bob Young


-- 
gentoo-user@gentoo.org mailing list

Reply via email to