2010-08-05 01:38 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)

* utils/hbmk2/hbmk2.prg
    + Added ${hb_dynsuffix} macro which returns a dynlib suffix
      value compatible with the naming system used for Harbour core
      dynlib (-x64, -wce-arm, -bcc, etc..)
    % Internals optimized to use dynsuffix value when calculating
      harbour core dynlib name.
    ! Fixed to not require macros inside filters to be uppercases.
      (as a side effect now unknown macro names will be passed
      as is to getenv() to check for possible envvar value)

  * contrib/hbpost.hbm
    + Will now use ${hb_dynsuffix} when forming output name in
      -hbdyn mode. So f.e. for x64 targets an '-x64' suffix will
      be used, which matches with the one used with core harbour
      dynlib. Also bcc targets will get -bcc postfix.
    + Will now use ${hb_dynsuffix) when forming implib output name
      if it's not empty (for x86, ia64, wce and bcc in practice).

  * contrib/make.hbs
  * config/postinst.hbs
    ! Display msg about extern generation only if it was really started.

  * config/hbextern.hbs
    ! Fixed to check for the presence of input file.
This commit is contained in:
Viktor Szakats
2010-08-04 23:39:32 +00:00
parent 8516d2a9fb
commit 878e9a84f0
6 changed files with 74 additions and 59 deletions

View File

@@ -16,6 +16,32 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-08-05 01:38 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.prg
+ Added ${hb_dynsuffix} macro which returns a dynlib suffix
value compatible with the naming system used for Harbour core
dynlib (-x64, -wce-arm, -bcc, etc..)
% Internals optimized to use dynsuffix value when calculating
harbour core dynlib name.
! Fixed to not require macros inside filters to be uppercases.
(as a side effect now unknown macro names will be passed
as is to getenv() to check for possible envvar value)
* contrib/hbpost.hbm
+ Will now use ${hb_dynsuffix} when forming output name in
-hbdyn mode. So f.e. for x64 targets an '-x64' suffix will
be used, which matches with the one used with core harbour
dynlib. Also bcc targets will get -bcc postfix.
+ Will now use ${hb_dynsuffix) when forming implib output name
if it's not empty (for x86, ia64, wce and bcc in practice).
* contrib/make.hbs
* config/postinst.hbs
! Display msg about extern generation only if it was really started.
* config/hbextern.hbs
! Fixed to check for the presence of input file.
2010-08-04 23:40 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbct/ctextern.prg
! Fixed missing #defines after latest changes.

View File

@@ -44,15 +44,17 @@ STATIC FUNCTION __hb_extern_get_list( cInputName )
LOCAL tmp
IF GetEnv( "HB_COMPILER" ) $ "gcc|mingw|mingw64|cygwin"
IF hb_processRun( "nm -g --defined-only -C " + cInputName,, @cStdOut ) == 0
IF ! Empty( hRegex := hb_regexComp( "[[:blank:]]HB_FUN_(.*)[[:space:]]", .T., .T. ) )
aResult := hb_regexAll( hRegex, StrTran( cStdOut, Chr( 13 ) ),,,,, .T. )
aExtern := {}
FOR EACH tmp IN aResult
AAdd( aExtern, tmp[ 2 ] )
NEXT
ASort( aExtern,,, {| tmp, tmp1 | tmp < tmp1 } )
RETURN aExtern
IF hb_FileExists( cInputName )
IF hb_processRun( "nm -g --defined-only -C " + cInputName,, @cStdOut ) == 0
IF ! Empty( hRegex := hb_regexComp( "[[:blank:]]HB_FUN_(.*)[[:space:]]", .T., .T. ) )
aResult := hb_regexAll( hRegex, StrTran( cStdOut, Chr( 13 ) ),,,,, .T. )
aExtern := {}
FOR EACH tmp IN aResult
AAdd( aExtern, tmp[ 2 ] )
NEXT
ASort( aExtern,,, {| tmp, tmp1 | tmp < tmp1 } )
RETURN aExtern
ENDIF
ENDIF
ENDIF
ENDIF

View File

@@ -543,10 +543,10 @@ STATIC FUNCTION mk_extern_core()
IF GetEnv( "HB_REBUILD_EXTERN" ) == "yes" .AND. ;
! Empty( GetEnv( "HB_DYNLIB_ST" ) )
OutStd( "! Generating core extern headers..." + hb_eol() )
IF ( aExtern := __hb_extern_get_list( GetEnv( "HB_DYNLIB_DIR" ) + hb_ps() + GetEnv( "HB_DYNLIB_ST" ) + GetEnv( "HB_DYNLIB_EXT" ) ) ) != NIL
OutStd( "! Generating core extern headers..." + hb_eol() )
__hb_extern_gen( aExtern, "include" + hb_ps() + "hbscalar.hbx" )
__hb_extern_gen( aExtern, "include" + hb_ps() + "hbcpage.hbx" )
__hb_extern_gen( aExtern, "include" + hb_ps() + "hblang.hbx" )

View File

@@ -40,11 +40,14 @@
{_HB_BUILD_LIBDYN}-hbdyn
{_HB_BUILD_LIBDYN}-shared
{_HB_BUILD_LIBDYN}-implib=../lib/${hb_plat}/${hb_comp}${hb_build}/
{_HB_BUILD_LIBDYN&hbdyn}-implib=${hb_outputname}_dll
{_HB_BUILD_LIBDYN&hbdyn&hb_dynsuffix}-implib=${hb_outputname}${hb_dynsuffix}
{_HB_BUILD_LIBDYN&hbdyn&!hb_dynsuffix}-implib=${hb_outputname}_dll
{_HB_BUILD_LIBDYN&hbexe}-implib=${hb_outputname}_exe
{_HB_BUILD_LIBDYN&allwin}-lhbmaindllp
{_HB_BUILD_LIBDYN}-depimplib-
{hbdyn}-o${hb_outputname}${hb_dynsuffix}
{hblib}-o../lib/${hb_plat}/${hb_comp}${hb_build}/
{hbexe|hbdyn}-o../bin/${hb_plat}/${hb_comp}${hb_build}/

View File

@@ -561,10 +561,8 @@ STATIC FUNCTION mk_extern_lib( cInputName, cOutputName )
LOCAL aExtern
IF GetEnv( "HB_REBUILD_EXTERN" ) == "yes"
OutStd( hb_StrFormat( "! Generating extern header: %1$s", cOutputName ) + hb_eol() )
IF ( aExtern := __hb_extern_get_list( cInputName ) ) != NIL
OutStd( hb_StrFormat( "! Generating extern header: %1$s", cOutputName ) + hb_eol() )
RETURN __hb_extern_gen( aExtern, cOutputName )
ENDIF
ENDIF

View File

@@ -3305,18 +3305,9 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
/* NOTE: Newer xhb version use "-x.y.z" version numbers. */
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "xharbourmt",;
"xharbour" ) }
CASE hbmk[ _HBMK_cCOMP ] == "mingw64"
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + "-x64",;
"harbour" + cDL_Version_Alter + "-x64" ) }
CASE hbmk[ _HBMK_cCOMP ] == "mingwarm"
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + "-wce-arm",;
"harbour" + cDL_Version_Alter + "-wce-arm" ) }
CASE hbmk[ _HBMK_cCOMP ] == "mingw" .AND. hbmk[ _HBMK_cPLAT ] = "wce"
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + "-wce-x86",;
"harbour" + cDL_Version_Alter + "-wce-x86" ) }
OTHERWISE
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter,;
"harbour" + cDL_Version_Alter ) }
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + hbmk_DYNSUFFIX( hbmk ),;
"harbour" + cDL_Version_Alter + hbmk_DYNSUFFIX( hbmk ) ) }
ENDCASE
IF _HBMODE_IS_XHB( hbmk[ _HBMK_nHBMODE ] )
@@ -3975,24 +3966,8 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
ENDIF
l_aLIBSYS := ArrayAJoin( { l_aLIBSYS, l_aLIBSYSCORE, l_aLIBSYSMISC } )
DO CASE
CASE hbmk[ _HBMK_cCOMP ] == "msvc" .AND. hbmk[ _HBMK_cPLAT ] = "wce"
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + "-wce-x86" + cLibExt,;
"harbour" + cDL_Version_Alter + "-wce-x86" + cLibExt ) }
CASE hbmk[ _HBMK_cCOMP ] == "msvcarm"
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + "-wce-arm" + cLibExt,;
"harbour" + cDL_Version_Alter + "-wce-arm" + cLibExt ) }
CASE hbmk[ _HBMK_cCOMP ] $ "msvc|icc"
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + cLibExt,;
"harbour" + cDL_Version_Alter + cLibExt ) }
CASE hbmk[ _HBMK_cCOMP ] == "msvc64"
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + "-x64" + cLibExt,;
"harbour" + cDL_Version_Alter + "-x64" + cLibExt ) }
CASE hbmk[ _HBMK_cCOMP ] $ "msvcia64|iccia64"
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + "-ia64" + cLibExt,;
"harbour" + cDL_Version_Alter + "-ia64" + cLibExt ) }
ENDCASE
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + hbmk_DYNSUFFIX( hbmk ) + cLibExt,;
"harbour" + cDL_Version_Alter + hbmk_DYNSUFFIX( hbmk ) + cLibExt ) }
l_aLIBSHAREDPOST := { "hbmainstd", "hbmainwin" }
IF !( hbmk[ _HBMK_cCOMP ] $ "icc|iccia64" )
@@ -4102,19 +4077,8 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
IF hbmk[ _HBMK_lDEBUG ]
AAdd( hbmk[ _HBMK_aOPTL ], "-debug" )
ENDIF
l_aLIBSYS := ArrayAJoin( { l_aLIBSYS, l_aLIBSYSCORE, l_aLIBSYSMISC } )
DO CASE
CASE hbmk[ _HBMK_cCOMP ] == "pocc64"
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + "-x64" + cLibExt,;
"harbour" + cDL_Version_Alter + "-x64" + cLibExt ) }
CASE hbmk[ _HBMK_cCOMP ] == "poccarm"
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + "-wce-arm" + cLibExt,;
"harbour" + cDL_Version_Alter + "-wce-arm" + cLibExt ) }
OTHERWISE
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + cLibExt,;
"harbour" + cDL_Version_Alter + cLibExt ) }
ENDCASE
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cDL_Version_Alter + hbmk_DYNSUFFIX( hbmk ) + cLibExt,;
"harbour" + cDL_Version_Alter + hbmk_DYNSUFFIX( hbmk ) + cLibExt ) }
l_aLIBSHAREDPOST := { "hbmainstd", "hbmainwin" }
CASE ( hbmk[ _HBMK_cPLAT ] == "sunos" .AND. hbmk[ _HBMK_cCOMP ] == "sunpro" ) .OR. ;
@@ -9151,7 +9115,7 @@ STATIC FUNCTION MacroProc( hbmk, cString, cFileName, cMacroPrefix )
DO WHILE ( nStart := At( cStart, cString ) ) > 0 .AND. ;
( nEnd := hb_At( _MACRO_CLOSE, cString, nStart + Len( cStart ) ) ) > 0
cMacro := MacroGet( hbmk, Upper( SubStr( cString, nStart + Len( cStart ), nEnd - nStart - Len( cStart ) ) ), cFileName )
cMacro := MacroGet( hbmk, SubStr( cString, nStart + Len( cStart ), nEnd - nStart - Len( cStart ) ), cFileName )
cString := Left( cString, nStart - 1 ) + cMacro + SubStr( cString, nEnd + Len( _MACRO_CLOSE ) )
ENDDO
@@ -9170,7 +9134,7 @@ STATIC FUNCTION MacroProc( hbmk, cString, cFileName, cMacroPrefix )
STATIC FUNCTION MacroGet( hbmk, cMacro, cFileName )
SWITCH cMacro
SWITCH Upper( cMacro )
CASE "HB_ROOT"
cMacro := DirAddPathSep( hb_DirBase() ) ; EXIT
CASE "HB_DIR"
@@ -9206,6 +9170,8 @@ STATIC FUNCTION MacroGet( hbmk, cMacro, cFileName )
cMacro := _WORKDIR_BASE_ ; EXIT
CASE "HB_WORKDYNSUB"
cMacro := hbmk[ _HBMK_cWorkDirDynSub ] ; EXIT
CASE "HB_DYNSUFFIX"
cMacro := hbmk_DYNSUFFIX( hbmk ) ; EXIT
CASE "HB_MAJOR"
cMacro := hb_ntos( hb_Version( HB_VERSION_MAJOR ) ) ; EXIT
CASE "HB_MINOR"
@@ -10420,6 +10386,26 @@ STATIC FUNCTION hbmk_CPU( hbmk )
RETURN ""
/* Return standard dynamic lib name suffix used by Harbour */
STATIC FUNCTION hbmk_DYNSUFFIX( hbmk )
SWITCH hbmk[ _HBMK_cPLAT ]
CASE "wce"
RETURN "-wce-" + hbmk[ _HBMK_cCPU ]
CASE "win"
DO CASE
CASE hbmk[ _HBMK_cCOMP ] == "bcc"
RETURN "-bcc"
CASE hbmk[ _HBMK_cCPU ] == "x86_64"
RETURN "-x64"
CASE !( hbmk[ _HBMK_cCPU ] == "x86" )
RETURN "-" + hbmk[ _HBMK_cCPU ]
ENDCASE
EXIT
ENDSWITCH
RETURN ""
/* Keep this public, it's used from macro. */
FUNCTION hbmk_KEYW( hbmk, cKeyword, cValue, cOperator )
LOCAL tmp