Exemplo para que serve o HBM.
Temos lá na HWGUI:
d:\github\all\hwgui\samples\a.prg
d:\github\all\hwgui\samples\bincnts.prg
d:\github\all\hwgui\samples\buildpelles.prg
d:\github\all\hwgui\samples\colrbloc.prg
d:\github\all\hwgui\samples\dbview.prg
d:\github\all\hwgui\samples\demodbf.prg
d:\github\all\hwgui\samples\demohlist.prg
d:\github\all\hwgui\samples\demohlistsub.prg
d:\github\all\hwgui\samples\fileselect.prg
d:\github\all\hwgui\samples\getupdown.prg
d:\github\all\hwgui\samples\getwinvers.prg
d:\github\all\hwgui\samples\graph.prg
d:\github\all\hwgui\samples\grid_1.prg
d:\github\all\hwgui\samples\grid_2.prg
d:\github\all\hwgui\samples\grid_3.prg
d:\github\all\hwgui\samples\grid_4.prg
d:\github\all\hwgui\samples\grid_5.prg
d:\github\all\hwgui\samples\hello.prg
d:\github\all\hwgui\samples\helpdemo.prg
d:\github\all\hwgui\samples\hexbincnt.prg
d:\github\all\hwgui\samples\hole.prg
d:\github\all\hwgui\samples\icons.prg
d:\github\all\hwgui\samples\iesample.prg
d:\github\all\hwgui\samples\modtitle.prg
d:\github\all\hwgui\samples\nice.prg
d:\github\all\hwgui\samples\nice2.prg
d:\github\all\hwgui\samples\progbars.prg
d:\github\all\hwgui\samples\propsh.prg
d:\github\all\hwgui\samples\pseudocm.prg
d:\github\all\hwgui\samples\shadebtn.prg
d:\github\all\hwgui\samples\stretch.prg
d:\github\all\hwgui\samples\tab.prg
d:\github\all\hwgui\samples\testado.prg
d:\github\all\hwgui\samples\testalert.prg
d:\github\all\hwgui\samples\testbrw.prg
d:\github\all\hwgui\samples\testchild.prg
d:\github\all\hwgui\samples\testfunc.prg
d:\github\all\hwgui\samples\testget1.prg
d:\github\all\hwgui\samples\testget2.prg
d:\github\all\hwgui\samples\testhgt.prg
d:\github\all\hwgui\samples\testhmonth.prg
d:\github\all\hwgui\samples\testimage.prg
d:\github\all\hwgui\samples\testini.prg
d:\github\all\hwgui\samples\testmenubitmap.prg
d:\github\all\hwgui\samples\testrtf.prg
d:\github\all\hwgui\samples\testsdi.prg
d:\github\all\hwgui\samples\testspli.prg
d:\github\all\hwgui\samples\testtray.prg
d:\github\all\hwgui\samples\testtree.prg
d:\github\all\hwgui\samples\testxml.prg
d:\github\all\hwgui\samples\test_bot.prg
d:\github\all\hwgui\samples\trackbar.prg
d:\github\all\hwgui\samples\tstcombo.prg
d:\github\all\hwgui\samples\tstprdos.prg
d:\github\all\hwgui\samples\tstscrlbar.prg
d:\github\all\hwgui\samples\tstsplash.prg
d:\github\all\hwgui\samples\twolistbox.prg
d:\github\all\hwgui\samples\twolstsub.prg
d:\github\all\hwgui\samples\winprn.prg
d:\github\all\hwgui\samples\xmltree.prg
São vários exemplos, pra compilar cada um.
tentativa 1:
d:\github\all\hwgui\samples>hbmk2 a
hbmk2: Processando opções do ambiente: -comp=mingw
hbmk2: Processando arquivo de configuração: d:\harbour\bin\hbmk.hbc
Harbour 3.4.0dev (7bb5566) (2020-12-30 22:11)
Copyright (c) 1999-2020, https://github.com/JoseQuintas/harbour34/
Compiling 'a.prg'...
a.prg:9: error F0029 Can't open #include file 'windows.ch'
hbmk2: Error: Running Harbour compiler (built-in). 1
(d:\harbour\bin\harbour.exe) -n2 a.prg -m -n -w3 -es2 -ge1 -DHBMK_HAS_HBMK=1 -oC:\Users\jmcqu\AppData\Local\Temp\hbmk_8drark.dir\ -id:\harbour\include
Ok, é hwgui, então precisa indicar hwgui, o HBC da hwgui.
Tentativa 2, indicando o hbc:
d:\github\all\hwgui\samples>hbmk2 a ../hwgui.hbc
hbmk2: Processando opções do ambiente: -comp=mingw
hbmk2: Processando arquivo de configuração: d:\harbour\bin\hbmk.hbc
Harbour 3.4.0dev (7bb5566) (2020-12-30 22:11)
Copyright (c) 1999-2020, https://github.com/JoseQuintas/harbour34/
Compiling 'a.prg'...
1800
a.prg:17: warning W0002 Ambiguous reference, assuming memvar 'CIMAGEDIR'
a.prg:17: warning W0002 Ambiguous reference, assuming memvar 'OFONT'
a.prg:23: warning W0001 Ambiguous reference 'OMAINWINDOW'
a.prg:25: warning W0001 Ambiguous reference 'OPANEL'
a.prg:25: warning W0001 Ambiguous reference 'OPANEL'
a.prg:29: warning W0001 Ambiguous reference 'OPANEL'
a.prg:29: warning W0001 Ambiguous reference 'CIMAGEDIR'
a.prg:33: warning W0001 Ambiguous reference 'OMAINWINDOW'
a.prg:38: warning W0001 Ambiguous reference 'OFONT'
a.prg:38: warning W0001 Ambiguous reference 'OFONT'
a.prg:40: warning W0001 Ambiguous reference 'NCOLOR'
a.prg:40: warning W0001 Ambiguous reference 'NCOLOR'
a.prg:40: warning W0001 Ambiguous reference 'NCOLOR'
a.prg:40: warning W0001 Ambiguous reference 'NCOLOR'
a.prg:43: warning W0001 Ambiguous reference 'OMAINWINDOW'
a.prg:67: warning W0001 Ambiguous reference 'OMAINWINDOW'
a.prg:68: warning W0001 Ambiguous reference 'OMAINWINDOW'
a.prg:88: warning W0001 Ambiguous reference 'OMAINWINDOW'
100
a.prg:109: warning W0001 Ambiguous reference 'CIMAGEDIR'
a.prg:113: warning W0001 Ambiguous reference 'CIMAGEDIR'
a.prg:167: warning W0001 Ambiguous reference 'OBMP2'
200
a.prg:201: warning W0001 Ambiguous reference 'CIMAGEDIR'
a.prg:220: warning W0003 Variable 'OSAY' declared but not used in function '158:OPENABOUT'
a.prg:222: warning W0001 Ambiguous reference 'OBMP2'
a.prg:223: warning W0005 RETURN statement with no return value in function
a.prg:227: warning W0001 Ambiguous reference 'OMODDLG'
a.prg:229: warning W0001 Ambiguous reference 'OBMP2'
a.prg:231: warning W0001 Ambiguous reference 'OMODDLG'
a.prg:260: warning W0001 Ambiguous reference 'OFONT'
a.prg:271: warning W0001 Ambiguous reference 'OFONT'
a.prg:272: warning W0001 Ambiguous reference 'OFONT'
a.prg:274: warning W0004 Codeblock parameter 'OB' declared but not used in function 'FILEOPEN'
a.prg:280: warning W0032 Variable 'MYPATH' is assigned but not used in function '249:FILEOPEN'
300
a.prg:345: warning W0001 Ambiguous reference 'NCOLOR'
a.prg:345: warning W0001 Ambiguous reference 'NCOLOR'
a.prg:361: warning W0001 Ambiguous reference 'OTAB'
a.prg:361: warning W0001 Ambiguous reference 'OTAB'
a.prg:362: warning W0001 Ambiguous reference 'OTAB'
a.prg:364: warning W0001 Ambiguous reference 'OTAB'
a.prg:365: warning W0001 Ambiguous reference 'OTAB'
a.prg:367: warning W0001 Ambiguous reference 'OTAB'
a.prg:384: warning W0003 Variable 'O' declared but not used in function '326:DIALOGFROMPRG'
a.prg:384: warning W0003 Variable 'CRES' declared but not used in function '329:DIALOGFROMPRG'
a.prg:393: warning W0003 Variable 'ODLG' declared but not used in function '384:CREATEC'
400
a.prg:400: warning W0007 Function 'SENDEMAIL' does not end with RETURN statement
a.prg:435: warning W0001 Ambiguous reference 'LSUCESS'
a.prg:437: warning W0001 Ambiguous reference 'LSUCESS'
a.prg:440: warning W0001 Ambiguous reference 'LSUCESS'
a.prg:455: warning W0001 Ambiguous reference 'OPROG'
a.prg:455: warning W0001 Ambiguous reference 'OPROG'
a.prg:458: warning W0001 Ambiguous reference 'OCOMBO'
a.prg:463: warning W0003 Variable 'CRES' declared but not used in function '445:TESTPROGRES'
a.prg:463: warning W0007 Function 'TESTPROGRES' does not end with RETURN statement
a.prg:466: warning W0001 Ambiguous reference 'OPROG'
500
No code generated.
hbmk2: Error: Running Harbour compiler (built-in). 1
(d:\harbour\bin\harbour.exe) -n2 a.prg -m -n -w3 -es2 -ge1 -DHBMK_HAS_HBMK=1 -DHBMK_HAS_HWGUI=1 -oC:\Users\jmcqu\AppData\Local\Temp\hbmk_agio7h.dir\ -id:\harbour\include -i..\include
Ok, meu default é tolerância zero, -w3 -es2, tá tudo sem declaração.
Vamos deixar os possÃveis erros pra lá.... vamos usar os parâmetros "que se dane", os parâmetros -w0 -es0
d:\github\all\hwgui\samples>hbmk2 a ../hwgui.hbc -w0 -es0
hbmk2: Processando opções do ambiente: -comp=mingw
hbmk2: Processando arquivo de configuração: d:\harbour\bin\hbmk.hbc
Harbour 3.4.0dev (7bb5566) (2020-12-30 22:11)
Copyright (c) 1999-2020, https://github.com/JoseQuintas/harbour34/
Compiling 'a.prg'...
Lines 4122, Functions/Procedures 19
Generating C source output to 'C:\Users\jmcqu\AppData\Local\Temp\hbmk_w9sw0j.dir\a.c'... Done.
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96w Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
-------------------- ------ ----------- -----------
1897472 -> 653824 34.46% win32/pe a.exe Packed 1 file.
Pronto.
Mas.... são vários fontes.... teria que fazer isso pra todos....
Então, dentro dessa pasta, vamos criar o hbmk.hbm
Isso vai ser aplicado pra tudo que existir na pasta.
copy con hbmk.hbm
../hwgui.hbc
-w0 -es0
Agora vamos compilar de novo....
d:\github\all\hwgui\samples>hbmk2 a
hbmk2: Processando opções do ambiente: -comp=mingw
hbmk2: Processando script local make: hbmk.hbm
hbmk2: Processando arquivo de configuração: d:\harbour\bin\hbmk.hbc
Harbour 3.4.0dev (7bb5566) (2020-12-30 22:11)
Copyright (c) 1999-2020, https://github.com/JoseQuintas/harbour34/
Compiling 'a.prg'...
Lines 4122, Functions/Procedures 19
Generating C source output to 'C:\Users\jmcqu\AppData\Local\Temp\hbmk_9effpj.dir\a.c'... Done.
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96w Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
-------------------- ------ ----------- -----------
1897472 -> 653824 34.46% win32/pe a.exe Packed 1 file.
d:\github\all\hwgui\samples>hbmk2 buildpelles
hbmk2: Processando opções do ambiente: -comp=mingw
hbmk2: Processando script local make: hbmk.hbm
hbmk2: Processando arquivo de configuração: d:\harbour\bin\hbmk.hbc
Harbour 3.4.0dev (7bb5566) (2020-12-30 22:11)
Copyright (c) 1999-2020, https://github.com/JoseQuintas/harbour34/
Compiling 'buildpelles.prg'...
Lines 4254, Functions/Procedures 8
Generating C source output to 'C:\Users\jmcqu\AppData\Local\Temp\hbmk_e237st.dir\buildpelles.c'... Done.
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96w Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
-------------------- ------ ----------- -----------
1855488 -> 642560 34.63% win32/pe buildpelles.exe Packed 1 file.
d:\github\all\hwgui\samples>hbmk2 dbview
hbmk2: Processando opções do ambiente: -comp=mingw
hbmk2: Processando script local make: hbmk.hbm
hbmk2: Processando arquivo de configuração: d:\harbour\bin\hbmk.hbc
Harbour 3.4.0dev (7bb5566) (2020-12-30 22:11)
Copyright (c) 1999-2020, https://github.com/JoseQuintas/harbour34/
Compiling 'dbview.prg'...
Lines 4448, Functions/Procedures 28
Generating C source output to 'C:\Users\jmcqu\AppData\Local\Temp\hbmk_6hkd1x.dir\dbview.c'... Done.
C:/Users/jmcqu/AppData/Local/Temp/hbmk_6hkd1x.dir/dbview.o:dbview.c:(.data+0xad8): undefined reference to `HB_FUN_HB_CODEPAGE_DE858'
collect2.exe: error: ld returned 1 exit status
hbmk2: Erro: Executando linkeditor. 1
gcc.exe C:/Users/jmcqu/AppData/Local/Temp/hbmk_6hkd1x.dir/dbview.o C:/Users/jmcqu/AppData/Local/Temp/hbmk_6hkd1x.dir/hbmk_cfn83h.o -m32 -Wl,--nxcompat -Wl,--dynamicbase -Wl,--pic-executable,-e,_mainCRTStartup -mwindows -static -Wl,--start-group -Wl,-Bstatic -lhwgui_core -lhwgui_procmisc -lhwgui_hbxml -lhwgui_debug -lhbextern -lhbdebug -lhbvmmt -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtstd -lgtpca -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainwin -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre2 -lhbzlib -Wl,-Bdynamic -Wl,--end-group -s -odbview.exe -Ld:/harbour/lib/win/mingw -Ld:/cdrom/fontes/integra/sefazclass -Ld:/cdrom/fontes/integra/libjpa -L../lib/win/mingw
hbmk2: Error: Referenced, missing, but unrecognized Harbour function(s):
HB_CODEPAGE_DE858()
Bom.... infelizmente o Harbour 3.4 foi congelado. Essa codepage surgiu depois. Mais simples deixar todos os exemplos em inglês, que é a codepage default.
d:\github\all\hwgui\samples>hbmk2 xmltree
hbmk2: Processando opções do ambiente: -comp=mingw
hbmk2: Processando script local make: hbmk.hbm
hbmk2: Processando arquivo de configuração: d:\harbour\bin\hbmk.hbc
Harbour 3.4.0dev (7bb5566) (2020-12-30 22:11)
Copyright (c) 1999-2020, https://github.com/JoseQuintas/harbour34/
Compiling 'xmltree.prg'...
Lines 3856, Functions/Procedures 4
Generating C source output to 'C:\Users\jmcqu\AppData\Local\Temp\hbmk_tgon1l.dir\xmltree.c'... Done.
xmltree.prg: In function 'HB_FUN_ANSI2UTF8':
xmltree.prg:198:32: warning: passing argument 1 of 'utfConvert' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
xmltree.prg:175:15: note: expected 'char *' but argument is of type 'const char *'
xmltree.prg: In function 'HB_FUN_UTF82ANSI':
xmltree.prg:205:33: warning: passing argument 1 of 'utfConvert' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
xmltree.prg:175:15: note: expected 'char *' but argument is of type 'const char *'
xmltree.prg: In function 'HB_FUN_OEM2UTF8':
xmltree.prg:215:32: warning: passing argument 1 of 'utfConvert' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
xmltree.prg:175:15: note: expected 'char *' but argument is of type 'const char *'
xmltree.prg: In function 'HB_FUN_UTF82OEM':
xmltree.prg:222:33: warning: passing argument 1 of 'utfConvert' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
xmltree.prg:175:15: note: expected 'char *' but argument is of type 'const char *'
xmltree.prg: At top level:
cc1.exe: warning: unrecognized command line option '-Wno-cast-function-type'
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96w Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
-------------------- ------ ----------- -----------
1863680 -> 646144 34.67% win32/pe xmltree.exe Packed 1 file.
Tudo bem, são rotinas em C, apenas mostrou avisos de alerta, mas compilou normalmente.
Mas... porque rotinas em C pra converter codepage? o Harbour já tem isso.
Então.....
Também não é só ficar copiando fonte, e concordando com fonte.
As LIBs tem muito disso... fonte velho e desatualizado.
Fontes de usuário também, talvez até mais coisas desnecessárias.
Porque tem isso no fonte da LIB?
Sei lá... pode ser pra XHarbour, pode ser que esqueceram lá e ninguém nunca reclamou...
Pode ser que só o mingw é que alerte sobre esses possÃveis problemas...
Pode ser também que as funções da HWGUI precisem disso, afinal, tem funções próprias pra API Windows....
É por isso que eu gosto do Harbour 3.4. Tá tudo padronizado.
O HBMK2 até avisa se algum programador tentar usar certas coisas velhas que devem ser abandonadas.
Ele faz isso para o Harbour, pra evitar que os desenvolvedores do Harbour "estraguem" os fontes !!!!
Digamos que a linguagem C foi atualizada, e um recurso antigo não é mais para ser usado:
Então... o Viktor embutiu essa checagem no HBMK2, sempre que possÃvel, assim o programador já corrige antes que isso se torne problema.
Não é o caso acima, apenas lembrei disso.
Mas é o tal negócio: ele é programador, então já programa a ferramenta de trabalho pra ajudar a conferir as coisas.
Podemos fazer a mesma coisa, como eu já disse algumas vezes.
O programa evitando que a gente faça coisa errada....
E como se faz isso? Ué... somos programadores, é pensar em como fazer...
Mas voltando ao assunto do HBM..... criei um único arquivo HBMK.HBM, e ele vale pra todos os fontes da pasta.
Posso compilar todos os exemplos diretamente, sem precisar parâmetro nenhum.
Relembrando: NADA configurado na máquina pra HWGUI, apenas o HBM na pasta, e o hwgui.hbc indicado no comando (poderia ser num hbp também).