Skip to content

Commit 4fa47ca

Browse files
committed
Use ghcjs tar.gz contents regardless of name #1622
1 parent 8ded097 commit 4fa47ca

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

src/Stack/Setup.hs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -835,10 +835,9 @@ installGHCJS version si archiveFile archiveType destDir = do
835835
-- install cabal-install. This lets us also fix the version of
836836
-- cabal-install used.
837837
let unpackDir = destDir </> $(mkRelDir "src")
838-
tarComponent <- parseRelDir ("ghcjs-" ++ versionString version)
839838
runUnpack <- case platform of
840839
Platform _ Cabal.Windows -> return $
841-
withUnpackedTarball7z "GHCJS" si archiveFile archiveType tarComponent unpackDir
840+
withUnpackedTarball7z "GHCJS" si archiveFile archiveType Nothing unpackDir
842841
_ -> do
843842
zipTool' <-
844843
case archiveType of
@@ -854,7 +853,8 @@ installGHCJS version si archiveFile archiveType destDir = do
854853
return $ do
855854
removeTreeIfExists unpackDir
856855
readInNull destDir tarTool menv ["xf", toFilePath archiveFile] Nothing
857-
renameDir (destDir </> tarComponent) unpackDir
856+
innerDir <- expectSingleUnpackedDir archiveFile destDir
857+
renameDir innerDir unpackDir
858858

859859
$logSticky $ T.concat ["Unpacking GHCJS into ", T.pack . toFilePath $ unpackDir, " ..."]
860860
$logDebug $ "Unpacking " <> T.pack (toFilePath archiveFile)
@@ -1044,7 +1044,7 @@ installGHCWindows :: (MonadIO m, MonadMask m, MonadLogger m, MonadReader env m,
10441044
-> m ()
10451045
installGHCWindows version si archiveFile archiveType destDir = do
10461046
tarComponent <- parseRelDir $ "ghc-" ++ versionString version
1047-
withUnpackedTarball7z "GHC" si archiveFile archiveType tarComponent destDir
1047+
withUnpackedTarball7z "GHC" si archiveFile archiveType (Just tarComponent) destDir
10481048
$logInfo $ "GHC installed to " <> T.pack (toFilePath destDir)
10491049

10501050
installMsys2Windows :: (MonadIO m, MonadMask m, MonadLogger m, MonadReader env m, HasConfig env, HasHttpManager env, MonadBaseControl IO m)
@@ -1063,7 +1063,7 @@ installMsys2Windows osKey si archiveFile archiveType destDir = do
10631063
throwM e
10641064

10651065
msys <- parseRelDir $ "msys" ++ T.unpack (fromMaybe "32" $ T.stripPrefix "windows" osKey)
1066-
withUnpackedTarball7z "MSYS2" si archiveFile archiveType msys destDir
1066+
withUnpackedTarball7z "MSYS2" si archiveFile archiveType (Just msys) destDir
10671067

10681068
platform <- asks getPlatform
10691069
menv0 <- getMinimalEnvOverride
@@ -1091,10 +1091,10 @@ withUnpackedTarball7z :: (MonadIO m, MonadMask m, MonadLogger m, MonadReader env
10911091
-> SetupInfo
10921092
-> Path Abs File -- ^ Path to archive file
10931093
-> ArchiveType
1094-
-> Path Rel Dir -- ^ Name of directory expected to be in archive.
1094+
-> Maybe (Path Rel Dir) -- ^ Name of directory expected in archive. If Nothing, expects a single folder.
10951095
-> Path Abs Dir -- ^ Destination directory.
10961096
-> m ()
1097-
withUnpackedTarball7z name si archiveFile archiveType srcDir destDir = do
1097+
withUnpackedTarball7z name si archiveFile archiveType msrcDir destDir = do
10981098
suffix <-
10991099
case archiveType of
11001100
TarXz -> return ".xz"
@@ -1109,7 +1109,9 @@ withUnpackedTarball7z name si archiveFile archiveType srcDir destDir = do
11091109
let tmpName = toFilePathNoTrailingSep (dirname destDir) ++ "-tmp"
11101110
createTree (parent destDir)
11111111
withCanonicalizedTempDirectory (toFilePath $ parent destDir) tmpName $ \tmpDir -> do
1112-
let absSrcDir = tmpDir </> srcDir
1112+
absSrcDir <- case msrcDir of
1113+
Just srcDir -> return $ tmpDir </> srcDir
1114+
Nothing -> expectSingleUnpackedDir archiveFile tmpDir
11131115
removeTreeIfExists destDir
11141116
run7z (parent archiveFile) archiveFile
11151117
run7z tmpDir tarFile
@@ -1122,6 +1124,13 @@ withUnpackedTarball7z name si archiveFile archiveType srcDir destDir = do
11221124
])
11231125
renameDir absSrcDir destDir
11241126

1127+
expectSingleUnpackedDir :: (MonadIO m, MonadThrow m) => Path Abs File -> Path Abs Dir -> m (Path Abs Dir)
1128+
expectSingleUnpackedDir archiveFile destDir = do
1129+
contents <- listDirectory destDir
1130+
case contents of
1131+
([dir], []) -> return dir
1132+
_ -> error $ "Expected a single directory within unpacked " ++ toFilePath archiveFile
1133+
11251134
-- | Download 7z as necessary, and get a function for unpacking things.
11261135
--
11271136
-- Returned function takes an unpack directory and archive.

0 commit comments

Comments
 (0)