2015-02-04 14 views
10

Der Quellenbaum für happy enthält AttrGrammarParser.ly und Parser.ly und der Quellbaum für alex enthält Scan.x. Doch soweit ich um happy zu kompilieren sagen kann, müssen wir die .ly Dateien in .lhs Dateien verwandeln mit ... happy und um alex wir mit den .x Dateien in .hs Dateien umwandeln müssen zu kompilieren ... alex.Wie machen sich Happy und Alex in das Boot hinein?

Es scheint also, als müsste hier ein Bootstrapping laufen, um beide Tools zu kompilieren.

Die Setup.lhs Dateien für jedes Projekt enthalten einige Template-Erweiterung, aber, soweit ich das beurteilen kann, nichts tun, um das Bootstrapping zu tun.

Wie und wo wird das Bootstrapping durchgeführt?

Antwort

10

Ich sehe, dass Sie den Quellbaum der Darcs-Repositories für diese Pakete auf darcs.haskell.org betrachten.

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/

Also im Grunde die Build-Artefakte notwendig ausgeliefert werden mit dem Hackage Tarball: Wenn man sich die tatsächlichen tarballs auf Hackage anschauen, werden Sie etwas ein bisschen anders sehen. Cabal verwendet dann nur die Build-Artefakte während des Build-Prozesses und vermeidet so die Notwendigkeit, lokal zu booten. Cabal weiß auch, wie man solche Buildartefakte beibehält, wenn man cabal sdist für eigene Pakete ausführt, die man nicht von Happy oder Alex abhängig machen möchte, aber zuletzt habe ich überprüft, dass dies nicht gut mit Sandboxes funktioniert, fwiw.

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

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

+0

Ah ok:

By the way, alex und glückliche Entwicklung hat zu GitHub bewegt. Jemand hatte mir einen Quellball für die Haskell-Plattform gegeben, und die Version, aus der sie gegriffen hatten, enthielt aus irgendeinem Grund nicht die generierten Quellen. Ich habe mich gefragt, warum es nicht auf meinem System aufgebaut hat, und jetzt weiß ich es. – rampion