diff --git a/harbour/ChangeLog b/harbour/ChangeLog index a51738b1b3..e9254f7d35 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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, ) + - 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 diff --git a/harbour/include/hbextern.ch b/harbour/include/hbextern.ch index cbbf61b1a8..d4f5c51af2 100644 --- a/harbour/include/hbextern.ch +++ b/harbour/include/hbextern.ch @@ -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 diff --git a/harbour/package/winuni/RELNOTES b/harbour/package/winuni/RELNOTES index f5d87fe6b4..d62068cd59 100644 --- a/harbour/package/winuni/RELNOTES +++ b/harbour/package/winuni/RELNOTES @@ -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 diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index f0d151f5a3..16f673308a 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -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