Frage

Ich möchte eine Anwendung unter Windows bereitstellen, die auf die GHC -API zugreifen muss. Verwenden Sie das erste einfache Beispiel aus dem Wiki:

http://www.haskell.org/haskellwiki/ghc/as_a_library

Ergebnisse im folgenden Fehler (kompiliert auf einem Computer mit Haskell -Plattform und ausgeführt auf einem anderen sauberen Windows -Install): test.exe: Eine Paketdatenbank finden Sie keine Paketdatenbank unter C: haskell lib package.conf.d

Ich möchte meine Anwendung als einfache Zip -Datei bereitstellen und nicht verlangen, dass der Benutzer etwas installiert hat. Gibt es eine einfache Möglichkeit, die benötigten GHC -Dinge in diese Zip -Datei aufzunehmen, damit sie funktionieren?

War es hilfreich?

Lösung

Dieses Programm kopiert die erforderlichen Dateien in das angegebene Verzeichnis (funktioniert nur unter 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'

Nachdem Sie es mit dem Zielverzeichnis als Argument ausgeführt haben, haben Sie eine lokale Kopie von lib und mingw (ca. 300 MB insgesamt).

Sie können ungenutzte Bibliotheken aus entfernen lib mehr Platz sparen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top