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

Я использую DBI и DBD::SQLite, и теперь я хотел бы использовать функцию R*Tree в SQLite. Поскольку эта функция не компилируется DBD:: SQLite по умолчанию, я должен добавить -DSQLITE_ENABLE_RTREE=1 к @CC_DEFINE переменная в DBD::SQLite's 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.

3 ответа

Решение

Я должен добавить '-DSQLITE_ENABLE_RTREE=1' к переменной @CC_DEFINE в DBD::SQLite's Makefile.PL

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

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

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

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

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

Затем CPAN навсегда добавит этот DEFINE в начало всех ваших вызовов Makefile.PL.

Так должно быть

cpan DBD::SQLite

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

Другие вопросы по тегам