@@ -223,6 +223,30 @@ opt() {
223
223
fi
224
224
}
225
225
226
+ envopt () {
227
+ local NAME=$1
228
+ local V=" CFG_${NAME} "
229
+ eval VV=\$ $V
230
+
231
+ # If configure didn't set a value already, then check environment.
232
+ #
233
+ # (It is recommended that the configure script always check the
234
+ # environment before setting any values to envopt variables; see
235
+ # e.g. how CFG_CC is handled, where it first checks `-z "$CC"`,
236
+ # and issues msg if it ends up employing that provided value.)
237
+ if [ -z " $VV " ]
238
+ then
239
+ eval $V =\$ $NAME
240
+ eval VV=\$ $V
241
+ fi
242
+
243
+ # If script or environment provided a value, save it.
244
+ if [ ! -z " $VV " ]
245
+ then
246
+ putvar $V
247
+ fi
248
+ }
249
+
226
250
msg " looking for configure programs"
227
251
need_cmd cmp
228
252
need_cmd mkdir
621
645
if ! (( chk_cc gcc clang && chk_cc g++ clang) ||
622
646
(chk_cc gcc gcc &&( chk_cc g++ g++ || chk g++ gcc)) ) then
623
647
err " the gcc and g++ in your path point to different compilers.
624
- Check which versions are in your path with cc --version and g++ --version.
648
+ Check which versions are in your path with gcc --version and g++ --version.
625
649
To resolve this problem, either fix your PATH or run configure with --enable-clang"
626
650
fi
627
651
@@ -646,41 +670,101 @@ then
646
670
esac
647
671
fi
648
672
649
- if [ ! -z " $CFG_ENABLE_CLANG " ]
673
+ # Even when the user overrides the choice of CC, still try to detect
674
+ # clang to disable some clang-specific warnings. We here draw a
675
+ # distinction between:
676
+ #
677
+ # CFG_ENABLE_CLANG : passed --enable-clang, or host "requires" clang,
678
+ # CFG_USING_CLANG : compiler (clang / gcc / $CC) looks like clang.
679
+ #
680
+ # This distinction is important because there are some safeguards we
681
+ # would prefer to skip when merely CFG_USING_CLANG is set; but when
682
+ # CFG_ENABLE_CLANG is set, that indicates that we are opting into
683
+ # running such safeguards.
684
+
685
+ if [ ! -z " $CC " ]
650
686
then
651
- if [ -z " $CFG_CLANG " ]
687
+ msg " skipping compiler inference steps; using provided CC=$CC "
688
+ CFG_CC=" $CC "
689
+
690
+ CFG_OSX_CC_VERSION=$( " $CFG_CC " --version 2>&1 | grep " clang" )
691
+ if [ $? -eq 0 ]
652
692
then
653
- err " clang requested but not found"
693
+ step_msg " note, user-provided CC looks like clang; CC=$CC ."
694
+ CFG_USING_CLANG=1
695
+ putvar CFG_USING_CLANG
654
696
fi
655
- CFG_CLANG_VERSION=$( " $CFG_CLANG " \
656
- --version \
657
- | grep version \
658
- | sed ' s/.*\(version .*\)/\1/; s/.*based on \(LLVM .*\))/\1/' \
659
- | cut -d ' ' -f 2)
660
-
661
- case $CFG_CLANG_VERSION in
662
- (3.0svn | 3.0 | 3.1* | 3.2* | 3.3* | 3.4* | 3.5* )
663
- step_msg " found ok version of CLANG: $CFG_CLANG_VERSION "
664
- CFG_C_COMPILER=" clang"
665
- ;;
666
- (* )
667
- err " bad CLANG version: $CFG_CLANG_VERSION , need >=3.0svn"
668
- ;;
669
- esac
670
697
else
671
- CFG_C_COMPILER=" gcc"
698
+ if [ ! -z " $CFG_ENABLE_CLANG " ]
699
+ then
700
+ if [ -z " $CFG_CLANG " ]
701
+ then
702
+ err " clang requested but not found"
703
+ fi
704
+ CFG_CC=" $CFG_CLANG "
705
+ CFG_USING_CLANG=1
706
+ putvar CFG_USING_CLANG
707
+ else
708
+ CFG_CC=" gcc"
709
+ fi
710
+ fi
711
+
712
+ if [ ! -z " $CFG_ENABLE_CLANG " ]
713
+ then
714
+ if [ -z " $CC " ] || [[ $CC == * clang ]]
715
+ then
716
+ CFG_CLANG_VERSION=$( $CFG_CC \
717
+ --version \
718
+ | grep version \
719
+ | sed ' s/.*\(version .*\)/\1/; s/.*based on \(LLVM .*\))/\1/' \
720
+ | cut -d ' ' -f 2)
721
+
722
+ case $CFG_CLANG_VERSION in
723
+ (3.0svn | 3.0 | 3.1* | 3.2* | 3.3* | 3.4* | 3.5* )
724
+ step_msg " found ok version of CLANG: $CFG_CLANG_VERSION "
725
+ if [ -z " $CC " ]
726
+ then
727
+ CFG_CC=" clang"
728
+ fi
729
+ ;;
730
+ (* )
731
+ err " bad CLANG version: $CFG_CLANG_VERSION , need >=3.0svn"
732
+ ;;
733
+ esac
734
+ else
735
+ msg " skipping CFG_ENABLE_CLANG version check; provided CC=$CC "
736
+ fi
672
737
fi
673
738
674
739
if [ ! -z " $CFG_ENABLE_CCACHE " ]
675
740
then
676
- if [ -z " $CFG_CCACHE " ]
741
+ if [ -z " $CC " ]
677
742
then
678
- err " ccache requested but not found"
743
+ if [ -z " $CFG_CCACHE " ]
744
+ then
745
+ err " ccache requested but not found"
746
+ fi
747
+
748
+ CFG_CC=" ccache $CFG_CC "
679
749
fi
750
+ fi
680
751
681
- CFG_C_COMPILER=" ccache $CFG_C_COMPILER "
752
+ if [ -z " $CC " -a -z " $CFG_ENABLE_CLANG " -a -z " $CFG_GCC " ]
753
+ then
754
+ err " either clang or gcc is required"
682
755
fi
683
756
757
+ # All safeguards based on $CFG_ENABLE_CLANG should occur before this
758
+ # point in the script; after this point, script logic should inspect
759
+ # $CFG_USING_CLANG rather than $CFG_ENABLE_CLANG.
760
+
761
+ # Set CFG_{CC,CXX,CPP,CFLAGS,CXXFLAGS}
762
+ envopt CC
763
+ envopt CXX
764
+ envopt CPP
765
+ envopt CFLAGS
766
+ envopt CXXFLAGS
767
+
684
768
# a little post-processing of various config values
685
769
CFG_PREFIX=${CFG_PREFIX%/ }
686
770
CFG_MANDIR=${CFG_MANDIR%/ }
742
826
esac
743
827
done
744
828
745
- if [ -z " $CFG_ENABLE_CLANG " -a -z " $CFG_GCC " ]
746
- then
747
- err " either clang or gcc is required"
748
- fi
749
-
750
829
if [ ! -z " $CFG_PERF " ]
751
830
then
752
831
HAVE_PERF_LOGFD=` $CFG_PERF stat --log-fd 2>&1 | grep ' unknown option' `
961
1040
;;
962
1041
esac
963
1042
964
- case " $CFG_C_COMPILER " in
1043
+ case " $CFG_CC " in
965
1044
(" ccache clang" )
966
1045
LLVM_CXX_32=" ccache clang++ -m32 -Qunused-arguments"
967
1046
LLVM_CC_32=" ccache clang -m32 -Qunused-arguments"
991
1070
992
1071
LLVM_CXX_64=" g++"
993
1072
LLVM_CC_64=" gcc"
1073
+ ;;
1074
+
1075
+ (* )
1076
+ msg " inferring LLVM_CXX/CC from CXX/CC = $CXX /$CC "
1077
+ LLVM_CXX_32=" $CXX -m32"
1078
+ LLVM_CC_32=" $CC -m32"
1079
+
1080
+ LLVM_CXX_64=" $CXX "
1081
+ LLVM_CC_64=" $CC "
1082
+ ;;
994
1083
esac
995
1084
996
1085
LLVM_CFLAGS_32=" -m32"
@@ -1073,7 +1162,6 @@ putvar CFG_PREFIX
1073
1162
putvar CFG_BUILD
1074
1163
putvar CFG_HOST
1075
1164
putvar CFG_TARGET
1076
- putvar CFG_C_COMPILER
1077
1165
putvar CFG_LIBDIR
1078
1166
putvar CFG_LIBDIR_RELATIVE
1079
1167
putvar CFG_DISABLE_MANAGE_SUBMODULES
@@ -1084,7 +1172,7 @@ putvar CFG_DISABLE_INJECT_STD_VERSION
1084
1172
1085
1173
# Avoid spurious warnings from clang by feeding it original source on
1086
1174
# ccache-miss rather than preprocessed input.
1087
- if [ ! -z " $CFG_ENABLE_CCACHE " ] && [ ! -z " $CFG_ENABLE_CLANG " ]
1175
+ if [ ! -z " $CFG_ENABLE_CCACHE " ] && [ ! -z " $CFG_USING_CLANG " ]
1088
1176
then
1089
1177
CFG_CCACHE_CPP2=1
1090
1178
putvar CFG_CCACHE_CPP2
0 commit comments