From db9549552a8bcd04ec3071a0b0d87bb474fc5420 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 edc02197b95488e8752c988e0e92ed6253c04b8c) --- 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 8829767a88c..705bae8c591 100644 --- a/hadrian/bindist/Makefile +++ b/hadrian/bindist/Makefile @@ -243,7 +243,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") .PHONY: update_package_db diff --git a/hadrian/src/Rules/BinaryDist.hs b/hadrian/src/Rules/BinaryDist.hs index 9bf6b41d830..aded3a4cb19 100644 --- a/hadrian/src/Rules/BinaryDist.hs +++ b/hadrian/src/Rules/BinaryDist.hs @@ -437,13 +437,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. @@ -473,9 +474,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 @@ -548,4 +550,3 @@ createGhcii outDir = do [ "#!/bin/sh" , "exec \"$(dirname \"$0\")\"/ghc --interactive \"$@\"" ] - -- GitLab