2011-01-11 9 views
10

Ich verwende DBI und DBD :: SQLite, und jetzt möchte ich die R * Tree-Funktion von SQLite verwenden. Da diese Funktion standardmäßig nicht von DBD :: SQLite kompiliert wird, muss ich -DSQLITE_ENABLE_RTREE=1 der Variablen @CC_DEFINE in Makefile.PL von DBD :: SQLite hinzufügen. Wenn ich eine 'Perl Makefile.PL & & machen & & make install' mache, funktioniert alles gut lokal auf meinem Rechner, aber das muss letztlich deployable/distributable für Endbenutzer sein.Best Practice für die Verwendung leicht modifizierender Module von CPAN?

Was soll ich in einem solchen Fall tun? Soll ich die Quelle kopieren, die Quelle grep und einen DBD :: SQLite :: WithRTree erstellen? Erstellen Sie eine private Version von DBD :: SQLite 1.31.1 (wobei 1.31 die aktuelle Version von DBD :: SQLite ist)? Vielleicht ein besserer Weg überhaupt?

Alle anderen Distributionen im Projekt werden über einen nicht öffentlichen CPAN :: Mini Mirror + CPAN :: Mini :: Inject bereitgestellt/verteilt.

Antwort

11

Ich habe eine '-DSQLITE_ENABLE_RTREE = 1' auf die @CC_DEFINE Variable in DBD :: Die SQLite Makefile.PL hinzufügen

Sie dieses Unrecht tun, perl Makefile.PL DEFINE='-DSQLITE_ENABLE_RTREE=1' funktioniert. Dies ist in ExtUtils::MakeMaker dokumentiert. Jetzt, wo Sie das wissen, wird wahrscheinlich eine einfache Lösung mit Distroprefs wahrscheinlich in Kraft treten.

3

Für ähnliche Probleme habe ich die geänderte Distribution in einem separaten Verzeichnis installiert (ohne Änderung von Modulnamen) und use lib qw(the/special/directory) oder Einstellung $PERL5LIB für Skripts, die das erweiterte Modul verwenden müssen.

Tweaking der Name des Moduls würde auch die Arbeit tun, aber das klingt wie viel mehr Arbeit zu machen und zu testen.

+1

Und halten sorgfältige Aufzeichnungen über gestopft, was Sie geändert – justintime

0

Sie können dies tun:

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

CPAN wird dann permanent, dass auf der Vorderseite aller Ihrer Makefile.PL ruft DEFINE hinzuzufügen.

Also, es sollte nur sein

cpan DBD::SQLite 

Und Ihre Make-Datei Optionen sollten auf Ihre Kompilierung Linien

Verwandte Themen