Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Nouveau Membre du Club Avatar de limestrael
    Inscrit en
    juin 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 86
    Points : 34
    Points
    34

    Par défaut Cabal et développement

    J'aurais deux questions très liées :

    Question 1: Cabal est un bon outil pour installer/distribuer ses packages, mais je voulais savoir, lors du développement d'un projet en Haskell, utilisez-vous cabal pour vos compilations répétées ou bien compilez-vous à la main avec ghc --make ?

    Question 2: Actuellement, je bosse sur le binding d'une librairie appelée SFML (plus précisément son binding C CSFML, si certains connaissent). Il s'agit d'une SDL-like (mais en mieux).
    Je progresse ainsi dans mon développement : j'ai un exécutable de test, que j'étoffe un peu à chaque fois que je rajoute quelques fonctionnalités à mon binding, de manière à les utiliser vite fait. Actuellement j'ai un script shell qui compile ma lib, et un autre mon exécutable, méthode que je trouve un peu crade au vu de l'existence de cabal.
    Auriez-vous une meilleure façon de procéder pratique pour le développement ? Via cabal-install ?
    Le truc est que si je compile la lib à coup de 'cabal build' mon exécutable ne peut pas la trouver quand je fais 'ghc --make testHSFML.hs', pourtant cabal m'indique bien à la fin du build: "Registering HSFML-1.5..."
    Je suis obligé de 'cabal install' ma lib, et je vais évidemment pas le faire à chaque modif dans le code.
    Je n'arrive également pas à rajouter mon exécutable au .cabal. J'ai l'erreur suivante au configure si j'indique HSFML dans ses dépendances :
    cabal: internal error: could not construct a valid install plan.
    The proposed (invalid) plan contained the following problems:
    The following packages are involved in a dependency cycle HSFML-1.5
    Il n'aime pas que l'exécutable du .cabal dépende de la lib qui est dans le même .cabal, on dirait. Mais le truc est que si je n'indique pas cette dépendance, au build j'ai :
    Could not find module `SFML.Direct.Types.Enums':
    It is a member of the hidden package `HSFML-1.5'.
    Perhaps you need to add `HSFML' to the build-depends in your .cabal file.
    it is a hidden module in the package `HSFML-1.5'
    Je pourrais faire 2 packages, mais pour le développement ça va être chiant...

    J'utilise le Build-Type 'Simple', c'est peut-être ça qui ne va pas, je ne sais pas.

  2. #2
    Nouveau Membre du Club Avatar de limestrael
    Inscrit en
    juin 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : juin 2009
    Messages : 86
    Points : 34
    Points
    34

    Par défaut

    Bon, j'ai pu trouver une réponse (partielle ?) à ma question 2:

    Dans mon .cabal, je ne mets que la librairie, pas mon main de test. Je 'cabal configure' une fois et 'cabal installe' à chaque modif du code de la lib.
    Ensuite, cabal génère dans un fichier dist/package.conf.inplace contenant les infos sur le package juste compilé (ça doit être à ça que correspond le 'Registering HSFML-1.5...').
    Après, il faut indiquer l'existence de ce fichier à GHC lorsque je tente de compiler mon main :
    ghc --make -package-conf dist/package.conf.inplace main.hs
    Au passage, il ne faut pas exécuter ce code dans le dossier où se trouve le dossier racine du code du package (usuellement également le dossier où se trouve le .cabal), car sinon GHC va trouver le code et non la librairie déjà compilée via cabal, et va recompiler toute la librairie.

    C'est la seule façon pratique de faire que j'ai trouvée. Le truc est que je ne sais pas si je dois vraiment procéder comme ça (je n'ai rien vu sur le net disant de faire comme ça, par exemple).

    A part ça, je n'arrive toujours pas à avoir une lib et un exécutable en dépendant dans le même .cabal...

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •