Bug 56259 - GCC's configure script has a hard-coded setting of 'with_gmp' for FreeBSD
Summary: GCC's configure script has a hard-coded setting of 'with_gmp' for FreeBSD
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: bootstrap (show other bugs)
Version: 4.7.2
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: build
Depends on:
Blocks:
 
Reported: 2013-02-08 23:01 UTC by Caleb Sunstrum
Modified: 2021-08-16 23:15 UTC (History)
2 users (show)

See Also:
Host: *-*-freebsd*
Target:
Build:
Known to work:
Known to fail: 4.6.2, 4.7.2, 4.8.0
Last reconfirmed: 2021-08-16 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Caleb Sunstrum 2013-02-08 23:01:51 UTC
This block of code exists in the configure script for GCC:

  *-*-freebsd*)
    if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
        && test -f /usr/local/include/gmp.h; then
      with_gmp=/usr/local
    fi
    ;;


This has several serious side-effects:

 - If you have GMP in the source directory you're using to build GCC, it will
   be ignored.
 - Since --with-gmp=/usr/local wasn't specified to configure, this setting is
   not propagated to MPFR and MPC, which causes those configurations to fail.
 - Overriding with --with-gmp-include and --with-gmp-libs causes MPFR and GMP
   to be linked dynamically with GCC, instead of statically (which is the case
   when GMP, MPFR and MPC are built from source as part of GCC.



I don't believe this block of code has any place here - configure has --with-gmp which can be used to do this exact same thing, and correctly to boot. The section of code where this entry occurs is used to set noconfigdirs for other platforms, and most platforms have nothing being done at all.

For greater context:
  *-*-darwin*)
    noconfigdirs="$noconfigdirs ld gas gdb gprof"
    noconfigdirs="$noconfigdirs sim target-rda"
    ;;
  *-*-dragonfly*)
    ;;
  *-*-freebsd*)
    if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
        && test -f /usr/local/include/gmp.h; then
      with_gmp=/usr/local
    fi
    ;;
  *-*-kaos*)
    # Remove unsupported stuff on all kaOS configurations.
    noconfigdirs="$noconfigdirs target-libgloss"
    ;;
  *-*-netbsd*)
    ;;
  *-*-netware*)
    ;;
Comment 1 Richard Biener 2013-02-10 12:24:48 UTC
Confirmed.  This should be removed.
Comment 2 Loren Rittle 2013-02-18 22:25:27 UTC
This block of code was added to handle a special case seen on FreeBSD:
(a) on some versions of FreeBSD circa 2004, the system installed copy of gmp.h was too old to support gcc
(b) by default, FreeBSD ports system installs into /usr/local

I note that the claimed serious side effects only happen when one installed gmp from ports (or otherwise installed it into /usr/local) *and* one attempted to build a gcc with a copy of gmp co-located with gcc source.

We need to think about the default user (which will likely not unpack gmp, mpfr and mpc) into the gcc source tree.

We would need input from Gerald (assuming he still supports the official FreeBSD ports builds of gcc).  Blinding accepting a patch to remove this block of configuration will likely break this downstream; even if it otherwise makes logical sense to do so.

Regards,
Loren
Comment 3 Caleb Sunstrum 2013-02-20 01:47:02 UTC
(In reply to comment #2)
> This block of code was added to handle a special case seen on FreeBSD:
> (a) on some versions of FreeBSD circa 2004, the system installed copy of gmp.h
> was too old to support gcc
> (b) by default, FreeBSD ports system installs into /usr/local

Is there a reason why /path/to/gcc-source/configure --with-gmp=/usr/local doesn't work? I don't have access to these older FreeBSDs, so I can't comment.

> 
> I note that the claimed serious side effects only happen when one installed gmp
> from ports (or otherwise installed it into /usr/local) *and* one attempted to
> build a gcc with a copy of gmp co-located with gcc source.

At the very least, this hack should propagate the settings downstream to mpfr and mpc. But since --with-gmp=/usr/local will (should) do the same thing, I don't see why it's necessary.

> 
> We need to think about the default user (which will likely not unpack gmp, mpfr
> and mpc) into the gcc source tree.

While I agree the default use case is important, I think it's more important to note that there is nothing to suggest that this hack in play, and diagnosing the failures + the unexpected side effects is quite difficult to do. I only noticed this when trying to figure out why MPFR and MPC were failing to build with GMP and tracing through the configure script.

Conversely, if no --with-gmp is specified and the default GMP is too old, one could add additional text to the warning when configure fails - stating that the GMP found in the default location is too old, and they may wish to specify --with-gmp=/usr/local (if GMP exists there), or to build GMP from source as part of GCC.
Comment 4 Andrew Pinski 2021-08-16 23:15:30 UTC
Still there today:
  *-*-freebsd*)
    if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
        && ! test -d ${srcdir}/gmp \
        && test -f /usr/local/include/gmp.h; then
      with_gmp=/usr/local
    fi
    ;;