View previous topic :: View next topic |
Author |
Message |
lars_the_bear Guru
Joined: 05 Jun 2024 Posts: 512
|
Posted: Sat Jun 15, 2024 7:37 am Post subject: Implications for rebuilding GCC during install |
|
|
Hi
I tried to install Darktable, which has to be compiled. The build failed because GCC had been built without 'graphite' support. I don't know what that is, but I applied 'USE=graphite' as the error message said:
Code: |
USE=graphite emerge --newuse gcc
|
And this worked, and I went on to build Darktable (three hours) but I wonder if the next full update will overwrite this setting? And, if it does, will Darktable fail to build (if it has been updated)?
If I applied this USE change persistently, in make.conf or wherever, would that have the effect that the next full update would rebuild everything? I mean, what has GCC as a dependency? Most things, I should expect.
BR, Lars. |
|
Back to top |
|
|
sam_ Developer
Joined: 14 Aug 2020 Posts: 1945
|
Posted: Sat Jun 15, 2024 10:11 am Post subject: |
|
|
In order: Yes, it will be wiped out because you set USE on the command line. No, USE doesn't infect things such that they get rebuilt just because the thing they depend on changed USE. |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22601
|
Posted: Sat Jun 15, 2024 1:51 pm Post subject: |
|
|
To elaborate on sam_'s post:
This is why we always tell people not to set USE in the environment, except for exploratory purposes when using emerge --pretend. If you set USE=graphite globally (which is not very useful), it would at worst rebuild packages that actually set IUSE=graphite. Packages which do not react to the graphite USE flag will not be picked up by --changed-use due to a change in the graphite USE flag. As I read the result of equery hasuse, only gcc and harfbuzz react to this flag. A few other ebuilds inspect the state of that flag on one of those packages, but do not IUSE it. |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54577 Location: 56N 3W
|
Posted: Sat Jun 15, 2024 4:57 pm Post subject: |
|
|
lars_the_bear,
Long story short. Set a per package USE in your /etc/portage/package.use/
Portage will remember the USE setting then.
Its described on the Wiki _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
lars_the_bear Guru
Joined: 05 Jun 2024 Posts: 512
|
Posted: Sun Jun 16, 2024 7:17 pm Post subject: |
|
|
Hu wrote: | Packages which do not react to the graphite USE flag will not be picked up by --changed-use due to a change in the graphite USE flag. |
But do packages not pick up the fact that the C compiler has been changed? I would think that, in a system that has historically been built from source, a C compiler is a pretty fundamental dependency. Or is it so fundamental that it's not even considered a dependency?
BR, Lars. |
|
Back to top |
|
|
eschwartz Developer
Joined: 29 Oct 2023 Posts: 214
|
Posted: Sun Jun 16, 2024 9:41 pm Post subject: |
|
|
lars_the_bear wrote: | Hu wrote: | Packages which do not react to the graphite USE flag will not be picked up by --changed-use due to a change in the graphite USE flag. |
But do packages not pick up the fact that the C compiler has been changed? I would think that, in a system that has historically been built from source, a C compiler is a pretty fundamental dependency. Or is it so fundamental that it's not even considered a dependency?
BR, Lars. |
Everything depends on gcc, but not everything depends on "gcc's graphite support".
So they declare a dependency on GCC (indirectly via the base system) which is satisfied by any ABI-compatible version of GCC.
Question for you:
Why would changing the C compiler imply that software built with the C compiler needs to be recompiled in order to work? The software has been built and is in working state now. The C compiler's job has been completed and it is now out of the picture.
If you would *like* to recompile everything against a C compiler change because you are a developer and you like testing for bugs, you are welcome to do so. |
|
Back to top |
|
|
lars_the_bear Guru
Joined: 05 Jun 2024 Posts: 512
|
Posted: Mon Jun 17, 2024 7:16 am Post subject: |
|
|
eschwartz wrote: |
Why would changing the C compiler imply that software built with the C compiler needs to be recompiled in order to work? The software has been built and is in working state now. The C compiler's job has been completed and it is now out of the picture.
|
Well, that's certainly what I hoped would be the case. I just didn't understand Gentoo's dependency management system well enough, to be sure it would be. The Linux systems I'm familiar with don't have built-time dependencies at all, so the question never arises. I'm learning the hard way not to assume that Gentoo is like other Linux implementations, so I have to check
BR, Lars. |
|
Back to top |
|
|
eschwartz Developer
Joined: 29 Oct 2023 Posts: 214
|
Posted: Mon Jun 17, 2024 1:06 pm Post subject: |
|
|
lars_the_bear wrote: | eschwartz wrote: |
Why would changing the C compiler imply that software built with the C compiler needs to be recompiled in order to work? The software has been built and is in working state now. The C compiler's job has been completed and it is now out of the picture.
|
Well, that's certainly what I hoped would be the case. I just didn't understand Gentoo's dependency management system well enough, to be sure it would be. The Linux systems I'm familiar with don't have built-time dependencies at all, so the question never arises. I'm learning the hard way not to assume that Gentoo is like other Linux implementations, so I have to check
BR, Lars. |
I bet they do have build-time dependencies it is just those dependencies are used on someone else's build server and all you see are the binary packages.
Gentoo has this too by the way:
Code: | FEATURES="getbinpkg" |
and Gentoo will download premade binaries built by gentoo.org which match your USE flags.
Gentoo is whatever its users wish to make of it.
...
Anyway yes, on any distro including Gentoo where you use binary packages, build-time dependencies (such as GCC) are only needed on the build server performing the builds.
You can install Gentoo without GCC. In fact, you can install it without portage! But the resulting system will be unable to do package manager things and this is only really useful in specific cases such as generating customized images for embedded or kiosk systems that aren't intended to be br updated except by flashing a new firmware image.
For an example of this actually happening, look at Google's ChromeOS, which is built from Gentoo but provides neither GCC nor portage. |
|
Back to top |
|
|
|