Question

Je veux déployer une application sur Windows qui a besoin d'accéder à l'API GHC. En utilisant le premier exemple simple du Wiki:

http://www.haskell.org/haskellwiki/GHC/As_a_library

entraîne l'erreur suivante (compilé sur une machine avec plate-forme de Haskell et exécuté sur une autre fenêtre installation propre): test.exe: ne peut pas trouver une base de données de package dans C: \ haskell \ lib \ package.conf.d

Je voudrais déployer mon application comme un simple fichier zip et non demander à l'utilisateur d'avoir quoi que ce soit installé. Est-il un moyen simple d'inclure les choses GHC nécessaires dans ce fichier zip il fonctionne?

Était-ce utile?

La solution

Ce programme permet de copier les fichiers nécessaires dans le répertoire spécifié (fonctionne uniquement sous 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'

Après l'exécution avec le répertoire de destination comme argument, vous aurez une copie locale de lib et mingw (au total environ 300 Mb).

Vous pouvez supprimer les bibliothèques inutilisées de lib pour économiser plus d'espace.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top