Página 2 de 3

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

Enviado: 06 Jul 2022 02:12
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.

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

Enviado: 06 Jul 2022 13:43
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++.

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

Enviado: 06 Jul 2022 13:46
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++.

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

Enviado: 31 Jul 2022 16:03
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

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

Enviado: 31 Jul 2022 16:11
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.

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

Enviado: 31 Jul 2022 16:14
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.

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

Enviado: 31 Jul 2022 16:22
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.

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

Enviado: 01 Ago 2022 11:17
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.

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

Enviado: 07 Ago 2022 13:47
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.

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

Enviado: 08 Ago 2023 13:15
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

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

Enviado: 17 Ago 2023 11:36
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.

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

Enviado: 17 Ago 2023 12:04
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.

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

Enviado: 18 Ago 2023 06:28
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.

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

Enviado: 21 Ago 2023 20:38
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.

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

Enviado: 22 Ago 2023 09:12
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.