From 1bf79d5dc5f57ef5c8d67fe54f2d58cb22db0b32 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Tue, 19 Jan 2010 10:28:19 +0000 Subject: [PATCH] Allow GNU-standard --host, --build, --target configure options (#3637) Patch contributed by asuffield@suffields.me.uk --- aclocal.m4 | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 74 ++++++++++++++++++++++++++++++++++------------ 2 files changed, 148 insertions(+), 18 deletions(-) diff --git a/aclocal.m4 b/aclocal.m4 index bfd91fc..540ec3e 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1235,4 +1235,96 @@ case "$hardtop" in esac ]) +# GHC_CONVERT_CPU(cpu, target_var) +# -------------------------------- +# converts cpu from gnu to ghc naming, and assigns the result to $target_var +AC_DEFUN([GHC_CONVERT_CPU],[ +case "$1" in + alpha*) + $2="alpha" + ;; + arm*) + $2="arm" + ;; + hppa1.1*) + $2="hppa1_1" + ;; + hppa*) + $2="hppa" + ;; + i386) + $2="i386" + ;; + ia64) + $2="ia64" + ;; + m68k*) + $2="m68k" + ;; + mipseb*) + $2="mipseb" + ;; + mipsel*) + $2="mipsel" + ;; + mips*) + $2="mips" + ;; + powerpc64*) + $2="powerpc64" + ;; + powerpc*) + $2="powerpc" + ;; + rs6000) + $2="rs6000" + ;; + s390*) + $2="s390" + ;; + sparc64*) + $2="sparc64" + ;; + sparc*) + $2="sparc" + ;; + vax) + $2="vax" + ;; + x86_64) + $2="x86_64" + ;; + *) + echo "Unknown CPU $1" + exit 1 + ;; + esac +]) + +# GHC_CONVERT_VENDOR(vendor, target_var) +# -------------------------------- +# converts vendor from gnu to ghc naming, and assigns the result to $target_var +AC_DEFUN([GHC_CONVERT_VENDOR],[ +$2="$1" +]) + +# GHC_CONVERT_OS(os, target_var) +# -------------------------------- +# converts os from gnu to ghc naming, and assigns the result to $target_var +AC_DEFUN([GHC_CONVERT_OS],[ +case "$1" in + linux-*|linux) + $2="linux" + ;; + # As far as I'm aware, none of these have relevant variants + freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku) + $2="$1" + ;; + *) + echo "Unknown OS $1" + exit 1 + ;; + esac +]) + # LocalWords: fi diff --git a/configure.ac b/configure.ac index bc5c62b..19cb391 100644 --- a/configure.ac +++ b/configure.ac @@ -208,40 +208,87 @@ System types: --host=HOST cross-compile to build programs to run on HOST [guessed] --target=TARGET configure for building compilers for TARGET [guessed]]])dnl -if test "$build" = "" +if test "${WithGhc}" != "" +then + bootstrap_host=`"${WithGhc}" +RTS --info | grep '^ ,("Host platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + bootstrap_target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + if test "$bootstrap_host" != "$bootstrap_target" + then + echo "Bootstrapping GHC is a cross compiler. This probably isn't going to work" + fi +fi + +# We have to run these unconditionally, but we may discard their +# results in the following code +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_CANONICAL_TARGET + +# If no argument was given for a configuration variable, then discard +# the guessed canonical system and use the configuration of the +# bootstrapping ghc. If an argument was given, map it from gnu format +# to ghc format. +# +# For why we do it this way, see: #3637, #1717, #2951 + +if test "$build_alias" = "" then if test "${WithGhc}" != "" then - build=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + build=$bootstrap_target echo "Build platform inferred as: $build" else echo "Can't work out build platform" exit 1 fi + + BuildArch=`echo "$build" | sed 's/-.*//'` + BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'` + BuildOS=`echo "$build" | sed 's/.*-//'` +else + GHC_CONVERT_CPU([$build_cpu], [BuildArch]) + GHC_CONVERT_VENDOR([$build_vendor], [BuildVendor]) + GHC_CONVERT_OS([$build_os], [BuildOS]) fi -if test "$host" = "" +if test "$host_alias" = "" then if test "${WithGhc}" != "" then - host=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + host=$bootstrap_target echo "Host platform inferred as: $host" else echo "Can't work out host platform" exit 1 fi + + HostArch=`echo "$host" | sed 's/-.*//'` + HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'` + HostOS=`echo "$host" | sed 's/.*-//'` +else + GHC_CONVERT_CPU([$host_cpu], [HostArch]) + GHC_CONVERT_VENDOR([$host_vendor], [HostVendor]) + GHC_CONVERT_OS([$host_os], [HostOS]) fi -if test "$target" = "" +if test "$target_alias" = "" then if test "${WithGhc}" != "" then - target=`"${WithGhc}" +RTS --info | grep '^ ,("Target platform"' | sed -e 's/.*, "//' -e 's/")//' | tr -d '\r'` + target=$bootstrap_target echo "Target platform inferred as: $target" else echo "Can't work out target platform" exit 1 fi + + TargetArch=`echo "$target" | sed 's/-.*//'` + TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'` + TargetOS=`echo "$target" | sed 's/.*-//'` +else + GHC_CONVERT_CPU([$target_cpu], [TargetArch]) + GHC_CONVERT_VENDOR([$target_vendor], [TargetVendor]) + GHC_CONVERT_OS([$target_os], [TargetOS]) fi exeext='' @@ -305,10 +352,7 @@ checkOS() { esac } -BuildPlatform=$build -BuildArch=`echo "$build" | sed 's/-.*//'` -BuildVendor=`echo "$build" | sed -e 's/.*-\(.*\)-.*/\1/'` -BuildOS=`echo "$build" | sed 's/.*-//'` +BuildPlatform="$BuildArch-$BuildVendor-$BuildOS" BuildPlatform_CPP=`echo "$BuildPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'` BuildArch_CPP=` echo "$BuildArch" | sed -e 's/\./_/g' -e 's/-/_/g'` BuildVendor_CPP=` echo "$BuildVendor" | sed -e 's/\./_/g' -e 's/-/_/g'` @@ -318,10 +362,7 @@ checkArch "$BuildArch" checkVendor "$BuildVendor" checkOS "$BuildOS" -HostPlatform=$host -HostArch=`echo "$host" | sed 's/-.*//'` -HostVendor=`echo "$host" | sed -e 's/.*-\(.*\)-.*/\1/'` -HostOS=`echo "$host" | sed 's/.*-//'` +HostPlatform="$HostArch-$HostVendor-$HostOS" HostPlatform_CPP=`echo "$HostPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'` HostArch_CPP=` echo "$HostArch" | sed -e 's/\./_/g' -e 's/-/_/g'` HostVendor_CPP=` echo "$HostVendor" | sed -e 's/\./_/g' -e 's/-/_/g'` @@ -331,10 +372,7 @@ checkArch "$HostArch" checkVendor "$HostVendor" checkOS "$HostOS" -TargetPlatform=$target -TargetArch=`echo "$target" | sed 's/-.*//'` -TargetVendor=`echo "$target" | sed -e 's/.*-\(.*\)-.*/\1/'` -TargetOS=`echo "$target" | sed 's/.*-//'` +TargetPlatform="$TargetArch-$TargetVendor-$TargetOS" TargetPlatform_CPP=`echo "$TargetPlatform" | sed -e 's/\./_/g' -e 's/-/_/g'` TargetArch_CPP=` echo "$TargetArch" | sed -e 's/\./_/g' -e 's/-/_/g'` TargetVendor_CPP=` echo "$TargetVendor" | sed -e 's/\./_/g' -e 's/-/_/g'` -- 1.7.10.4