Definir data de compilação com DEFINE

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Definir data de compilação com DEFINE

Mensagem por rubens »

Bom dia...

Tendo a definição:

#DEFINE DATACOMP DTOC(DATE())

Como eu poderia fazer para DATACOMP armazenar o literal e não a função?
Eu gostaria de armazenar a data da última compilação automaticamente.

Onde eu buscasse o conteúdo de DATACOMP me retornasse '19/09/2016' e não o resultado de DTOC(DATE()).

Sei que dá para buscar isso do executável mas gostaria de saber se é possível fazer isso com o define.

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Definir data de compilação com DEFINE

Mensagem por asimoes »

Pode fazer assim:

Bat para compilar:

Código: Selecionar todos

echo %date% %time% > timestamp.txt
hbmk2 estagio.hbp -rebuild 
No .rc (exemplo)
DATACOMP RCDATA timestamp.txt

No prg

Código: Selecionar todos

#define RT_RCDATA       (10)
cDataComp := Hb_LoadResourceRawFile ( "DataComp", RT_RCDATA  ) 
Função Hb_LoadResourceRawFile()

Código: Selecionar todos

#pragma BEGINDUMP
#include <Windows.h>
#include <hbApi.h>

//        HMG_LoadResourceRawFile ( cFileName, cTypeResource | nTypeResourceID )
HB_FUNC ( HB_LOADRESOURCERAWFILE )
{
   HRSRC   hResourceData;
   HGLOBAL hGlobalResource;
   LPVOID  lpGlobalResource = NULL;
   DWORD   nFileSize;
   TCHAR   *FileName     = (TCHAR*) hb_parc(1);
   TCHAR   *TypeResource = HB_ISCHAR (2) ? (TCHAR*) hb_parc(2) : MAKEINTRESOURCE ( hb_parni(2) );

   hResourceData = FindResource ( NULL, FileName, TypeResource );
   if ( hResourceData != NULL )
   {
       hGlobalResource = LoadResource ( NULL, hResourceData );
       if ( hGlobalResource != NULL )
       {
           lpGlobalResource = LockResource ( hGlobalResource );
           if ( lpGlobalResource != NULL ) 
           {
               nFileSize = SizeofResource ( NULL, hResourceData );
               hb_retclen ( (const CHAR *) lpGlobalResource, (HB_SIZE) nFileSize );
           }
           FreeResource ( hGlobalResource );
       }
   }

   if ( lpGlobalResource == NULL )
        hb_retclen ( (const CHAR *) NULL, (HB_SIZE) 0 );
}

#pragma ENDDUMP
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir data de compilação com DEFINE

Mensagem por JoséQuintas »

Se o problema for só obter um identificador para a versão do programa, o Harbour já faz isso automaticamente.
Pode compilar com a versão

-tshead=build.ch

Com essa versão ele gera o arquivo build.ch
O arquivo build.ch :

/* Automatically generated by hbmk2. Do not edit. */
#define _HBMK_BUILD_DATE_ "20160818"
#define _HBMK_BUILD_TIME_ "185538"
#define _HBMK_BUILD_TIMESTAMP_ "20160818185538201"

Daí vc pode fazer no seu código :

#include "build.ch"
https://pctoledo.org/forum/viewto ... 51#p109155
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

Definir data de compilação com DEFINE

Mensagem por JoséQuintas »

Repetir o outro post, porque aqui fica no lugar correto.
Demorei pra encontrar o post anterior porque está em outro assunto.

Resolvi assim, porque o do Harbour não me atendeu.

Este fonte compilado:

Código: Selecionar todos

PROCEDURE Main

 LOCAL cDateTime, cTxt, nBuildNum, cBuildFile

 cBuildFile := "d:\cdrom\fontes\build\build.ch"
 cDateTime := Dtos( Date() ) + Substr( Time(), 1, 2 ) + Substr( Time(), 4, 2 )

 nBuildNum := Val( Substr( MemoRead( cBuildFile ), 4, 10 ) ) + 1
 cTxt := "// " + Str( nBuildNum, 10 ) + hb_Eol()
 cTxt += "#define JPA_VERSAO  " + ["] + Transform( cDateTime, "@R 9999.99.99.9999" ) + ["] + hb_Eol()
 cTxt += "#define JPA_VERSAO_RC " + Transform( cDateTime, "@R 9999,99,99,9999" ) + hb_Eol()
 hb_MemoWrit( cBuildFile, cTxt )

 RETURN
chamado no bat de compilação:

Código: Selecionar todos

del jpa.exe
d:\cdrom\fontes\build\build
hbmk2 jpa.hbp %1 %2 %3 %4 %5
if not errorlevel 1 assina jpa.exe
que gera este arquivo:

Código: Selecionar todos

//        705
#define JPA_VERSAO    "2016.09.19.1837"
#define JPA_VERSAO_RC  2016,09,19,1837
no meu fonte principal:

Código: Selecionar todos

#include "build.ch"
AppVersaoExe( JPA_VERSAO ) 
e no jpa.rc:

Código: Selecionar todos

#include "build.ch"

1 VERSIONINFO
  FILEVERSION JPA_VERSAO_RC
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Definir data de compilação com DEFINE

Mensagem por asimoes »

Quintas,

Faltou publicar a function AppVersaoExe( JPA_VERSAO )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir data de compilação com DEFINE

Mensagem por JoséQuintas »

Faltou não, eu só não deveria ter postado parte do meu fonte.... rs
Só imaginar o #define como se fosse uma variável.

Código: Selecionar todos

// #define JPA_VERSAO  "2016.09.19.1837"
#include "build.ch"

@ 1, 0 SAY "Versao " + JPA_VERSAO
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
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Definir data de compilação com DEFINE

Mensagem por Toledo »

Amigos, uma outra opção seria pegar a data do arquivo EXE:

Código: Selecionar todos

cExeNome:=ExeName()
DATACOMP:=FileDate(cExeNome)
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir data de compilação com DEFINE

Mensagem por JoséQuintas »

Não dá muito certo, porque se baixar da internet, a data acaba sendo a data de download.
E aí começa a precisar de outras precauções.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Definir data de compilação com DEFINE

Mensagem por asimoes »

Quintas,

Sei que existe inúmeras maneiras de pescar essa informação da data e quanto ao seu .rc

#include "build.ch"

1 VERSIONINFO
FILEVERSION JPA_VERSAO_RC

Como é que você pega o valor? ou bata informar o include que eu tenho acesso ao valor de JPA_VERSAO_RC ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Definir data de compilação com DEFINE

Mensagem por asimoes »

Quintas

Descobri uma forma de criar o build.ch na própria bat de compilação.

echo #define build_date "%date%" > build.ch
echo #define build_time "%time%" >> build.ch

Ou

echo #define buildapp "%date% %time%" > build.ch
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
frazato
Usuário Nível 3
Usuário Nível 3
Mensagens: 219
Registrado em: 08 Jul 2004 07:45

Definir data de compilação com DEFINE

Mensagem por frazato »

Bom dia! uso de uma maneira mais simples a criação de versão em meu sistema, uso da seguinte maneira:
1- Crio um executável ( Cria_vers )
2- Coloco o versao.prg para compilar junto com o sistema
3- Coloco em BAT para executar o cria_Ver para gerar um novo versao.prg

Frazato

Código: Selecionar todos

/*
   Rotina de criaoca de numero de verao
   tera que ser utiliza antes do processo compilacao do sistema
   Joao Frazato
*/

Estru := { {"Data"    , "D" , 08,0 },;
           {"Geracao" , "N" , 08,0 } }

If ! file("versao.dbf")
     Dbcreate("Versao.dbf",Estru)
Endif


Close All

Sele 1
     use Versao
     go bott
     nnumero := Geracao+1
     Append Blank
     Repla Data     With date()
     Repla Geracao  With nnumero


     If File("Versao.prg")
        delete File versao.prg
     Endif

     cTxtcArq    := 'Versao.prg'
     cxbase      := {}
     QuebraLinha := Chr(13)+Chr(10)

     Aadd(cxbase,'Function Ver_Jaf_Versao()' )
     Aadd(cxbase,'Local nVersao:="'+Dtos(data)+'-'+strZero(nNumero,3)+'"' )
     Aadd(cxbase,'Return nVersao' )

     Handle := FCreate(cTxtcArq)
     If Ferror() # 0
        alert("Impossivel gravar o pedido Temporario "+cTxtcArq)
     Endif

     For x:= 1 to Len(cxbase)
         Fwrite(Handle,cxbase[x]+QuebraLinha)
     Next

     FCLOSE(HANDLE)

Return nil

Código: Selecionar todos

Function Ver_Jaf_Versao()
Local nVersao:="20100929-355"
Return nVersao

Código: Selecionar todos

@ECHO OFF
CRI_VERS.EXE
HBMAKE SISTEMA.BC
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Definir data de compilação com DEFINE

Mensagem por Toledo »

Amigos, compile este demo:

demo.prg

Código: Selecionar todos

#include "demo.ch"
PROCEDURE Main
   SET CENTURY ON
   SET DATE FORMAT TO "dd/mm/yyyy"
   CLS
   ? StoD(_HBMK_BUILD_DATE_)
   ? Transf(_HBMK_BUILD_TIME_,"@R 99:99:99")
RETURN
Compile com hbmk2 e com opção -tshead=demo, por exemplo:

hbmk2 demo.prg -tshead=demo

Com a opção -tshead=demo será criado o arquivo demo.ch contendo as macros _HBMK_BUILD_DATE_, _HBMK_BUILD_TIME_, _HBMK_BUILD_TIMESTAMP_ com a data/hora de criação do arquivo.

Observe que no inicio do DEMO.PRG estou chamando o demo.ch

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Definir data de compilação com DEFINE

Mensagem por asimoes »

As opções são muitas é só escolher:

For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a:%%b)
echo #define buildapp "%date%_%mytime%" > build.ch

O resultado em build.ch é:

#define buildapp "20/09/2016_09:01"
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Definir data de compilação com DEFINE

Mensagem por rubens »

Bom dia...

Esse e o tipo de rotina que quem gosta mesmo de achar soluções dá uma olhadinha e pensa: 'Tem jeito de melhorar"... kkk
Obrigado pelas respostas...

Acabei adotando a última que o toledo postou. Ficou jóia...
Só uma ressalva, fiquei empolgado e fui dar uma de programador aqui, e resolvi usar um ch existente... já viram né o que que deu... o hbmk2 gravou em cima kkkkkkkkkkk ainda bem que tinha cópia do ch...

Obrigado
Valeu...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Definir data de compilação com DEFINE

Mensagem por asimoes »

Com harbour 3.4 o comando é -bldhead=build.ch
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder