From: Ian Lynagh Date: Thu, 12 Jun 2008 00:27:11 +0000 (+0000) Subject: Remove some CPPery with the help of a new value isWindowsHost in Util X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=e82f1baac558b855760e3011112d76397142bfc2 Remove some CPPery with the help of a new value isWindowsHost in Util isWindowsHost is True iff mingw32_HOST_OS is defined. --- diff --git a/compiler/main/SysTools.lhs b/compiler/main/SysTools.lhs index 91c0e7f..9fccdc7 100644 --- a/compiler/main/SysTools.lhs +++ b/compiler/main/SysTools.lhs @@ -211,45 +211,57 @@ initSysTools mbMinusB dflags throwDyn (InstallationError ("Can't find package.conf as " ++ pkgconfig_path)) -#if defined(mingw32_HOST_OS) - -- WINDOWS-SPECIFIC STUFF -- On Windows, gcc and friends are distributed with GHC, -- so when "installed" we look in TopDir/bin - -- When "in-place" we look wherever the build-time configure - -- script found them - -- When "install" we tell gcc where its specs file + exes are (-B) - -- and also some places to pick up include files. We need - -- to be careful to put all necessary exes in the -B place - -- (as, ld, cc1, etc) since if they don't get found there, gcc - -- then tries to run unadorned "as", "ld", etc, and will - -- pick up whatever happens to be lying around in the path, - -- possibly including those from a cygwin install on the target, - -- which is exactly what we're trying to avoid. - ; let gcc_b_arg = Option ("-B" ++ installed "gcc-lib/") + -- When "in-place", or when not on Windows, we look wherever + -- the build-time configure script found them + ; let + -- The trailing "/" is absolutely essential; gcc seems + -- to construct file names simply by concatenating to + -- this -B path with no extra slash We use "/" rather + -- than "\\" because otherwise "\\\" is mangled + -- later on; although gcc_args are in NATIVE format, + -- gcc can cope + -- (see comments with declarations of global variables) + gcc_b_arg = Option ("-B" ++ installed "gcc-lib/") (gcc_prog,gcc_args) - | am_installed = (installed_bin "gcc", [gcc_b_arg]) - | otherwise = (cGCC, []) - -- The trailing "/" is absolutely essential; gcc seems - -- to construct file names simply by concatenating to - -- this -B path with no extra slash We use "/" rather - -- than "\\" because otherwise "\\\" is mangled - -- later on; although gcc_args are in NATIVE format, - -- gcc can cope - -- (see comments with declarations of global variables) - - perl_path | am_installed = installed_bin cGHC_PERL - | otherwise = cGHC_PERL - - -- 'touch' is a GHC util for Windows, and similarly unlit, mangle - ; let touch_path | am_installed = installed_bin cGHC_TOUCHY_PGM - | otherwise = inplace cGHC_TOUCHY_DIR_REL cGHC_TOUCHY_PGM - - -- On Win32 we don't want to rely on #!/bin/perl, so we prepend - -- a call to Perl to get the invocation of split and mangle - ; let (split_prog, split_args) = (perl_path, [Option split_script]) - (mangle_prog, mangle_args) = (perl_path, [Option mangle_script]) - - ; let (mkdll_prog, mkdll_args) + | isWindowsHost && am_installed + -- We tell gcc where its specs file + exes are (-B) + -- and also some places to pick up include files. We need + -- to be careful to put all necessary exes in the -B place + -- (as, ld, cc1, etc) since if they don't get found there, + -- gcc then tries to run unadorned "as", "ld", etc, and + -- will pick up whatever happens to be lying around in + -- the path, possibly including those from a cygwin + -- install on the target, which is exactly what we're + -- trying to avoid. + = (installed_bin "gcc", [gcc_b_arg]) + | otherwise = (cGCC, []) + perl_path + | isWindowsHost && am_installed = installed_bin cGHC_PERL + | otherwise = cGHC_PERL + -- 'touch' is a GHC util for Windows + touch_path + | isWindowsHost + = if am_installed + then installed_bin cGHC_TOUCHY_PGM + else inplace cGHC_TOUCHY_DIR_REL cGHC_TOUCHY_PGM + | otherwise = "touch" + -- On Win32 we don't want to rely on #!/bin/perl, so we prepend + -- a call to Perl to get the invocation of split and mangle. + -- On Unix, scripts are invoked using the '#!' method. Binary + -- installations of GHC on Unix place the correct line on the + -- front of the script at installation time, so we don't want + -- to wire-in our knowledge of $(PERL) on the host system here. + (split_prog, split_args) + | isWindowsHost = (perl_path, [Option split_script]) + | otherwise = (split_script, []) + (mangle_prog, mangle_args) + | isWindowsHost = (perl_path, [Option mangle_script]) + | otherwise = (mangle_script, []) + (mkdll_prog, mkdll_args) + | not isWindowsHost + = panic "Can't build DLLs on a non-Win32 system" | am_installed = (installed "gcc-lib/" cMKDLL, [ Option "--dlltool-name", @@ -257,24 +269,6 @@ initSysTools mbMinusB dflags Option "--driver-name", Option gcc_prog, gcc_b_arg ]) | otherwise = (cMKDLL, []) -#else - -- UNIX-SPECIFIC STUFF - -- On Unix, the "standard" tools are assumed to be - -- in the same place whether we are running "in-place" or "installed" - -- That place is wherever the build-time configure script found them. - ; let gcc_prog = cGCC - gcc_args = [] - touch_path = "touch" - mkdll_prog = panic "Can't build DLLs on a non-Win32 system" - mkdll_args = [] - - -- On Unix, scripts are invoked using the '#!' method. Binary - -- installations of GHC on Unix place the correct line on the front - -- of the script at installation time, so we don't want to wire-in - -- our knowledge of $(PERL) on the host system here. - ; let (split_prog, split_args) = (split_script, []) - (mangle_prog, mangle_args) = (mangle_script, []) -#endif -- cpp is derived from gcc on all platforms -- HACK, see setPgmP below. We keep 'words' here to remember to fix diff --git a/compiler/utils/Util.lhs b/compiler/utils/Util.lhs index 8cfdf83..217a450 100644 --- a/compiler/utils/Util.lhs +++ b/compiler/utils/Util.lhs @@ -6,7 +6,7 @@ \begin{code} module Util ( - debugIsOn, + debugIsOn, isWindowsHost, -- general list processing zipEqual, zipWithEqual, zipWith3Equal, zipWith4Equal, @@ -106,7 +106,7 @@ infixr 9 `thenCmp` %************************************************************************ %* * -\subsection{-DDEBUG} +\subsection{Is DEBUG on, are we on Windows?} %* * %************************************************************************ @@ -117,6 +117,13 @@ debugIsOn = True #else debugIsOn = False #endif + +isWindowsHost :: Bool +#ifdef mingw32_HOST_OS +isWindowsHost = True +#else +isWindowsHost = False +#endif \end{code} %************************************************************************