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