アプリケーション用のGHC APIをWindowsに展開する簡単な方法
-
27-10-2019 - |
質問
GHC APIにアクセスする必要があるWindowsにアプリケーションを展開したいと思います。 Wikiの最初の簡単な例を使用してください:
http://www.haskell.org/haskellwiki/ghc/as_a_library
次のエラーの結果(Haskellプラットフォームを使用して1つのマシンにコンパイルされ、別のクリーンウィンドウインストールで実行されます):test.exe:c: haskell lib package.conf.dでパッケージデータベースを見つけることができません
アプリケーションを簡単なzipファイルとして展開したいと思いますが、ユーザーに何かをインストールする必要はありません。そのzipファイルに必要なghcのものを含めるための簡単な方法はありますか?
解決
このプログラムは、必要なファイルを指定されたディレクトリにコピーします(Windowsでのみ動作します)。
import Data.List (isSuffixOf)
import System.Environment (getArgs)
import GHC.Paths (libdir)
import System.Directory
import System.FilePath
import System.Cmd
main = do
[to] <- getArgs
let libdir' = to </> "lib"
createDirectoryIfMissing True libdir'
copy libdir libdir'
rawSystem "xcopy"
[ "/e", "/q"
, dropFileName libdir </> "mingw"
, to </> "mingw\\"]
-- | skip some files while copying
uselessFile f
= or $ map (`isSuffixOf` f)
[ "."
, "_debug.a"
, "_p.a", ".p_hi" -- libraries built with profiling
, ".dyn_hi", ".dll"] -- dynamic libraries
copy from to
= getDirectoryContents from
>>= mapM_ copy' . filter (not . uselessFile)
where
copy' f = do
let (from', to') = (from </> f, to </> f)
isDir <- doesDirectoryExist from'
if isDir
then createDirectory to' >> copy from' to'
else copyFile from' to'
引数として宛先ディレクトリを使用して実行した後、ローカルコピーがあります lib
と mingw
(合計約300 MB)。
未使用のライブラリを削除できます lib
より多くのスペースを節約するため。
所属していません StackOverflow