Как изменить каталоги библиотек в ghc-pkg

Я пытаюсь скомпилировать haskell ghc из исходников. Я пытаюсь настроить свою конфигурацию cabal из папки, отличной от / usr /. С самого начала всегда получается собрать любой пакет.

В какой-то момент (после установки пакета cabal-install) я изменяю свою конфигурацию для cabal, чтобы включить еще одну «библиотеку-каталоги». Затем происходит что-то не так (вероятно, из-за того, что неправильная строка была вставлена ​​в поле "library-dirs" в конфигурации cabal). Итак, я снова пытаюсь перенастроить свой файл конфигурации cabal (я даже удаляю файл конфигурации и пытаюсь очистить кеш пакетов ghc) и параметры поля «library-dirs» поля комментариев, но это все равно терпит неудачу. Я также уже пытался удалить каталог пакетов cabal (каталог, в котором cabal сохраняет кеш о пакетах).

Это результат использования "ghc-pkg check":

Warning: library-dirs: {stripped} doesn't exist or isn't a directory

Это результат прямо сейчас, когда я создаю пакет с помощью cabal или вручную из Setup.hs:

sudo -E  cabal --config-file=/opt/haskell/config/config install hashable -O2  --global --flags="-fllvm" --prefix=/opt/haskell 2>error --upgrade-dependencies --reinstall
Resolving dependencies...
Configuring hashable-1.2.1.0...
Building hashable-1.2.1.0...
Failed to install hashable-1.2.1.0
Last 10 lines of the build log ( /{stripped}/hashable-1.2.1.0.log ):

Data/Hashable/Class.hs:100:15: Warning:
    Literal 15868100553162883236 is out of the Int range -9223372036854775808..9223372036854775807
[2 of 3] Compiling Data.Hashable.Generic ( Data/Hashable/Generic.hs, dist/build/Data/Hashable/Generic.o )

Data/Hashable/Generic.hs:20:1: Warning:
    The import of ‛Bits’ from module ‛Data.Bits’ is redundant
[3 of 3] Compiling Data.Hashable    ( Data/Hashable.hs, dist/build/Data/Hashable.o )
/usr/bin/ld: cannot find  {stripped}: No such file or directory
collect2: error: ld returned 1 exit status

Это файл конфигурации cabal: (все значения по умолчанию удалены)

remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive
remote-repo-cache: /opt/haskell/cabal
world-file: /opt/haskell/cabal/world
extra-prog-path: /opt/haskell/cabal/bin
build-summary: /opt/haskell/cabal/logs/build.log
remote-build-reporting: anonymous
jobs: $ncpus

install-dirs global
  prefix: /opt/haskell/

Кто-нибудь может мне помочь или направить меня? Или, по крайней мере, скажите мне, где ghc на самом деле сохраняет информацию о конфигурации "библиотек-директорий" для неустановленного пакета?

cabal -V
cabal-install version 1.18.0.2
using version 1.18.1.3 of the Cabal library 

ghc -v
The Glorious Glasgow Haskell Compilation System, version 7.9.20140206

Спасибо.


person user555742    schedule 08.02.2014    source источник


Ответы (1)


Я считаю, что это может быть связано с тем, что каждый пакет содержит полный путь к местоположению, когда он был впервые создан. Загляните внутрь. .ghc/YOUR_PLATFORM/package.conf.d (для меня это .ghc/x86_64-darwin-7.6.3/package.conf.d). Вы увидите множество .conf файлов, каждый из которых будет содержать жестко заданные пути:

[...]
import-dirs: /Users/pejvan/Library/Haskell/ghc-7.6.3/lib/pandoc-types-1.12.3.3/lib
library-dirs: /Users/pejvan/Library/Haskell/ghc-7.6.3/lib/pandoc-types-1.12.3.3/lib
[...]
haddock-interfaces: /Users/pejvan/Library/Haskell/ghc-7.6.3/lib/pandoc-types-1.12.3.3/doc/html/pandoc-types.haddock
haddock-html: /Users/pejvan/Library/Haskell/ghc-7.6.3/lib/pandoc-types-1.12.3.3/doc/html

Вы можете либо вручную обновить файлы, чтобы их содержимое указывало на нужное место, либо написать сценарий, который сделает это за вас.

Затем вам нужно обновить файлы package.cache (может потребоваться sudo здесь и там):

pejvan$ ghc-pkg recache

pejvan$ ghc-pkg recache --user

Наконец, убедитесь, что все в порядке: pejvan$ ghc-pkg check

person Pejvan    schedule 15.06.2014