[Rio-pm] MakeFile

Alexei Znamensky russoz em gmail.com
Domingo Junho 3 12:27:31 PDT 2012


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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20120603/e796e541/attachment.html>


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