[Cascavel-pm] publicação no CPAN dos módulos de acesso à DTS

Adriano Ferreira a.r.ferreira em gmail.com
Quinta Fevereiro 8 10:40:27 PST 2007


On 2/8/07, Nelson Ferraz <nferraz em gmail.com> wrote:
> glasswalk3r em yahoo.com.br wrote:
> > Bem, as dependências foram declaradas corretamente. Só que no CPAN o módulo
> > tem erros apontados do mesmo jeito no campo "CPAN Testers".
> >
> > Isso me leva a perguntar se eu REALMENTE preciso incluir esse teste. Não dá
> > para instalar o Win32::OLE em UNIX sem forçar.
>
> Concordo: se você testa as suas dependências, não precisa se preocupar
> com isso.

Não é tão simples assim. Realmente até hoje não sei qual a maneira
correta de escrever uma distribuição que só deve funcionar em um (ou
um pequeno grupo) de plataformas.

O problema é que embora você declare as suas dependências, smoke
servers puxam automaticamente a sua distribuição e tentam invocar o
mantra "perl Makefile.PL; make; make test". Se você olhar entre os
testes falhados da sua distribuição vai ver que tentaram carregar o
seu módulo em OpenBSD, Linux, FreeBSD e NetBSD e suas dependências.
Não conseguindo, continuou assim mesmo e tentou rodar os testes que
obviamente falharam com a falta de Win32::OLE.

Um problema que eu enxerguei nos relatórios foi:

[ERROR] [Thu Feb  8 07:39:07 2007] This distribution depends on
Win32::OLE, but the latest version of Win32::OLE on CPAN (0.1703)
doesn't satisfy the specific version dependency (0.1704). You may have
to resolve this dependency manually.

que diz que você está pedindo uma versão superior à corrente.

Mas depois que você solucionar isso, os problemas vão continuar
segundo o argumento que expliquei acima.

Para evitar estes falsos reports, eu usei uma abordagem em
Term::Size::Win32 (que depende de Win32::Console e portanto não é
portável) de fazer com que o Makefile.PL não fizesse nada para
sistemas que não satisfizessem "($^O =~ /MSWin/i)".

Era mais ou menos assim
(http://search.cpan.org/~ferreira/Term-Size-Win32-0.203/):

use 5;
use ExtUtils::MakeMaker;

my $is_win32 = ($^O =~ /MSWin/i);

WriteMakefile(

    'NAME'            => 'Term::Size::Win32',
    'VERSION_FROM'    => 'lib/Term/Size/Win32.pm',
    'PREREQ_PM'       => {
        'Win32::Console' => 0,
        'Test::More'     => 0, # build
    },

) if $is_win32;

ExtUtils::MakeMaker::WriteEmptyMakefile( # do nothing if not Win32,
but don't fail
    'NAME'        => 'Term::Size',
    'VERSION_FROM'    => 'lib/Term/Size/Win32.pm',
) unless $is_win32;

Depois acho que por remorso de criar successful reports em outras
plataformas, eu mudei e inclui um cabeçalho com SKIP_ALL para todos
scripts de testes
(http://search.cpan.org/~ferreira/Term-Size-Win32-0.203/). Mas o
efeito é o mesmo. Só testa de verdade em Windows e não falha nos
outros. Pensando bem, este método é até pior porque eu acho que os
módulos são instalados e não vão funcionar.

Adriano Ferreira.


> > Estou começando a achar que criaram rotinas automáticas para testar o
> > módulo... rs
>
> Você já experimentou avaliar o seu código com o perlcritic???
>
> []s
>
> Nelson
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>


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