/ / perl build module with c source de outro módulo - perl, perl-module, xs

módulo de compilação perl com fonte c de outro módulo - perl, perl-module, xs

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 № 1

Você 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.