2016-08-18 46 views
0

我试图用Haskell Stack建立the code from PCPH。但是,我收到有关Cabal未找到happy的错误。我安装alexhappy虽然(他们在/usr/bin)。Stack/Cabal找不到快乐

setup-Simple-Cabal-1.22.5.0-ghc-7.10.3: The program 'happy' is required but it 
could not be found 

-- While building package parconc-examples-0.4.3 using: 

这里就是栈认为我PATH是:

$ stack exec bash 
$ echo $PATH | tr : '\n' 
/home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3/bin 
/home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3/bin 
/home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/bin 
/home/steshaw/.nix-profile/bin 
/home/steshaw/.nix-profile/sbin 
/usr/local/sbin 
/usr/local/bin 
/home/steshaw/Projects/shelly/bin 
/usr/local/sbin 
/usr/local/bin 
/usr/sbin 
/usr/bin 
/sbin 
/bin 
/usr/games 
/usr/local/games 
/snap/bin 

下面是从stack path输出:

stack-root: /home/steshaw/Projects/shelly/dotfiles/.stack 
project-root: /home/steshaw/Projects/parconc-examples 
config-location: /home/steshaw/Projects/parconc-examples/stack.yaml 
bin-path: /home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3/bin:/home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/bin:/home/steshaw/.nix-profile/bin:/home/steshaw/.nix-profile/sbin:/usr/local/sbin:/usr/local/bin:/home/steshaw/Projects/shelly/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin 
programs: /home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux 
compiler-exe: /home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/bin/ghc 
compiler-bin: /home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/bin 
local-bin: /home/steshaw/.local/bin 
extra-include-dirs: 
extra-library-dirs: 
snapshot-pkg-db: /home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3/pkgdb 
local-pkg-db: /home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3/pkgdb 
global-pkg-db: /home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/lib/ghc-7.10.3/package.conf.d 
ghc-package-path: /home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3/pkgdb:/home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3/pkgdb:/home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux/ghc-7.10.3/lib/ghc-7.10.3/package.conf.d 
snapshot-install-root: /home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3 
local-install-root: /home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3 
snapshot-doc-root: /home/steshaw/Projects/shelly/dotfiles/.stack/snapshots/x86_64-linux/lts-4.2/7.10.3/doc 
local-doc-root: /home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3/doc 
dist-dir: .stack-work/dist/x86_64-linux/Cabal-1.22.5.0 
local-hpc-root: /home/steshaw/Projects/parconc-examples/.stack-work/install/x86_64-linux/lts-4.2/7.10.3/hpc 
local-bin-path: /home/steshaw/.local/bin 
ghc-paths: /home/steshaw/Projects/shelly/dotfiles/.stack/programs/x86_64-linux 

这里是快乐的版本,堆栈发现我的路径:

$ stack exec -- happy -V 
Happy Version 1.19.5 Copyright (c) 1993-1996 Andy Gill, Simon Marlow (c) 1997-2005 Simon Marlow 

Happy is a Yacc for Haskell, and comes with ABSOLUTELY NO WARRANTY. 
This program is free software; you can redistribute it and/or modify 
it under the terms given in the file 'LICENSE' distributed with 
the Happy sources. 

我在Ubuntu 16.04.1 LTS(x86_64)上。

+0

你可以给我们'堆栈exec'的输出echo $ path“'? – epsilonhalbe

+0

该命令不太正常,但让我试一试 –

+0

我认为这是不正确的 - 你开始一个bash,因此你从全局和本地bash配置加载的东西。但我检查了 - 有一个“堆栈路径”命令,应该列出有趣的东西。 – epsilonhalbe

回答

1

两件事情尝试:

  1. 使用解析器对项目通过堆叠安装高兴:

    stack install happy --resolver lts-4.2 
    

当我建parconc-实例与解析LTS-4.2,我发现它 正在使用lts-4.2快照目录中的快乐二进制文件,即使 我已将它安装在PATH中的其他位置。

  • 使用此Setup.hs程序:

    import Distribution.Simple 
    import System.Environment 
    
    main = do 
        args <- getArgs 
        let args' = if elem "configure" args 
           then args ++ [ "--with-happy=/usr/bin/happy" ] 
           else args 
        defaultMainWithArgs args' 
    
  • 而且也一定要在parconc-examples.cabal的build-type:更改为Custom。完全删除.stack-work目录以确保使用新的安装程序重建所有内容。

    +0

    通过'stack'安装'happy'不能解决我的问题。它将相同版本的'happy'安装到〜/ .local/bin中。 –

    +0

    尝试方法#2。在我的系统中,我很高兴在〜/ .stack/snapshots/$ ARCH/$ RESOLVER/bin中为$ RESOLVER的各种值(例如lts-4.2,lts-6.0,...)安装了什么版本的堆栈? – ErikR

    +0

    也只是尝试复制到〜/ .stack /快照/.../ lts-4.2/bin – ErikR