<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
Breno e Stan, muito obrigado, eu acho que com isso ja ficou muito bem mais claro a questão do MakeFile.<br><br>Darei um feedback se consegui ou não, obrigado.<br><br><br><br><div><div id="SkyDrivePlaceholder"></div>> Date: Sun, 3 Jun 2012 00:54:00 -0300<br>> From: breno@rio.pm.org<br>> To: rio-pm@pm.org<br>> Subject: Re: [Rio-pm] MakeFile<br>> <br>> Ao contrário do Stan, eu não recomendo o Dist::Zilla. Ou pelo menos<br>> não pra vc que está começando. Pode ser uma ótima ferramenta para<br>> alguns autores, mas se vc não entende a "mágica" que acontece por<br>> trás, pode se confundir e te deixar mais tempo configurando/depurando<br>> as ferramentas em vez de trabalhando no(s) seu(s) próprio(s)<br>> módulo(s).<br>> <br>> Respondendo a sua pergunta, os arquivos Makefile.PL existem para a<br>> criação de "distribuições", que podem conter um ou mais módulos (além<br>> de scripts e outros arquivos). Quando vc faz uma distribuição, não tem<br>> problema se os módulos dentro dela dependerem de outro, contanto que<br>> esse outro também esteja dentro da distribuição (mas tenha cuidado com<br>> dependências circulares!).<br>> <br>> Há 3 construtores populares:<br>> <br>>   * ExtUtils::MakeMaker, a.k.a. EUMM (que vc já citou)<br>>   * Module::Build, a.k.a MB<br>>   * Module::Install, a.k.a. MI<br>> <br>> Embora o EUMM esteja no core, o M:I tem uma DSL bem fácil de usar e é<br>> utilizado em projetos de grande porte como Catalyst.<br>> <br>> Digamos que vc tenha a seguinte estrutura de módulos:<br>> <br>> lib/<br>> lib/MeuModulo.pm<br>> lib/MeuModulo<br>> lib/MeuModulo/Modulo1.pm<br>> lib/MeuModulo/Modulo2.pm<br>> <br>> e queira criar uma distribuição chamada "Minha-Dist" contendo isso<br>> tudo. A sintaxe do seu Makefile.PL é muito simples:<br>> <br>> ---------------8<---------------<br>> use inc::Module::Install;<br>> <br>> name    'Minha-Dist';<br>> all_from  'lib/MeuModulo.pm';<br>> <br>> WriteAll;<br>> --------------->8---------------<br>> <br>> Pronto. Fácil, não? Ao rodar "perl Makefile.PL" ele vai gerar alguns<br>> arquivos pra vc. Depois digite "make manifest" e "make dist" e vc terá<br>> um Minha-Dist-0.01.tar.gz te esperando, pronto pra ser instalado =)<br>> <br>> Algumas observações sobre o Makefile.PL acima:<br>> <br>> * "name" indica o nome da distribuição. A convenção é que vc use o<br>> mesmo nome do seu módulo base, o principal da sua distribuição (e que<br>> provavelmente a maioria das pessoas vai usar primeiro). No seu caso,<br>> suponho que o melhor "name" para a sua distribuição seria "MeuModulo".<br>> <br>> * "all_from" indica de onde o Makefile.PL deve extrair informações<br>> como versão, licença, autor, resumo, etc. Ele extrai essa informação<br>> de variáveis especiais de módulos (como "our $VERSION") e da<br>> documentação - então não esqueça de incluir os campos pertinentes na<br>> documentação (sempre uma boa prática!) ou terá que inclui-los<br>> explicitamente no Makefile.PL.<br>> <br>> Digamos que os módulos da sua distribuição dependam dos seguintes<br>> módulos EXTERNOS: File::Spec e Carp. Digamos ainda que, embora não<br>> seja uma dependência direta, se o usuário tiver instalado o módulo<br>> Data::Printer o seu programa consegue fazer alguma outra coisa bacana,<br>> então embora não seja obrigatório vc gostaria de recomendar o<br>> Data::Printer. Adicionar essas dependências no Makefile.PL é simples,<br>> ele fica assim:<br>> <br>> ---------------8<---------------<br>> use inc::Module::Install;<br>> <br>> name    'Minha-Dist';<br>> all_from  'lib/MeuModulo.pm';<br>> <br>> requires 'File::Spec' => 0;<br>> requires 'Carp' => 0;<br>> <br>> recommends 'Data::Printer' => 0.3;<br>> <br>> WriteAll;<br>> --------------->8---------------<br>> <br>> O número depois da "=>" indica a versão mínima do módulo, usamos zero<br>> (0) para indicar que qualquer versão serve.<br>> <br>> Com isso acho que vc já tem o suficiente. Não esqueça de criar um<br>> diretório "t" na raiz da sua distribuição para colocar os testes de<br>> seus módulos!! Mais sobre o M:I vc encontra na documentação<br>> (https://metacpan.org/module/Module::Install)<br>> <br>> Obs: quando criamos um novo módulo, há alguns "boilerplates" que criam<br>> as estruturas e documentações básicas para vc. Eu particularmente<br>> gosto do Module::Starter, com o plugin Module::Starter::PBP (mas eu<br>> modifico os templates em ~/.module-starter/PBP para conter o esqueleto<br>> que uso). Assim, basta escrever na linha de comando:<br>> <br>> $ module-starter --module="Meu::Novo::Modulo"<br>> <br>> e ele cria tudo para mim.<br>> <br>> Quando vc estiver acostumado a criar suas distribuições e entender o<br>> processo, vai começar a ficar preguiçoso. Aí sim, dê uma olhada no<br>> Dist::Zilla e veja se ele é para vc =)<br>> <br>> <br>> []s<br>> <br>> -b<br>> <br>> 2012/6/2 Stanislaw Pusep <creaktive@gmail.com>:<br>> > A resposta é: Dist::Zilla.<br>> > Pode parecer chatinho de aprender, mas, uma vez sabendo o básico, criar<br>> > módulo com Makefile.PL completo e suíte de testes é dois palitos!<br>> > Recomendo:<br>> ><br>> > http://sao-paulo.pm.org/artigo/2011/OhnoItsDistZilla<br>> > http://sao-paulo.pm.org/equinocio/2011/set/2<br>> ><br>> > ABS()<br>> ><br>> ><br>> ><br>> > 2012/6/2 Aureliano Guedes <guedes_1000@hotmail.com><br>> >><br>> >> Ola,<br>> >> Monges.<br>> >><br>> >> Eu estou tentando gerar um MakeFile.PL mas estou com um problema.<br>> >> Eu andei lendo, inclusive alguns materiais do Hernan Lopes mas ficou uma<br>> >> pergunta.<br>> >><br>> >> Quando eu tenho varios modulos que na verdade sao dependencia de outro<br>> >> modulo.<br>> >> exemplo:<br>> >> MeuModulo.pm,<br>> >> MeuModulo/Modulo1.pm,<br>> >> MeuModulo/Modulo2.pm.<br>> >><br>> >> Como faco?<br>> >><br>> >> Nao achei nenhuma opcao no ExtUtils::MakeMaker.<br>> >><br>> >> Desde ja, obrigado.<br>> >> Att,<br>> >><br>> >> Aureliano Guedes<br>> >><br>> >> PS: Desculpem a falta de acentos, o teclado esta desconfigurado.<br>> >><br>> >> _______________________________________________<br>> >> Rio-pm mailing list<br>> >> Rio-pm@pm.org<br>> >> http://mail.pm.org/mailman/listinfo/rio-pm<br>> ><br>> ><br>> ><br>> > _______________________________________________<br>> > Rio-pm mailing list<br>> > Rio-pm@pm.org<br>> > http://mail.pm.org/mailman/listinfo/rio-pm<br>> _______________________________________________<br>> Rio-pm mailing list<br>> Rio-pm@pm.org<br>> http://mail.pm.org/mailman/listinfo/rio-pm<br></div>                                    </div></body>
</html>