From 18ddbd4f1884ca4402012e14034b5285936a8421 Mon Sep 17 00:00:00 2001 From: Cheng Shao <terrorjack@type.dance> Date: Sun, 20 Oct 2024 13:37:12 +0000 Subject: [PATCH] hadrian: fix bindist executable wrapper logic for cross targets This commit fixes an oversight of hadrian wrapper generation logic: when doing cross compilation, `wrapper` is called on executable names with cross prefix, therefore we must use `isSuffixOf` when matching to take the cross prefix into account. Also add missing cross prefix to ghci wrapper content and fix hsc2hs wrapper logic. (cherry picked from commit b57c2174cf8b4804d400c7db774565b2be4ff493) --- hadrian/bindist/Makefile | 2 +- hadrian/src/Rules/BinaryDist.hs | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/hadrian/bindist/Makefile b/hadrian/bindist/Makefile index 34d07ef3ae9..d76c2da3cf6 100644 --- a/hadrian/bindist/Makefile +++ b/hadrian/bindist/Makefile @@ -224,7 +224,7 @@ install_wrappers: install_bin_libdir install_hsc2hs_wrapper .PHONY: install_hsc2hs_wrapper install_hsc2hs_wrapper: @echo Copying hsc2hs wrapper - cp mk/hsc2hs wrappers/hsc2hs-ghc-$(ProjectVersion) + cp mk/hsc2hs wrappers/$(CrossCompilePrefix)hsc2hs-ghc-$(ProjectVersion) PKG_CONFS = $(shell find "$(DESTDIR)$(ActualLibsDir)/package.conf.d" -name '*.conf' | sed "s: :\0xxx\0:g") update_package_db: install_bin install_lib diff --git a/hadrian/src/Rules/BinaryDist.hs b/hadrian/src/Rules/BinaryDist.hs index 7bbc37b62af..770521b429a 100644 --- a/hadrian/src/Rules/BinaryDist.hs +++ b/hadrian/src/Rules/BinaryDist.hs @@ -389,13 +389,14 @@ pkgToWrappers pkg = do | otherwise -> pure [] wrapper :: FilePath -> Action String -wrapper "ghc" = ghcWrapper -wrapper "ghc-pkg" = ghcPkgWrapper -wrapper "ghci" = ghciScriptWrapper -wrapper "haddock" = haddockWrapper -wrapper "hsc2hs" = hsc2hsWrapper -wrapper "runghc" = runGhcWrapper -wrapper "runhaskell" = runGhcWrapper +wrapper wrapper_name + | "runghc" `isSuffixOf` wrapper_name = runGhcWrapper + | "ghc" `isSuffixOf` wrapper_name = ghcWrapper + | "ghc-pkg" `isSuffixOf` wrapper_name = ghcPkgWrapper + | "ghci" `isSuffixOf` wrapper_name = ghciScriptWrapper + | "haddock" `isSuffixOf` wrapper_name = haddockWrapper + | "hsc2hs" `isSuffixOf` wrapper_name = hsc2hsWrapper + | "runhaskell" `isSuffixOf` wrapper_name = runGhcWrapper wrapper _ = commonWrapper -- | Wrapper scripts for different programs. Common is default wrapper. @@ -425,9 +426,10 @@ runGhcWrapper = pure $ "exec \"$executablename\" -f \"$exedir/ghc\" ${1+\"$@\"}\ -- | --interactive flag. ghciScriptWrapper :: Action String ghciScriptWrapper = do + prefix <- crossPrefix version <- setting ProjectVersion pure $ unlines - [ "executable=\"$bindir/ghc-" ++ version ++ "\"" + [ "executable=\"$bindir/" ++ prefix ++ "ghc-" ++ version ++ "\"" , "exec $executable --interactive \"$@\"" ] -- | When not on Windows, we want to ship the 3 flavours of the iserv program @@ -500,4 +502,3 @@ createGhcii outDir = do [ "#!/bin/sh" , "exec \"$(dirname \"$0\")\"/ghc --interactive \"$@\"" ] - -- GitLab