; config_exists <- doesFileExist pkgconfig_path
; when (not config_exists) $
throwDyn (InstallationError
- ("Can't find package.conf in " ++ pkgconfig_path))
+ ("Can't find package.conf as " ++ pkgconfig_path))
#if defined(mingw32_TARGET_OS)
-- WINDOWS-SPECIFIC STUFF
-- 1. Set proto_top_dir
-- a) look for (the last) -B flag, and use it
-- b) if there are no -B flags, get the directory
--- where GHC is running
+-- where GHC is running (only on Windows)
--
-- 2. If package.conf exists in proto_top_dir, we are running
-- installed; and TopDir = proto_top_dir
String) -- TopDir (in Unix format '/' separated)
getTopDir minusbs
- = do { top_dir1 <- get_proto
- ; let top_dir2 = unDosifyPath top_dir1 -- Convert to standard internal form
-
- -- Discover whether we're running in a build tree or in an installation,
+ = do { top_dir <- get_proto
+ -- Discover whether we're running in a build tree or in an installation,
-- by looking for the package configuration file.
- ; am_installed <- doesFileExist (top_dir2 `slash` "package.conf")
+ ; am_installed <- doesFileExist (top_dir `slash` "package.conf")
- ; return (am_installed, top_dir2)
+ ; return (am_installed, top_dir)
}
where
- get_proto | not (null minusbs)
- = return (drop 2 (last minusbs)) -- 2 for "-B"
+ -- get_proto returns a Unix-format path
+ get_proto | not (null minusbs)
+ = return (unDosifyPath (drop 2 (last minusbs))) -- 2 for "-B"
| otherwise
= do { maybe_exec_dir <- getExecDir -- Get directory of executable
; case maybe_exec_dir of -- (only works on Windows;
-- returns Nothing on Unix)
Nothing -> throwDyn (InstallationError "missing -B<dir> option")
- Just dir -> return (remove_suffix dir)
+ Just dir -> return (remove_suffix (unDosifyPath dir))
}
-- In an installed tree, the ghc binary lives in $libexecdir, which
copy :: String -> String -> String -> IO ()
copy purpose from to =
-#if defined(mingw32_TARGET_OS) && defined(MINIMAL_UNIX_DEPS)
(do
h <- openFile to WriteMode
ls <- readFile from -- inefficient, but it'll do for now.
hPutStrLn h ls
hClose h) `catchAllIO`
(\_ -> throwDyn (PhaseFailed purpose (ExitFailure 1)))
-#else
- do
- -- ToDo: switch away from using 'echo' altogether (but need
- -- a faster alternative than what's done below).
- SysTools.runSomething "Ineffective C pre-processor"
- ("echo '{-# LINE 1 \"" ++ input_fn ++ "\" #-}' > "
- ++ output_fn ++ " && cat " ++ input_fn
- ++ " >> " ++ output_fn) []
-#endif
\end{code}
\begin{code}