tech-pkg archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Selecting a C++ compiler (was: build-issues with Q3 on netbsd-6-0 (GCC_REQD, c++11..))
So what about something along the lines of the attached patch?
The idea is to have the user select a GCC version to compile all C++ dialects
with (GCC_CXX_VERSION, default 48) and
-- complain if the selected version doesn't support the used dialects
-- complain if the version mandated by GCC_REQD is higher
-- otherwise use that version instead of _GCC_REQD.
The default should probably be chosen more intelligently and the list of
unsupported dialects is probably incomplete.
Index: compiler.mk
===================================================================
RCS file: /cvsroot/pkgsrc/mk/compiler.mk,v
retrieving revision 1.87
diff -u -r1.87 compiler.mk
--- compiler.mk 4 Jul 2017 14:35:55 -0000 1.87
+++ compiler.mk 10 Oct 2017 18:41:20 -0000
@@ -49,8 +49,7 @@
# c++14, gnu++14, fortran, fortran77, java, objc, obj-c++, and
# ada. The default is "c".
#
-# The above is partly aspirational. As an example c++11 does
-# not force a new enough version of gcc.
+# The above is partly aspirational.
# The following variables are defined, and available for testing in
# package Makefiles:
Index: compiler/gcc.mk
===================================================================
RCS file: /cvsroot/pkgsrc/mk/compiler/gcc.mk,v
retrieving revision 1.184
diff -u -r1.184 gcc.mk
--- compiler/gcc.mk 11 Sep 2017 09:06:41 -0000 1.184
+++ compiler/gcc.mk 10 Oct 2017 18:41:20 -0000
@@ -23,6 +23,11 @@
# GCC_VERSION_SUFFIX
# Optional suffix for GCC binaries, i.e. if the installed names are like
# /usr/bin/g++-5, /usr/bin/gcc-5 etc.
+#
+# GCC_CXX_VERSION
+# GCC version to use for packages using C++ dialects. Must be chosen
+# once in mk.conf and all affected packages rebuilt if changed.
+# Supported values are 48 49 5 6 7.
# Package-settable variables:
#
@@ -59,7 +64,7 @@
COMPILER_GCC_MK= defined
_VARGROUPS+= gcc
-_USER_VARS.gcc= USE_NATIVE_GCC USE_PKGSRC_GCC
+_USER_VARS.gcc= USE_NATIVE_GCC USE_PKGSRC_GCC GCC_CXX_VERSION
_PKG_VARS.gcc= GCC_REQD
_SYS_VARS.gcc= CC_VERSION CC_VERSION_STRING LANGUAGES.gcc
_DEF_VARS.gcc= \
@@ -76,6 +81,7 @@
_GCC_FC _GCC_LDFLAGS _GCC_LIBDIRS _GCC_PKG \
_GCC_PKGBASE _GCC_PKGSRCDIR _GCC_PKG_SATISFIES_DEP \
_GCC_PREFIX _GCC_REQD _GCC_STRICTEST_REQD _GCC_SUBPREFIX \
+ _GCC_CXX_STD_UNSUPP _GCC_CXX_TOOHIGH_PATTERNS \
_GCC_TEST_DEPENDS _GCC_NEEDS_A_FORTRAN _GCC_VARS _GCC_VERSION \
_GCC_VERSION_STRING \
_GCC_ADA _GCC_GMK _GCC_GLK _GCC_GDB _GCC_CHP _GCC_GLS _GCC_GNT _GCC_PRP \
@@ -225,7 +231,50 @@
. endif
. endfor
.endfor
+
+.if !empty(USE_LANGUAGES:Mc++)
+# Handle GCCs requirement that the same version must be used for all packages
+# using C++
+GCC_CXX_VERSION?= 48
+
+.if ${GCC_CXX_VERSION} == "48"
+_GCC_REQD= 4.8
+_GCC_CXX_STD_UNSUPP= c++14 g++14
+_GCC_CXX_TOOHIGH_PATTERNS= ${_GCC49_PATTERNS} ${_GCC5_PATTERNS} ${_GCC6_PATTERNS} ${_GCC7_PATTERNS} ${_GCC_AUX_PATTERNS}
+.elif ${GCC_CXX_VERSION} == "49"
+_GCC_REQD= 4.9
+_GCC_CXX_STD_UNSUPP= # empty
+_GCC_CXX_TOOHIGH_PATTERNS= ${_GCC5_PATTERNS} ${_GCC6_PATTERNS} ${_GCC7_PATTERNS} ${_GCC_AUX_PATTERNS}
+.elif ${GCC_CXX_VERSION} == "5"
+_GCC_REQD= 5.0
+_GCC_CXX_STD_UNSUPP= # empty
+_GCC_CXX_TOOHIGH_PATTERNS= ${_GCC6_PATTERNS} ${_GCC7_PATTERNS} ${_GCC_AUX_PATTERNS}
+.elif ${GCC_CXX_VERSION} == "6"
+_GCC_REQD= 6.0
+_GCC_CXX_STD_UNSUPP= # empty
+_GCC_CXX_TOOHIGH_PATTERNS= ${_GCC7_PATTERNS} ${_GCC_AUX_PATTERNS}
+.elif ${GCC_CXX_VERSION} == "7"
+_GCC_REQD= 7.0
+_GCC_CXX_TOOHIGH_PATTERNS= ${_GCC_AUX_PATTERNS}
+_GCC_CXX_STD_UNSUPP= # empty
+.else
+PKG_FAIL_REASON+= "Unknown GCC_CXX_VERSION ${GCC_CXX_VERSION}"
+.endif # GCC_CXX_VERSION
+
+# Check that the selected GCC version supports the dialects used
+.for _std_ in ${_GCC_CXX_STD_UNSUPP}
+.if !empty(USE_LANGUAGES:M${_std_})
+PKG_FAIL_REASON+= "GCC_CXX_VERSION ${GCC_CXX_VERSION} does not support ${_std_}"
+.endif
+.endfor
+
+# Check that the GCC version selected through GCC_REQD does not exeed the selected version
+.if !empty(_GCC_CXX_TOOHIGH_PATTERNS:M${_GCC_STRICTEST_REQD})
+PKG_FAIL_REASON+= "GCC_REQD mandates a higher version (${_GCC_STRICTEST_REQD}) than GCC_CXX_VERSION (${GCC_CXX_VERSION}/${_GCC_REQD})"
+.endif
+.else # not c++
_GCC_REQD= ${_GCC_STRICTEST_REQD}
+.endif # c++
# Determine whether we require GCC-2.x or GCC-3.x by examining _GCC_REQD.
_NEED_GCC2?= no
Home |
Main Index |
Thread Index |
Old Index