Eu estou trabalhando em um módulo que eu gostaria de ter dois backends, um Module(::PerlArray)
e Module::PDL
(qual posso vai depender Module
). Ambos precisam de acesso a um functions.c/.h
arquivo para construção. Este arquivo tem a lógica complicada necessária para o módulo. Em vez de distribuí-lo separadamente com cada módulo, existe alguma maneira de mantê-lo com o Module::PP
no sistema e, em seguida, adicioná-lo aos sinalizadores de compilação apropriados em EU::MM
ou M::B
(dada a complexidade aqui provavelmente o último)?
Para colocá-lo mais visualmente
--Module--
Module.pm
Module/PerlArray.pm
Module/PerlArray.xs (#include functions.h
#include perlarray_backend.h)
Module/src/functions.c
Module/src/perlarray_backend.c
Module/inc/functions.h
Module/inc/perlarray_backend.h
--Module::PDL--
Module/PDL.pm
Module/PDL.xs (#include functions.h /*from Module*/
#include pdl_backend.h)
Module/src/pdl_backend.c
Module/inc/pdl_backend.h
e a compilação faz funções.o e links. Tenho certeza que posso descobrir como definir as bandeiras adequadamente, mas como posso fazer o módulo manter functions.c
arquivo durante a instalação, e como posso encontrá-lo ao instalar Module::PDL
? Existe alguma localização eu posso colocar o functions.c/.h
?
Respostas:
1 para resposta № 1Você já olhou para o DBI? Ele faz o que você sugere: ele instala alguns arquivos .h que os drivers DBD podem #incluir em seu código XS, bem como uma biblioteca que os drivers DBD podem chamar.
0 para resposta № 2
Os módulos devem ser instalados de forma independente. Ou seja, desde que eu tenha os módulos Perl pré-requisitados instalados (mas não necessariamente ainda em formato de fonte), então deve ser possível instalar todos os módulos em um arquivo tar distribuído sem referência à fonte de qualquer outro módulo.
Você tem opções. Uma é ter um único diretório de origem para criar várias bolas tar distribuídas, e cada uma delas pode ter uma cópia do compartilhamento function.[ch]
na fonte distribuída.
A outra opção principal é agrupar os dois módulos em uma única tarball distribuída.