WITH_GCC [Was: graphics/png does not build with lang/gcc]

Andriy Gapon avg at FreeBSD.org
Sun May 6 09:27:28 UTC 2012


on 26/04/2012 11:55 Andriy Gapon said the following:
> on 07/03/2012 18:19 Andriy Gapon said the following:
>> on 07/03/2012 14:11 b. f. said the following:
>>> you can just
>>> install lang/gcc or lang/gcc46 and set USE_GCC=4.6 in your build
>>> environment, an included Makefile, or on the command line
> 
> And an additional problem with this recommendation is that if a port has e.g.
> USE_GCC=4.2+ in its Makefile, then the user setting gets overridden (at least if
> it's in make.conf).  So a better way to ask for gcc46+ is needed.
> 
>> BTW, our traditional taxonomy seems to be: "USE_XXX" is for stuff that ports
>> really require, "WITH_XXX" is for user preferences.
>> So it might make sense to create a WITH_GCC knob specifically for the use that you
>> suggested above.

My makefile-fu and ports-infrastructure-fu are really weak (maybe non-existent
even), but here is my attempt: [see the attachment].

The idea behind the patch:
- if WITH_GCC is not defined, then everything should be as before
- if WITH_GCC is defined, but USE_GCC is not defined, then USE_GCC gets set from
WITH_GCC
- if both are defined
  o if USE_GCC is a concrete version, then it wins
  o else (if USE_GCC has the "X+") form, then the minimum requested version
becomes MAX(X, Y), where Y is from WITH_GCC [*]

[*] Note that whether WITH_GCC has "Y" or "Y+" form doesn't matter in this case.

In all cases WITH_GCC can be used only to increase minimum required GCC version,
unless a port wants a concrete fixed version.

-- 
Andriy Gapon
-------------- next part --------------
--- Mk/bsd.port.mk.orig	2012-05-06 12:14:36.049668562 +0300
+++ Mk/bsd.port.mk	2012-05-06 11:56:45.909668044 +0300
@@ -1678,7 +1678,7 @@
 CONFIGURE_ENV+=	MAKE=${GMAKE}
 .endif
 
-.if defined(USE_GCC) || defined(USE_FORTRAN)
+.if defined(USE_GCC) || defined(USE_FORTRAN) || defined(WITH_GCC)
 .include "${PORTSDIR}/Mk/bsd.gcc.mk"
 .endif
 
--- Mk/bsd.gcc.mk.orig	2012-05-06 11:12:55.628670003 +0300
+++ Mk/bsd.gcc.mk	2012-05-06 11:37:29.394675881 +0300
@@ -98,6 +98,30 @@ CONFIGURE_ENV+=	F77="${F77}" FC="${FC}" 
 MAKE_ENV+=		F77="${F77}" FC="${FC}" FFLAGS="${FFLAGS}"
 .endif
 
+.if defined(WITH_GCC)
+
+# See if we can use a later version or exclusively the one specified.
+_WITH_GCC:=	${WITH_GCC:S/+//}
+
+# Check if WITH_GCC points to a valid version.
+.for v in ${GCCVERSIONS}
+. for j in ${GCCVERSION_${v}}
+.  if ${_WITH_GCC}==${j}
+_WITH_GCCVERSION_OKAY=	true;
+.  endif
+. endfor
+.endfor
+
+.if !defined(_WITH_GCCVERSION_OKAY)
+IGNORE=	Unknown version of GCC specified (WITH_GCC=${WITH_GCC})
+.endif
+
+.endif # WITH_GCC
+
+.if !defined(USE_GCC)
+USE_GCC= ${WITH_GCC}
+.undef _WITH_GCC
+.endif
 
 .if defined(USE_GCC)
 
@@ -143,6 +167,11 @@ IGNORE=		Couldn't find your current GCCV
 # get the first available version.
 #
 .if defined(_GCC_ORLATER)
+. if defined(_WITH_GCC)
+.  if ${_USE_GCC} < ${_WITH_GCC}
+_USE_GCC:= ${_WITH_GCC}
+.  endif
+. endif
 . for v in ${GCCVERSIONS}
 .  if ${_USE_GCC} == ${_GCCVERSION_${v}_V}
 _GCC_MIN1:=	true


More information about the freebsd-ports mailing list