happy
的源树包含AttrGrammarParser.ly
和Parser.ly
,alex
的源树包含Scan.x
。然而,据我所知,为了编译happy
,我们需要使用... .ly
将.lhs
文件转换为happy
个文件,并且为了编译alex
我们需要使用... .x
将.hs
文件转换为alex
个文件。
因此,为了编译这两种工具,似乎必须进行一些自举。
每个项目的Setup.lhs
个文件都包含一些模板扩展,但据我所知,不要做任何特别的事情来进行自举。
引导的方式和位置在哪里?
答案 0 :(得分:10)
我看到您正在查看darcs.haskell.org上这些软件包的darcs存储库的源代码树。如果你看一下Hackage上的实际tarball,你会看到一些不同的东西:
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/
所以基本上必要的构建工件随Hackage tarball一起提供。然后Cabal只在构建过程中使用构建工件,从而避免了本地引导的需要。当您为自己的包运行cabal sdist
并且不想依赖happy或alex时,Cabal也知道如何保留这样的构建工件,但最后我检查了它与沙箱,fwiw没有很好的互操作性。< / p>
顺便说一下,亚历克斯和快乐的发展已经转移到了github: