[Rio-pm] MakeFile

Stanislaw Pusep creaktive em gmail.com
Domingo Junho 3 12:44:12 PDT 2012


Concordo com ambos :)
Alexei, o seu tutorial sobre Dist::Zilla me poupou algumas horas de tarefas
repetitivas. Mas antes disso, eu escrevia Makefile.PL manualmente.
Isso me fez passar menos raiva com a (falta de) documentação do
Dist::Zilla. Ele é uma típica coisa "como não pensei nisso antes", tal qual
"set -o vi" no Bash :P.
É prático para quem conhece o bé-a-bá, mas pouquíssimo didático.

ABS()



2012/6/3 Alexei Znamensky <russoz em gmail.com>

>
> 2012/6/3 breno <breno em rio.pm.org>
>
>> 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).
>>
>
> Ao contrário do Garu, eu não des-recomendo o Dist::Zilla. Eu acho que é
> uma ferramenta fantástica para esconder do desenvolvedor de distribuições
> os detalhes de um build. Ao invés de tentarmos difundir ao máximo os
> detalhes, para que todos - teoricamente - saibam o que fazer quando houver
> um problema, acho que é muito mais saudável para todos que os detalhes
> sujos fiquem o mais escondidos e automatizados o possível, simplificando a
> vida de todos, mas principalmente de quem está começando.
>
> Filosofando um pouco mais sobre o assunto, na rabeira de uma longa
> conversa que eu e o Breno tivemos por telefone outro dia, eu fico pensando
> que "More Than One Way To Do It" é muito bom como possibilidade, como para
> ser usado em caso de exceção. Não deveria ser a regra. É muito bom que haja
> 2,3,4, 5 formas diferentes de expressar orientação a objeto, contanto que
> uma delas fosse uma "regra" e as outras fossem casos de exceção, aplicados
> para necessidades específicas (e de preferência bem definidas, se não for
> pedir muito). É muito bom estarmos todos produzindo e usando código livre,
> e se eu quiser mudar algo eu posso simplesmente alterar e fazer o que eu
> quiser, mas ó céus cada módulo que eu for fuçar é uma caixinha de
> surpresas. Uns são feitos em Moose, outros em Mouse, tem um novo agora que
> eu nem gravei o nome, tem os caras que fazem o bless na mão, e tem os caras
> que fazem magia negra. Ou seja, se eu quiser ser um bom (=bondoso,
> cooperativo, ativo, colaborativo, etc..) programador Perl, eu preciso ser
> fluente em uns 5 ou 6 tipos diferentes de expressar a mesma idéia. Ao invés
> de poder contar que algo vai ser de um jeito (ou de outro), e seguir
> adiante, e produzir 5 ou 6 idéias novas.
>
> Fala-se, volta e meia, sobre produtividade em Perl e em Java, o
> boilerplate code em Java é muito grande, etc.., mas toda vez que eles
> (javeiros) precisam mexer em código dos outros, existe um padrão mínimo de
> consistência esperado (claro, sempre há quem ferre com isso, em qualquer
> idioma). Enquanto que, mexer em código dos outros, em Perl, como eu disse,
> é um Kinder Ovo. You never know what you gonna get. Talvez esse seja o
> motivo, na minha humirde opinião, pelo qual, eu percebo mais programadores
> Perl no perfil "lobo solitário" do que em Java, por exemplo. É mais fácil
> às vezes fazer um novo que entender o dialeto que o outro cara utiliza.
>
> my $0.02;
>
>
>> 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
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>
>
>
> --
> Alexei "RUSSOZ" Znamensky | russoz EM gmail com | http://russoz.org
> GPG fingerprint = 42AB E78C B83A AE31 7D27  1CF3 C66F B5C7 71CA 9F3C
> http://www.flickr.com/photos/alexeiz | http://github.com/russoz
> "I don't know... fly casual!" -- Han Solo
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20120603/b7205cd4/attachment-0001.html>


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