Ir para conteúdo
  • Cadastre-se

dev botao

Compilação Cruzada Linux para Windows


  • Este tópico foi criado há 1458 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Recentemente comecei a estudar os códigos do projeto ACBR, mas precisei alterar uma série de coisas para que funcionasse em linux, dentre elas:
1) alteração do padrão do arquivo para UTF8, por exemplo, a função tiraacentos:

function TiraAcentos( const AString : String ) : String ;
const
  SearchFor='ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ';
  Change_To  ='AAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy';
var
   subtext:string;
   s1:integer;
   LengLoop,LengTxt,posx:longint;
begin
   result:='';
   LengTXT:=Length(AString);
   LengLoop:=1;
   while LengLoop<=LengTxt do begin
     case AString[LengLoop] of
       #000..#191: s1:=1;
       #192..#223: s1:=2;
       #224..#239: s1:=3;
       #240..#247: s1:=4;
       #248..#251: s1:=5;
       #252..#254: s1:=6;
       #255      : s1:=7;
     end;
     if s1=1 then
       result:=result+AString[LengLoop]
     else begin
       subtext:=copy(AString,LengLoop,s1);
       posx:=UTF8Pos(subtext,SearchFor);
       if posx>0 then result:=result+Change_To[posx]
       else if subtext='ß' then result:=result+'ss'
       else if subtext='æ' then result:=result+'ae'
       else if subtext='Æ' then result:=result+'AE'
     end;
     LengLoop:=LengLoop+s1;
   end
end;                    

2) Salvar os arquivos em formato UTF8:
Sim, os arquivos fontes estão gravados no formato ISO8859-15: formato obsoleto anterior ao unicode.

3) Acrescentar alguns arquivos aos pacotes, e colocar diretivas de compilação nos arquivos:
Pacotes como ACBrDFeComum, precisam do arquivo para ACBrDFeWinCrypt.pas, mas esse não está na incluído no pacote, apenas no caminho de pesquisa.
Quando se instala esse pacote no Lazarus para linux, ele não é incluído, por conta da diretiva de compilação {$IfDef MSWINDOWS}, mas na compilação cruzada, ele é necessário, e não consegue ser localizado. Solução, incluir o arquivo no pacote e colocar as diretivas de compilação no arquivo ACBrDFeWinCrypt.pas,

Posto o acima, pergunto:
1) A Comunidade ACBr tem interesse em manter a compatibilidade com lazarus para linux, ou será necessário criar um fork?
2) Em caso de fazer um FORK funcional para Linux com compilação cruzada para FreeBSD, Windows e Solaris, como faço para obter os registros de alterações/inclusões com o intúito de manter um mínimo de compatibilidade com os componentes ACBr?
3) Em caso de interesse em criar compatibilidade com o linux e o crosscompile, quem será o contato para que se envie as alterações?
4) Não uso Delphi, e vejo que há muito interesse em manter a compatibilidade com o D7, apesar dele  não suportar Unicode. Há muito que já se havia anunciado o término de suporte do ACBr ao D7, mas isso ainda não ocorreu. Em caso de não ser criado um fork para compatibilidade Linux, será necessário criar um fork para manter a compatibilidade com o D7?

Link para o comentário
Compartilhar em outros sites

  • Fundadores

De qual IDE você está falando ?  Eu uso o ACBr com Lazarus em Linux 64 bits, a anos...

3 horas atrás, bylaardt disse:

1) alteração do padrão do arquivo para UTF8, por exemplo, a função tiraacentos:

2) Salvar os arquivos em formato UTF8:
Sim, os arquivos fontes estão gravados no formato ISO8859-15: formato obsoleto anterior ao unicode.

O ACBr usa CP1252 para ser compatível com D7.. isso não será alterado em curto prazo... e nem é necessário... Todos as Strings acentuadas do ACBr são tratadas pelo método ACBrStr() que converterá para UTF8 ou UTF16 (conforme a IDE)

3 horas atrás, bylaardt disse:


3) Acrescentar alguns arquivos aos pacotes, e colocar diretivas de compilação nos arquivos
Pacotes como ACBrDFeComum, precisam do arquivo para ACBrDFeWinCrypt.pas, mas esse não está na incluído no pacote, apenas no caminho de pesquisa.

Isso é proposital, pois o ACBr é multiplataforma... a Unit que você citou... ACBrDFeWinCrypt.pas, jamais compilaria no Linux (pois invoca a API do Windows)

 

3 horas atrás, bylaardt disse:

1) A Comunidade ACBr tem interesse em manter a compatibilidade com lazarus para linux, ou será necessário criar um fork?

O ACBr sempre funcionou em Lazarus e Linux.. nosso aplicativo "DJPDV" usa 100% do ACBr e pode ser compilado com Lazarus no Linux 64

Se mesmo assim achar necessário... fique a vontade para fazer um Fork... desde que respeite a licença original do projeto...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Oi Daniel,
O problema ocorre quando faço a compilação cruzada de linux para windows.
quanto ao "jamais compilaria no linux". sim ele compila no linux: para windows, através de compilação cruzada, com algumas pequenas alterações.

Um fork seria uma solução, mas parece-me que a preferência será escrever as rotinas do zero para evitar um inchaço (code bloat).

Em caso de reaproveitamento de parte dos código: sim, a licença será respeitada, apesar de preferir escrever meus códigos como domínio publico.

Meu foco é na administração de condomínios, e a exigência da vez é o Reinf, e por isso comecei a estudar os padrões/códigos do ACBr.

Até então, ouvia falar do ACBr mas nunca tive uma necessidade real em usá-lo, mas sempre me foi bem recomendado, e agora, estudando seus códigos, vejo o quão eles avançados eles estão.
 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Por favor descreva melhor o problema de usar CP1252 em compilação cruzada... (não compreendo como isso pode ser um problema)

Em relação as Units que entrarão ou não na compilação... basta ajustar os IFDEFs... talvez alguma nova diretiva possa resolver isso...

Não há nos fontes do ACBr algo como {$IFDef LINUX}  (pois isso não seria compatível com a compilação em Mac)... mas há várias diretivas como {$IfDef MSWINDOWS}... provavelmente nesse cenário de Cross compiling  que você descreveu, ela permaneça desligada... e com isso vc tem problemas... 

experimente adicionar no final do ACBr.INC algo como:

{$IfDef Win32Compiler}   // Troque Win32Compiler por alguma diretiva, que você tenha certeza que esteja ligado no cenário de compilação cruzada
   {$DEFINE MSWINDOWS}
{$EndIf}

Eu acho que criar um Fork apenas para isso seria um esforço desnecessário...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Quanto ao ACBr.inc, ele está correto, somente converti para UTF8. MSWINDOWS precisa estar definida na compilação cruzada.
Mas corrigi usando as diretivas MSWINDOWS em arquivos inteiros dos fontes.
Em compilação cruzada de linux para windows, a diretiva MSWINDOWS precisa estar definida, mas os arquivos que você diz que "não compilariam em linux" precisam ser compilados, mas eles não estão instalados nos pacotes, apenas apontados pelo diretório.

As únicas rotinas que eu estou estudando e possivelmente precisarei são as classes para a assinatura e transmissão do REINF:

  • TACBrDFe
  • TWebServices

Para gerar os arquivos, eu uso as classes da unit DOM.
Mas para que essas duas classes (assinatura e transmissão) funcionem, precisei instalar os pacotes:

  • ACBrComum
  • ACBrDiversos
  • ACBrDFeComum
  • laz_synapse (removendo o synapse original)
  • PCNComum

Para conseguir instalar a ACBrDiversos, precisei adequar algumas funções, dentre elas a TiraAcentos, e excluir a função tiraacento, conforme descrito acima.
Incluir o arquivos em pacotes, e encher de diretivas de compilação e alterar todos os arquivos com acentuação gráfica para UTF8.
Minha solução, por hora, é estudar o código e ver se ACBr pode vir a ser útil e se a decisão de manter a compatibilidade com o D7 pode vir a aumentar as chances da morte prematura do projeto ACBr.

Sei que Código aberto não fornece garantias, mas ainda assim sempre obtive melhores resultados do que com código proprietário, por isso estou propenso a apostar mais na sobrevida do ACBr do que do D7.
Vou continuar estudando os código. Creio que até o final do mês eu entenda a real dimensão do projeto, mas até lá. não posso simplesmente dizer que decisão tomarei.
Para saber quais as modificações tive que fazer, tente a compilação cruzada de linux para windows do projeto DJPDV. você entenderá o que eu estou tentando dizer.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Por curiosidade resolvi iniciar uma VM em linux e instalar o ambiente em x64

e pra minha surpresa não é que funciona sem mexer uma linha de código.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores
19 horas atrás, bylaardt disse:

Para saber quais as modificações tive que fazer, tente a compilação cruzada de linux para windows do projeto DJPDV. você entenderá o que eu estou tentando dize

Eu sinceramente não compreendi o que você pretende fazer e se deseja ou não submeter alguma sugestão de fontes para a analise...

Um fato, é que não iremos modificar os fontes para UTF8... então se você realmente insistir nesse tipo de modificação eu não posso lhe ajudar... ou acatar suas contribuições...

Boa sorte com o Fork 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Oi Juliomar e Daniel,
Sim, ele funciona para linux, o que não funciona é quando faz a compilação cruzada.
Não irei fazer um Fork. Percebi que o ACBr não me atende no que eu preciso de curto prazo, apenas continuarei estudando o código que, aliás, parabenizo à toda a equipe pelo excelente trabalho.
Gostei muito do projeto, e concordo com o Daniel: Se há motivação para manter a compatibilidade com o D7, mantenha o Código compatível com o D7.
Não há necessidade de manter uma equipe para satisfazer uma necessidade tão pontual.
Eu procurava soluções para o Reinf e optei em usar o WebService ToolKit e fazer  a assinatura pelo xmlsec.
Importante: Minha decisão não foi baseada na falta de qualidade do ACBr, pelo contrário, admiro o trabalho feito aqui, e com uma qualidade muito alta. Minha decisão foi apenas por uma questão de atender a minha necessidade pontual a curto prazo.

Quanto à submeter fontes para a análise. Para converter para UTF8, está mais para um refactoring que um Fork.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 4 meses depois ...
  • Fundadores

Apenas para atualizar o tópico...

Consegui realizar com sucesso um "crosscompile" de Linux 64 (OpenSuse), para Win32..

Havia um pequeno erro de grafia no case de uma Unit no ACBrDFeSSL.pas, o qual já está corrigido no SVN...

  • Curtir 4
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...
  • Este tópico foi criado há 1458 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...