2012-12-30 138 views
4

我想安装HTF。不过我cabal install HTF后,我得到这个:用Cabal安装HTF时出现故障

Resolving dependencies... 
Configuring HTF-0.10.0.7... 
Warning: This package indirectly depends on multiple versions of the same 
package. This is highly likely to cause a compile failure. 
package regex-base-0.93.2 requires mtl-2.0.1.0 
package aeson-0.6.0.2 requires mtl-2.1.2 
package HTF-0.10.0.7 requires mtl-2.1.2 
package mtl-2.0.1.0 requires transformers-0.2.2.0 
package transformers-base-0.4.1 requires transformers-0.3.0.0 
package mtl-2.1.2 requires transformers-0.3.0.0 
package monad-control-0.3.1.4 requires transformers-0.3.0.0 
Building HTF-0.10.0.7... 
Preprocessing library HTF-0.10.0.7... 
ghc: could not execute: cpphs 
cabal: Error: some packages failed to install: 
HTF-0.10.0.7 failed during the building phase. The exception was: 
ExitFailure 1 

我试图安装其他版本,但已经得到了不同的问题。例如, 与cabal install 'HTF <= 0.1'我得到如下:

Resolving dependencies... 
Downloading QuickCheck-1.2.0.1... 
Configuring QuickCheck-1.2.0.1... 
Building QuickCheck-1.2.0.1... 
Preprocessing library QuickCheck-1.2.0.1... 
[1 of 8] Compiling Test.QuickCheck (Test/QuickCheck.hs, dist/build/Test/QuickCheck.o) 
[2 of 8] Compiling Test.QuickCheck.Batch (Test/QuickCheck/Batch.hs, dist/build/Test/QuickCheck/Batch.o) 
[3 of 8] Compiling Test.QuickCheck.Utils (Test/QuickCheck/Utils.hs, dist/build/Test/QuickCheck/Utils.o) 
[4 of 8] Compiling Test.QuickCheck.Poly (Test/QuickCheck/Poly.hs, dist/build/Test/QuickCheck/Poly.o) 
[5 of 8] Compiling Debug.QuickCheck.Poly (Debug/QuickCheck/Poly.hs, dist/build/Debug/QuickCheck/Poly.o) 
[6 of 8] Compiling Debug.QuickCheck.Utils (Debug/QuickCheck/Utils.hs, dist/build/Debug/QuickCheck/Utils.o) 
[7 of 8] Compiling Debug.QuickCheck (Debug/QuickCheck.hs, dist/build/Debug/QuickCheck.o) 
[8 of 8] Compiling Debug.QuickCheck.Batch (Debug/QuickCheck/Batch.hs, dist/build/Debug/QuickCheck/Batch.o) 
Registering QuickCheck-1.2.0.1... 
Installing library in /home/xxx/.cabal/lib/QuickCheck-1.2.0.1/ghc-7.4.1 
Registering QuickCheck-1.2.0.1... 
Downloading HTF-0.1... 
Configuring HTF-0.1... 
Building HTF-0.1... 
Preprocessing library HTF-0.1... 
[1 of 8] Compiling Test.Framework.Utils (Test/Framework/Utils.hs, dist/build/Test/Framework/Utils.o) 
[2 of 8] Compiling Test.Framework.Process (Test/Framework/Process.hs, dist/build/Test/Framework/Process.o) 

Test/Framework/Process.hs:45:48: 
    Ambiguous type variable `a0' in the constraints: 
     (Show a0) 
     arising from a use of `show' at Test/Framework/Process.hs:45:48-51 
     (Control.Exception.Exception a0) 
     arising from a use of `Control.Exception.handle' 
     at Test/Framework/Process.hs:45:5-28 
    Probable fix: add a type signature that fixes these type variable(s) 
    In the expression: show e 
    In the first argument of `return', namely 
     `([], show e, error (show e))' 
    In the expression: return ([], show e, error (show e)) 
cabal: Error: some packages failed to install: 
HTF-0.1 failed during the building phase. The exception was: 
ExitFailure 1 

我也得到类似cabal install 'HTF <= 0.9'后的第一个成果。我试过ghc-pkg check,它给了我一个破包的列表。我重新安装了软件包,并重复尝试再次安装HTF,结果相同。

+2

修复包数据库的最可靠的方法是删除包含本地包数据库的主目录中的〜/ .ghc/ /'文件夹。这有效地重置了所有本地安装的软件包(与全球安装的软件包相比,Haskell平台安装的软件包相对而言),但不会混淆任何全局状态。这有助于'cabal'找到一个从依赖关系本地最小值出发的路径,这个最小值是你从安装先前被锁定在某些依赖关系中的包创建的。 –

回答

5

第一个问题是,你有regex-base建对mtl-2.0.1.0,从而

package regex-base-0.93.2 requires mtl-2.0.1.0 
package aeson-0.6.0.2 requires mtl-2.1.2 

HTF将取决于mtl多个版本。这很少起作用。

解决方案将是$ ghc-pkg unregister regex-base。如果ghc-pkg警告说会破坏其他软件包,那么您也必须重建这些软件包。如果手动执行的太多,可以考虑删除整个用户软件包-db(我希望这些软件包都是用户安装的,如果它们是全局安装的,则不能删除整个全局数据库)并重建所有内容与cabal install world

regex-base被删除后,什么都不会取决于mtl-2.0.1.0了,并且依赖关系不应该引起冲突;实际安装HTF之前,您应该检查与

cabal install HTF --dry-run 

如果仍然会有冲突,应该检测它们,你可以通过注销进一步包解决这些问题。

下一个问题是

ghc: could not execute: cpphs 

这看起来就好像你在你的PATH没有cpphs。要么您没有安装它,在这种情况下,您需要在安装HTF之前执行此操作,否则需要将其安装目录添加到PATH