Organizando o ambiente: em HARBOUR

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

Organizando o ambiente: em HARBOUR

Mensagem por JoséQuintas »

Primeiro passo: pra uma LIB, defina aonde vão ficar as "saídas" de lib e hbx, tanto faz a pasta da LIB.
Aqui eu uso em harbour\add-ons

1) HBP
O de sempre, lista de fontes, um HBC padrão para a lib, e o direcionamento de saída.

HMG Extended:

Código: Selecionar todos

.\source\*.prg
.\source\*.c
...
-o${hb_install_prefix}\addons\lib\win\${hb_comp}\hmge
hmge.hbc

hbhpdf.hbc
hbzebra.hbc
hbwin.hbc
-hblib
-w1
-es2

-hbx=${hb_install_prefix}\addons\${hb_name}
O que tem de diferente acima?
-o${hb_install_prefix}\addons\lib\win\${hb_comp}\hmge

Isso vai ser substituído pela pasta do Harbour (hb_install_prefix), pelo nome do compilador (hb_comp)
poderia ser usado também o sistema operacional - plataforma (hb_plat)
Significa que as LIBs já vão ser separadas conforme o compilador C: mingw, mingw64, msvc, msvc64, bcc
Uso a pasta add-ons só pro HBX funcionar no hbmk2.
Outra opção seria deixar as LIBs dentro da pasta add-ons, foi feito pra isso.

Como dá pra perceber, para a LIB, tanto faz a pasta, isso funcionaria em qualquer pasta.

2) HBC

Código: Selecionar todos

Description=hmge.hbc
incpaths=.\include
libs=hmge msvfw32 vfw32 hbmisc.hbc hbziparc.hbc hbhpdf.hbc hbct.hbc gtwvg hbwin
libpaths=${HB_INSTALL_PREFIX}\addons\lib\win\${hb_comp}
gui=yes
mt=yes
Mesma coisa da anterior, funciona em qualquer pasta
E busca as LIBs no mesmo lugar aonde o HBP criou, em harbour/add-ons/win/compilador
Aí já indicadas LIBs adicionais, pra rotinas em LIB da HMG Extended

Depois disso, só resta colocar o path da HMG extended dentro do hbmk.hbc, em harbour\bin

A mesma coisa pra HMG 3, HMG Extended, HWGUI, Fivewin, etc.

Tem mais de um Harbour na máquina?
Sem problemas, só configurar o HB_INSTALL_PREFIX, cada harbour\add-ons vai ter sua cópia de LIB compilada por ele.

Tem mais de um compilador C?
Sem problemas, ${hb_comp} já vai deixar cada lib no seu lugar

Vai trocar de Harbour?
Sem problemas, deixe no Harbour só a pasta COMP, e se lembrar, pra não criar de novo, deixe o HBMK.HBC, senão vai ser só criar de novo indicando as pastas das LIBs
Depois vai ser só gerar as LIBs novamente... ia ter que fazer isso mesmo, então apagar add-ons não é problema...

Só isso, nada de BAT, nada de configurar lib, nada..
Um dia as LIBs vão aprender a usar HBMK2 e fazer assim ou até melhor...

HBX:
Apenas uma saída do projeto. No Harbour 3.2 é obrigatório colocar a extensão HBX, no 3.4 é automático.
Com esse arquivo funcionam as pesquisas do HBMK2.
Exemplos:
hbmk2 -find back
...
addons\josequintas.hbc (não instalado):
putilbackup()
putilbackupenvia()
sqlbackup()
addons\oohg.hbc (não instalado):
insertbackspace()
setwindowbackcolor()
_setbackcolor()
_settooltipbackcolor()
d:\temp>hbmk2 test
hbmk2: Processando opções do ambiente: -comp=mingw
hbmk2: Processando arquivo de configuração: d:\harbour\bin\hbmk.hbc
Harbour 3.4.0dev (4529a2baae) (2017-09-17 16:05)
Copyright (c) 1999-2017, https://github.com/vszakats/harbour-core/
Compiling 'test.prg'...
Lines 132, Functions/Procedures 5
Generating C source output to 'C:\Users\joseq\AppData\Local\Temp\hbmk_nbnrag.dir\test.c'... Done.
C:/Users/joseq/AppData/Local/Temp/hbmk_nbnrag.dir/test.o:test.c:(.data+0x48): undefined reference to `HB_FUN_PDFCLASS'
C:/Users/joseq/AppData/Local/Temp/hbmk_nbnrag.dir/test.o:test.c:(.data+0x108): undefined reference to `HB_FUN_TRECHOJUST'
collect2.exe: error: ld returned 1 exit status
hbmk2: Erro: Executando linkeditor. 1
gcc.exe C:/Users/joseq/AppData/Local/Temp/hbmk_nbnrag.dir/test.o C:/Users/joseq/AppData/Local/Temp/hbmk_nbnrag.dir/hbmk_wsntqt.o -m32 -Wl,--nxcompat -Wl,--dynamicbase -Wl,--pic-executable,-e,_mainCRTStartup -mconsole -Wl,--start-group -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtstd -lgtpca -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainstd -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre2 -lhbzlib -Wl,--end-group -otest.exe -Ld:/harbour/lib/win/mingw -Ld:/cdrom/fontes/integra/sefazclass -Ld:/cdrom/fontes/integra/josequintas -Ld:/cvsfiles/allgui/oohg

hbmk2: Hint: Install package josequintas and input file
'addons\josequintas.hbc' for missing Harbour function(s): trechojust(),
pdfclass()
A última linha, indicando em que LIBs podem ser encontradas as funções.
Até repetir aqui:
hbmk2: Hint: Install package josequintas and input file
'addons\josequintas.hbc' for missing Harbour function(s): trechojust(),
pdfclass()
São só alguns dos recursos do HBMK2. Tem muitos que nem sei usar.... rs

Pode até fazer para o seu aplicativo isso, é interessante....

Se é só isso, porque as LIBs complicam e criam BATS?
Pra xHarbour... ou quem faz a LIB não conhece/não usa Harbour...
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

Organizando o ambiente: em HARBOUR

Mensagem por JoséQuintas »

Exceções:
Libraries description
=====================

FWH - FiveWin for Harbour

* Borland BCC 7.0 version: fiveh.lib, fivehc.lib

* Microsoft Visual C++ version: fivehm.lib, fivehcm.lib

* Libraries FiveH32.lib and FiveHC32.lib are to be used with Microsoft
Visual Studio Community 2015.
FiveHCM.lib and FiveHMX.lib are to be used with xHarbour commercial

* MinGW gcc: fivehg.lib, fivehgc.lib

FWHX - FiveWin for xHarbour

* Borland BCC 5.82 version: fivehx.lib, fivehc.lib

* Microsoft Visual C++ version: fivehmx.lib, fivehcm.lib


FWH64 - FiveWin 64 for Harbour/xHarbour 64 bits

* Harbour and Microsoft C 64 version: fiveh64.lib, fivehc64.lib

* Harbour and Borland 7.1 64 bits: five64.a, fivec64.a
Aí complica mesmo, não dá pra atender todas as situações.
A primeira coisa é consertar o nome das LIBs de mingw, que não usa extensão LIB.
Um HBC até ajuda mas não resolve tudo.
Algo como:

{mingw}libs=a b c
{msvc}libs=a b c
{bcc}libs=a b c
{msvc64}libs=a b c

Apesar de diferenciar os compiladores, não poderia diferenciar Visual Studio Express do Visual Studio normal.
Com essa indicação no início, só vai considerar a linha se for o compilador indicado.
Então o HBC vai selecionar a LIB correta a ser usada, conforme o compilador usado, com exceção do que já mencionei.
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

Organizando o ambiente: em HARBOUR

Mensagem por JoséQuintas »

Tem só mais uma coisa importante, que é diferente entre Harbour 3.2 e 3.4:

HB_INSTALL_PREFIX

No Harbour 3.4, essa variável é usada apenas na geração do Harbour.

No Harbour 3.2, essa variável também é usada na compilação, isso pode misturar versões do Harbour, caso tenha mais de uma instalada.
É que o PATH pode estar indicando uma versão, e o HB_INSTALL_PREFIX pode estar indicando outra.

Cuidado com isso.
Infelizmente, o 3.2 não acompanha as atualizações do 3.4, e algumas são muito interessantes, e podem ser importantes.
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/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Organizando o ambiente: em HARBOUR

Mensagem por microvolution »

bom dia!
apesar de eu ser o primeiro a interagir nobre professor, mas, vejo q estou "aquem" de tanto conhecimento...
parabéns e obrigado por compartilhar seus conhecimentos conosco!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Organizando o ambiente: em HARBOUR

Mensagem por JoséQuintas »

Voltando ao assunto....
É questão de pegar o jeito.

Poderíamos em 2018 trabalhar igual, usando HBMK2.

Basicamente é:

\harbour\bin\hbmk.hbc - para configurações do Harbour que vão valer pra todos os aplicativos e testes, para o Harbour em geral, incluindo indicação de pastas de LIBs

\nomedalib\arquivo.hbc - para configurações específicas de uma LIB

projeto.hbp - para configurações do projeto

A partir disso, um projeto de fivewin teria fivewin.hbc, de HMG extended teria hmge.hbc, sem precisar indicar particularidades da LIB no projeto, apenas o HBC

HBP, HBC, HBM... pqp.... são uma lista de arquivos e pastas, e parâmetros pra adicionar/alterar algum recurso.
É o mesmo que os BATs das LIBs costumam fazer, só que mais organizado e mais eficiente.

Compilar algo com fivewin exige algo especial? então é adicionar no fivewin.hbc do fivewin
Compilar algo com HMG Extended exige algo especial? então é adicionar no hmge.hbc da HMG extended
Compilar com Harbour vai sempre compactar o EXE? então é adicionar no hbmk.hbc do harbour\bin
O projeto vai ser fivewin? então é adicionar fivewin.hbc, que vai conter tudo que precisa pra fivewin.
À primeira vista, tudo mais simples e organizado.

Escolher entre compilador C? Isso já é comum no HBP/HBC, e dá pra verificar ${hb_comp} que contém o compilador (msvc, bcc, mingw, mingw64, msvc64, bcc64)
Opção específica de compilador, basta indicar {msvc} e o que só precisa pra msvc.

Quando for compilar, vai usar o que estiver indicado em HB_COMPILER, ou o que estiver indicado em -comp

SET HB_COMPILER=bcc

hbmk2 teste -comp=bcc

Vale a pena a gente padronizar, e todo mundo trabalhar igual, não importa se Harbour 3.2, 3.4 ou XHarbour, ou fivewin, ou HMG Extended, ou seja o que for.

Como a gente quer que o pessoal lá de cima se junte, se nós também não nos juntamos?
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/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Organizando o ambiente: em HARBOUR

Mensagem por microvolution »

show show show!
só ainda é muito complexo pra mim...
mas, é muito organizada a proposta que vc apresenta JQuintas. Parabéns por contribuir conosco sempre!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Responder