2016-03-02 26 views
3

我想在cabal data-files部分包含一個可執行文件,以在我的Haskell程序中將其作爲子進程執行。Cabal:可執行數據文件

該文件在那裏,getDataFileName適用於它,但它缺少可執行位,所以試圖運行它與System.Process.createProcess失敗permission denied

cabal有沒有辦法保存文件的執行權限?有沒有另一種乾淨的方式來解決這個問題

+2

你可能需要用一個自定義的'Setup.hs'文件和一個安裝後的掛鉤來解決它。儘管在這種情況下,我可能只是在調用'createProcess'之前修改你的代碼來設置可執行位,因爲自定義的'Setup.hs'文件可以是PITA –

+0

@MichaelSnoyman:但是我認爲我的代碼不一定有權限設置可執行位,如果它安裝在系統目錄中並由用戶執行 – yairchu

+0

你是對的。在這種情況下,您可能需要使用Setup.hs選項,或使用醜陋的技巧,例如將文件複製到臨時位置,然後設置可執行位。 –

回答

3

所總結的關於陰謀補丁一些discussion,玩的電流(未公開)的狀態是一個應同時使用拷貝的安裝掛鉤,因爲一方或另一方就會得到執行。

編輯:經過一番挖掘,cabal中有一個old ticket on libexec support,如果它被實現,這將是一個非常好的解決方案。

+0

關於第二種解決方案 - @MichaelSnoyman也提出了上面的建議,但我們認爲它不一定有效,因爲應用程序可能由用戶運行而沒有權限更改全局安裝的數據文件。 – yairchu

+0

我編輯了你的答案,以刪除有問題的第二個解決方案,接受第一個答案。 – yairchu