diff --git a/cabal-install/Distribution/Client/CmdRun.hs b/cabal-install/Distribution/Client/CmdRun.hs index 31c01714f03a253dfaf2e2427810565b4adc1031..37094985e6a9fadec02eebfc0348fcc3f5f2c6d8 100644 --- a/cabal-install/Distribution/Client/CmdRun.hs +++ b/cabal-install/Distribution/Client/CmdRun.hs @@ -352,8 +352,8 @@ parseScriptBlock str = readScriptBlock :: Verbosity -> BS.ByteString -> IO Executable readScriptBlock verbosity = parseString parseScriptBlock verbosity "script block" -readScriptBlockFromScript :: Verbosity -> BS.ByteString -> IO Executable -readScriptBlockFromScript verbosity str = readScriptBlock verbosity str' +readScriptBlockFromScript :: Verbosity -> BS.ByteString -> IO (Executable, BS.ByteString) +readScriptBlockFromScript verbosity str = (readScriptBlock verbosity str', noShebang) where start = "{- cabal:" end = "-}" @@ -361,8 +361,13 @@ readScriptBlockFromScript verbosity str = readScriptBlock verbosity str' str' = BS.unlines . takeWhile (/= end) . drop 1 . dropWhile (/= start) - . BS.lines - $ str + $ lines + + noShebang = BS.unlines + . filter ((== "#!") . BS.take 2) + $ lines + + lines = BS.lines str handleScriptCase :: Verbosity -> ProjectBaseContext @@ -370,7 +375,7 @@ handleScriptCase :: Verbosity -> BS.ByteString -> IO (ProjectBaseContext, [TargetSelector]) handleScriptCase verbosity baseCtx tempDir scriptContents = do - executable <- readScriptBlockFromScript verbosity scriptContents + (executable, contents') <- readScriptBlockFromScript verbosity scriptContents -- We need to create a dummy package that lives in our dummy project. let @@ -396,7 +401,7 @@ handleScriptCase verbosity baseCtx tempDir scriptContents = do pkgId = PackageIdentifier "fake-package" version0 writeGenericPackageDescription (tempDir </> "fake-package.cabal") genericPackageDescription - BS.writeFile (tempDir </> "Main.hs") scriptContents + BS.writeFile (tempDir </> "Main.hs") contents' let baseCtx' = baseCtx