summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--aclocal.m438
-rw-r--r--bindisttest/ghc.mk2
-rw-r--r--configure.ac37
-rw-r--r--distrib/configure.ac.in4
-rw-r--r--includes/ghc.mk2
-rw-r--r--mk/config.mk.in10
-rw-r--r--rts/ghc.mk2
-rw-r--r--rules/shell-wrapper.mk2
8 files changed, 42 insertions, 55 deletions
diff --git a/aclocal.m4 b/aclocal.m4
index 6403748c7f..477da3f05d 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -471,7 +471,7 @@ AC_DEFUN([FP_SETTINGS],
SettingsWindresCommand="\$topdir/../${mingw_bin_prefix}windres.exe"
SettingsTouchCommand='$topdir/bin/touchy.exe'
else
- SettingsCCompilerCommand="$WhatGccIsCalled"
+ SettingsCCompilerCommand="$CC"
SettingsHaskellCPPCommand="$HaskellCPPCmd"
SettingsHaskellCPPFlags="$HaskellCPPArgs"
SettingsLdCommand="$LdCmd"
@@ -2067,38 +2067,6 @@ AC_DEFUN([FIND_GHC_BOOTSTRAP_PROG],[
])
-# FIND_GCC()
-# --------------------------------
-# Finds where gcc is
-#
-# $1 = the variable to set
-# $2 = the with option name
-# $3 = the command to look for
-AC_DEFUN([FIND_GCC],[
- if test "$windows" = YES
- then
- $1="$CC"
- else
- FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([$1], [$2], [$3])
- # fallback to CC if set and no --with-$2=... was used
- if test -z "$With_$2" -a -n "$CC"
- then
- With_$2="$CC"
- $1="$CC"
- # From Xcode 5 on/, OS X command line tools do not include gcc
- # anymore. Use clang.
- elif test -z "$$1"
- then
- FP_ARG_WITH_PATH_GNU_PROG_OPTIONAL([$1], [clang], [clang])
- fi
- if test -z "$$1"
- then
- AC_MSG_ERROR([cannot find $3 nor clang in your PATH])
- fi
- fi
- AC_SUBST($1)
-])
-
AC_DEFUN([MAYBE_OVERRIDE_STAGE0],[
if test ! -z "$With_$1" -a "$CrossCompiling" != "YES"; then
AC_MSG_NOTICE([Not cross-compiling, so --with-$1 also sets $2])
@@ -2132,13 +2100,13 @@ AC_ARG_WITH(hs-cpp,
# We can't use $CPP here, since HS_CPP_CMD is expected to be a single
# command (no flags), and AC_PROG_CPP defines CPP as "/usr/bin/gcc -E".
- HS_CPP_CMD=$WhatGccIsCalled
+ HS_CPP_CMD=$CC
SOLARIS_GCC_CPP_BROKEN=NO
SOLARIS_FOUND_GOOD_CPP=NO
case $host in
i386-*-solaris2)
- GCC_MAJOR_MINOR=`$WhatGccIsCalled --version|grep "gcc (GCC)"|cut -d ' ' -f 3-3|cut -d '.' -f 1-2`
+ GCC_MAJOR_MINOR=`$CC --version|grep "gcc (GCC)"|cut -d ' ' -f 3-3|cut -d '.' -f 1-2`
if test "$GCC_MAJOR_MINOR" != "3.4"; then
# this is not 3.4.x release so with broken CPP
SOLARIS_GCC_CPP_BROKEN=YES
diff --git a/bindisttest/ghc.mk b/bindisttest/ghc.mk
index 4b211064b1..cf2e481efd 100644
--- a/bindisttest/ghc.mk
+++ b/bindisttest/ghc.mk
@@ -38,7 +38,7 @@ test_bindist:
ifeq "$(Windows_Host)" "YES"
mv bindisttest/a/b/c/$(BIN_DIST_NAME) $(BIN_DIST_INST_DIR)
else
- cd bindisttest/a/b/c/$(BIN_DIST_NAME) && ./configure --prefix=$(TOP)/$(BIN_DIST_INST_DIR) --with-gcc="$(WhatGccIsCalled)"
+ cd bindisttest/a/b/c/$(BIN_DIST_NAME) && ./configure --prefix=$(TOP)/$(BIN_DIST_INST_DIR) CC="$(CC)"
cd bindisttest/a/b/c/$(BIN_DIST_NAME) && $(MAKE) install
endif
ifeq "$(GhcProfiled)" "NO"
diff --git a/configure.ac b/configure.ac
index dd3236c24e..c5260ce609 100644
--- a/configure.ac
+++ b/configure.ac
@@ -33,6 +33,11 @@ fi
AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args])
+dnl this makes sure `./configure --target=<cross-compile-target>`
+dnl works as expected, since we're slightly modifying how Autoconf
+dnl interprets build/host/target and how this interacts with $CC tests
+test -n "$target_alias" && ac_tool_prefix=$target_alias-
+
dnl ----------------------------------------------------------
dnl ** Find unixy sort and find commands,
dnl ** which are needed by FP_SETUP_PROJECT_VERSION
@@ -107,6 +112,11 @@ AC_ARG_ENABLE(tarballs-autodownload,
TarballsAutodownload=YES,
TarballsAutodownload=NO
)
+
+dnl CC_STAGE0 is like the "previous" variable CC (inherited by CC_STAGE[123])
+dnl but instead used by stage0 for bootstrapping stage1
+AC_ARG_VAR(CC_STAGE0, [C compiler command (bootstrap)])
+
if test "$WithGhc" != ""; then
FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl
@@ -121,7 +131,11 @@ if test "$WithGhc" != ""; then
GhcMinVersion2=`echo "$GhcMinVersion" | sed 's/^\\(.\\)$/0\\1/'`
GhcCanonVersion="$GhcMajVersion$GhcMinVersion2"
- BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command])
+ dnl infer CC_STAGE0 from `ghc --info` unless explicitly set by user
+ if test -z "$CC_STAGE0"; then
+ BOOTSTRAPPING_GHC_INFO_FIELD([CC_STAGE0],[C compiler command])
+ fi
+
BOOTSTRAPPING_GHC_INFO_FIELD([LD_STAGE0],[ld command])
BOOTSTRAPPING_GHC_INFO_FIELD([AR_STAGE0],[ar command])
BOOTSTRAPPING_GHC_INFO_FIELD([AR_OPTS_STAGE0],[ar flags])
@@ -432,13 +446,19 @@ AC_SUBST(TargetPlatformFull)
dnl ** Which gcc to use?
dnl --------------------------------------------------------------
-FIND_GCC([WhatGccIsCalled], [gcc], [gcc])
-CC="$WhatGccIsCalled"
-export CC
-# If --with-gcc was used, and we're not cross-compiling, then it also
-# applies to the stage0 compiler.
-MAYBE_OVERRIDE_STAGE0([gcc],[CC_STAGE0])
+AC_ARG_WITH([gcc],
+ AS_HELP_STRING([--with-gcc=ARG], [Use ARG as the path to gcc (obsolete, use CC=ARG instead) [default=autodetect]]),
+ AC_MSG_ERROR([--with-gcc=$withval is obsolete (use './configure CC=$withval' or 'CC=$withval ./configure' instead)]))
+
+AC_ARG_WITH([clang],
+ AS_HELP_STRING([--with-clang=ARG], [Use ARG as the path to gcc (obsolete, use CC=ARG instead) [default=autodetect]]),
+ AC_MSG_ERROR([--with-clang=$withval is obsolete (use './configure CC=$withval' or 'CC=$withval ./configure' instead)]))
+
+dnl detect compiler (prefer gcc over clang) and set $CC (unless CC already set),
+dnl later CC is copied to CC_STAGE{1,2,3}
+AC_PROG_CC([gcc clang])
+
MAYBE_OVERRIDE_STAGE0([ar],[AR_STAGE0])
dnl make extensions visible to allow feature-tests to detect them lateron
@@ -1155,7 +1175,8 @@ else
fi
echo ["\
- Using $CompilerName : $WhatGccIsCalled
+ Using (for bootstrapping) : $CC_STAGE0
+ Using $CompilerName : $CC
which is version : $GccVersion
Building a cross compiler : $CrossCompiling
hs-cpp : $HaskellCPPCmd
diff --git a/distrib/configure.ac.in b/distrib/configure.ac.in
index c0610c632e..fdd9fd92d6 100644
--- a/distrib/configure.ac.in
+++ b/distrib/configure.ac.in
@@ -59,9 +59,7 @@ XCODE_VERSION()
dnl ** Which gcc to use?
dnl --------------------------------------------------------------
-FIND_GCC([WhatGccIsCalled], [gcc], [gcc])
-CC="$WhatGccIsCalled"
-export CC
+AC_PROG_CC([gcc clang])
# --with-hs-cpp/--with-hs-cpp-flags
FP_CPP_CMD_WITH_ARGS(HaskellCPPCmd, HaskellCPPArgs)
diff --git a/includes/ghc.mk b/includes/ghc.mk
index 31b26508f6..d08ecfbc07 100644
--- a/includes/ghc.mk
+++ b/includes/ghc.mk
@@ -177,7 +177,7 @@ includes_GHCCONSTANTS_HASKELL_EXPORTS = includes/dist-derivedconstants/header/GH
INSTALL_LIBS += $(includes_GHCCONSTANTS_HASKELL_VALUE)
-DERIVE_CONSTANTS_FLAGS += --gcc-program "$(WhatGccIsCalled)"
+DERIVE_CONSTANTS_FLAGS += --gcc-program "$(CC)"
DERIVE_CONSTANTS_FLAGS += $(addprefix --gcc-flag$(space),$(includes_CC_OPTS) -fcommon)
DERIVE_CONSTANTS_FLAGS += --nm-program "$(NM)"
ifneq "$(OBJDUMP)" ""
diff --git a/mk/config.mk.in b/mk/config.mk.in
index 5d5e581a43..b5d910b841 100644
--- a/mk/config.mk.in
+++ b/mk/config.mk.in
@@ -509,11 +509,10 @@ SUPPORTS_THIS_UNIT_ID = @SUPPORTS_THIS_UNIT_ID@
#-----------------------------------------------------------------------------
# C compiler
#
-# NB. Don't override $(WhatGccIsCalled) using build.mk, re-configure using
-# the flag --with-gcc=<blah> instead. The reason is that the configure script
+# NB. Don't override $(CC) using build.mk, re-configure using
+# the flag CC=<blah> instead. The reason is that the configure script
# needs to know which gcc you're using in order to perform its tests.
-WhatGccIsCalled = @WhatGccIsCalled@
GccVersion = @GccVersion@
ifeq "$(phase)" "0"
CrossCompilePrefix =
@@ -527,18 +526,19 @@ GccLT34 = @GccLT34@
GccLT46 = @GccLT46@
GccIsClang = @GccIsClang@
-CC = $(WhatGccIsCalled)
+CC = @CC@
CC_STAGE0 = @CC_STAGE0@
CC_STAGE1 = $(CC)
CC_STAGE2 = $(CC)
CC_STAGE3 = $(CC)
-AS = $(WhatGccIsCalled)
+AS = @CC@
AS_STAGE0 = @CC_STAGE0@
AS_STAGE1 = $(AS)
AS_STAGE2 = $(AS)
AS_STAGE3 = $(AS)
+# why no LD=@LD@ ?
LD_STAGE0 = @LD_STAGE0@
LD_STAGE1 = $(LD)
LD_STAGE2 = $(LD)
diff --git a/rts/ghc.mk b/rts/ghc.mk
index f57f3dacd4..d7a46f909a 100644
--- a/rts/ghc.mk
+++ b/rts/ghc.mk
@@ -538,7 +538,7 @@ ifeq "$(TargetOS_CPP)" "darwin"
# Darwin has a flag to tell dtrace which cpp to use.
# Unfortunately, this isn't supported on Solaris (See Solaris Dynamic Tracing
# Guide, Chapter 16, for the configuration variables available on Solaris)
-DTRACE_FLAGS = -x cpppath=$(WhatGccIsCalled)
+DTRACE_FLAGS = -x cpppath=$(CC)
endif
DTRACEPROBES_SRC = rts/RtsProbes.d
diff --git a/rules/shell-wrapper.mk b/rules/shell-wrapper.mk
index f674c0dfc2..eb7d8f13ab 100644
--- a/rules/shell-wrapper.mk
+++ b/rules/shell-wrapper.mk
@@ -46,7 +46,7 @@ $$($1_$2_INPLACE_WRAPPER): $$($1_$2_INPLACE)
echo 'datadir="$$(TOP)/$$(INPLACE_LIB)"' >> $$@
echo 'bindir="$$(TOP)/$$(INPLACE_BIN)"' >> $$@
echo 'topdir="$$(TOP)/$$(INPLACE_TOPDIR)"' >> $$@
- echo 'pgmgcc="$$(WhatGccIsCalled)"' >> $$@
+ echo 'pgmgcc="$$(CC)"' >> $$@
$$($1_$2_SHELL_WRAPPER_EXTRA)
$$($1_$2_INPLACE_SHELL_WRAPPER_EXTRA)
ifeq "$$(DYNAMIC_GHC_PROGRAMS)" "YES"