2015-02-04 28 views
10

L'albero di origine per happy contiene AttrGrammarParser.ly e Parser.ly e l'albero di origine per alex contiene Scan.x. Tuttavia, per quanto posso dire per compilare happy, abbiamo bisogno di trasformare i file .ly in file .lhs usando ... happy, e per compilare alex abbiamo bisogno di trasformare i file in file .hs usando ... alex.In che modo Happy e Alex si autointegrano?

Quindi sembra che ci debba essere qualche bootstrap in corso qui per compilare entrambi gli strumenti.

I file Setup.lhs per ciascun progetto contengono alcuni modelli di espansione, ma, per quanto posso dire, non fanno nulla in particolare per eseguire il bootstrap.

Come e dove viene eseguito il bootstrap?

risposta

10

Vedo che si sta osservando l'albero dei sorgenti dei repository di darcs per questi pacchetti su darcs.haskell.org. Se si guardano le tarball reali sul Hackage, vedrete qualcosa di un po 'diverso:

https://hackage.haskell.org/package/alex-3.1.4/src/dist/build/alex/alex-tmp/

https://hackage.haskell.org/package/happy-1.19.5/src/dist/build/happy/happy-tmp/

Quindi, in pratica i manufatti di compilazione necessarie vengono spediti con il tarball Hackage. La cabala quindi utilizza solo le risorse di build durante il processo di generazione, evitando così la necessità di eseguire il boot in locale. Cabal sa anche come preservare tali artefatti di build quando si esegue cabal sdist per i propri pacchetti da cui non si desidera dipendere da happy o alex, ma l'ultima volta che ho controllato questo non interagisce bene con sandboxes, fwow.

A proposito, alex e sviluppo felice si è trasferito in GitHub:

https://github.com/simonmar/alex/

https://github.com/simonmar/happy/

+0

Ah ok. Qualcuno mi aveva dato una fonte per la piattaforma haskell, e la versione che avevano afferrato, per qualche ragione, non conteneva le sorgenti generate. Mi stavo chiedendo perché non si è sviluppato sul mio sistema, e ora lo so. – rampion