gcc versions following upgrade 6.3 >7.0

Jeremy Chadwick koitsu at FreeBSD.org
Tue Jul 22 08:16:31 UTC 2008

On Tue, Jul 22, 2008 at 01:07:53AM -0700, David Southwell wrote:
> On Monday 21 July 2008 23:27:49 Garrett Cooper wrote:
> > On Mon, Jul 21, 2008 at 4:09 AM, Jeremy Chadwick <koitsu at freebsd.org> wrote:
> > > On Mon, Jul 21, 2008 at 03:11:25AM -0700, david at vizion2000.net wrote:
> > >> FreeBSD **.vizion2000.net 7.0-STABLE FreeBSD 7.0-STABLE #0: Wed Jul 16
> > >> 09:27:38 PDT 2008     @**.vizion2000.net:/usr/obj/usr/src/sys/GENERIC 
> > >> amd64 # pkg_info |grep gcc
> > >> gcc-4.1.3_20080630  GNU Compiler Collection 4.1
> > >> gcc-4.2.5_20080702  GNU Compiler Collection 4.2
> > >> gccmakedep-1.0.2    Create dependencies in makefiles using 'gcc -M'
> > >>
> > >> Should both versions be installed?
> > >
> > > That depends.  Are you using any ports which depend on specific versions
> > > of GCC?  The base system version comes with gcc 4.2.1.  There may be
> > > ports which require older or newer GCC, however.
> > >
> > > "pkg_info -R" should help you determine what ports are dependant upon
> > > those two GCC ports.
> >
> > There isn't anything wrong with having multiple compilers installed on
> > a given system, insomuch as they install within separate directories
> > or are prefixed differently. The sym-/hard-links for the compiler last
> > installed may be the one that gets used though (not sure because I
> > don't have any experience installing gcc from ports on FreeBSD)...
> >
> > >> Do they not place files in same place?
> > >
> > > No.
> >
> > This ties into the reply above, but if you have a compiler provided by
> > the base system and a compiler provided by ports, they won't install
> > in the same location, as ${PREFIX} dictates in ports.
> >
> > -Garrett
> What happens, as in this instance, the system was originally on 6.1 then 6.3 & 
> subsequently upgraded to 7.0?
> How can I tell whether the versions were installed by the base system or via 
> ports?

The "base system" does not add anything to the ports/pkg database.  The
reason you have gcc 4.1.3 and gcc 4.2.5 on your machine is because some
other port/package depended/depends on them.  pkg_info -R will solve
that mystery.

As I said before: some ports/packages may require a newer (or older)
version of GCC, in which case, you'll end up with two (or more) versions
of gcc on your system -- one in the base and one (or more) managed via

Regardless of what Garrett and others say about how multiple compilers
on a system "works great", I do not advocate it.  There are many catches
which can/will surprise you down the road, especially with regards to
library linking order, symbol versioning, and a couple other things.
I'm sorry, but in my eyes it's risky behaviour.  We've been down this
road before back when perl was in the base system, for similar reasons.

This spawns the whole base vs. ports discussion.  For the record, I am
one of the minority who wants to do away with the entire "base system"
concept.  I do not want this thread to start discussing that, though;
let's stay on topic.  I just wanted to point it out so that you have
some idea of *why* I say what I do.

> I am not clear about how the system distinguishes between gcc installed via 
> ports and via base system. Indcidentally when did gcc become part of the base 
> system?

It always has been part of the base system, since at least FreeBSD 2.x
days.  I can't speak for 1.x because I wasn't using FreeBSD then.

Use "pkg_info -R gcc-4.1.3_20080630" to see what ports are reliant upon
gcc 4.1.3, and rebuild those ports now that you've upgraded to FreeBSD 7
(which includes gcc 4.2.1 in the base system).  FreeBSD 6 had gcc 3.4.6,
which is why some ports might have wanted something newr.

Does all of this now make sense?

| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |

More information about the freebsd-ports mailing list