@@ -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 ()
10451045installGHCWindows 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
10501050installMsys2Windows :: (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