aboutsummaryrefslogtreecommitdiffstats
path: root/Mk/Uses/compiler.mk
diff options
context:
space:
mode:
Diffstat (limited to 'Mk/Uses/compiler.mk')
-rw-r--r--Mk/Uses/compiler.mk33
1 files changed, 30 insertions, 3 deletions
diff --git a/Mk/Uses/compiler.mk b/Mk/Uses/compiler.mk
index 0e247bbd720..23fbf15e4a7 100644
--- a/Mk/Uses/compiler.mk
+++ b/Mk/Uses/compiler.mk
@@ -37,6 +37,9 @@ compiler_ARGS= env
VALID_ARGS= c++11-lib c++11-lang c++14-lang c11 features openmp env nestedfct c++0x gcc-c++11-lib
+_CC_hash:= ${CC:hash}
+_CXX_hash:= ${CXX:hash}
+
.if ${compiler_ARGS} == gcc-c++11-lib
_COMPILER_ARGS+= features gcc-c++11-lib
.elif ${compiler_ARGS} == c++11-lib
@@ -66,7 +69,13 @@ _COMPILER_ARGS= #
_COMPILER_ARGS+= features
.endif
+.if defined(_CCVERSION_${_CC_hash})
+_CCVERSION= ${_CCVERSION_${_CC_hash}}
+.else
_CCVERSION!= ${CC} --version
+_CCVERSION_${_CC_hash}= ${_CCVERSION}
+PORTS_ENV_VARS+= _CCVERSION_${_CC_hash}
+.endif
COMPILER_VERSION= ${_CCVERSION:M[0-9].[0-9]*:tW:C/([0-9]).([0-9]).*/\1\2/g}
.if ${_CCVERSION:Mclang}
COMPILER_TYPE= clang
@@ -76,7 +85,10 @@ COMPILER_TYPE= gcc
ALT_COMPILER_VERSION= 0
ALT_COMPILER_TYPE= none
-_ALTCCVERSION=
+_ALTCCVERSION= none
+.if defined(_ALTCCVERSION_${_CC_hash})
+_ALTCCVERSION= ${_ALTCCVERSION_${_CC_hash}}
+.else
.if ${COMPILER_TYPE} == gcc && exists(/usr/bin/clang)
.if ${ARCH} == amd64 || ${ARCH} == i386 # clang often non-default for a reason
_ALTCCVERSION!= /usr/bin/clang --version
@@ -84,11 +96,14 @@ _ALTCCVERSION!= /usr/bin/clang --version
.elif ${COMPILER_TYPE} == clang && exists(/usr/bin/gcc)
_ALTCCVERSION!= /usr/bin/gcc --version
.endif
+_ALTCCVERSION_${_CC_hash}= ${_ALTCCVERSION}
+PORTS_ENV_VARS+= _ALTCCVERSION_${_CC_hash}
+.endif
ALT_COMPILER_VERSION= ${_ALTCCVERSION:M[0-9].[0-9]*:tW:C/([0-9]).([0-9]).*/\1\2/g}
.if ${_ALTCCVERSION:Mclang}
ALT_COMPILER_TYPE= clang
-.elif !empty(_ALTCCVERSION)
+.elif ${_ALTCCVERSION} != none
ALT_COMPILER_TYPE= gcc
.endif
@@ -109,7 +124,13 @@ CHOSEN_COMPILER_TYPE= gcc
.endif
.if ${_COMPILER_ARGS:Mfeatures}
+.if defined(_CXXINTERNAL_${_CXX_hash})
+_CXXINTERNAL= ${_CXXINTERNAL_${_CXX_hash}}
+.else
_CXXINTERNAL!= ${CXX} -\#\#\# /dev/null 2>&1
+_CXXINTERNAL_${_CXX_hash}= ${_CXXINTERNAL}
+PORTS_ENV_VARS+= _CXXINTERNAL_${_CXX_hash}
+.endif
.if ${_CXXINTERNAL:M\"-lc++\"}
COMPILER_FEATURES= libc++
.else
@@ -124,7 +145,13 @@ _LANG=c
.if ${CXXSTD:M${std}}
_LANG=c++
.endif
-OUTPUT_${std}!= echo | ${CC} -std=${std} -c -x ${_LANG} /dev/null -o /dev/null 2>&1; echo
+.if defined(OUTPUT_${std:hash}_${_CC_hash})
+OUTPUT_${std}= ${OUTPUT_${std:hash}_${_CC_hash}}
+.else
+OUTPUT_${std}!= ${CC} -std=${std} -c -x ${_LANG} /dev/null -o /dev/null 2>&1; echo yes
+OUTPUT_${std:hash}_${_CC_hash}= ${OUTPUT_${std}}
+PORTS_ENV_VARS+= OUTPUT_${std:hash}_${_CC_hash}
+.endif
.if !${OUTPUT_${std}:M*error*}
COMPILER_FEATURES+= ${std}
.endif