Página 1 de 1

Primeiros testes HMG 3.4.3

Enviado: 01 Fev 2017 12:24
por JoséQuintas
Uma coisa que não me entra na cabeça:
A primeira coisa pra usar minigui é TENTAR aprender a compilar.

Primeiro eu preciso tentar entender, por enquanto não dá nem pra sugerir mudanças.

Vamos lá....

1) Baixei HMG 3.4.3 que já vém com tudo pronto, incluindo Harbour e mingw

2) Instalei em d:\cvsfiles\thmg

3) Configurei o básico, pra usar tudo que veio nela, do jeito que veio

Código: Selecionar todos

d:\CVSFiles\thmg>set hb
HB_COMPILER=mingw
HB_COMPILER_VER=0503
HB_INSTALL_PREFIX=d:\cvsfiles\thmg\harbour
HB_LANG=EN
PATH=d:\tools\util;d:\cvsfiles\thmg\harbour\bin;d:\cvsfiles\thmg\mingw\bin
4) Compilei um exemplo, modo tradicional (tradicional do Harbour, não tradicional da minigui)

Código: Selecionar todos

d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World>hbmk2 hello.hbp

hbmk2: Processing environment options: -comp=mingw
Harbour 3.2.0dev (r1601151502)
Copyright (c) 1999-2015, http://harbour-project.org/
Compiling 'hello.prg'...
hello.prg(6) Error F0029  Can't open #include file 'hmg.ch'
hbmk2[hello]: Error: Running Harbour compiler (embedded). 1
(d:\cvsfiles\thmg\harbour\bin\harbour.exe) -n2 hello.prg -oc:\temp\hbmk_99rbak.dir\ -id:\cvsfiles\thmg\harbour\include
5) ok, normal de compilação, precisa indicar aonde está esse include, d:\cvsfiles\thmg\include

Código: Selecionar todos

d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World>hbmk2 hello.hbp -Id:\cvsfiles\thmg\include

hbmk2: Processing environment options: -comp=mingw
Harbour 3.2.0dev (r1601151502)
Copyright (c) 1999-2015, http://harbour-project.org/
Compiling 'hello.prg'...
Lines 15530, Functions/Procedures 1
Generating C source output to 'c:\temp\hbmk_lbu1fp.dir\hello.c'... Done.
c:/temp/hbmk_lbu1fp.dir/hello.o:hello.c:(.data+0x38): undefined reference to `HB_FUN__DUMMY'
c:/temp/hbmk_lbu1fp.dir/hello.o:hello.c:(.data+0x48): undefined reference to `HB_FUN__DEFINEWINDOW'
c:/temp/hbmk_lbu1fp.dir/hello.o:hello.c:(.data+0x58): undefined reference to `HB_FUN__ENDWINDOW'
c:/temp/hbmk_lbu1fp.dir/hello.o:hello.c:(.data+0x68): undefined reference to `HB_FUN_DOMETHOD'
collect2.exe: error: ld returned 1 exit status
hbmk2[hello]: Error: Running linker. 1
gcc.exe c:/temp/hbmk_lbu1fp.dir/hello.o c:/temp/hbmk_lbu1fp.dir/hbmk_vccrnn.o    -Wl,--nxcompat -Wl,--dynamicbase -mconsole -Wl,--start-group -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -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 -lhbpcre -lhbzlib   -Wl,--end-group -ohello.exe  -Ld:/cvsfiles/thmg/harbour/lib/win/mingw

hbmk2: Error: Referenced, missing, but unknown function(s): _DUMMY(),
       _DEFINEWINDOW(), _ENDWINDOW(), DOMETHOD()
6) ok, normal de compilação, precisa indicar a lib da minigui: d:\cvsfiles\thmg\lib\hmg.a

Vou só colocar um resumo, pro texto ficar menor

Código: Selecionar todos

d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World>hbmk2 hello.hbp -Id:\cvsfiles\thmg\include -lhmg -Ld:\cvsfiles\thmg\lib

hbmk2: Hint: Add option 'hbhpdf.hbc' for missing function(s):
hbmk2: Hint: Add option 'hbmisc.hbc' for missing function(s): 
hbmk2: Hint: Add option 'hbwin.hbc' for missing function(s):
hbmk2: Hint: Add option 'hbmzip.hbc' for missing function(s)
hbmk2: Hint: Add option 'hbct.hbc' for missing function(s):
7) ok, faltaram essas LIbs, adicioná-las conforme indicado

Código: Selecionar todos

d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World>hbmk2 hello.hbp -Id:\cvsfiles\thmg\include -lhmg -Ld:\cvsfiles\thmg\lib hbhpdf.hbc hbmisc.hbc hbwin.hbc hbmzip.hbc hbct.hbc

hbmk2: Processing environment options: -comp=mingw
Harbour 3.2.0dev (r1601151502)
Copyright (c) 1999-2015, http://harbour-project.org/
Compiling 'hello.prg'...
Lines 15530, Functions/Procedures 1
Generating C source output to 'c:\temp\hbmk_02u2bm.dir\hello.c'... Done.
d:/cvsfiles/thmg/lib/libhmg.a(c_media.o):c_media.c:(.text+0x301): undefined reference to `MCIWndCreateW'
8) Não foi.
Já vi esse erro antes, HMG extended. É um erro normal, deve faltar alguma lib.

9)
Muita gente usa e funciona.
Agora vou ao que é recomendado: vou usar os BATs que vieram.

Apenas estou mostrando aqui o andamento.
Já serve pra outros que forem tentar do mesmo jeito.

Primeiros testes HMG 3.4.3

Enviado: 01 Fev 2017 12:40
por JoséQuintas
Agora vamos ao conteúdo da pasta:

Código: Selecionar todos

d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World>dir
 O volume na unidade D é TRABALHO
 O Número de Série do Volume é 864A-700A

 Pasta de d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World

01/02/2017  11:56    <DIR>          .
01/02/2017  11:56    <DIR>          ..
02/02/2015  21:43               687 build.bat
13/11/2009  09:58                54 hello.hbc
13/11/2009  09:58                12 hello.hbp
30/03/2010  23:07               319 hello.prg
13/11/2009  09:58                 1 hello.rc
30/01/2015  15:43               411 ide.bat
26/10/2009  01:39               117 readme1st.txt
               7 arquivo(s)          1.601 bytes
               2 pasta(s)   15.204.347.904 bytes disponíveis

d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World>
Tem um build.bat, e um hello.hbp

O hello.hbp não deu certo, foi o primeiro que testei, então vamos ao build.bat

Código: Selecionar todos

d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World>build
'FINDSTR' não é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.
Faltou um programa, já achei

Código: Selecionar todos

d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World>dir c:\findst*.* /s/b
c:\Windows\System32\findstr.exe
Modificar o path e acrescentar a pasta do Windows

Código: Selecionar todos

d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World>set PATH=%PATH%;c:\windows;c:\windows\system32

d:\CVSFiles\thmg\SAMPLES\Basics\Hello_World>set path
PATH=d:\tools\util;d:\cvsfiles\thmg\harbour\bin;d:\cvsfiles\thmg\mingw\bin;c:\windows;c:\windows\system32
Voilá.... Apareceu.
resultado.png

Primeiros testes HMG 3.4.3

Enviado: 01 Fev 2017 13:04
por JoséQuintas
Agora vamos tentar entender os BATs, tem até coisa nova (pelo menos pra mim) no BAT.
Até descobri novidade ontem, por coincidência

Código: Selecionar todos

SETLOCAL
SET Temp1=%~dp0
SET Temp3=%Temp1%&SET Pos=0
SET /a Pos+=1
ECHO %Temp3%|FINDSTR /b /c:"SAMPLES" >NUL
IF DEFINED Temp3 GOTO Loop
SETLOCAL = torna as variáveis de ambiente de uso local
SET TEMP1 e SET TEMP2 - criam variáveis, os parâmetros são novidade pra mim mas não vou tentar entender
IF DEFINED - é pra testar se a variável existe

Código: Selecionar todos

IF ERRORLEVEL 1 (
SET Temp3=%Temp3:~1%
IF DEFINED Temp3 GOTO Loop
SET Pos=0
)
Esse é interessante, o parêntesis pode ser usado como continuação de linha nesse caso.
O BAT fica parecendo linguagem de programação.

De qualquer forma, parei de tentar entender essa parte por aí.
Não quero fazer curso de BAT, quero apenas compilar.
Se compilar um exemplo é decidido por BAT, significa que nem sequer vou saber compilar

Considero isso um grande erro, o usuário vai compilar e nem sequer sabe como está fazendo isso.
Isso é desaprender Harbour, e não aprender a compilar com minigui.

De qualquer forma, vou tentar entender o resto.
Se eu conseguir, no final crio uma forma mais fácil de fazer tudo isso, que dê pra entender.

Só considero uma coisa:
Se é pra criar um BAT pra compilação em cada pasta de exemplo, seria melhor um BAT completo do exemplo.
Considerando que um BAT vai ocupar 32KB de disco, não adianta economizar nele, só se fosse pra deixar mais claro.
Mas vou tentar alterar isso no final.

Primeiros testes HMG 3.4.3

Enviado: 01 Fev 2017 13:21
por JoséQuintas
Na falta de outra opção, coloquei pra mostrar o texto que está executando, com ECHO e PAUSE.

Código: Selecionar todos

:WithOutParam
FOR %%x IN (*.hbp) DO ( ECHO Building %%x
ECHO %Temp1%\build.bat %%x
PAUSE
IF "%NoRun%"=="" CALL %Temp1%\build.bat %%x
IF NOT "%NoRun%"=="" CALL %Temp1%\build.bat /n %%x )
GOTO End

Código: Selecionar todos

Building hello.hbp
d:\CVSFiles\thmg\build.bat hello.hbp
Pressione qualquer tecla para continuar. . .
Sei lá, esquisito, à primeira vista poderia ser algo assim:

Código: Selecionar todos

FOR %%A IN (*.HBP) DO %MB_ROOT%\BUILD.BAT %%A
Ou colocar a pasta root da minigui no path, e nem precisar do bat local.
Ainda verificando.
Como os BATs usam recursos que não conheço.... ainda estudando.

Primeiros testes HMG 3.4.3

Enviado: 01 Fev 2017 13:52
por JoséQuintas
É incrível. Achei a solução para os meus BATs.

A compilação da minigui/hmg é tão esquisita, que ninguém soube me informar qual era o problema.
Achei em hmg32.hbc. Tem mais duas LIBs do mingw

Código: Selecionar todos

-lmsvfw32 -lvfw32
Estou preparando novos BATs, quando estiver pronto coloco aqui.
Se der tudo certo, vai simplificar muuuuito tudo isso.

Só vou adiantar que criei outra variável pra indicar hmg ou hmgextended
Aliás, nem dá pra adiantar mais nada, ainda estou criando.... rs

Código: Selecionar todos

SET HB_MINIGUI_VER=xxxxx

Primeiros testes HMG 3.4.3

Enviado: 01 Fev 2017 15:25
por JoséQuintas
Ainda estou começando com os testes dos BATs.
Favor verificar aqui:

https://pctoledo.org/forum/viewto ... 43&t=17994

Primeiros testes HMG 3.4.3

Enviado: 01 Fev 2017 17:27
por JoséQuintas
Já ok usando meu bat padrão.
Mas ainda no Harbour 3.2 que acompanha a hmg.

Código: Selecionar todos

mgcompile hello hbmisc.hbc hbhpdf.hbc hbwin.hbc

Primeiros testes HMG 3.4.3

Enviado: 01 Fev 2017 17:46
por JoséQuintas
Primeira tentativa com Harbour 3.4, apenas alterei o path do Harbour e mingw.

Código: Selecionar todos

mgcompile hello hbwin.hbc xhb.hbc hbmisc.hbc hbhpdf.hbc
d:/cvsfiles/thmg/lib/win/mingw/libhmg.a(h_tole.o):h_tole.c:(.data+0x378): undefined reference to `_HB_FUN_WIN_P2N'
d:/cvsfiles/thmg/lib/win/mingw/libhmg.a(h_windows.o):h_windows.c:(.data+0x1458): undefined reference to `_HB_FUN_CALLDLL32'
hbmk2: Hint: Correct possibly mistyped function name(s):
       WIN_P2N() -> win_Prn()
hbmk2: Error: Referenced, missing, but unrecognized Harbour function(s):
       WIN_P2N(), CALLDLL32()
Provavelmente funções renomeadas, Não achei em lugar nenhum, a não ser no 3.2. Pelo menos a segunda é certeza CallDll32().
Criar tapa buraco

Código: Selecionar todos

------- file ze_Harbour34.prg
FUNCTION CallDll32( ... ) ; RETURN CallDll( ... )
FUNCTION Win_P2N( ... ); RETURN Win_Prn( ... )
Salvei em thmg\source, já vai fazer parte da lib hmg, senão terei que mexer em tudo que é projeto.


Agora compiicou um pouqquinho, mas tem jeito pra tudo.

Código: Selecionar todos

mgcompile hello hbwin.hbc xhb.hbc hbhpdf.hbc hbmisc.hbc
d:/harbour/lib/win/mingw/libhbmisc.a(calldll.o):calldll.c:(.text+0x40): multiple definition of `_HB_FUN_CALLDLL'
d:/harbour/lib/win/mingw/libxhb.a(xhbdll.o):xhbdll.c:(.text+0x0): first defined here
Deu duplicidade de funções. Mesma função no Harbour e na hmg.
Não foi minha rotina tapa-buraco, ela cria CallDll32().
Essa é a única função onde o Harbour 3.4 tem duas com mesmo nome, e uma delas é na compatibilidade com xHarbour.

Primeiros testes HMG 3.4.3

Enviado: 01 Fev 2017 18:38
por JoséQuintas
Voilá.... Harbour 3.4

Indiquei a compatibilidade xHarbour apenas como LIB e não com o hbc, e somente no final.

Código: Selecionar todos

mgcompile hello hbwin.hbc hbhpdf.hbc hbmisc.hbc -lxhb
Bom.... se minigui obriga tudo isso pra um simples Hello World... então tudo isso pode ser colocado no mgcompile.bat

Testes até agora:

- Ok com Harbour que vém na hmg
- Ok com Harbour 3.4

Minha situação agora:

- Harbour 3.4 de sempre, em d:\harbour
- Compilador msvc 2010 em d:\harbour\comp\msvc
- Compilador mingw 5.3, em d:\harbour\comp\mingw
- Compilador bcc em d:\harbour\comp\bcc
- hmg 3.4.3 em d:\cvsfiles\thmg (salvei no github)
- hmg extended 17.01 em d:\cvsfiles\thmgx (salvei no github)
- hmg OOHG (não sei versão) em d:\cvsfiles\toohg (salvei no github)
- Meus BATs mgconfig, mgcreate e mgcompile em d:\cvsfiles\hmg-bat (salvei no github)
- Em d:\tools\util BATs com mesmo nome, só pra não ter que configurar path novo

TODAS as LIBs direcionadas pra lib\win\compilador, pras HMG cada uma em sua pasta LIB

Se as HMG e o Harbour deixassem, poderia escolher qualquer compilador a qualquer momento, usando mgconfig.bat.
Não depende de mim, depende dos fontes passarem no compilador. MINGW é garantido.

Meus bats aqui: https://github.com/JoseQuintas/HMG-BAT e se o github deixar pra acesso externo, tudo aqui https://github.com/JoseQuintas?tab=repositories

agora vamos brincar.

Primeiros testes HMG 3.4.3

Enviado: 01 Fev 2017 20:21
por Nascimento
amigo quincas uso a minigui extended a 2 anos e uso da maneira antiga do clipper
seto em variaveis de ambiente includes,libs e bins

depois mudo o minigui.hbc que vem so coloco 2 '#' na frente de 2 linhas

compilo via bat e hbp normalmente minigui extended+mingw
# hmg paths
{win}incpaths=include
{win}libpaths=lib
#{win}incpaths=${hb_curdir} //aqui

# hmg resources
#{win}sources=${hb_curdir}_temp.o // aqui
desta maneira nao fico preso ao .bat que vem na minigui

Primeiros testes HMG 3.4.3

Enviado: 03 Fev 2017 10:05
por JoséQuintas
Legal. Então se estiver faltando alguma coisa vai saber identificar.

A intenção dos BATs é ficar fácil testar e entender.
Dá pra ver o comando inteiro no BAT, e seria só colocar num HBP.

Dá pra testar os BATs sem modificar nada nos arquivos originais.
Ou melhor... acaba tendo que mover as LIBs originais de LIB pra LIB\win\compilador

Nas últimas modificações, pra HMG, HMG Extended e OOHG.