2009-08-06 15:39 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.prg
+ In incremental (-inc) mode .c and .rc stubs are now created
inside workdir and kept there for consecutive build runs.
They are only recreated if necessary. This means that
-gt, -main= and -icon options work well with -inc mode, and
won't anymore force linking on each run.
* All stubs will be recreated in -rebuild mode.
* Above stubs will be deleted in -clean mode. (except vcshead and tshead)
This commit is contained in:
@@ -17,6 +17,16 @@
|
||||
past entries belonging to author(s): Viktor Szakats.
|
||||
*/
|
||||
|
||||
2009-08-06 15:39 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* utils/hbmk2/hbmk2.prg
|
||||
+ In incremental (-inc) mode .c and .rc stubs are now created
|
||||
inside workdir and kept there for consecutive build runs.
|
||||
They are only recreated if necessary. This means that
|
||||
-gt, -main= and -icon options work well with -inc mode, and
|
||||
won't anymore force linking on each run.
|
||||
* All stubs will be recreated in -rebuild mode.
|
||||
* Above stubs will be deleted in -clean mode. (except vcshead and tshead)
|
||||
|
||||
2009-08-06 11:17 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* utils/hbmk2/hbmk2.prg
|
||||
! Fixed escaping icon filenames in automatically generated .rc files
|
||||
|
||||
@@ -591,6 +591,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
|
||||
LOCAL tmp, tmp1, tmp2, array
|
||||
LOCAL cScriptFile
|
||||
LOCAL fhnd
|
||||
LOCAL cFile
|
||||
LOCAL lNOHBC
|
||||
LOCAL lSysLoc
|
||||
LOCAL cPrefix
|
||||
@@ -3048,7 +3049,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
|
||||
"#define _HBMK_VCS_TYPE_ " + '"' + tmp2 + '"' + Chr( 10 ) +;
|
||||
"#define _HBMK_VCS_ID_ " + '"' + tmp1 + '"' + Chr( 10 )
|
||||
/* Update only if something changed to trigger rebuild only if really needed */
|
||||
IF !( hb_MemoRead( l_cVCSHEAD ) == tmp )
|
||||
IF hbmk[ _HBMK_lREBUILD ] .OR. !( hb_MemoRead( l_cVCSHEAD ) == tmp )
|
||||
IF hbmk[ _HBMK_lInfo ]
|
||||
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Generating VCS header: %1$s" ), l_cVCSHEAD ) )
|
||||
ENDIF
|
||||
@@ -3278,13 +3279,13 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
|
||||
/* HACK: Override entry point requested by user or detected by us,
|
||||
and override the GT if requested by user. */
|
||||
IF ! lStopAfterCComp .AND. ;
|
||||
! l_lCLEAN .AND. ;
|
||||
( l_cMAIN != NIL .OR. ;
|
||||
! Empty( hbmk[ _HBMK_aLIBUSERGT ] ) .OR. ;
|
||||
hbmk[ _HBMK_cGT ] != NIL )
|
||||
|
||||
fhnd := hb_FTempCreateEx( @l_cCSTUB, NIL, "hbmk_", ".c" )
|
||||
IF fhnd != F_ERROR
|
||||
l_cCSTUB := DirAddPathSep( cWorkDir ) + "_hbmkaut.c"
|
||||
|
||||
IF ! l_lCLEAN
|
||||
|
||||
/* NOTE: This has to be kept synced with Harbour HB_IMPORT values. */
|
||||
DO CASE
|
||||
@@ -3320,91 +3321,110 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
|
||||
ENDIF
|
||||
|
||||
/* Build C stub */
|
||||
FWrite( fhnd, '/* This temp source file was generated by hbmk tool. */' + hb_osNewLine() +;
|
||||
'/* You can safely delete it. */' + hb_osNewLine() +;
|
||||
'' + hb_osNewLine() +;
|
||||
'#include "hbapi.h"' + hb_osNewLine() )
|
||||
cFile := '/* This temp source file was generated by hbmk tool. */' + Chr( 10 ) +;
|
||||
'/* You can safely delete it. */' + Chr( 10 ) +;
|
||||
'' + Chr( 10 ) +;
|
||||
'#include "hbapi.h"' + Chr( 10 )
|
||||
IF ! Empty( array )
|
||||
AEval( array, {|tmp, i| array[ i ] := FuncNameEncode( tmp ) } )
|
||||
FWrite( fhnd, '' + hb_osNewLine() )
|
||||
AEval( array, {|tmp| FWrite( fhnd, 'HB_FUNC_EXTERN( ' + tmp + ' );' + hb_osNewLine() ) } )
|
||||
FWrite( fhnd, '' + hb_osNewLine() )
|
||||
FWrite( fhnd, 'void _hb_lnk_ForceLink_hbmk( void )' + hb_osNewLine() )
|
||||
FWrite( fhnd, '{' + hb_osNewLine() )
|
||||
AEval( array, {|tmp| FWrite( fhnd, ' HB_FUNC_EXEC( ' + tmp + ' );' + hb_osNewLine() ) } )
|
||||
FWrite( fhnd, '}' + hb_osNewLine() )
|
||||
FWrite( fhnd, '' + hb_osNewLine() )
|
||||
cFile += '' + Chr( 10 )
|
||||
AEval( array, {|tmp| cFile += 'HB_FUNC_EXTERN( ' + tmp + ' );' + Chr( 10 ) } )
|
||||
cFile += '' + Chr( 10 )
|
||||
cFile += 'void _hb_lnk_ForceLink_hbmk( void )' + Chr( 10 )
|
||||
cFile += '{' + Chr( 10 )
|
||||
AEval( array, {|tmp| cFile += ' HB_FUNC_EXEC( ' + tmp + ' );' + Chr( 10 ) } )
|
||||
cFile += '}' + Chr( 10 )
|
||||
cFile += '' + Chr( 10 )
|
||||
ENDIF
|
||||
|
||||
IF hbmk[ _HBMK_cGT ] != NIL .OR. ;
|
||||
l_cMAIN != NIL
|
||||
IF hbmk[ _HBMK_nHBMODE ] == _HBMODE_HB10 .OR. ;
|
||||
hbmk[ _HBMK_nHBMODE ] == _HBMODE_XHB
|
||||
FWrite( fhnd, '#include "hbinit.h"' + hb_osNewLine() +;
|
||||
'' + hb_osNewLine() +;
|
||||
'HB_EXTERN_BEGIN' + hb_osNewLine() +;
|
||||
'extern ' + tmp + ' const char * s_defaultGT;' + hb_osNewLine() +;
|
||||
'extern ' + tmp + ' const char * s_pszLinkedMain;' + hb_osNewLine() +;
|
||||
'HB_EXTERN_END' + hb_osNewLine() +;
|
||||
'' + hb_osNewLine() +;
|
||||
'HB_CALL_ON_STARTUP_BEGIN( _hb_hbmk_setdef_ )' + hb_osNewLine() )
|
||||
cFile += '#include "hbinit.h"' + Chr( 10 ) +;
|
||||
'' + Chr( 10 ) +;
|
||||
'HB_EXTERN_BEGIN' + Chr( 10 ) +;
|
||||
'extern ' + tmp + ' const char * s_defaultGT;' + Chr( 10 ) +;
|
||||
'extern ' + tmp + ' const char * s_pszLinkedMain;' + Chr( 10 ) +;
|
||||
'HB_EXTERN_END' + Chr( 10 ) +;
|
||||
'' + Chr( 10 ) +;
|
||||
'HB_CALL_ON_STARTUP_BEGIN( _hb_hbmk_setdef_ )' + Chr( 10 )
|
||||
ELSE
|
||||
FWrite( fhnd, '#include "hbinit.h"' + hb_osNewLine() +;
|
||||
'' + hb_osNewLine() +;
|
||||
'HB_EXTERN_BEGIN' + hb_osNewLine() +;
|
||||
'extern ' + tmp + ' void hb_vmSetLinkedMain( const char * szMain );' + hb_osNewLine() +;
|
||||
'extern ' + tmp + ' void hb_gtSetDefault( const char * szGtName );' + hb_osNewLine() +;
|
||||
'HB_EXTERN_END' + hb_osNewLine() +;
|
||||
'' + hb_osNewLine() +;
|
||||
'HB_CALL_ON_STARTUP_BEGIN( _hb_hbmk_setdef_ )' + hb_osNewLine() )
|
||||
cFile += '#include "hbinit.h"' + Chr( 10 ) +;
|
||||
'' + Chr( 10 ) +;
|
||||
'HB_EXTERN_BEGIN' + Chr( 10 ) +;
|
||||
'extern ' + tmp + ' void hb_vmSetLinkedMain( const char * szMain );' + Chr( 10 ) +;
|
||||
'extern ' + tmp + ' void hb_gtSetDefault( const char * szGtName );' + Chr( 10 ) +;
|
||||
'HB_EXTERN_END' + Chr( 10 ) +;
|
||||
'' + Chr( 10 ) +;
|
||||
'HB_CALL_ON_STARTUP_BEGIN( _hb_hbmk_setdef_ )' + Chr( 10 )
|
||||
ENDIF
|
||||
IF hbmk[ _HBMK_cGT ] != NIL
|
||||
IF hbmk[ _HBMK_nHBMODE ] == _HBMODE_HB10 .OR. ;
|
||||
hbmk[ _HBMK_nHBMODE ] == _HBMODE_XHB
|
||||
FWrite( fhnd, ' s_defaultGT = "' + Upper( SubStr( hbmk[ _HBMK_cGT ], 3 ) ) + '";' + hb_osNewLine() )
|
||||
cFile += ' s_defaultGT = "' + Upper( SubStr( hbmk[ _HBMK_cGT ], 3 ) ) + '";' + Chr( 10 )
|
||||
ELSE
|
||||
FWrite( fhnd, ' hb_gtSetDefault( "' + Upper( SubStr( hbmk[ _HBMK_cGT ], 3 ) ) + '" );' + hb_osNewLine() )
|
||||
cFile += ' hb_gtSetDefault( "' + Upper( SubStr( hbmk[ _HBMK_cGT ], 3 ) ) + '" );' + Chr( 10 )
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF l_cMAIN != NIL
|
||||
IF hbmk[ _HBMK_nHBMODE ] == _HBMODE_HB10 .OR. ;
|
||||
hbmk[ _HBMK_nHBMODE ] == _HBMODE_XHB
|
||||
FWrite( fhnd, ' s_pszLinkedMain = "' + Upper( l_cMAIN ) + '";' + hb_osNewLine() )
|
||||
cFile += ' s_pszLinkedMain = "' + Upper( l_cMAIN ) + '";' + Chr( 10 )
|
||||
ELSE
|
||||
FWrite( fhnd, ' hb_vmSetLinkedMain( "' + Upper( l_cMAIN ) + '" );' + hb_osNewLine() )
|
||||
cFile += ' hb_vmSetLinkedMain( "' + Upper( l_cMAIN ) + '" );' + Chr( 10 )
|
||||
ENDIF
|
||||
ENDIF
|
||||
FWrite( fhnd, 'HB_CALL_ON_STARTUP_END( _hb_hbmk_setdef_ )' + hb_osNewLine() +;
|
||||
'' + hb_osNewLine() +;
|
||||
'#if defined( HB_PRAGMA_STARTUP )' + hb_osNewLine() +;
|
||||
' #pragma startup_hb_lnk_SetDefault_hbmk_' + hb_osNewLine() +;
|
||||
'#elif defined( HB_MSC_STARTUP )' + hb_osNewLine() +;
|
||||
' #if defined( HB_OS_WIN_64 )' + hb_osNewLine() +;
|
||||
' #pragma section( HB_MSC_START_SEGMENT, long, read )' + hb_osNewLine() +;
|
||||
' #endif' + hb_osNewLine() +;
|
||||
' #pragma data_seg( HB_MSC_START_SEGMENT )' + hb_osNewLine() +;
|
||||
' static HB_$INITSYM hb_vm_auto_hbmk_setdef_ = _hb_hbmk_setdef_;' + hb_osNewLine() +;
|
||||
' #pragma data_seg()' + hb_osNewLine() +;
|
||||
'#endif' + hb_osNewLine() )
|
||||
cFile += 'HB_CALL_ON_STARTUP_END( _hb_hbmk_setdef_ )' + Chr( 10 ) +;
|
||||
'' + Chr( 10 ) +;
|
||||
'#if defined( HB_PRAGMA_STARTUP )' + Chr( 10 ) +;
|
||||
' #pragma startup_hb_lnk_SetDefault_hbmk_' + Chr( 10 ) +;
|
||||
'#elif defined( HB_MSC_STARTUP )' + Chr( 10 ) +;
|
||||
' #if defined( HB_OS_WIN_64 )' + Chr( 10 ) +;
|
||||
' #pragma section( HB_MSC_START_SEGMENT, long, read )' + Chr( 10 ) +;
|
||||
' #endif' + Chr( 10 ) +;
|
||||
' #pragma data_seg( HB_MSC_START_SEGMENT )' + Chr( 10 ) +;
|
||||
' static HB_$INITSYM hb_vm_auto_hbmk_setdef_ = _hb_hbmk_setdef_;' + Chr( 10 ) +;
|
||||
' #pragma data_seg()' + Chr( 10 ) +;
|
||||
'#endif' + Chr( 10 )
|
||||
ENDIF
|
||||
FClose( fhnd )
|
||||
|
||||
IF hbmk[ _HBMK_lDEBUGSTUB ]
|
||||
OutStd( "C stub dump:" + hb_osNewLine() )
|
||||
OutStd( hb_MemoRead( l_cCSTUB ) )
|
||||
IF hbmk[ _HBMK_lINC ]
|
||||
IF hbmk[ _HBMK_lREBUILD ] .OR. !( hb_MemoRead( l_cCSTUB ) == cFile )
|
||||
fhnd := FCreate( l_cCSTUB )
|
||||
ELSE
|
||||
fhnd := NIL
|
||||
ENDIF
|
||||
ELSE
|
||||
fhnd := hb_FTempCreateEx( @l_cCSTUB, NIL, "hbmk_", ".c" )
|
||||
ENDIF
|
||||
ELSE
|
||||
hbmk_OutErr( hbmk, I_( "Warning: Stub helper .c program couldn't be created." ) )
|
||||
IF ! hbmk[ _HBMK_lINC ]
|
||||
AEval( ListDirExt( hbmk[ _HBMK_aPRG ], cWorkDir, ".c" ), {|tmp| FErase( tmp ) } )
|
||||
IF fhnd == NIL
|
||||
AAdd( hbmk[ _HBMK_aC ], l_cCSTUB )
|
||||
ELSEIF fhnd != F_ERROR
|
||||
FWrite( fhnd, cFile )
|
||||
FClose( fhnd )
|
||||
|
||||
IF hbmk[ _HBMK_lDEBUGSTUB ]
|
||||
OutStd( "C stub dump:" + hb_osNewLine() )
|
||||
OutStd( cFile )
|
||||
ENDIF
|
||||
AAdd( hbmk[ _HBMK_aC ], l_cCSTUB )
|
||||
AAdd( l_aC_TODO, l_cCSTUB )
|
||||
ELSE
|
||||
hbmk_OutErr( hbmk, I_( "Warning: Stub helper .c program couldn't be created." ) )
|
||||
IF ! hbmk[ _HBMK_lINC ]
|
||||
AEval( ListDirExt( hbmk[ _HBMK_aPRG ], cWorkDir, ".c" ), {|tmp| FErase( tmp ) } )
|
||||
ENDIF
|
||||
IF hbmk[ _HBMK_lBEEP ]
|
||||
DoBeep( hbmk, .F. )
|
||||
ENDIF
|
||||
RETURN 5
|
||||
ENDIF
|
||||
IF hbmk[ _HBMK_lBEEP ]
|
||||
DoBeep( hbmk, .F. )
|
||||
/* Don't delete stub in workdir in incremental mode. */
|
||||
IF hbmk[ _HBMK_lINC ]
|
||||
l_cCSTUB := NIL
|
||||
ENDIF
|
||||
RETURN 5
|
||||
ENDIF
|
||||
AAdd( hbmk[ _HBMK_aC ], l_cCSTUB )
|
||||
AAdd( l_aC_TODO, l_cCSTUB )
|
||||
ENDIF
|
||||
|
||||
/* Library list assembly */
|
||||
@@ -3486,26 +3506,45 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
|
||||
ENDIF
|
||||
|
||||
IF hbmk[ _HBMK_cARCH ] $ "win|wce|os2" .AND. ;
|
||||
! Empty( hbmk[ _HBMK_aICON ] ) .AND. ! l_lCLEAN
|
||||
! Empty( hbmk[ _HBMK_aICON ] )
|
||||
|
||||
fhnd := hb_FTempCreateEx( @l_cRESSTUB, NIL, "hbmk_", ".rc" )
|
||||
IF fhnd != F_ERROR
|
||||
l_cRESSTUB := DirAddPathSep( cWorkDir ) + "_hbmkaut.rc"
|
||||
|
||||
IF ! l_lCLEAN
|
||||
/* Build .rc stub */
|
||||
FWrite( fhnd, '/* This temp source file was generated by hbmk tool. */' + hb_osNewLine() +;
|
||||
'/* You can safely delete it. */' + hb_osNewLine() +;
|
||||
'' + hb_osNewLine() )
|
||||
AEval( hbmk[ _HBMK_aICON ], {|tmp, tmp1| FWrite( fhnd, 'ICON' + hb_ntos( tmp1 ) + ' ICON DISCARDABLE "' + FN_Escape( PathSepToTarget( hbmk, tmp ), _ESC_BACKSLASH ) + '"' + hb_osNewLine() ) } )
|
||||
FClose( fhnd )
|
||||
cFile := '/* This temp source file was generated by hbmk tool. */' + Chr( 10 ) +;
|
||||
'/* You can safely delete it. */' + Chr( 10 ) +;
|
||||
'' + Chr( 10 )
|
||||
AEval( hbmk[ _HBMK_aICON ], {|tmp, tmp1| cFile += 'ICON' + hb_ntos( tmp1 ) + ' ICON DISCARDABLE "' + FN_Escape( PathSepToTarget( hbmk, tmp ), _ESC_BACKSLASH ) + '"' + Chr( 10 ) } )
|
||||
|
||||
IF hbmk[ _HBMK_lDEBUGSTUB ]
|
||||
OutStd( ".rc stub dump:" + hb_osNewLine() )
|
||||
OutStd( hb_MemoRead( l_cRESSTUB ) )
|
||||
IF hbmk[ _HBMK_lINC ]
|
||||
IF hbmk[ _HBMK_lREBUILD ] .OR. !( hb_MemoRead( l_cRESSTUB ) == cFile )
|
||||
fhnd := FCreate( l_cRESSTUB )
|
||||
ELSE
|
||||
fhnd := NIL
|
||||
ENDIF
|
||||
ELSE
|
||||
fhnd := hb_FTempCreateEx( @l_cRESSTUB, NIL, "hbmk_", ".rc" )
|
||||
ENDIF
|
||||
IF fhnd == NIL
|
||||
hb_AIns( hbmk[ _HBMK_aRESSRC ], 1, l_cRESSTUB, .T. )
|
||||
ELSEIF fhnd != F_ERROR
|
||||
FWrite( fhnd, cFile )
|
||||
FClose( fhnd )
|
||||
|
||||
IF hbmk[ _HBMK_lDEBUGSTUB ]
|
||||
OutStd( ".rc stub dump:" + hb_osNewLine() )
|
||||
OutStd( cFile )
|
||||
ENDIF
|
||||
hb_AIns( hbmk[ _HBMK_aRESSRC ], 1, l_cRESSTUB, .T. )
|
||||
AAdd( l_aRESSRC_TODO, l_cRESSTUB )
|
||||
ELSE
|
||||
hbmk_OutErr( hbmk, I_( "Warning: Stub helper .rc file couldn't be created." ) )
|
||||
ENDIF
|
||||
/* Don't delete stub in workdir in incremental mode. */
|
||||
IF hbmk[ _HBMK_lINC ]
|
||||
l_cRESSTUB := NIL
|
||||
ENDIF
|
||||
hb_AIns( hbmk[ _HBMK_aRESSRC ], 1, l_cRESSTUB, .T. )
|
||||
AAdd( l_aRESSRC_TODO, l_cRESSTUB )
|
||||
ELSE
|
||||
hbmk_OutErr( hbmk, I_( "Warning: Stub helper .rc file couldn't be created." ) )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
|
||||
Reference in New Issue
Block a user