2016-03-20 1 views
2

J'écris un paquet Haskell qui dépend d'une DLL propriétaire. J'utilise aussi l'outil stack. La bibliothèque a des versions x86 et x64. Selon this issue je ne peux pas le faire en modifiant le fichier .cabal. Donc, je suis en train de le faire en mettant à jour Setup.hs. Ceci est mon script d'installation:Comment lier un paquet avec une DLL propriétaire?

import Distribution.Simple 
import Distribution.PackageDescription 
import Distribution.Simple.LocalBuildInfo 
import System.Directory 

updateExtraLibDirs :: LocalBuildInfo -> IO LocalBuildInfo 
updateExtraLibDirs localBuildInfo = do 
    let packageDescription = localPkgDescr localBuildInfo 
     test = head $ testSuites packageDescription 
     testBuild = testBuildInfo test 
    dir <- getCurrentDirectory 
    print $ length $ testSuites packageDescription 
    return localBuildInfo { 
     localPkgDescr = packageDescription { 
      testSuites = [ test { 
       testBuildInfo = testBuild { 
        extraLibDirs = (dir ++ "\\lib") : extraLibDirs testBuild, 
        extraLibs = ("txmlconnector64.dll") : extraLibs testBuild 
       } 
      } ] 
     } 
    } 


main = defaultMainWithHooks simpleUserHooks { 
      confHook = \a f -> confHook simpleUserHooks a f >>= updateExtraLibDirs 
      } 

Alors je l'appelle:

> stack test 

Cela conduit encore à des références non définies au cours de la liaison suite de tests. Pourquoi?

+0

Quelque chose comme 'GHC-options: -L -llib64 'pourrait fonctionner. Puisque vous savez comment le compiler à partir de la ligne de commande ... dites simplement à cabal de faire exactement cela. Je suppose que c'est tout au plus une solution de contournement et au mieux un hack laid. Mais les choses fonctionnent rarement bien avec Windows et le FFI quand il s'agit de la chaîne d'outils Haskell. Si le hack fonctionne pour vous, je me compterais chanceux. – user2407038

+0

@Leonidas pouvez-vous poster votre mise à jour en tant que réponse et l'accepter pour l'enlever de la file d'attente de questions sans réponse? Merci! – sclv

+0

@ user2407038, cela ne fonctionne pas. La cabale ne peut pas analyser le fichier ... – Leonid

Répondre

1

A deux pas:

  1. Replace "txmlconnector64.dll" avec "txmlconnector64"
  2. Dans le fichier .cabal mis en build-type: Custom pour lui permettre d'utiliser votre Setup.hs
+0

Je suis content que vous ayez compris cela. Pensez-vous que vous avez rencontré quelque chose qui pourrait être considéré comme un rapport de bug ou une demande de fonctionnalité pour une installation de cabale? Je serais heureux de faire un peu de suivi sur le signalement si vous pouvez expliquer ce qu'il pourrait être utile d'ajouter ... – sclv

+0

@sclv, un tel problème existe déjà. Vous pouvez trouver le lien dans le message mis à jour. – Leonid