Модуль сборки perl с исходным кодом c из другого модуля
Я работаю над модулем, который я хотел бы иметь два бэкэнда, 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 ответа
Вы смотрели на DBI? Он делает то, что вы предлагаете: он устанавливает некоторые файлы.h, которые драйверы DBD могут #include включить в свой код XS, а также библиотеку, которую могут вызывать драйверы DBD.
Модули должны быть установлены отдельно. То есть, если у меня установлены все необходимые модули Perl (но они не обязательно лежат в исходной форме), тогда должна быть возможность установить все модули в один распределенный tar-файл без ссылки на источник для любого другого модуля.
У вас есть варианты. Один из них заключается в том, чтобы один исходный каталог создавал несколько распределенных tar-шариков, и каждый из них мог иметь копию общего ресурса. function.[ch]
в распределенном источнике.
Другой основной вариант - объединить оба модуля в один распределенный tar-шар.