<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'>
tentei com <pre>ExtUtils::MakeMaker e Module::Install mas o Makefile saia com algum erro, dai bati cabeça e consegui o tar.gz com o Dist::Zilla.</pre><br><div><div id="SkyDrivePlaceholder"></div><hr id="stopSpelling">From: guedes_1000@hotmail.com<br>To: rio-pm@pm.org<br>Date: Sun, 3 Jun 2012 23:29:56 +0000<br>Subject: Re: [Rio-pm] MakeFile<br><br>

<style><!--
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Tahoma;}

--></style>
<div dir="ltr">
<b>Bem</b> meu arquivo ficou assim:<br>##################################################################<br>use inc::Module::Install;<br> <br>name    'P50Tools';<br>all_from  'lib/P50Tools.pm';<br><br>abstract 'This distribution compose a tools to work with pen-test, but just to study';<br>author 'Aureliano Guedes <ACPGUEDES@cpan.org>';<br>version '0.5';<br>license 'perl';<br>perl_version '5.006';<br><br>requires 'LWP::UserAgent' => 0;<br>requires 'HTTP::Request' => 0;<br>requires 'Net::RawIP' => 0;<br>requires 'Moose' => 0;<br>requires 'common::sense' => 0;<br><br>recommends 'LWP::Simple' => 0;<br> <br>WriteAll;<br>#######################################################################<br><br>O problema é que quando executei o Makefile deu erro, em seguida não pude executar o make manifest nem o make dist.<br><br><br><br><div><div id="ecxSkyDrivePlaceholder"></div>> Date: Sun, 3 Jun 2012 18:22:57 -0300<br>> From: breno@rio.pm.org<br>> To: rio-pm@pm.org<br>> Subject: Re: [Rio-pm] MakeFile<br>> <br>> 2012/6/3 Alexei Znamensky <russoz@gmail.com>:<br>> ><br>> ><br>> > 2012/6/3 Stanislaw Pusep <creaktive@gmail.com><br>> >><br>> >> Concordo com ambos :)<br>> >> Alexei, o seu tutorial sobre Dist::Zilla me poupou algumas horas de<br>> >> tarefas repetitivas. Mas antes disso, eu escrevia Makefile.PL manualmente.<br>> >> Isso me fez passar menos raiva com a (falta de) documentação do<br>> >> Dist::Zilla. Ele é uma típica coisa "como não pensei nisso antes", tal qual<br>> >> "set -o vi" no Bash :P.<br>> >> É prático para quem conhece o bé-a-bá, mas pouquíssimo didático.<br>> ><br>> ><br>> > Então, ao invés de fazer as coisas como se fazia em 1997, ou se criar um<br>> > novo, por que não melhorar o que falta no Dist::Zilla (incluindo<br>> > documentação, que eu concordo, é um lixo) para podermos nos esquecer de vez<br>> > dos detalhes sórdidos?<br>> ><br>> <br>> Acho que são problemas distintos. O Dist::Zilla foi criado para<br>> facilitar a criação de novas distribuições do zero, bem como a<br>> atualização dessas distribuições dentro do seu workflow (git, cpan,<br>> etc). Isso envolve a geração automática de um montão de coisas,<br>> inclusive de um Makefile.PL usando o builder que você escolher no seu<br>> ~/.dzil/profile, o que é *muito* legal. Mas...<br>> <br>> Minhas críticas quanto ao Dist::Zilla são muito simples:<br>> <br>>    * Ele altera o seu código fonte, o que para mim dificulta a<br>> depuração de bugs ("erro na linha X" e lá vamos nós abrir a versão<br>> instalada pra achar o bug e o original para consertá-lo);<br>> <br>>    * Com arquivos auto-gerados (incluindo testes e Makefile.PL), ele<br>> dificulta a colaboração de autores, que precisam instalar o Dzil e<br>> todos os plugins que você usa no seu projeto, do contrário não vão<br>> conseguir testar o patch que fizeram pois não dá pra montar a sua<br>> distribuição. Isso é facilmetne resolvido distribuindo o Makefile.PL<br>> auto-gerado junto com a sua distribuição, mas não vejo isso acontecer;<br>> <br>>    * A geração de stubs de documentação genérica aparentemente<br>> desestimula autores a escrever documentação decente; Há um módulo<br>> muito bacana chamado Pod::Plexus sendo desenvolvido pelo Rocco Caputo,<br>> mas ainda assim o problema persiste;<br>> <br>>    * A quantidade boçal de plugins e configurações acaba estimulando a<br>> criação de bundles com plugins específicos de um autor. Se vc vai<br>> contribuir num projeto do Russo e vê um dist.ini contendo [@RUSSOZ], o<br>> que que isso faz? E se um dos plugins (que são específicos de cada<br>> autor) não funcionar no seu sistema? Temos aí um caso em que o próprio<br>> Dist::Zilla foi vítima de facilitadores para criação de configurações<br>> padrão;<br>> <br>>    * O dzil é muito voltado para subir módulos no CPAN e de fato é<br>> literalmente um comando para subir a nova versão. Mas isso acaba, do<br>> meu ponto de vista, facilitando a publicação equivocada de módulos, o<br>> que é particularmente preocupante se vc não quer essa distribuição no<br>> CPAN ou se ela é uma distribuição delicada/popular e vc precisa de uma<br>> certa garantia de qualidade ou pode quebrar sem querer o código dos<br>> outros. Tudo isso pode ser resolvido tomando cuidado e com boas<br>> práticas de desenvolvimento, mas exigem treinamento e disciplina.<br>> <br>> Para o problema em questão ("como gerar uma distribuição perl"), a<br>> criação do Makefile.PL usando a API do Module::Install me parece ser<br>> mais fácil e com uma curva de aprendizado muito menor que a<br>> criação/configuração do dzil.ini. Mas podemos concordar em discordar<br>> :P<br>> <br>> Dito isso, continuo afirmando que o Dist::Zilla é uma ótima solução<br>> para quem tem os problemas que ele se propõe a corrigir. Da minha<br>> parte, prefiro usar a combinação "module-starter" e "cpan-upload" =)<br>> <br>> <br>> []s<br>> <br>> -b<br>> <br>> >><br>> >><br>> >> ABS()<br>> >><br>> >><br>> >><br>> >><br>> >> 2012/6/3 Alexei Znamensky <russoz@gmail.com><br>> >>><br>> >>><br>> >>> 2012/6/3 breno <breno@rio.pm.org><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>> >>><br>> >>> Ao contrário do Garu, eu não des-recomendo o Dist::Zilla. Eu acho que é<br>> >>> uma ferramenta fantástica para esconder do desenvolvedor de distribuições os<br>> >>> detalhes de um build. Ao invés de tentarmos difundir ao máximo os detalhes,<br>> >>> para que todos - teoricamente - saibam o que fazer quando houver um<br>> >>> problema, acho que é muito mais saudável para todos que os detalhes sujos<br>> >>> fiquem o mais escondidos e automatizados o possível, simplificando a vida de<br>> >>> todos, mas principalmente de quem está começando.<br>> >>><br>> >>> Filosofando um pouco mais sobre o assunto, na rabeira de uma longa<br>> >>> conversa que eu e o Breno tivemos por telefone outro dia, eu fico pensando<br>> >>> que "More Than One Way To Do It" é muito bom como possibilidade, como para<br>> >>> ser usado em caso de exceção. Não deveria ser a regra. É muito bom que haja<br>> >>> 2,3,4, 5 formas diferentes de expressar orientação a objeto, contanto que<br>> >>> uma delas fosse uma "regra" e as outras fossem casos de exceção, aplicados<br>> >>> para necessidades específicas (e de preferência bem definidas, se não for<br>> >>> pedir muito). É muito bom estarmos todos produzindo e usando código livre, e<br>> >>> se eu quiser mudar algo eu posso simplesmente alterar e fazer o que eu<br>> >>> quiser, mas ó céus cada módulo que eu for fuçar é uma caixinha de surpresas.<br>> >>> Uns são feitos em Moose, outros em Mouse, tem um novo agora que eu nem<br>> >>> gravei o nome, tem os caras que fazem o bless na mão, e tem os caras que<br>> >>> fazem magia negra. Ou seja, se eu quiser ser um bom (=bondoso, cooperativo,<br>> >>> ativo, colaborativo, etc..) programador Perl, eu preciso ser fluente em uns<br>> >>> 5 ou 6 tipos diferentes de expressar a mesma idéia. Ao invés de poder contar<br>> >>> que algo vai ser de um jeito (ou de outro), e seguir adiante, e produzir 5<br>> >>> ou 6 idéias novas.<br>> >>><br>> >>> Fala-se, volta e meia, sobre produtividade em Perl e em Java, o<br>> >>> boilerplate code em Java é muito grande, etc.., mas toda vez que eles<br>> >>> (javeiros) precisam mexer em código dos outros, existe um padrão mínimo de<br>> >>> consistência esperado (claro, sempre há quem ferre com isso, em qualquer<br>> >>> idioma). Enquanto que, mexer em código dos outros, em Perl, como eu disse, é<br>> >>> um Kinder Ovo. You never know what you gonna get. Talvez esse seja o motivo,<br>> >>> na minha humirde opinião, pelo qual, eu percebo mais programadores Perl no<br>> >>> perfil "lobo solitário" do que em Java, por exemplo. É mais fácil às vezes<br>> >>> fazer um novo que entender o dialeto que o outro cara utiliza.<br>> >>><br>> >>> my $0.02;<br>> >>><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,<br>> >>>> > 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<br>> >>>> >> uma<br>> >>>> >> pergunta.<br>> >>>> >><br>> >>>> >> Quando eu tenho varios modulos que na verdade sao dependencia de<br>> >>>> >> 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>> >>><br>> >>><br>> >>><br>> >>><br>> >>> --<br>> >>> Alexei "RUSSOZ" Znamensky | russoz EM gmail com | http://russoz.org<br>> >>> GPG fingerprint = 42AB E78C B83A AE31 7D27  1CF3 C66F B5C7 71CA 9F3C<br>> >>> http://www.flickr.com/photos/alexeiz | http://github.com/russoz<br>> >>> "I don't know... fly casual!" -- Han Solo<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>> ><br>> ><br>> ><br>> > --<br>> > Alexei "RUSSOZ" Znamensky | russoz EM gmail com | http://russoz.org<br>> > GPG fingerprint = 42AB E78C B83A AE31 7D27  1CF3 C66F B5C7 71CA 9F3C<br>> > http://www.flickr.com/photos/alexeiz | http://github.com/russoz<br>> > "I don't know... fly casual!" -- Han Solo<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>
<br>_______________________________________________
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm</div>                                    </div></body>
</html>