модуль сборки perl с исходным кодом c из другого модуля - PullRequest
1 голос
/ 12 октября 2011

Я работаю над модулем, который хотел бы иметь два бэкэнда: Module(::PerlArray) и Module::PDL (который может будет зависеть от Module).Оба должны иметь доступ к файлу functions.c/.h для сборки.Этот файл имеет довольно сложную логику, необходимую для модуля.Вместо того, чтобы распространять его отдельно с каждым модулем, есть ли какой-то способ сохранить его с Module::PP в системе, а затем добавить его в соответствующие флаги сборки в EU::MM или M::B (учитывая сложность, вероятно, последнюю)?

Чтобы выразить это более наглядно

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

и компиляция создает functions.o и ссылки.Я уверен, что могу понять, как правильно установить флаги, но как я могу заставить Модуль сохранять файл functions.c при установке, и как я могу найти его при установке Module::PDL?Есть ли какое-то место, где я могу разместить functions.c/.h?

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Вы смотрели на DBI? Он делает то, что вы предлагаете: он устанавливает некоторые файлы .h, которые драйверы DBD могут #include в свой код XS, а также библиотеку, которую драйверы DBD могут вызывать.

0 голосов
/ 12 октября 2011

Модули должны устанавливаться независимо.То есть, если у меня установлены необходимые модули Perl (но они не обязательно лежат в исходной форме), тогда можно будет установить все модули в один распределенный файл tar без ссылки на источник для любого другого модуля.

У вас есть варианты.Один из них состоит в том, чтобы один исходный каталог создавал несколько распределенных tar-шариков, и каждый из них может иметь копию общего function.[ch] в распределенном источнике.

Другой основной вариант - объединить оба модуля в одинраспределенный тарный шарик.

...