2009-02-21 08:44 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
* source/vm/hvm.c
+ Added hb_vmSetLinkedMain() function to replace direct
access to exported variable hb_vm_pszLinkedMain.
(it's not a public call and caller should always pass
a string literal).
* hb_vm_pszLinkedMain -> s_vm_pszLinkedMain and made static.
* utils/hbmk2/hbmk2.prg
! Not adding 'dllimport' for externs in C stub when
MSVC is used, to avoid compiler warning mentioned in
previous entry.
* utils/hbmk2/hbmk2.prg
* bin/hb-func.sh
* Updated for above change.
; TODO: Convert GT defaulting to function call too.
This commit is contained in:
@@ -8,6 +8,25 @@
|
||||
2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
|
||||
*/
|
||||
|
||||
2009-02-21 08:44 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
|
||||
* source/vm/hvm.c
|
||||
+ Added hb_vmSetLinkedMain() function to replace direct
|
||||
access to exported variable hb_vm_pszLinkedMain.
|
||||
(it's not a public call and caller should always pass
|
||||
a string literal).
|
||||
* hb_vm_pszLinkedMain -> s_vm_pszLinkedMain and made static.
|
||||
|
||||
* utils/hbmk2/hbmk2.prg
|
||||
! Not adding 'dllimport' for externs in C stub when
|
||||
MSVC is used, to avoid compiler warning mentioned in
|
||||
previous entry.
|
||||
|
||||
* utils/hbmk2/hbmk2.prg
|
||||
* bin/hb-func.sh
|
||||
* Updated for above change.
|
||||
|
||||
; TODO: Convert GT defaulting to function call too.
|
||||
|
||||
2009-02-21 08:15 UTC+0100 Viktor Szakats (harbour.01 syenar hu)
|
||||
* contrib/hbfimage/fi_wrp.c
|
||||
! Added hack to trick around FreeImage.h header not to
|
||||
@@ -63,6 +82,7 @@
|
||||
with this warning:
|
||||
"hbsc_2nwvzg.obj : warning LNK4217: locally defined symbol \
|
||||
_hb_vm_pszLinkedMain imported in function __hb_hbmk_setdef_"
|
||||
[FIXED]
|
||||
+ Added code to only accept valid Harbour identified as
|
||||
-main= value.
|
||||
+ Added first module detection.
|
||||
|
||||
@@ -644,14 +644,14 @@ hb_lnk_request()
|
||||
echo "#include \\"hbinit.h\\""
|
||||
echo "HB_EXTERN_BEGIN"
|
||||
echo "extern \${HB_LNK_ATTR} const char * hb_gt_szNameDefault;"
|
||||
echo "extern \${HB_LNK_ATTR} const char * hb_vm_pszLinkedMain;"
|
||||
echo "extern \${HB_LNK_ATTR} void hb_vmSetLinkedMain( const char * szMain );"
|
||||
echo "HB_EXTERN_END"
|
||||
echo "HB_CALL_ON_STARTUP_BEGIN( hb_lnk_SetDefault_build )"
|
||||
if [ -n "\$gt" ]; then
|
||||
echo " hb_gt_szNameDefault = \\"\$gt\\";"
|
||||
fi
|
||||
if [ -n "\${HB_MAIN_FUNC}" ]; then
|
||||
echo " hb_vm_pszLinkedMain = \\"\${HB_MAIN_FUNC}\\";"
|
||||
echo " hb_vmSetLinkedMain( \\"\${HB_MAIN_FUNC}\\" );"
|
||||
fi
|
||||
echo "HB_CALL_ON_STARTUP_END( hb_lnk_SetDefault_build )"
|
||||
fi
|
||||
|
||||
@@ -250,7 +250,7 @@ static BOOL hb_bTracePrgCalls = FALSE; /* prg tracing is off */
|
||||
# define HB_TRACE_PRG( _TRMSG_ )
|
||||
#endif
|
||||
|
||||
const char * hb_vm_pszLinkedMain = NULL; /* name of startup function set by linker */
|
||||
static const char * s_vm_pszLinkedMain = NULL; /* name of startup function set by linker */
|
||||
|
||||
/* virtual machine state */
|
||||
|
||||
@@ -952,14 +952,14 @@ void hb_vmInit( BOOL bStartMainProc )
|
||||
in other case it's the name of first public function in
|
||||
first linked moudule which is used if there is no
|
||||
HB_START_PROCEDURE in code */
|
||||
if( hb_vm_pszLinkedMain && *hb_vm_pszLinkedMain == '@' )
|
||||
pDynSym = hb_dynsymFind( hb_vm_pszLinkedMain + 1 );
|
||||
if( s_vm_pszLinkedMain && *s_vm_pszLinkedMain == '@' )
|
||||
pDynSym = hb_dynsymFind( s_vm_pszLinkedMain + 1 );
|
||||
else
|
||||
{
|
||||
pDynSym = hb_dynsymFind( HB_START_PROCEDURE );
|
||||
|
||||
if( ! ( pDynSym && pDynSym->pSymbol->value.pFunPtr ) && hb_vm_pszLinkedMain )
|
||||
pDynSym = hb_dynsymFind( hb_vm_pszLinkedMain );
|
||||
if( ! ( pDynSym && pDynSym->pSymbol->value.pFunPtr ) && s_vm_pszLinkedMain )
|
||||
pDynSym = hb_dynsymFind( s_vm_pszLinkedMain );
|
||||
}
|
||||
|
||||
if( pDynSym && pDynSym->pSymbol->value.pFunPtr )
|
||||
@@ -968,9 +968,9 @@ void hb_vmInit( BOOL bStartMainProc )
|
||||
hb_errInternal( HB_EI_VMBADSTARTUP, NULL, HB_START_PROCEDURE, NULL );
|
||||
}
|
||||
#else
|
||||
else if( hb_vm_pszLinkedMain )
|
||||
else if( s_vm_pszLinkedMain )
|
||||
{
|
||||
pDynSym = hb_dynsymFind( hb_vm_pszLinkedMain + ( *hb_vm_pszLinkedMain == '@' ? 1 : 0 ) );
|
||||
pDynSym = hb_dynsymFind( s_vm_pszLinkedMain + ( *s_vm_pszLinkedMain == '@' ? 1 : 0 ) );
|
||||
if( pDynSym && pDynSym->pSymbol->value.pFunPtr )
|
||||
s_pSymStart = pDynSym->pSymbol;
|
||||
}
|
||||
@@ -11054,6 +11054,12 @@ void hb_vmForceLink( void )
|
||||
HB_FUNC_EXEC( SYSINIT );
|
||||
}
|
||||
|
||||
/* NOTE: Pass string literals only. */
|
||||
void hb_vmSetLinkedMain( const char * szMain )
|
||||
{
|
||||
s_vm_pszLinkedMain = szMain;
|
||||
}
|
||||
|
||||
/* Force linking default language and codepage modules */
|
||||
HB_CODEPAGE_REQUEST( HB_CODEPAGE_DEFAULT )
|
||||
HB_LANG_REQUEST( HB_LANG_DEFAULT )
|
||||
|
||||
@@ -1305,14 +1305,18 @@ FUNCTION Main( ... )
|
||||
s_cMAIN := tmp
|
||||
ENDIF
|
||||
|
||||
/* HACK: Override entry point requested by user or detected by us. */
|
||||
/* HACK: Override entry point requested by user or detected by us,
|
||||
and override the GT if requested by user. */
|
||||
IF s_cMAIN != NIL
|
||||
fhnd := hb_FTempCreateEx( @s_cCSTUB, ".", "hbsc_", ".c" )
|
||||
IF fhnd != F_ERROR
|
||||
|
||||
/* NOTE: This has to be kept synced with Harbour HB_IMPORT values. */
|
||||
DO CASE
|
||||
CASE !( t_cARCH == "win" ) .OR. t_cCOMP == "rsxnt"
|
||||
CASE !( t_cARCH == "win" ) .OR. t_cCOMP $ "msvc|rsxnt"
|
||||
/* NOTE: MSVC gives the warning:
|
||||
"LNK4217: locally defined symbol ... imported in function ..."
|
||||
if using 'dllimport'. [vszakats] */
|
||||
tmp := ""
|
||||
CASE t_cCOMP $ "gcc|mingw" ; tmp := "__attribute__ (( dllimport ))"
|
||||
CASE t_cCOMP == "bcc32|owatcom" ; tmp := "__declspec( dllimport )"
|
||||
@@ -1324,11 +1328,11 @@ FUNCTION Main( ... )
|
||||
'#include "hbinit.h"' + hb_osNewLine() +;
|
||||
'' + hb_osNewLine() +;
|
||||
'HB_EXTERN_BEGIN' + hb_osNewLine() +;
|
||||
'extern ' + tmp + ' const char * hb_vm_pszLinkedMain;' + hb_osNewLine() +;
|
||||
'extern ' + tmp + ' void hb_vmSetLinkedMain( const char * szMain );' + hb_osNewLine() +;
|
||||
'HB_EXTERN_END' + hb_osNewLine() +;
|
||||
'' + hb_osNewLine() +;
|
||||
'HB_CALL_ON_STARTUP_BEGIN( _hb_hbmk_setdef_ )' + hb_osNewLine() +;
|
||||
' hb_vm_pszLinkedMain = "' + Upper( s_cMAIN ) + '";' + hb_osNewLine() +;
|
||||
' hb_vmSetLinkedMain( "' + Upper( s_cMAIN ) + '" );' + hb_osNewLine() +;
|
||||
'HB_CALL_ON_STARTUP_END( _hb_hbmk_setdef_ )' + hb_osNewLine() +;
|
||||
'' + hb_osNewLine() +;
|
||||
'#if defined( HB_PRAGMA_STARTUP )' + hb_osNewLine() +;
|
||||
@@ -1342,8 +1346,8 @@ FUNCTION Main( ... )
|
||||
' #pragma data_seg()' + hb_osNewLine() +;
|
||||
'#endif' + hb_osNewLine() )
|
||||
|
||||
/* 'extern ' + tmp + ' const char * hb_gt_szNameDefault;' + hb_osNewLine() +; */
|
||||
/* ' hb_gt_szNameDefault = "$gt";' + hb_osNewLine() +; */
|
||||
/* 'extern ' + tmp + ' void hb_gtSetDefault( const char * szGtName );' + hb_osNewLine() +; */
|
||||
/* ' hb_gtSetDefault( "$gt" );' + hb_osNewLine() +; */
|
||||
FClose( fhnd )
|
||||
ELSE
|
||||
OutErr( "hbmk: Warning: Stub helper .c program couldn't be created." + hb_osNewLine() )
|
||||
|
||||
Reference in New Issue
Block a user