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

Я использую 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.

Ответы [ 3 ]

11 голосов
/ 12 января 2011

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

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

3 голосов
/ 12 января 2011

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

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

0 голосов
/ 01 июля 2011

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

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

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

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

cpan DBD::SQLite

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

...