Harbour++ - Informações, código-fonte e atualizações

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour++ - Informações, código-fonte e atualizações

Mensagem por JoséQuintas »

Outra dúvida, que acho que outros devem ter, ainda mais depois de comentar de HMG Extended:

O fato de usar Harbour++ significa que todas as LIBs terão que ser convertidas pra C++, ou podem ser usadas normalmente apenas recompilando PRGs ?

Lembrei daqueles PRGs que tem fonte C embutido, não sei se pode ser problema.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Harbour++ - Informações, código-fonte e atualizações

Mensagem por marcosgambeta »

JoséQuintas escreveu:Outra dúvida, que acho que outros devem ter, ainda mais depois de comentar de HMG Extended:

O fato de usar Harbour++ significa que todas as LIBs terão que ser convertidas pra C++, ou podem ser usadas normalmente apenas recompilando PRGs ?

Lembrei daqueles PRGs que tem fonte C embutido, não sei se pode ser problema.
Código C não precisa ser convertido para C++. Somente precisa ser compilável em C++.

Pode ser que apareça algum erro ou aviso, sendo necessário então alguma correção ou ajuste, mas a maior parte do código passa sem problemas.

Nestes casos, pode-se usar compilação condicional:

Código: Selecionar todos

#ifdef __cplusplus
// código C++
#else
// código C
#endif
Ou simplesmente fazer a alteração necessária, de forma que o código fique compatível tanto com C quanto com C++.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Harbour++ - Informações, código-fonte e atualizações

Mensagem por marcosgambeta »

Compilação condicional no código xBase pode ser feita desta forma:

Código: Selecionar todos

#ifdef __HARBOURPP__
// estou no Harbour++
#else
// estou no Harbour
#endif
Funciona também em código C/C++.
Atenciosamente,
Marcos Antonio Gambeta
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour++ - Informações, código-fonte e atualizações

Mensagem por JoséQuintas »

Criei um workflow no github, usando mingw 7.3.
Em 32 bits não passou.
Em 64 bits ocorreu alerta no uso de hbmk2 ref. uso de cc1.exe ao invés de g++, mas gerou.
hbpp1.png
hbpp2.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour++ - Informações, código-fonte e atualizações

Mensagem por JoséQuintas »

Não tem segredo fazer isso no repositório.
Criar pasta ".github"
Criar pastsa ".github/workflows"
Nesta última pasta, salvar os projetos YML.

Código: Selecionar todos

#
# create: JoseQuintas/addons/hbpp_0703

name: Harbourpp mingw 7.3

on:
#  push:
  schedule:
   - cron: "15 5 1 * *"
  workflow_dispatch:
    inputs:
      name:
        description: 'Harbour++ mingw 7.3
        x86_64-7.3.0-release-posix-sjlj-rt_v5-rev0'
        default: 'hbpp_0703'
        required: true

jobs:

  Build:
    runs-on: windows-latest
    steps:

    - name: Load Source Code
      env:
         REPO: JoseQuintas/harbourpp-v1
      run: |
         c:
         git clone https://github.com/$env:repo c:\temp\harbourpp --depth 1
         cd \temp\harbourpp

    - name: mingw 7.3
      uses: dawidd6/action-download-artifact@v2
      with:
         workflow: mingw_0703.yml
         workflow_conclusion: success
         name: mingw_0703
         path: c:\temp
         repo: JoseQuintas/addons

    - name: Unzip
      env:
         PATH: c:\program files\7-zip
      run: |
         c:
         md c:\temp\harbour
         md c:\temp\harbour\comp
         7z x -y c:\temp\mingw_0703.7z -oc:\temp\comp

    #- name: Build 32 bits
    #  env:
    #     HB_BUILD_STRIP: all
    #     HB_COMPILER: mingw
    #     HB_INSTALL_PREFIX: c:\temp\harbour
    #     HB_USER_CFLAGS: -std=c++11
    #     PATH: c:\temp\comp\mingw64\bin;c:\temp\harbour\bin
    #  run: |
    #     c:
    #     cd c:\temp\harbourpp
    #     mingw32-make clean install

    - name: Build 64 bits
      env:
         HB_BUILD_STRIP: all
         HB_COMPILER: mingw64
         HB_INSTALL_PREFIX: c:\temp\harbour
         HB_USER_CFLAGS: -std=c++11
         PATH: c:\temp\comp\mingw64\bin;c:\temp\harbour\bin
      run: |
         c:
         cd \temp\harbourpp
         mingw32-make clean install

    - name: Zip
      env:
         PATH: c:\program files\7-zip
      run: |
         c:
         7z a -r c:\temp\hbpp_0703.7z c:\temp\harbour\*.* -xr'!.git' -xr'!.github' -xr'!.hbmk'

    - name: Save
      uses: actions/upload-artifact@v2
      with:
         name: hbpp_0703
         path: c:\temp\hbpp_0703.7z
passo a passo:

indica pra executar o workflow todo dia 1, ou no click no github. está anotado (#) o que executa ao atualizar fonte

Código: Selecionar todos

on:
#  push:
  schedule:
   - cron: "15 5 1 * *"
  workflow_dispatch:
Estou usando diferente do normal, usando a pasta temp, e desprezando o repositório.
Baixa os fontes

Código: Selecionar todos

    - name: Load Source Code
      env:
         REPO: JoseQuintas/harbourpp-v1
      run: |
         c:
         git clone https://github.com/$env:repo c:\temp\harbourpp --depth 1
         cd \temp\harbourpp
um "truque" que usei, tenho o mingw como anexo de outro workflow, aqui baixa

Código: Selecionar todos

    - name: mingw 7.3
      uses: dawidd6/action-download-artifact@v2
      with:
         workflow: mingw_0703.yml
         workflow_conclusion: success
         name: mingw_0703
         path: c:\temp
         repo: JoseQuintas/addons
descompacta o arquivo baixado

Código: Selecionar todos

    - name: Unzip
      env:
         PATH: c:\program files\7-zip
      run: |
         c:
         md c:\temp\harbour
         md c:\temp\harbour\comp
         7z x -y c:\temp\mingw_0703.7z -oc:\temp\comp
gera 32 bits, configurando as variáveis de ambiente e path primeiro
está anotado (#) senão dá erro e para por aí.

Código: Selecionar todos

    #- name: Build 32 bits
    #  env:
    #     HB_BUILD_STRIP: all
    #     HB_COMPILER: mingw
    #     HB_INSTALL_PREFIX: c:\temp\harbour
    #     HB_USER_CFLAGS: -std=c++11
    #     PATH: c:\temp\comp\mingw64\bin;c:\temp\harbour\bin
    #  run: |
    #     c:
    #     cd c:\temp\harbourpp
    #     mingw32-make clean install
gera 64 bits

Código: Selecionar todos

    - name: Build 64 bits
      env:
         HB_BUILD_STRIP: all
         HB_COMPILER: mingw64
         HB_INSTALL_PREFIX: c:\temp\harbour
         HB_USER_CFLAGS: -std=c++11
         PATH: c:\temp\comp\mingw64\bin;c:\temp\harbour\bin
      run: |
         c:
         cd \temp\harbourpp
         mingw32-make clean install
compacta o que foi gerado

Código: Selecionar todos

    - name: Zip
      env:
         PATH: c:\program files\7-zip
      run: |
         c:
         7z a -r c:\temp\hbpp_0703.7z c:\temp\harbour\*.* -xr'!.git' -xr'!.github' -xr'!.hbmk'
salva como anexo do workflow

Código: Selecionar todos

    - name: Save
      uses: actions/upload-artifact@v2
      with:
         name: hbpp_0703
         path: c:\temp\hbpp_0703.7z
É uma pena que esse último não fica visível ao público.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour++ - Informações, código-fonte e atualizações

Mensagem por JoséQuintas »

uma vez salvo o workflow, aparece em "ACTIONS"
workflow.png
Selecionando o workflow tem opção de executar.
E dá pra ver em andamento, ou volta depois pra ver.

Posso mandar como commit.
NÃO tenho certeza se vai aceitar puxar o mingw de outro usuário, mas no meu usuário, com tudo nele, funcionou.

Lembrando: a máquina vém com MSYS2 instalado, e mingw atualizado, é que uso o 7.3.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour++ - Informações, código-fonte e atualizações

Mensagem por JoséQuintas »

Detalhe a mais:

Porque faço em c:\temp e não na pasta do projeto?

porque em \temp o limite de espaço é maior.
deu certo assim, ficou assim.
também funcionam scripts em powershell pra baixar da internet, e outras coisas mais.
é tudo em batch, não temos visão da máquina real.
pode ser máquina windows ou linux, no mesmo workflow, ou em workflows diferentes.
e se colocar várias rotinas, pode rodar todas simultâneas ou uma de cada vez - dependendo de como fizer.

Pra projeto público o único limite é que o batch não pode demorar mais de 8 horas pra completar (se não me engano).
Mas pode ter vários sem problema.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Harbour++ - Informações, código-fonte e atualizações

Mensagem por marcosgambeta »

José,

Muito obrigado pelos testes, exemplos e informações. Conforme o tempo permitir, vou estudar como aproveitar estes recursos no desenvolvimento do projeto.

Com respeito ao erro na compilação 32-bit, experimente esta solução temporária, por favor:

Código: Selecionar todos

set PATH=c:\mingw64\x86_64-w64-mingw32\lib32;c:\mingw64\bin;%PATH%
Ajuste conforme o ambiente de desenvolvimento utilizado.

Visto que o MinGW é 64-bit e o Harbour++ está sendo gerado em 32-bit, os executáveis da pasta bin do Harbour++ precisam achar as dll's 32-bit do MinGW. Se não acharem, dá erro conforme ocorreu com o hbpp.exe.

Pretendo modificar os scripts de compilação para usarem as versões estáticas das bibliotecas, de forma que as dll's do MinGW não sejam mais necessárias.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Harbour++ - Informações, código-fonte e atualizações

Mensagem por marcosgambeta »

Ao testar no Fedora 36, o Harbour++ precisou de alguns ajustes e correções. Foi preciso ajustar diversos casts (de static_cast para reinterpret_cast) e também compatibilizar com mudanças na GNU C Library. Agora está funcionando normalmente.

Caso não consiga compilar na sua distribuição Linux, crie uma entrada no link abaixo descrevendo o problema:

https://github.com/harbourplusplus/harbourpp-v1/issues

Pode escrever em português mesmo. Será revisado o mais breve possível.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Harbour++ - Informações, código-fonte e atualizações

Mensagem por marcosgambeta »

Passando apenas para informar:

O Harbour++ está sincronizado com todas as mudanças do Harbour oficial até a entrada abaixo:

Código: Selecionar todos

2023-07-07 00:07 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * src/vm/classes.c
    ! fixed GPF when object item variable is passed by reference but the object
      is neither instance of standard class nor scalar class
No Windows, pode ser compilado com Visual C++, GCC (MinGW) ou Clang.

Quanto ao BCC, os compiladores clássicos estão descartados por causa do suporte incompleto ou
inexistente ao padrão C++11 e superiores. Mas acredito que será possível usar as versões baseadas em Clang. Espero testar em breve.

Link do projeto no GitHub:
https://github.com/marcosgambeta/harbourpp-v1

Erros de compilação ou outros problemas podem ser relatados no link abaixo:
https://github.com/marcosgambeta/harbourpp-v1/issues

A seção 'Discussions' está aberta para quem tiver dúvidas para esclarecer:
https://github.com/marcosgambeta/harbou ... iscussions
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Harbour++ - Informações, código-fonte e atualizações

Mensagem por marcosgambeta »

A SQLRDD para Harbour++ está disponível no repositório abaixo:

https://github.com/marcosgambeta/sqlrddpp

No WIndows, a compilação está passando sem erros (somente avisos). Mas no Linux, ocorre um erro que ainda vou pesquisar a causa.

O Bison é necessário. Deve ser adicionado no path, conforme exemplo abaixo:

Código: Selecionar todos

set PATH=C:\GnuWIn32\bin;%PATH%
A compilação da biblioteca requer apenas o comando abaixo, executado na pasta source:

Código: Selecionar todos

hbmk2 sqlrdd.hbp
Como é um projeto vindo do xHarbour, requer a contrib xhb. Mas já está incluída no sqlrdd.hbp.

Fiz um pequeno teste de conexão com o MySql e funcionou corretamente. A compilação do teste usou estes parâmetros:

Código: Selecionar todos

hbmk2 test1 -L..\source -lsqlrdd -llibmysql -i..\include xhb.hbc -lodbc32 -lodbccp32 
Note que foi preciso incluir a contrib xhb e as bibliotecas odbc32 e odbccp32 do Windows.

É um trabalho em progresso. Conforme evoluir, alguns detalhes irão mudar.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Harbour++ - Informações, código-fonte e atualizações

Mensagem por marcosgambeta »

Segue o código do teste que usei:

Código: Selecionar todos

#include "sqlrdd.ch"
#include "mysql.ch"

REQUEST SQLRDD
REQUEST SQLEX
REQUEST SR_MYSQL

FUNCTION Main()

   LOCAL cStringDeConexao
   LOCAL nConexao
   LOCAL oSql

   cStringDeConexao := "MySQL=localhost;UID=user;pwd=password;dtb=dbtest;PRT=3306"

   nConexao := SR_AddConnection(CONNECT_MYSQL, cStringDeConexao)

   IF nConexao < 0

      cStringDeConexao := "MySQL=localhost;UID=user;pwd=password;dtb=mysql;PRT=3306"

      nConexao := SR_AddConnection(CONNECT_MYSQL, cStringDeConexao)

      IF nConexao < 0

         ? "Erro de conexao"

         RETURN NIL

      ELSE

         oSql := SR_GetConnection()

         ? "criando a base de dados..."
         oSql:exec("CREATE DATABASE dbtest")

         ? "base de dados criada: dbtest"
         inkey(2)

         SR_EndConnection(nConexao)

         cStringDeConexao := "MySQL=localhost;UID=user;pwd=password;dtb=dbtest;PRT=3306"

         nConexao := SR_AddConnection(CONNECT_MYSQL, cStringDeConexao)

      ENDIF

   ENDIF

RETURN NIL
Lembre-se de trocar "user" e "password" por dados reais.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Harbour++ - Informações, código-fonte e atualizações

Mensagem por marcosgambeta »

marcosgambeta escreveu:A SQLRDD para Harbour++ está disponível no repositório abaixo:

https://github.com/marcosgambeta/sqlrddpp

No WIndows, a compilação está passando sem erros (somente avisos). Mas no Linux, ocorre um erro que ainda vou pesquisar a causa.
Depois de algumas alterações, compilou sem erros (somente avisos) no Ubuntu e no OpenSuse.

Caso alguém tenha problemas na compilação da SQLRDD no Linux, basta informar que tentarei resolver o mais breve possível.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Harbour++ - Informações, código-fonte e atualizações

Mensagem por marcosgambeta »

Mais algumas notas sobre a SQLRDD:

1) O código-fonte será mantido compatível com Harbour e Harbour++.

2) Uma versão exclusiva para o Harbour++ será mantida, futuramente, em paralelo com a versão para Harbour.

Resumindo os requisitos:

Harbour++/Harbour 3.2/Harbour 3.4
C/C++
Windows/Linux

E para quem quiser compilar no Ubuntu, segue um resumo dos passos:

Código: Selecionar todos

sudo apt install bison
sudo apt install unixodbc-dev
git clone htpps://github.com/marcosgambeta/sqlrddpp
cd sqlrddpp
cd source
hbmk2 sqlrdd.hbp
Não deverá ocorrer nenhum erro, mas apenas avisos do compilador.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Harbour++ - Informações, código-fonte e atualizações

Mensagem por marcosgambeta »

A compilação da SQLRDD ficou mais simples:

Código: Selecionar todos

cd sqlrddpp
hbmk2 sqlrddpp.hbp
Note que desta forma não depende mais do Bison.

E para compilar com a SQLRDD:

Exemplo com MySQL

Código: Selecionar todos

hbmk2 <filename> sqlrddpp.hbc -llibmysql
Espero que estas mudanças facilitem o uso da biblioteca.

Conforme o projeto evoluir, planejo eliminar a dependência da contrib/xhb. Mas, por enquanto, ela continua necessária.
Atenciosamente,
Marcos Antonio Gambeta
Responder