Лучшая практика использования слабо модифицирующего модуля от 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.
Ответы
Ответ 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 должны быть набиты на ваши компилируемые строки