2011-09-01 7 views
6

Sto cercando di mantenere il mio progetto autonomo, con tutte le principali dipendenze delle librerie di terze parti costruite e referenziate all'interno del repository del progetto. Le parti principali di ocaml del mio progetto si basano su ocamlbuild.Come si può usare la toolchain ocamlfind/ocamlbuild con le copie locali dei pacchetti del progetto?

Ma per pacchetti complessi come Batterie incluse, sembra esserci una forte aspettativa che siano collegati a un progetto tramite ocamlfind. ocamlfind sembra presupporre che i pacchetti verranno installati globalmente. (Mi rendo conto che consente alle variabili di ambiente e al suo conf per indicare posizioni alternative, ma fondamentalmente sembra ancora costruito basandosi sul presupposto che i pacchetti siano configurati globalmente - non ha equivalenti di flag -I o -L per estendere dinamicamente il percorso di ricerca per pacchetti, ad esempio. Può essere possibile impostare variabili d'ambiente per sovrascrivere dinamicamente la configurazione ocamlfind per cercare l'albero locale del progetto, ma questo è molto più imbarazzante di semplici argomenti, e sembra anche che sarebbe difficile farlo senza contemporaneamente rimozione reperibilità dei principali pacchetti di sistema nel primario site-lib, che può anche essere necessario.)

che cosa è una strategia di sana per la costruzione e contro la costruzione di non banale 3 ° par pacchetti all'interno di un albero locale del progetto per un progetto che utilizza ocamlbuild?

risposta

3

Utilizzare le variabili di ambiente (o findlib.conf separato) è un modo per andare (e facile). E non richiede la rimozione della rilevabilità dei pacchetti globali, vedere il manuale di riferimento per path e destdir in findlib.conf (OCAMLPATH e OCAMLFIND_DESTDIR variabili di ambiente rispettivamente).

Fondamentalmente è impostato destdir al percorso locale durante l'installazione di pacchetti di progetti-locale e anteporre-path quando li utilizzano (non dimenticate di creare stublibs in destdir (e aggiungerlo al ld.conf in stdlib se si sta costruendo bytecode binari)).

PS Penso che questo sia l'approccio utilizzato in ocsigen-bundler.

Si prega di dire se si verificano problemi (perché sono interessato a utilizzare lo stesso approccio anche).

+0

Non ho ancora finito questa rotta fino ad ora, quindi sono stato lento nel confermare il successo, ma mi aspetto che funzioni. – jrk