Как я могу `cabal установить` каждый пакет на взломе с помощью специального плагина

Я работаю над собственным плагином ghc< /а>. Чтобы проверить это, я хочу запустить его на каждом пакете hackage. Я сталкиваюсь с двумя трудностями с этим.


Во-первых, мне нужно передать параметр -fplugin=MyPlugin в ghc при установке пакетов. Единственный способ, который я нашел для этого, — создать файл myghc.sh, который содержит:

#!/bin/sh
ghc -fplugin=MyPlugin $@

А затем запустите cabal install --with-compiler=./myghc.sh. Но потом, когда я запускаю эту команду, я получаю сообщение об ошибке

Could not find module 'MyPlugin'
it is a member of the hidden package...

Итак, есть ли специальный флаг, который я могу передать cabal install, чтобы использовать мой плагин без необходимости изменять файл клики каждого пакета?


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

Кажется, что может быть несколько способов сделать это, но вот что я придумал до сих пор. Я хочу, чтобы список хакерских пакетов был упорядочен так, чтобы все зависимости пакета гарантированно стояли перед ним в списке? Затем, когда я запускаю cabal install, я могу передать подключаемому модулю имя устанавливаемого пакета. Поскольку зависимости уже установлены, мне не придется беспокоиться о том, что они будут установлены под неправильным именем.


person Mike Izbicki    schedule 14.09.2015    source источник


Ответы (1)


Я не уверен насчет второй части, но первая часть должна быть возможна с флагом командной строки для кабалы:

cabal install --ghc-option=-fplugin=MyPlugin
person Daniel Wagner    schedule 14.09.2015
comment
Это по-прежнему дает сообщение об ошибке Could not find module ‘MyPlugin’. - person Mike Izbicki; 14.09.2015
comment
@MikeIzbicki Вы можете спросить cabal, какую именно команду ghc он выполняет, установив достаточно высокий уровень детализации. Я рекомендую вам попробовать это, а затем вручную поиграть с вызовом ghc, пока вы не поймете, что нужно изменить, чтобы заставить его работать; тогда мы сможем решить, как заставить cabal вызывать ghc так, как это работает. - person Daniel Wagner; 14.09.2015
comment
Думаю, --ghc-option="-package MyPluginPackage" может сработать. По крайней мере, я не могу придумать конкретной причины, по которой это не сработает (учитывая, что пакет плагинов уже установлен). - person Reid Barton; 15.09.2015
comment
Немного поиграв с песочницами клики, мне удалось заставить это работать, передав флаги package-id и package-db в GHC через флаг -ghc-option клики. - person Mike Izbicki; 15.09.2015
comment
Мне также удалось взломать решение для второй части, создав скрипт, который рекурсивно вызывает cabal install --dry-run. Это не очень эффективно и не использует параллелизм клики, но работает. - person Mike Izbicki; 15.09.2015