diff options
author | Moritz Angermann <moritz.angermann@gmail.com> | 2017-11-17 15:04:50 +0800 |
---|---|---|
committer | Moritz Angermann <moritz.angermann@gmail.com> | 2017-11-18 11:12:24 +0800 |
commit | bb11a2d976b933ad870a2888d665d98385dc55fd (patch) | |
tree | 6a6345e2133cf14e51e68529407ca61e63ff38e1 /compiler/main/SysTools.hs | |
parent | 835d8ddbbfb11796ea8a03d1806b7cee38ba17a6 (diff) | |
download | haskell-bb11a2d976b933ad870a2888d665d98385dc55fd.tar.gz |
Relocatable GHC
GHC and the binary distribution that's produced is
not relocatable outside of Windows. This diff tries to
address this for at least Linux and macOS.
Reviewers: austin, hvr, bgamari, erikd, goldfire, Phyx
Reviewed By: bgamari
Subscribers: duog, rwbarton, thomie, erikd
Differential Revision: https://phabricator.haskell.org/D4121
Diffstat (limited to 'compiler/main/SysTools.hs')
-rw-r--r-- | compiler/main/SysTools.hs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/compiler/main/SysTools.hs b/compiler/main/SysTools.hs index 21ed03b407..860b724692 100644 --- a/compiler/main/SysTools.hs +++ b/compiler/main/SysTools.hs @@ -48,6 +48,7 @@ import Platform import Util import DynFlags +import System.Environment (getExecutablePath) import System.FilePath import System.IO import System.Directory @@ -530,6 +531,26 @@ type GetFinalPath = HANDLE -> LPTSTR -> DWORD -> DWORD -> IO DWORD foreign import WINDOWS_CCONV unsafe "dynamic" makeGetFinalPathNameByHandle :: FunPtr GetFinalPath -> GetFinalPath +#elif defined(darwin_HOST_OS) || defined(linux_HOST_OS) +-- on unix, this is a bit more confusing. +-- The layout right now is somehting like +-- +-- /bin/ghc-X.Y.Z <- wrapper script (1) +-- /bin/ghc <- symlink to wrapper script (2) +-- /lib/ghc-X.Y.Z/bin/ghc <- ghc executable (3) +-- /lib/ghc-X.Y.Z <- $topdir (4) +-- +-- As such, we first need to find the absolute location to the +-- binary. +-- +-- getExecutablePath will return (3). One takeDirectory will +-- give use /lib/ghc-X.Y.Z/bin, and another will give us (4). +-- +-- This of course only works due to the current layout. If +-- the layout is changed, such that we have ghc-X.Y.Z/{bin,lib} +-- this would need to be changed accordingly. +-- +getBaseDir = Just . (\p -> p </> "lib") . takeDirectory . takeDirectory <$> getExecutablePath #else getBaseDir = return Nothing #endif |