J'essaie d'écrire un programme Haskell qui nécessite la sortie de programmes externes (tels que lame, l'encodeur mp3). Alors que déclarer une dépendance sur une bibliothèque est facile dans une cabale, comment peut-on déclarer une dépendance sur un exécutable?Comment faire pour que Cabal recherche des programmes externes?
Répondre
Vous ne pouvez pas ajouter de dépendances dans le fichier .cabal pour les exécutables externes, à l'exception d'une liste d'outils de construction connus (voir build-tools: alex par exemple). Vous pouvez toutefois spécifier un type de construction: Configurez, puis utilisez un script de configuration distinct pour rechercher des binaires supplémentaires (par exemple, un script de configuration basé sur autoconf est parfaitement adapté et peut être utilisé pour définir des constantes dans votre la source). Notez que la recherche d'une dépendance à l'exécution - comme un encodeur boiteux - au moment de la compilation peut être une mauvaise idée, car les environnements de construction et d'exécution sont différents sur de nombreux systèmes de paquets. Il pourrait être une meilleure idée de rechercher dynamiquement les binaires requis au démarrage du programme.
Par exemple, pour hmp3 chasses mpg321 avec
mmpg <- findExecutable (MPG321 :: String)
où mpg321 est le nom du programme déterminé par une option ./configure. Pour plus d'informations, consultez les églefin:
Est-ce que Cabal offre quelque chose comme un « crochet post-installation » qui permettrait, par exemple, d'essayer d'installer un encodeur mp3 au moment où le paquet Cabal est installé, plutôt que construit? –
Vous pouvez ajouter des hooks dans le Setup.hs pour programmer n'importe quelle phase, mais idéalement, l'installation de programmes externes sera laissée au système de paquets (.deb ou .rpm etc), qui sait comment trouver et construire des dépendances non-Haskell . –