[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