cabal.project和nix-building中的两个cabal包(lib及其示例prgs)

时间:2017-09-28 13:00:52

标签: haskell cabal nix

我有一个haskell lib X,它具有以下文件结构:

X/src/libxfiles.hs
X/default.nix
X/shell.nix
X/libx.nix
X/libx.cabal
X/cabal.project

X/example/lib/exampleCommon.hs
X/example/ex1/main.hs
X/example/ex2/main.hs
X/example/example.cabal

cabal.project指向libx.cabal,示例/ example.cabal和cabal new-build all在nix-shell中工作。 libx库和示例程序所需的haskell包在libx.nix -file中引入。

为什么这个结构?由于示例程序具有99%的公共代码,并且只有几行是ui-dependend(webkit2gtk等)。早期的版本在示例的主要部分中有标志和CPP,nix-build在结果目录中生成了lib和示例prg。在这个新设置中,cabal new-build在编译器为ghc时工作正常,我的目标是使用ghc生成程序。

早期nix-build使用ghcjs构建lib及其示例程序之一。 目前,nix-build仅生成lib。是否有可能在libx.nix或default.nix中告诉我们还构建一个示例程序,比如ex1?也就是说,要将构建过程告诉cabal new-build ex1,然后像安装lib一样安装结果。

要使用ghcjs来构建针对ghcjs的ex1,可以nix-shell --argstr "compiler" "ghcjs"然后cabal new-configure --ghcjs等等。(因此,在nix-shell之外,nix-build -command是没有做我想做的一切。)

是否需要在示例目录中创建nix文件?由于libx.nix中已经提供了所需的模块,所以这听起来并不吸引人。也就是说,我应该在how to get cabal and nix work together的答案中做些什么吗?

或者github中是否有一个具有类似结构的haskell包可以作为一个例子?

理想的解决方案是nix-build将构建lib及其所有示例程序。这将需要使用不同的构建工具(ghc和ghcjs)。因此,可能的问题是,如何为多包装cabal项目进行nix-setup,其中各个包需要不同的环境,包括编译工具。在理想世界中,默认的nix-build将构建所有,并且用户可以参数化nix-build以构建所选示例或示例等。

似乎在讨论中 cabal issue 4646cabal2nix issue 286可能相关。

0 个答案:

没有答案