Подтвердить что ты не робот

Лучшая практика использования слабо модифицирующего модуля от CPAN?

Я использую DBI и DBD:: SQLite, и теперь я бы хотел использовать функцию R * Tree для SQLite. Поскольку эта функция не компилируется DBD:: SQLite по умолчанию, я должен добавить переменную -DSQLITE_ENABLE_RTREE=1 в переменную @CC_DEFINE в DBD:: SQLite Makefile.PL. Если я сделаю "perl Makefile.PL && make && make install", все работает нормально на моей машине, но в конечном итоге это необходимо для развертывания/распространения для конечных пользователей.

Что мне делать в таком случае? Должен ли я копировать источник, grep-источник и создавать DBD:: SQLite:: WithRTree? Создайте личную версию DBD:: SQLite 1.31.1 (где 1.31 - это текущая версия DBD:: SQLite)? Возможно, лучший способ?

Все другие дистрибутивы в проекте развертываются/распространяются через непубличное CPAN:: Mini mirror + CPAN:: Mini:: Inject.

4b9b3361

Ответ 1

Мне нужно добавить '-DSQLITE_ENABLE_RTREE = 1' в переменную @CC_DEFINE в DBD:: SQLite Makefile.PL

Вы делаете это неправильно, perl Makefile.PL DEFINE='-DSQLITE_ENABLE_RTREE=1' работает. Это описано в ExtUtils::MakeMaker. Теперь, когда вы это знаете, простое решение, включающее Distroprefs, вероятно, упадет на место.

Ответ 2

Для подобных проблем я установил измененный дистрибутив в отдельный каталог (без изменения имен модулей) и с помощью use lib qw(the/special/directory) или установки $PERL5LIB для скриптов, которые должны использовать расширенный модуль.

Тонкая настройка имени модуля также будет выполнять эту работу, но это звучит намного больше, чтобы сделать и протестировать.

Ответ 3

Вы можете сделать это:

cpan
o conf makepl_arg "DEFINE='-DSQLITE_ENABLE_RTREE=1'"
o conf commit

CPAN затем будет постоянно добавлять DEFINE в начало всех вызовов Makefile.PL.

Итак, это должно быть просто

cpan DBD::SQLite

И ваши параметры makefile должны быть набиты на ваши компилируемые строки