PDF: Use / as path separators in latex input only

Fixes compile error on Windows for 5040f3e
Reverted back to canonical file separators </> in all places except for
arguments to the LaTeX builder and in TEXINPUTS

See #1151.

Note: Temporary directories still fail to be removed in Windows due to
call of ByteString.Lazy.readFile creating process ownership of the
compiled pdf file.
This commit is contained in:
Tim Lin 2014-03-10 16:23:57 -07:00
parent 5040f3ede0
commit 1aed9208f8

View file

@ -56,11 +56,11 @@ import Data.List (intercalate)
#endif
withTempDir :: String -> (FilePath -> IO a) -> IO a
withTempDir f =
withTempDir =
#ifdef _WINDOWS
withTempDirectory "." (f . changePathSeparators)
withTempDirectory "."
#else
withSystemTempDirectory f
withSystemTempDirectory
#endif
#ifdef _WINDOWS
@ -99,8 +99,7 @@ handleImage' baseURL tmpdir (Image ils (src,tit)) = do
let ext = fromMaybe (takeExtension src) $
extensionFromMimeType mime
let basename = UTF8.toString $ B64.encode $ UTF8.fromString src
-- note: we want / even on Windows, for TexLive:
let fname = tmpdir ++ "/" ++ basename <.> ext
let fname = tmpdir </> basename <.> ext
BS.writeFile fname contents
return $ Image ils (fname,tit)
_ -> do
@ -152,18 +151,22 @@ extractMsg log' = do
runTeXProgram :: String -> Int -> FilePath -> String
-> IO (ExitCode, ByteString, Maybe ByteString)
runTeXProgram program runsLeft tmpDir source = do
let file = tmpDir ++ "/input.tex"
let file = tmpDir </> "input.tex"
exists <- doesFileExist file
unless exists $ UTF8.writeFile file source
let programArgs = ["-halt-on-error", "-interaction", "nonstopmode",
"-output-directory", tmpDir, file]
env' <- getEnvironment
#ifdef _WINDOWS
let sep = ";"
-- note: we want / even on Windows, for TexLive
let tmpDir' = changePathSeparators tmpDir
let file' = changePathSeparators file
#else
let sep = ":"
let tmpDir' = tmpDir
let file' = file
#endif
let texinputs = maybe (tmpDir ++ sep) ((tmpDir ++ sep) ++)
let programArgs = ["-halt-on-error", "-interaction", "nonstopmode",
"-output-directory", tmpDir', file']
env' <- getEnvironment
let sep = searchPathSeparator:[]
let texinputs = maybe (tmpDir' ++ sep) ((tmpDir' ++ sep) ++)
$ lookup "TEXINPUTS" env'
let env'' = ("TEXINPUTS", texinputs) :
[(k,v) | (k,v) <- env', k /= "TEXINPUTS"]