From 7a684add898d18800d5865936011d30a461e3853 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Sat, 23 Mar 2024 13:36:16 +0800 Subject: [PATCH] Pass --disable-ld-override when installing/compiling GHC Fixes #1032 Users can still run 'ghcup install ghc -- enable-ld-override' --- lib/GHCup/GHC.hs | 41 +++++++++++++++-------------------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/lib/GHCup/GHC.hs b/lib/GHCup/GHC.hs index bd9f854..225cf3b 100644 --- a/lib/GHCup/GHC.hs +++ b/lib/GHCup/GHC.hs @@ -440,38 +440,16 @@ installUnpackedGHC path inst tver forceInstall addConfArgs | otherwise = do PlatformRequest {..} <- lift getPlatformReq - let ldOverride - | _tvVersion tver >= [vver|8.2.2|] - , _rPlatform `elem` [Linux Alpine, Darwin] - = ["--disable-ld-override"] - | otherwise - = [] - lift $ logInfo "Installing GHC (this may take a while)" - env <- case _rPlatform of - -- https://github.com/haskell/ghcup-hs/issues/967 - Linux Alpine - -- lets not touch LD for cross targets - | Nothing <- _tvTarget tver -> do - cEnv <- liftIO getEnvironment - spaths <- liftIO getSearchPath - has_ld_bfd <- isJust <$> liftIO (searchPath spaths "ld.bfd") - let ldSet = isJust $ lookup "LD" cEnv - -- only set LD if ld.bfd exists in PATH and LD is not set - -- already - if has_ld_bfd && not ldSet - then do - lift $ logInfo "Detected alpine linux... setting LD=ld.bfd" - pure $ Just (("LD", "ld.bfd") : cEnv) - else pure Nothing - _ -> pure Nothing lEM $ execLogged "sh" ("./configure" : ("--prefix=" <> fromInstallDir inst) - : (maybe mempty (\x -> ["--target=" <> T.unpack x]) (_tvTarget tver) <> ldOverride <> (T.unpack <$> addConfArgs)) + : (maybe mempty (\x -> ["--target=" <> T.unpack x]) (_tvTarget tver) + <> ldOverride (_tvVersion tver) + <> (T.unpack <$> addConfArgs)) ) (Just $ fromGHCupPath path) "ghc-configure" - env + Nothing tmpInstallDest <- lift withGHCupTmpDir lEM $ make ["DESTDIR=" <> fromGHCupPath tmpInstallDest, "install"] (Just $ fromGHCupPath path) liftE $ catchWarn $ lEM @_ @'[ProcessError] $ darwinNotarization _rPlatform (fromGHCupPath tmpInstallDest) @@ -479,6 +457,7 @@ installUnpackedGHC path inst tver forceInstall addConfArgs pure () + mergeGHCFileTree :: ( MonadReader env m , HasPlatformReq env , HasDirs env @@ -1313,6 +1292,8 @@ compileGHC targetGhc crossTarget vps bstrap jobs mbuildConfig patches aargs buil (_tvTarget tver) ++ ["--prefix=" <> ghcdir] ++ (if isWindows then ["--enable-tarballs-autodownload"] else []) + -- https://github.com/haskell/ghcup-hs/issues/1032 + ++ ldOverride (_tvVersion tver) ++ fmap T.unpack aargs ) (Just workdir) @@ -1387,3 +1368,11 @@ postGHCInstall ver@GHCTargetVersion {..} = do forM_ v' $ \(mj, mi) -> lift (getGHCForPVP (PVP (fromIntegral mj :| [fromIntegral mi])) _tvTarget) >>= mapM_ (\v -> liftE $ setGHC v SetGHC_XY Nothing) + +ldOverride :: Version -> [String] +ldOverride ver + | ver >= [vver|8.2.2|] + = ["--disable-ld-override"] + | otherwise + = [] +