pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/mk honour GCC_REQD by testing $CC -v against it, and o...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/5481a7e549b4
branches:  trunk
changeset: 461526:5481a7e549b4
user:      grant <grant%pkgsrc.org@localhost>
date:      Wed Sep 17 14:37:32 2003 +0000

description:
honour GCC_REQD by testing $CC -v against it, and only pull in pkgsrc
gcc if required. see the comments for how to use the variables which
influence the decision.

eliminate some spurious shell warnings while I'm here.

diffstat:

 mk/compiler.mk |  91 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 82 insertions(+), 9 deletions(-)

diffs (140 lines):

diff -r f0ad8009ef52 -r 5481a7e549b4 mk/compiler.mk
--- a/mk/compiler.mk    Wed Sep 17 14:28:51 2003 +0000
+++ b/mk/compiler.mk    Wed Sep 17 14:37:32 2003 +0000
@@ -1,26 +1,40 @@
-# $NetBSD: compiler.mk,v 1.6 2003/09/12 22:53:18 salo Exp $
+# $NetBSD: compiler.mk,v 1.7 2003/09/17 14:37:32 grant Exp $
 
 # This Makefile fragment implements handling for supported
 # C/C++/fortran compilers.
 #
 # The following variables are used:
 #
-# USE_GCC2
-#      Use pkgsrc gcc2 from lang/gcc.
+# GCC_REQD
+#      Sets the minimum required version of gcc. Packages can set
+#      this if they are known to require gcc>2.8.0, which is the
+#      compiler shipped with NetBSD 1.5.
 #
-# USE_GCC3
-#      Use pkgsrc gcc3 from lang/gcc3.
+#      Note: Be conservative when setting GCC_REQD, as lang/gcc3 is
+#      known not to build on some platforms, eg. Darwin. If gcc3 is
+#      required, set GCC_REQD=3.0 so that we do not try to pull in
+#      lang/gcc3 unnecessarily and have it fail.
 #
 # USE_GCC_SHLIB
 #      Indicates that a package uses GCC shared libraries, so we
 #      register a runtime dependency on the compiler package.
 #
+# USE_GCC2
+#      Use pkgsrc gcc2 from lang/gcc. This overrides any GCC_REQD
+#      setting.
+#
+# USE_GCC3
+#      Use pkgsrc gcc3 from lang/gcc3. This overrides any GCC_REQD
+#      setting.
+#
+# USE_PKGSRC_GCC
+#      Use the appropriate version of GCC from pkgsrc based on
+#      GCC_REQD.
+#
 # USE_SUNPRO
 #      Use the Sun Microsystems Inc. WorkShop/Forte/Sun ONE Studio
 #      compiler collection.
 #
-# The following variable is reserved for future use:
-#
 # USE_MIPSPRO
 #      Use the Silicon Graphics, Inc. MIPSpro compiler.
 #
@@ -30,8 +44,65 @@
 
 .include "../../mk/bsd.prefs.mk"
 
+# Do a dance to determine which version of gcc is being used, if any,
+# and whether it satisfies GCC_REQD.
+#
+# We only pull in lang/gcc or lang/gcc3 if necessary, or if
+# USE_PKGSRC_GCC is defined.
+#
+.if !defined(USE_SUNPRO) && !defined(USE_MIPSPRO) && \
+    !defined(USE_GCC2) && !defined(USE_GCC3)
+
+# Darwin's gcc reports "Apple Computer ... based on gcc version ...",
+# so we can't just grep for ^gcc.
+_CC_VERSION_STRING!=   if ${CC} -v 2>&1 | ${GREP} -q 'gcc version'; then \
+                               echo `${CC} -v 2>&1 | ${GREP} 'gcc version'`; \
+                       fi
+
+# egcs is considered to be gcc-2.8.1.
+.  if !empty(_CC_VERSION_STRING:Mgcc*)
+_CC_VERSION!=          ${CC} -dumpversion
+_CC_IS_GCC=            YES
+.  elif !empty(_CC_VERSION_STRING:Megcs*)
+_CC_VERSION=           2.8.1
+_CC_IS_GCC=            YES
+.  endif
+
+.  if defined(_CC_IS_GCC)
+GCC_REQD?=             2.8.0
+_GCC_VERSION_REQD=     gcc>=${GCC_REQD}
+
+# packages should define USE_PKGSRC_GCC to force install and use of
+# pkgsrc gcc, which defaults to gcc2.
+.    if defined(USE_PKGSRC_GCC)
+GCC_REQD=              2.95.3
+_NEED_PKGSRC_GCC=      YES
+.    else
+_GCC_IN_USE=           gcc-${_CC_VERSION}
+_NEED_PKGSRC_GCC!=     \
+       if ${PKG_ADMIN} pmatch '${_GCC_VERSION_REQD}' ${_GCC_IN_USE}; then \
+               ${ECHO} "NO"; \
+       else \
+               ${ECHO} "YES"; \
+       fi
+.    endif # USE_PKGSRC_GCC
+
+.  endif # _CC_IS_GCC
+
+.endif # !USE_MIPSPRO && !USE_SUNPRO && !USE_GCC2 && !USE_GCC3
+
+# we default to gcc2 if all of the above determined that we need
+# pkgsrc gcc.
+.if defined(_NEED_PKGSRC_GCC) && ${_NEED_PKGSRC_GCC} == "YES"
+.  if !empty(GCC_REQD:M3*)
+USE_GCC3=              # defined
+.  else
+USE_GCC2=              # defined
+.  endif
+.endif
+
 .if defined(USE_GCC2) && empty(PKGPATH:Mlang/gcc) && empty(_PKGSRC_DEPS:Mgcc-2*)
-GCC_REQD?=             2.95.3
+GCC_REQD=              2.95.3
 
 # we need to define these early, as they are used by gcc/buildlink2.mk.
 _GCC_SUBPREFIX=         gcc-2.95.3/
@@ -60,7 +131,7 @@
 PKG_FC=                        ${F77}
 
 .elif defined(USE_GCC3) && empty(PKGPATH:Mlang/gcc3) && empty(_PKGSRC_DEPS:Mgcc-3*)
-GCC_REQD?=             3.3
+GCC_REQD=              3.3
 
 # we need to define these early, as they are used by gcc3/buildlink2.mk.
 _GCC_SUBPREFIX=                gcc-3.3/
@@ -70,10 +141,12 @@
 .    include "../lang/gcc3/buildlink2.mk"
 .  else
 _GCC_PREFIX=           ${LOCALBASE}/${_GCC_SUBPREFIX}
+.    if exists(${_GCC_PREFIX}bin/gcc)
 _GCC_LIBGCCDIR!= \
   dirname `${_GCC_PREFIX}bin/gcc --print-libgcc-file-name`
 _GCC_ARCHSUBDIR= \
   ${_GCC_LIBGCCDIR:S|^${LOCALBASE}/${_GCC_SUBPREFIX}||}
+.    endif
 
 # Packages that link against gcc shared libraries need a full
 # dependency.



Home | Main Index | Thread Index | Old Index