[Rio-pm] MakeFile

Aureliano Guedes guedes_1000 em hotmail.com
Domingo Junho 3 06:54:38 PDT 2012


Breno e Stan, muito obrigado, eu acho que com isso ja ficou muito bem mais claro a questão do MakeFile.

Darei um feedback se consegui ou não, obrigado.



> Date: Sun, 3 Jun 2012 00:54:00 -0300
> From: breno em rio.pm.org
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] MakeFile
> 
> 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
> _______________________________________________
> 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/9a0ef06c/attachment-0001.html>


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