我想在cabal的data-files
部分中包含一个可执行文件,以便在我的Haskell程序中作为子进程执行。
文件已经存在,getDataFileName
可以使用它,但是它缺乏可执行位,因此尝试使用System.Process.createProcess
运行它会失败并显示permission denied
。
是否有办法使cabal保留文件的执行权限?还有其他解决方法吗?
如一些对cabal补丁的讨论所总结的那样,目前(未记录)的情况是应该同时使用复制和安装挂钩,因为其中之一将被执行。
编辑:经过一些挖掘,在cabal中存在一个关于libexec支持的旧票据,如果实施了这个票据,它将是一个非常好的解决方案。
Setup.hs
文件和一个 post-install 钩子来解决这个问题。虽然在这种情况下,我可能会修改你的代码,在调用createProcess
之前设置可执行位,因为自定义的Setup.hs
文件可能很麻烦。 - Michael SnoymanSetup.hs
选项,但似乎由于 Cabal 没有调用钩子,目前无法实现 - https://github.com/haskell/cabal/issues/1805 - yairchucopy
钩子而不是install
钩子怎么样? - Michael Snoyman