[Rio-pm] MakeFile

breno breno em rio.pm.org
Sábado Junho 2 20:54:00 PDT 2012


Ao contrário do Stan, eu não recomendo o Dist::Zilla. Ou pelo menos
não pra vc que está começando. Pode ser uma ótima ferramenta para
alguns autores, mas se vc não entende a "mágica" que acontece por
trás, pode se confundir e te deixar mais tempo configurando/depurando
as ferramentas em vez de trabalhando no(s) seu(s) próprio(s)
módulo(s).

Respondendo a sua pergunta, os arquivos Makefile.PL existem para a
criação de "distribuições", que podem conter um ou mais módulos (além
de scripts e outros arquivos). Quando vc faz uma distribuição, não tem
problema se os módulos dentro dela dependerem de outro, contanto que
esse outro também esteja dentro da distribuição (mas tenha cuidado com
dependências circulares!).

Há 3 construtores populares:

  * ExtUtils::MakeMaker, a.k.a. EUMM (que vc já citou)
  * Module::Build, a.k.a MB
  * Module::Install, a.k.a. MI

Embora o EUMM esteja no core, o M:I tem uma DSL bem fácil de usar e é
utilizado em projetos de grande porte como Catalyst.

Digamos que vc tenha a seguinte estrutura de módulos:

lib/
lib/MeuModulo.pm
lib/MeuModulo
lib/MeuModulo/Modulo1.pm
lib/MeuModulo/Modulo2.pm

e queira criar uma distribuição chamada "Minha-Dist" contendo isso
tudo. A sintaxe do seu Makefile.PL é muito simples:

---------------8<---------------
use inc::Module::Install;

name    'Minha-Dist';
all_from  'lib/MeuModulo.pm';

WriteAll;
--------------->8---------------

Pronto. Fácil, não? Ao rodar "perl Makefile.PL" ele vai gerar alguns
arquivos pra vc. Depois digite "make manifest" e "make dist" e vc terá
um Minha-Dist-0.01.tar.gz te esperando, pronto pra ser instalado =)

Algumas observações sobre o Makefile.PL acima:

* "name" indica o nome da distribuição. A convenção é que vc use o
mesmo nome do seu módulo base, o principal da sua distribuição (e que
provavelmente a maioria das pessoas vai usar primeiro). No seu caso,
suponho que o melhor "name" para a sua distribuição seria "MeuModulo".

* "all_from" indica de onde o Makefile.PL deve extrair informações
como versão, licença, autor, resumo, etc. Ele extrai essa informação
de variáveis especiais de módulos (como "our $VERSION") e da
documentação - então não esqueça de incluir os campos pertinentes na
documentação (sempre uma boa prática!) ou terá que inclui-los
explicitamente no Makefile.PL.

Digamos que os módulos da sua distribuição dependam dos seguintes
módulos EXTERNOS: File::Spec e Carp. Digamos ainda que, embora não
seja uma dependência direta, se o usuário tiver instalado o módulo
Data::Printer o seu programa consegue fazer alguma outra coisa bacana,
então embora não seja obrigatório vc gostaria de recomendar o
Data::Printer. Adicionar essas dependências no Makefile.PL é simples,
ele fica assim:

---------------8<---------------
use inc::Module::Install;

name    'Minha-Dist';
all_from  'lib/MeuModulo.pm';

requires 'File::Spec' => 0;
requires 'Carp' => 0;

recommends 'Data::Printer' => 0.3;

WriteAll;
--------------->8---------------

O número depois da "=>" indica a versão mínima do módulo, usamos zero
(0) para indicar que qualquer versão serve.

Com isso acho que vc já tem o suficiente. Não esqueça de criar um
diretório "t" na raiz da sua distribuição para colocar os testes de
seus módulos!! Mais sobre o M:I vc encontra na documentação
(https://metacpan.org/module/Module::Install)

Obs: quando criamos um novo módulo, há alguns "boilerplates" que criam
as estruturas e documentações básicas para vc. Eu particularmente
gosto do Module::Starter, com o plugin Module::Starter::PBP (mas eu
modifico os templates em ~/.module-starter/PBP para conter o esqueleto
que uso). Assim, basta escrever na linha de comando:

$ module-starter --module="Meu::Novo::Modulo"

e ele cria tudo para mim.

Quando vc estiver acostumado a criar suas distribuições e entender o
processo, vai começar a ficar preguiçoso. Aí sim, dê uma olhada no
Dist::Zilla e veja se ele é para vc =)


[]s

-b

2012/6/2 Stanislaw Pusep <creaktive em gmail.com>:
> A resposta é: Dist::Zilla.
> Pode parecer chatinho de aprender, mas, uma vez sabendo o básico, criar
> módulo com Makefile.PL completo e suíte de testes é dois palitos!
> Recomendo:
>
> http://sao-paulo.pm.org/artigo/2011/OhnoItsDistZilla
> http://sao-paulo.pm.org/equinocio/2011/set/2
>
> ABS()
>
>
>
> 2012/6/2 Aureliano Guedes <guedes_1000 em hotmail.com>
>>
>> Ola,
>> Monges.
>>
>> Eu estou tentando gerar um MakeFile.PL mas estou com um problema.
>> Eu andei lendo, inclusive alguns materiais do Hernan Lopes mas ficou uma
>> pergunta.
>>
>> Quando eu tenho varios modulos que na verdade sao dependencia de outro
>> modulo.
>> exemplo:
>> MeuModulo.pm,
>> MeuModulo/Modulo1.pm,
>> MeuModulo/Modulo2.pm.
>>
>> Como faco?
>>
>> Nao achei nenhuma opcao no ExtUtils::MakeMaker.
>>
>> Desde ja, obrigado.
>> Att,
>>
>> Aureliano Guedes
>>
>> PS: Desculpem a falta de acentos, o teclado esta desconfigurado.
>>
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm


Mais detalhes sobre a lista de discussão Rio-pm