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

* utils/hbmk2/hbmk2.prg
    + Extended plugin API:
      - New macro expansion function:
          hbmk2_Macro( ctx, <str> )
      - New host variables:
          cTARGETTYPE, cTARGETNAME, lDEBUG, lMAP, lSTRIP, lINFO,
          lBEEP, lRUN, nErrorLevel

  * include/hbextern.ch
    + Added two recently added functions.

  * package/winuni/RELNOTES
    * Update one version number.
This commit is contained in:
Viktor Szakats
2010-05-25 17:09:12 +00:00
parent 3562c1e4b8
commit 513edc3356
4 changed files with 127 additions and 85 deletions

View File

@@ -17,6 +17,21 @@
past entries belonging to author(s): Viktor Szakats.
*/
2010-05-25 19:08 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.prg
+ Extended plugin API:
- New macro expansion function:
hbmk2_Macro( ctx, <str> )
- New host variables:
cTARGETTYPE, cTARGETNAME, lDEBUG, lMAP, lSTRIP, lINFO,
lBEEP, lRUN, nErrorLevel
* include/hbextern.ch
+ Added two recently added functions.
* package/winuni/RELNOTES
* Update one version number.
2010-05-25 16:42 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* INSTALL
+ Added one more envvar which is apparently used by users

View File

@@ -1149,6 +1149,8 @@ EXTERNAL HB_HSETCASEMATCH
EXTERNAL HB_HSETBINARY
EXTERNAL HB_HBINARY
EXTERNAL HB_HSORT
EXTERNAL HB_HKEEPORDER
EXTERNAL HB_HSETORDER
EXTERNAL HB_REGEXCOMP
EXTERNAL HB_ISREGEX

View File

@@ -60,7 +60,7 @@ Tool/lib versions used to create this package:
Cairo 1.8.8
libcurl 7.20.0
Firebird 2.5.0rc1
FreeImage 3.13.0
FreeImage 3.13.1
GD 2.0.35
MySQL 5.1.41
OCILIB 3.6.0

View File

@@ -365,8 +365,12 @@ REQUEST hbmk_KEYW
#define _HBMK_cWorkDir 98
#define _HBMK_nCmd_Esc 99
#define _HBMK_nScr_Esc 100
#define _HBMK_nErrorLevel 101
#define _HBMK_MAX_ 100
#define _HBMK_cPROGDIR 102
#define _HBMK_cPROGNAME 103
#define _HBMK_MAX_ 103
#ifndef _HBMK_EMBEDDED_
@@ -625,8 +629,6 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
LOCAL l_aLIBSYSMISC := {}
LOCAL l_aLIBSTATICPOST := {}
LOCAL l_aOPTRUN
LOCAL l_cPROGDIR
LOCAL l_cPROGNAME
LOCAL l_cIMPLIBNAME
LOCAL l_aOBJ
LOCAL l_aOBJA
@@ -700,7 +702,6 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
LOCAL cBin_Dyn
LOCAL bBlk_ImpLib
LOCAL cPath_CompC
LOCAL nErrorLevel := 0
LOCAL tmp, tmp1, tmp2, tmp3, array
LOCAL cLibBCC_CRTL
LOCAL cScriptFile
@@ -755,6 +756,8 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
s_cSecToken := StrZero( hb_Random( 1, 4294967294 ), 10, 0 )
ENDIF
hbmk[ _HBMK_nErrorLevel ] := 0
hbmk[ _HBMK_cWorkDir ] := NIL
hbmk[ _HBMK_lCreateLib ] := .F.
@@ -1554,8 +1557,8 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
hbmk[ _HBMK_aIMPLIBSRC ] := {}
hbmk[ _HBMK_aDEF ] := {}
l_aOBJA := {}
l_cPROGDIR := NIL
l_cPROGNAME := NIL
hbmk[ _HBMK_cPROGDIR ] := NIL
hbmk[ _HBMK_cPROGNAME ] := NIL
l_cIMPLIBNAME := NIL
hbmk[ _HBMK_cFIRST ] := NIL
hbmk[ _HBMK_aPO ] := {}
@@ -1586,7 +1589,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
cParam := FN_ExtSet( cParam, ".hbm" )
ENDIF
IF !( Lower( FN_ExtGet( cParam ) ) == ".hbm" ) .AND. lAcceptLDClipper
rtlnk_process( hbmk, MemoRead( cParam ), @l_cPROGNAME, @hbmk[ _HBMK_aOBJUSER ], @hbmk[ _HBMK_aLIBUSER ] )
rtlnk_process( hbmk, MemoRead( cParam ), @hbmk[ _HBMK_cPROGNAME ], @hbmk[ _HBMK_aOBJUSER ], @hbmk[ _HBMK_aLIBUSER ] )
IF ! Empty( hbmk[ _HBMK_aOBJUSER ] )
DEFAULT hbmk[ _HBMK_cFIRST ] TO hbmk[ _HBMK_aOBJUSER ][ 1 ]
ENDIF
@@ -1880,20 +1883,20 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
CASE Empty( cDir )
tmp := PathProc( tmp, aParam[ _PAR_cFileName ] )
hb_FNameSplit( tmp, @cDir, @cName, @cExt )
IF l_cPROGDIR == NIL
l_cPROGDIR := cDir
IF hbmk[ _HBMK_cPROGDIR ] == NIL
hbmk[ _HBMK_cPROGDIR ] := cDir
ENDIF
l_cPROGNAME := FN_NameExtGet( tmp )
hbmk[ _HBMK_cPROGNAME ] := FN_NameExtGet( tmp )
CASE ! Empty( cDir ) .AND. Empty( cName ) .AND. Empty( cExt )
l_cPROGDIR := PathProc( cDir, aParam[ _PAR_cFileName ] )
hbmk[ _HBMK_cPROGDIR ] := PathProc( cDir, aParam[ _PAR_cFileName ] )
OTHERWISE /* ! Empty( cDir ) .AND. !( Empty( cName ) .AND. Empty( cExt ) ) */
l_cPROGDIR := PathProc( cDir, aParam[ _PAR_cFileName ] )
l_cPROGNAME := FN_NameExtGet( tmp )
hbmk[ _HBMK_cPROGDIR ] := PathProc( cDir, aParam[ _PAR_cFileName ] )
hbmk[ _HBMK_cPROGNAME ] := FN_NameExtGet( tmp )
ENDCASE
ENDIF
ELSE
l_cPROGDIR := NIL
l_cPROGNAME := NIL
hbmk[ _HBMK_cPROGDIR ] := NIL
hbmk[ _HBMK_cPROGNAME ] := NIL
ENDIF
ENDIF
@@ -2321,12 +2324,12 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
/* If -o with full name wasn't specified, let's
make it the first source file specified. */
DEFAULT l_cPROGNAME TO FN_NameGet( hbmk[ _HBMK_cFIRST ] )
DEFAULT hbmk[ _HBMK_cPROGNAME ] TO FN_NameGet( hbmk[ _HBMK_cFIRST ] )
/* Combine output dir with output name. */
IF ! Empty( l_cPROGDIR )
hb_FNameSplit( l_cPROGNAME, @cDir, @cName, @cExt )
l_cPROGNAME := hb_FNameMerge( iif( Empty( cDir ), l_cPROGDIR, cDir ), cName, cExt )
IF ! Empty( hbmk[ _HBMK_cPROGDIR ] )
hb_FNameSplit( hbmk[ _HBMK_cPROGNAME ], @cDir, @cName, @cExt )
hbmk[ _HBMK_cPROGNAME ] := hb_FNameMerge( iif( Empty( cDir ), hbmk[ _HBMK_cPROGDIR ], cDir ), cName, cExt )
ENDIF
ENDIF
@@ -2340,9 +2343,9 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
"( win || wce ) & !( allmingw | cygwin )". This may change in the future.
IMPORTANT: Keep this condition in sync with setting -DHB_DYNLIB C compiler flag */
IF hbmk[ _HBMK_lCreateDyn ] .AND. !( hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm|cygwin" )
DEFAULT hbmk[ _HBMK_cWorkDir ] TO FN_DirGet( l_cPROGNAME ) + _WORKDIR_DEF_ + hb_osPathSeparator() + "hbdyn"
DEFAULT hbmk[ _HBMK_cWorkDir ] TO FN_DirGet( hbmk[ _HBMK_cPROGNAME ] ) + _WORKDIR_DEF_ + hb_osPathSeparator() + "hbdyn"
ELSE
DEFAULT hbmk[ _HBMK_cWorkDir ] TO FN_DirGet( l_cPROGNAME ) + _WORKDIR_DEF_
DEFAULT hbmk[ _HBMK_cWorkDir ] TO FN_DirGet( hbmk[ _HBMK_cPROGNAME ] ) + _WORKDIR_DEF_
ENDIF
IF ! Empty( hbmk[ _HBMK_cWorkDir ] )
IF ! DirBuild( hbmk[ _HBMK_cWorkDir ] )
@@ -3235,7 +3238,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
AAdd( hbmk[ _HBMK_aOPTC ], "-y -v" )
AAdd( hbmk[ _HBMK_aOPTL ], "-v" )
ELSE
AAdd( l_aCLEAN, PathSepToTarget( hbmk, FN_ExtSet( l_cPROGNAME, ".tds" ) ) )
AAdd( l_aCLEAN, PathSepToTarget( hbmk, FN_ExtSet( hbmk[ _HBMK_cPROGNAME ], ".tds" ) ) )
ENDIF
IF hbmk[ _HBMK_lGUI ]
AAdd( hbmk[ _HBMK_aOPTC ], "-tW" )
@@ -3778,9 +3781,9 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
FOR EACH cMakeImpLibDLL IN hbmk[ _HBMK_aIMPLIBSRC ]
cMakeImpLibDLL := FN_ExtDef( cMakeImpLibDLL, ".dll" )
tmp1 := l_cPROGNAME
tmp1 := hbmk[ _HBMK_cPROGNAME ]
DEFAULT tmp1 TO FN_NameGet( cMakeImpLibDLL )
tmp := FN_CookLib( hb_FNameMerge( l_cPROGDIR, tmp1 ), cLibLibPrefix, cLibLibExt )
tmp := FN_CookLib( hb_FNameMerge( hbmk[ _HBMK_cPROGDIR ], tmp1 ), cLibLibPrefix, cLibLibExt )
SWITCH Eval( bBlk_ImpLib, cMakeImpLibDLL, tmp, ArrayToList( hbmk[ _HBMK_aOPTI ] ) )
CASE _HBMK_IMPLIB_OK
@@ -3823,20 +3826,20 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
ENDIF
IF ! lStopAfterInit .AND. ! lStopAfterHarbour
hb_FNameSplit( l_cPROGNAME, @cDir, @cName, @cExt )
hb_FNameSplit( hbmk[ _HBMK_cPROGNAME ], @cDir, @cName, @cExt )
DO CASE
CASE ! lStopAfterCComp
IF Empty( cExt ) .AND. ! Empty( cBinExt )
l_cPROGNAME := hb_FNameMerge( cDir, cName, cBinExt )
hbmk[ _HBMK_cPROGNAME ] := hb_FNameMerge( cDir, cName, cBinExt )
ENDIF
l_cIMPLIBNAME := hb_FNameMerge( cDir, cLibLibPrefix + cName, cLibLibExt )
CASE lStopAfterCComp .AND. hbmk[ _HBMK_lCreateDyn ]
IF Empty( cExt ) .AND. ! Empty( cDynLibExt )
l_cPROGNAME := hb_FNameMerge( cDir, cName, cDynLibExt )
hbmk[ _HBMK_cPROGNAME ] := hb_FNameMerge( cDir, cName, cDynLibExt )
ENDIF
l_cIMPLIBNAME := hb_FNameMerge( cDir, cLibLibPrefix + cName, cLibLibExt )
CASE lStopAfterCComp .AND. hbmk[ _HBMK_lCreateLib ]
l_cPROGNAME := hb_FNameMerge( cDir, cLibLibPrefix + cName, iif( Empty( cLibLibExt ), cExt, cLibLibExt ) )
hbmk[ _HBMK_cPROGNAME ] := hb_FNameMerge( cDir, cLibLibPrefix + cName, iif( Empty( cLibLibExt ), cExt, cLibLibExt ) )
ENDCASE
ENDIF
@@ -4518,7 +4521,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
/* Combine target dir with .hbl output name. */
hb_FNameSplit( l_cPROGNAME, @tmp )
hb_FNameSplit( hbmk[ _HBMK_cPROGNAME ], @tmp )
IF Empty( tmp )
hbmk[ _HBMK_cHBL ] := PathProc( hbmk[ _HBMK_cHBL ], hbmk[ _HBMK_cHBLDir ] )
ELSE
@@ -4621,7 +4624,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
OutErr( cCommand + _OUT_EOL )
ENDIF
IF ! hbmk[ _HBMK_lIGNOREERROR ]
nErrorLevel := 6
hbmk[ _HBMK_nErrorLevel ] := 6
EXIT
ENDIF
ENDIF
@@ -4663,7 +4666,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
OutErr( cCommand + _OUT_EOL )
ENDIF
IF ! hbmk[ _HBMK_lIGNOREERROR ]
nErrorLevel := 6
hbmk[ _HBMK_nErrorLevel ] := 6
ENDIF
ENDIF
@@ -4673,7 +4676,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
ENDIF
ENDIF
IF nErrorLevel == 0
IF hbmk[ _HBMK_nErrorLevel ] == 0
IF hbmk[ _HBMK_lINC ] .AND. ! hbmk[ _HBMK_lREBUILD ]
l_aPRG_TODO := {}
@@ -4712,7 +4715,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
cBin_CompCGEN := cBin_CompCPP
ENDIF
IF nErrorLevel == 0 .AND. Len( l_aCGEN_TODO ) > 0
IF hbmk[ _HBMK_nErrorLevel ] == 0 .AND. Len( l_aCGEN_TODO ) > 0
IF ! Empty( cBin_CompCGEN )
@@ -4733,7 +4736,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
/* Order is significant */
cOpt_CompC := StrTran( cOpt_CompC, "{FC}" , iif( hbmk[ _HBMK_lBLDFLGC ], hb_Version( HB_VERSION_FLAG_C ) + " ", "" ) +;
GetEnv( "HB_USER_CFLAGS" ) + " " + ArrayToList( hbmk[ _HBMK_aOPTC ] ) )
cOpt_CompC := StrTran( cOpt_CompC, "{OD}" , FN_Escape( PathSepToTarget( hbmk, FN_DirGet( l_cPROGNAME ) ), nOpt_Esc ) )
cOpt_CompC := StrTran( cOpt_CompC, "{OD}" , FN_Escape( PathSepToTarget( hbmk, FN_DirGet( hbmk[ _HBMK_cPROGNAME ] ) ), nOpt_Esc ) )
cOpt_CompC := StrTran( cOpt_CompC, "{DI}" , FN_Escape( l_cHB_INC_INSTALL, nOpt_Esc ) )
IF "{IC}" $ cOpt_CompC
@@ -4745,7 +4748,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
ELSE
IF ! CompileCLoop( hbmk, aTODO, cBin_CompCGEN, cOpt_CompC, cObjExt, nOpt_Esc, 0, 0 )
IF ! hbmk[ _HBMK_lIGNOREERROR ]
nErrorLevel := 6
hbmk[ _HBMK_nErrorLevel ] := 6
EXIT
ENDIF
ENDIF
@@ -4757,13 +4760,13 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
hb_threadJoin( thread, @tmp )
IF ! tmp
IF ! hbmk[ _HBMK_lIGNOREERROR ]
nErrorLevel := 6
hbmk[ _HBMK_nErrorLevel ] := 6
ENDIF
ENDIF
NEXT
ENDIF
ELSE
cOpt_CompC := StrTran( cOpt_CompC, "{OO}" , FN_Escape( PathSepToTarget( hbmk, FN_ExtSet( l_cPROGNAME, cObjExt ) ), nOpt_Esc ) )
cOpt_CompC := StrTran( cOpt_CompC, "{OO}" , FN_Escape( PathSepToTarget( hbmk, FN_ExtSet( hbmk[ _HBMK_cPROGNAME ], cObjExt ) ), nOpt_Esc ) )
cOpt_CompC := StrTran( cOpt_CompC, "{OW}" , FN_Escape( PathSepToTarget( hbmk, hbmk[ _HBMK_cWorkDir ] ), nOpt_Esc ) )
aThreads := {}
@@ -4811,7 +4814,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
OutErr( cCommand + _OUT_EOL )
ENDIF
IF ! hbmk[ _HBMK_lIGNOREERROR ]
nErrorLevel := 6
hbmk[ _HBMK_nErrorLevel ] := 6
EXIT
ENDIF
ENDIF
@@ -4836,7 +4839,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
OutErr( thread[ 2 ] + _OUT_EOL )
ENDIF
IF ! hbmk[ _HBMK_lIGNOREERROR ]
nErrorLevel := 6
hbmk[ _HBMK_nErrorLevel ] := 6
ENDIF
ENDIF
NEXT
@@ -4844,23 +4847,23 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
ENDIF
ELSE
hbmk_OutErr( hbmk, I_( "Error: C/C++ command is not implemented for this platform/compiler." ) )
nErrorLevel := 8
hbmk[ _HBMK_nErrorLevel ] := 8
ENDIF
ENDIF
NEXT
ENDIF
IF nErrorLevel == 0
IF hbmk[ _HBMK_nErrorLevel ] == 0
lTargetUpToDate := .F.
IF hbmk[ _HBMK_lINC ] .AND. ! hbmk[ _HBMK_lREBUILD ]
IF hbmk[ _HBMK_lDEBUGINC ]
hbmk_OutStd( hbmk, hb_StrFormat( "debuginc: target %1$s", l_cPROGNAME ) )
hbmk_OutStd( hbmk, hb_StrFormat( "debuginc: target %1$s", hbmk[ _HBMK_cPROGNAME ] ) )
ENDIF
IF hb_FGetDateTime( l_cPROGNAME, @tTarget )
IF hb_FGetDateTime( hbmk[ _HBMK_cPROGNAME ], @tTarget )
lTargetUpToDate := .T.
IF lTargetUpToDate
@@ -4892,20 +4895,20 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
ENDIF
ENDIF
IF nErrorLevel == 0 .AND. ( Len( l_aOBJ ) + Len( hbmk[ _HBMK_aOBJUSER ] ) + Len( l_aOBJA ) ) > 0 .AND. ! hbmk[ _HBMK_lCLEAN ]
IF hbmk[ _HBMK_nErrorLevel ] == 0 .AND. ( Len( l_aOBJ ) + Len( hbmk[ _HBMK_aOBJUSER ] ) + Len( l_aOBJA ) ) > 0 .AND. ! hbmk[ _HBMK_lCLEAN ]
IF lTargetUpToDate
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Target up to date: %1$s" ), l_cPROGNAME ) )
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Target up to date: %1$s" ), hbmk[ _HBMK_cPROGNAME ] ) )
ELSE
IF ! DirBuild( FN_DirGet( l_cPROGNAME ) )
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Cannot create directory for target '%1$s'." ), l_cPROGNAME ) )
IF ! DirBuild( FN_DirGet( hbmk[ _HBMK_cPROGNAME ] ) )
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Cannot create directory for target '%1$s'." ), hbmk[ _HBMK_cPROGNAME ] ) )
ENDIF
IF hbmk[ _HBMK_lREBUILD ] .OR. ;
( ! hbmk[ _HBMK_lINC ] .AND. lStopAfterCComp .AND. hbmk[ _HBMK_lCreateLib ] .AND. ! Empty( cBin_Lib ) ) /* non-incremental + static lib */
IF hb_FileExists( PathSepToTarget( hbmk, l_cPROGNAME ) ) .AND. ;
FErase( PathSepToTarget( hbmk, l_cPROGNAME ) ) == F_ERROR
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Cannot delete existing target '%1$s'." ), l_cPROGNAME ) )
IF hb_FileExists( PathSepToTarget( hbmk, hbmk[ _HBMK_cPROGNAME ] ) ) .AND. ;
FErase( PathSepToTarget( hbmk, hbmk[ _HBMK_cPROGNAME ] ) ) == F_ERROR
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Cannot delete existing target '%1$s'." ), hbmk[ _HBMK_cPROGNAME ] ) )
ENDIF
ENDIF
@@ -4915,7 +4918,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
PlugIn_Execute( hbmk, "pre_link" )
IF ( hbmk[ _HBMK_lINC ] .AND. ! hbmk[ _HBMK_lQuiet ] ) .OR. hbmk[ _HBMK_lInfo ]
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Linking... %1$s" ), PathSepToTarget( hbmk, l_cPROGNAME ) ) )
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Linking... %1$s" ), PathSepToTarget( hbmk, hbmk[ _HBMK_cPROGNAME ] ) ) )
ENDIF
/* Linking */
@@ -4930,8 +4933,8 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
cOpt_Link := StrTran( cOpt_Link, "{LA}" , ArrayToList( l_aOBJA,, nOpt_Esc ) )
cOpt_Link := StrTran( cOpt_Link, "{LL}" , ArrayToList( l_aLIB,, nOpt_Esc, cLibPrefix ) )
cOpt_Link := StrTran( cOpt_Link, "{LB}" , ArrayToList( l_aLIBA,, nOpt_Esc ) )
cOpt_Link := StrTran( cOpt_Link, "{OE}" , FN_Escape( PathSepToTarget( hbmk, l_cPROGNAME ), nOpt_Esc ) )
cOpt_Link := StrTran( cOpt_Link, "{OM}" , FN_Escape( PathSepToTarget( hbmk, FN_ExtSet( l_cPROGNAME, ".map" ) ), nOpt_Esc ) )
cOpt_Link := StrTran( cOpt_Link, "{OE}" , FN_Escape( PathSepToTarget( hbmk, hbmk[ _HBMK_cPROGNAME ] ), nOpt_Esc ) )
cOpt_Link := StrTran( cOpt_Link, "{OM}" , FN_Escape( PathSepToTarget( hbmk, FN_ExtSet( hbmk[ _HBMK_cPROGNAME ], ".map" ) ), nOpt_Esc ) )
cOpt_Link := StrTran( cOpt_Link, "{OI}" , FN_Escape( PathSepToTarget( hbmk, l_cIMPLIBNAME ), nOpt_Esc ) )
cOpt_Link := StrTran( cOpt_Link, "{DL}" , ArrayToList( hbmk[ _HBMK_aLIBPATH ], cLibPathSep, nOpt_Esc, cLibPathPrefix ) )
cOpt_Link := StrTran( cOpt_Link, "{DB}" , l_cHB_BIN_INSTALL )
@@ -4970,7 +4973,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
OutErr( cCommand + _OUT_EOL )
ENDIF
IF ! hbmk[ _HBMK_lIGNOREERROR ]
nErrorLevel := 7
hbmk[ _HBMK_nErrorLevel ] := 7
ENDIF
ENDIF
@@ -4978,20 +4981,20 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
FErase( cScriptFile )
ENDIF
IF nErrorLevel == 0 .AND. hbmk[ _HBMK_lGUI ] .AND. hbmk[ _HBMK_cPLAT ] == "darwin"
IF hbmk[ _HBMK_nErrorLevel ] == 0 .AND. hbmk[ _HBMK_lGUI ] .AND. hbmk[ _HBMK_cPLAT ] == "darwin"
/* Build app bundle for OS X GUI apps. (experimental) */
tmp := FN_DirGet( l_cPROGNAME )
tmp := FN_DirGet( hbmk[ _HBMK_cPROGNAME ] )
IF ! Empty( tmp )
tmp += hb_osPathSeparator()
ENDIF
tmp += FN_NameGet( l_cPROGNAME ) + ".app" + hb_osPathSeparator() + "Contents"
tmp += FN_NameGet( hbmk[ _HBMK_cPROGNAME ] ) + ".app" + hb_osPathSeparator() + "Contents"
IF DirBuild( tmp + hb_osPathSeparator() + "MacOS" )
hb_FCopy( l_cPROGNAME, tmp + hb_osPathSeparator() + "MacOS" + hb_osPathSeparator() + FN_NameGet( l_cPROGNAME ) )
hb_FCopy( hbmk[ _HBMK_cPROGNAME ], tmp + hb_osPathSeparator() + "MacOS" + hb_osPathSeparator() + FN_NameGet( hbmk[ _HBMK_cPROGNAME ] ) )
IF ! hb_FileExists( tmp + hb_osPathSeparator() + "Info.plist" )
hb_MemoWrit( tmp + hb_osPathSeparator() + "Info.plist", MacOSXFiles( hbmk, 1, FN_NameGet( l_cPROGNAME ) ) )
hb_MemoWrit( tmp + hb_osPathSeparator() + "Info.plist", MacOSXFiles( hbmk, 1, FN_NameGet( hbmk[ _HBMK_cPROGNAME ] ) ) )
ENDIF
IF ! hb_FileExists( tmp + hb_osPathSeparator() + "PkgInfo" )
hb_MemoWrit( tmp + hb_osPathSeparator() + "PkgInfo", MacOSXFiles( hbmk, 2, FN_NameGet( l_cPROGNAME ) ) )
hb_MemoWrit( tmp + hb_osPathSeparator() + "PkgInfo", MacOSXFiles( hbmk, 2, FN_NameGet( hbmk[ _HBMK_cPROGNAME ] ) ) )
ENDIF
IF ! Empty( hbmk[ _HBMK_aICON ] )
IF DirBuild( tmp + hb_osPathSeparator() + "Resources" )
@@ -5008,7 +5011,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
PlugIn_Execute( hbmk, "pre_link" )
IF ( hbmk[ _HBMK_lINC ] .AND. ! hbmk[ _HBMK_lQuiet ] ) .OR. hbmk[ _HBMK_lInfo ]
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Creating dynamic library... %1$s" ), PathSepToTarget( hbmk, l_cPROGNAME ) ) )
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Creating dynamic library... %1$s" ), PathSepToTarget( hbmk, hbmk[ _HBMK_cPROGNAME ] ) ) )
ENDIF
/* Lib creation (dynamic) */
@@ -5022,8 +5025,8 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
cOpt_Dyn := StrTran( cOpt_Dyn, "{LL}" , ArrayToList( l_aLIB,, nOpt_Esc, cLibPrefix ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{LB}" , ArrayToList( l_aLIBA,, nOpt_Esc ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{IM}" , ArrayToList( hbmk[ _HBMK_aDEF ],, nOpt_Esc, cDynDefPrefix ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{OD}" , FN_Escape( PathSepToTarget( hbmk, l_cPROGNAME ), nOpt_Esc ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{OM}" , FN_Escape( PathSepToTarget( hbmk, FN_ExtSet( l_cPROGNAME, ".map" ) ), nOpt_Esc ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{OD}" , FN_Escape( PathSepToTarget( hbmk, hbmk[ _HBMK_cPROGNAME ] ), nOpt_Esc ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{OM}" , FN_Escape( PathSepToTarget( hbmk, FN_ExtSet( hbmk[ _HBMK_cPROGNAME ], ".map" ) ), nOpt_Esc ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{OI}" , FN_Escape( PathSepToTarget( hbmk, l_cIMPLIBNAME ), nOpt_Esc ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{DL}" , ArrayToList( hbmk[ _HBMK_aLIBPATH ], cLibPathSep, nOpt_Esc, cLibPathPrefix ) )
cOpt_Dyn := StrTran( cOpt_Dyn, "{DB}" , l_cHB_BIN_INSTALL )
@@ -5062,7 +5065,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
OutErr( cCommand + _OUT_EOL )
ENDIF
IF ! hbmk[ _HBMK_lIGNOREERROR ]
nErrorLevel := 7
hbmk[ _HBMK_nErrorLevel ] := 7
ENDIF
ENDIF
@@ -5075,7 +5078,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
PlugIn_Execute( hbmk, "pre_lib" )
IF ( hbmk[ _HBMK_lINC ] .AND. ! hbmk[ _HBMK_lQuiet ] ) .OR. hbmk[ _HBMK_lInfo ]
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Creating static library... %1$s" ), PathSepToTarget( hbmk, l_cPROGNAME ) ) )
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Creating static library... %1$s" ), PathSepToTarget( hbmk, hbmk[ _HBMK_cPROGNAME ] ) ) )
ENDIF
/* Lib creation (static) */
@@ -5087,7 +5090,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
cOpt_Lib := StrTran( cOpt_Lib, "{LO}" , ArrayToList( ArrayJoin( l_aOBJ, hbmk[ _HBMK_aOBJUSER ] ),, nOpt_Esc, cLibObjPrefix ) )
cOpt_Lib := StrTran( cOpt_Lib, "{LL}" , ArrayToList( l_aLIB,, nOpt_Esc, cLibPrefix ) )
cOpt_Lib := StrTran( cOpt_Lib, "{LB}" , ArrayToList( l_aLIBA,, nOpt_Esc ) )
cOpt_Lib := StrTran( cOpt_Lib, "{OL}" , FN_Escape( PathSepToTarget( hbmk, l_cPROGNAME ), nOpt_Esc ) )
cOpt_Lib := StrTran( cOpt_Lib, "{OL}" , FN_Escape( PathSepToTarget( hbmk, hbmk[ _HBMK_cPROGNAME ] ), nOpt_Esc ) )
cOpt_Lib := StrTran( cOpt_Lib, "{DL}" , ArrayToList( hbmk[ _HBMK_aLIBPATH ], cLibPathSep, nOpt_Esc, cLibPathPrefix ) )
cOpt_Lib := StrTran( cOpt_Lib, "{DB}" , l_cHB_BIN_INSTALL )
@@ -5125,7 +5128,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
OutErr( cCommand + _OUT_EOL )
ENDIF
IF ! hbmk[ _HBMK_lIGNOREERROR ]
nErrorLevel := 7
hbmk[ _HBMK_nErrorLevel ] := 7
ENDIF
ENDIF
@@ -5172,12 +5175,12 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
DirUnbuild( hbmk[ _HBMK_cWorkDir ] )
ENDIF
IF nErrorLevel == 0 .AND. ! hbmk[ _HBMK_lCLEAN ] .AND. ! lTargetUpToDate .AND. ;
IF hbmk[ _HBMK_nErrorLevel ] == 0 .AND. ! hbmk[ _HBMK_lCLEAN ] .AND. ! lTargetUpToDate .AND. ;
( ! lStopAfterCComp .OR. hbmk[ _HBMK_lCreateLib ] .OR. hbmk[ _HBMK_lCreateDyn ] )
IF ! Empty( cBin_Post )
cOpt_Post := StrTran( cOpt_Post, "{OB}", PathSepToTarget( hbmk, l_cPROGNAME ) )
cOpt_Post := StrTran( cOpt_Post, "{OB}", PathSepToTarget( hbmk, hbmk[ _HBMK_cPROGNAME ] ) )
cOpt_Post := AllTrim( cOpt_Post )
cCommand := cBin_Post + " " + cOpt_Post
@@ -5247,7 +5250,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
CASE hbmk[ _HBMK_nCOMPR ] == _COMPR_MAX ; cOpt_Cprs += " " + cOpt_CprsMax
ENDCASE
cOpt_Cprs := StrTran( cOpt_Cprs, "{OB}", PathSepToTarget( hbmk, l_cPROGNAME ) )
cOpt_Cprs := StrTran( cOpt_Cprs, "{OB}", PathSepToTarget( hbmk, hbmk[ _HBMK_cPROGNAME ] ) )
cOpt_Cprs := AllTrim( cOpt_Cprs )
cCommand := cBin_Cprs + " " + cOpt_Cprs
@@ -5270,12 +5273,12 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
IF ! Empty( hbmk[ _HBMK_aINSTPATH ] )
FOR EACH tmp IN hbmk[ _HBMK_aINSTPATH ]
IF Empty( FN_NameExtGet( tmp ) )
tmp1 := DirAddPathSep( PathSepToSelf( tmp ) ) + FN_NameExtGet( l_cPROGNAME )
tmp1 := DirAddPathSep( PathSepToSelf( tmp ) ) + FN_NameExtGet( hbmk[ _HBMK_cPROGNAME ] )
ELSE
tmp1 := PathSepToSelf( tmp )
ENDIF
IF DirBuild( FN_DirGet( tmp1 ) )
IF hb_FCopy( l_cPROGNAME, tmp1 ) == F_ERROR
IF hb_FCopy( hbmk[ _HBMK_cPROGNAME ], tmp1 ) == F_ERROR
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Copying target to %1$s failed with %2$s." ), tmp1, hb_ntos( FError() ) ) )
ELSEIF hbmk[ _HBMK_lInfo ]
hbmk_OutStd( hbmk, hb_StrFormat( I_( "Copied target to %1$s" ), tmp1 ) )
@@ -5297,16 +5300,16 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
ENDIF
IF ! lSkipBuild .AND. hbmk[ _HBMK_lBEEP ]
DoBeep( nErrorLevel == 0 )
DoBeep( hbmk[ _HBMK_nErrorLevel ] == 0 )
ENDIF
IF ! lStopAfterHarbour .AND. ! lStopAfterCComp .AND. ;
! hbmk[ _HBMK_lCreateLib ] .AND. ! hbmk[ _HBMK_lCreateDyn ] .AND. ;
nErrorLevel == 0 .AND. ! hbmk[ _HBMK_lCLEAN ] .AND. hbmk[ _HBMK_lRUN ]
cCommand := l_cPROGNAME
hbmk[ _HBMK_nErrorLevel ] == 0 .AND. ! hbmk[ _HBMK_lCLEAN ] .AND. hbmk[ _HBMK_lRUN ]
cCommand := hbmk[ _HBMK_cPROGNAME ]
#if defined( __PLATFORM__UNIX )
IF Empty( FN_DirGet( l_cPROGNAME ) )
cCommand := "." + hb_osPathSeparator() + l_cPROGNAME
IF Empty( FN_DirGet( hbmk[ _HBMK_cPROGNAME ] ) )
cCommand := "." + hb_osPathSeparator() + hbmk[ _HBMK_cPROGNAME ]
ENDIF
#endif
cCommand := PathSepToTarget( hbmk, cCommand )
@@ -5337,11 +5340,11 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
OutStd( cCommand + _OUT_EOL )
ENDIF
IF ! hbmk[ _HBMK_lDONTEXEC ]
nErrorLevel := hb_run( cCommand )
hbmk[ _HBMK_nErrorLevel ] := hb_run( cCommand )
ENDIF
ENDIF
RETURN nErrorLevel
RETURN hbmk[ _HBMK_nErrorLevel ]
STATIC PROCEDURE DoBeep( lSuccess )
LOCAL nRepeat := iif( lSuccess, 1, 2 )
@@ -5950,7 +5953,7 @@ STATIC PROCEDURE PlugIn_Load( hbmk )
FUNCTION hbmk2_FindInPath( ... ) ; RETURN FindInPath( ... )
FUNCTION hbmk2_PathNormalize( ... ) ; RETURN PathNormalize( ... )
FUNCTION hbmk2_PathProc( ... ) ; RETURN PathProc( ... )
FUNCTION hbmk2_PathMakeAbsolute( ... ) ; RETURN PathProc( ... )
FUNCTION hbmk2_PathMakeRelative( ... ) ; RETURN PathMakeRelative( ... )
FUNCTION hbmk2_PathSepToForward( ... ) ; RETURN PathSepToForward( ... )
FUNCTION hbmk2_PathSepToSelf( ... ) ; RETURN PathSepToSelf( ... )
@@ -5970,6 +5973,10 @@ FUNCTION hbmk2_StrStripQuote( ... ) ; RETURN StrStripQuote( ... )
FUNCTION hbmk2_OutStdRaw( ... ) ; RETURN ( OutStd( ... ), OutStd( _OUT_EOL ) )
FUNCTION hbmk2_OutErrRaw( ... ) ; RETURN ( OutErr( ... ), OutErr( _OUT_EOL ) )
FUNCTION hbmk2_Macro( ctx, cString )
LOCAL hbmk := ctx[ s_cSecToken ]
RETURN MacroProc( hbmk, cString )
FUNCTION hbmk2_OutStd( ctx, cText )
LOCAL hbmk := ctx[ s_cSecToken ]
RETURN hbmk_OutStd( hbmk, hb_StrFormat( I_( "plugin: %1$s" ), cText ) )
@@ -6012,24 +6019,41 @@ STATIC FUNCTION PlugIn_Execute( hbmk, cState )
LOCAL ctx
LOCAL xResult
LOCAL cTargetType
LOCAL oError
IF ! Empty( hbmk[ _HBMK_hPLUGINHRB ] )
IF hbmk[ _HBMK_lCreateLib ] ; cTargetType := "hblib"
ELSEIF hbmk[ _HBMK_lCreateDyn ] .AND. ! hbmk[ _HBMK_lDynVM ] ; cTargetType := "hbdyn"
ELSEIF hbmk[ _HBMK_lCreateDyn ] .AND. hbmk[ _HBMK_lDynVM ] ; cTargetType := "hbdynvm"
ELSEIF hbmk[ _HBMK_lCreateImpLib ] ; cTargetType := "hbimplib"
ELSE ; cTargetType := "hbexe"
ENDIF
ctx := {;
"cSTATE" => cState ,;
"cSTATE" => cState ,;
"params" => hbmk[ _HBMK_aPLUGINPars ] ,;
"vars" => hbmk[ _HBMK_hPLUGINVars ] ,;
"cPLAT" => hbmk[ _HBMK_cPLAT ] ,;
"cCOMP" => hbmk[ _HBMK_cCOMP ] ,;
"cCPU" => hbmk[ _HBMK_cCPU ] ,;
"cBUILD" => hbmk[ _HBMK_cBUILD ] ,;
"cTARGETTYPE" => cTargetType ,;
"cTARGETNAME" => hbmk[ _HBMK_cPROGNAME ] ,;
"lREBUILD" => hbmk[ _HBMK_lREBUILD ] ,;
"lCLEAN" => hbmk[ _HBMK_lCLEAN ] ,;
"lTRACE" => hbmk[ _HBMK_lTRACE ] ,;
"lQUIET" => hbmk[ _HBMK_lQuiet ] ,;
"lDEBUG" => hbmk[ _HBMK_lDEBUG ] ,;
"lMAP" => hbmk[ _HBMK_lMAP ] ,;
"lSTRIP" => hbmk[ _HBMK_lSTRIP ] ,;
"lDONTEXEC" => hbmk[ _HBMK_lDONTEXEC ] ,;
"lIGNOREERROR" => hbmk[ _HBMK_lIGNOREERROR ] ,;
"lTRACE" => hbmk[ _HBMK_lTRACE ] ,;
"lQUIET" => hbmk[ _HBMK_lQuiet ] ,;
"lINFO" => hbmk[ _HBMK_lInfo ] ,;
"lBEEP" => hbmk[ _HBMK_lBEEP ] ,;
"lRUN" => hbmk[ _HBMK_lRUN ] ,;
"lINC" => hbmk[ _HBMK_lINC ] ,;
"cCCPATH" => hbmk[ _HBMK_cCCPATH ] ,;
"cCCPREFIX" => hbmk[ _HBMK_cCCPREFIX ] ,;
@@ -6038,6 +6062,7 @@ STATIC FUNCTION PlugIn_Execute( hbmk, cState )
"nCmd_Esc" => hbmk[ _HBMK_nCmd_Esc ] ,;
"nScr_Esc" => hbmk[ _HBMK_nScr_Esc ] ,;
"cWorkDir" => hbmk[ _HBMK_cWorkDir ] ,;
"nErrorLevel" => hbmk[ _HBMK_nErrorLevel ] ,;
s_cSecToken => hbmk }
FOR EACH cHRB IN hbmk[ _HBMK_hPLUGINHRB ]
@@ -7424,7 +7449,7 @@ STATIC FUNCTION MacroProc( hbmk, cString, cFileName, cMacroPrefix )
LOCAL nEnd
LOCAL cMacro
LOCAL cStart := iif( cMacroPrefix == NIL, _MACRO_NORM_PREFIX, cMacroPrefix ) + _MACRO_OPEN
LOCAL cStart := iif( ISCHARACTER( cMacroPrefix ), cMacroPrefix, _MACRO_NORM_PREFIX ) + _MACRO_OPEN
LOCAL cStdOut