- -- make sure we clean up after ourselves
- later (do forget_it <- readIORef v_Keep_tmp_files
- unless forget_it $ do
- verb <- dynFlag verbosity
- cleanTempFiles verb
- ) $ do
- -- exceptions will be blocked while we clean the temporary files,
- -- so there shouldn't be any difficulty if we receive further
- -- signals.
-
- -- install signal handlers
- main_thread <- myThreadId
-#ifndef mingw32_TARGET_OS
- let sig_handler = Catch (throwTo main_thread
- (DynException (toDyn Interrupted)))
- installHandler sigQUIT sig_handler Nothing
- installHandler sigINT sig_handler Nothing
-#endif
-
- argv <- getArgs
-
- -- grab any -B options from the command line first
- argv' <- setTopDir argv
- top_dir <- readIORef v_TopDir
-
- let installed s = top_dir ++ '/':s
- inplace s = top_dir ++ '/':cCURRENT_DIR ++ '/':s
-
- installed_pkgconfig = installed ("package.conf")
- inplace_pkgconfig = inplace (cGHC_DRIVER_DIR ++ "/package.conf.inplace")
-
- -- discover whether we're running in a build tree or in an installation,
- -- by looking for the package configuration file.
- am_installed <- doesFileExist installed_pkgconfig
-
- if am_installed
- then writeIORef v_Path_package_config installed_pkgconfig
- else do am_inplace <- doesFileExist inplace_pkgconfig
- if am_inplace
- then writeIORef v_Path_package_config inplace_pkgconfig
- else throwDyn (InstallationError
- ("Can't find package.conf in " ++
- inplace_pkgconfig))
-
- -- set the location of our various files
- if am_installed
- then do writeIORef v_Path_usage (installed "ghc-usage.txt")
- writeIORef v_Pgm_L (installed "unlit")
- writeIORef v_Pgm_m (installed "ghc-asm")
- writeIORef v_Pgm_s (installed "ghc-split")
-#if defined(mingw32_TARGET_OS) && defined(MINIMAL_UNIX_DEPS)
- writeIORef v_Pgm_T (installed cTOUCH)
-#endif
-
- else do writeIORef v_Path_usage (inplace (cGHC_DRIVER_DIR ++ "/ghc-usage.txt"))
- writeIORef v_Pgm_L (inplace cGHC_UNLIT)
- writeIORef v_Pgm_m (inplace cGHC_MANGLER)
- writeIORef v_Pgm_s (inplace cGHC_SPLIT)
-#if defined(mingw32_TARGET_OS) && defined(MINIMAL_UNIX_DEPS)
- writeIORef v_Pgm_T (inplace cTOUCH)
-#endif
-
- -- read the package configuration
- conf_file <- readIORef v_Path_package_config
- r <- parsePkgConf conf_file
- case r of {
- Left err -> throwDyn (InstallationError (showSDoc err));
- Right pkg_details -> do
-
- writeIORef v_Package_details (mungePackagePaths top_dir pkg_details)