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:
Viktor Szakats
2009-02-21 07:45:05 +00:00
parent 75a9fee614
commit f99693f142
4 changed files with 45 additions and 15 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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 )

View File

@@ -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() )