diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 6b1824275d..1037ae05e0 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,12 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-03-22 10:58 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + ! Fixed implib internal flag handling for msvc targets. + ! Fixed path format conversion in implib parameters. + + Added support for filters, macros for implib creation parameters. + 2010-03-22 10:36 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg + Added -trace support to -mkimplib option. diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index e88bc9104b..2b2ffbfc29 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -670,6 +670,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) LOCAL cOpt_Res LOCAL cOpt_Lib LOCAL cOpt_Dyn + LOCAL cOpt_ImpLib LOCAL cBin_CompPRG LOCAL cBin_CompC LOCAL cBin_CompCPP @@ -1747,9 +1748,11 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) CASE Left( cParamL, Len( "-mkimplib=" ) ) == "-mkimplib=" - lStopAfterInit := .T. - lMakeImpLib := .T. - cMakeImpLibLib := SubStr( cParam, Len( "-mkimplib=" ) + 1 ) + cMakeImpLibLib := PathSepToTarget( hbmk, PathProc( MacroProc( hbmk, ArchCompFilter( hbmk, SubStr( cParam, Len( "-mkimplib=" ) + 1 ) ), aParam[ _PAR_cFileName ] ), aParam[ _PAR_cFileName ] ) ) + IF ! Empty( cMakeImpLibLib ) + lStopAfterInit := .T. + lMakeImpLib := .T. + ENDIF /* NOTE: Undocumented option to enable -a option when calling bcc implib tool. This is needed for some .dlls to make them work with bcc, because @@ -1760,7 +1763,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) CASE lMakeImpLib .AND. Empty( cMakeImpLibDLL ) - cMakeImpLibDLL := PathProc( cParam, aParam[ _PAR_cFileName ] ) + cMakeImpLibDLL := PathSepToTarget( hbmk, PathProc( MacroProc( hbmk, ArchCompFilter( hbmk, cParam ), aParam[ _PAR_cFileName ] ), aParam[ _PAR_cFileName ] ) ) CASE Left( cParamL, Len( "-jobs=" ) ) == "-jobs=" @@ -3016,7 +3019,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) cBin_Lib := "wlib" + cCCEXT cOpt_Lib := "-q {FA} {OL} {LO}{SCRIPT}" IF hbmk[ _HBMK_cPLAT ] $ "win|os2" - bBlk_ImpLib := {| cSourceDLL, cTargetLib | win_implib_command( hbmk, cBin_Lib + " -q -o={OL} {ID}", nCmd_Esc, cSourceDLL, cTargetLib ) } + bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command( hbmk, cBin_Lib + " -q -o={OL} {ID}", nCmd_Esc, cSourceDLL, cTargetLib, cFlags ) } ENDIF cLibLibExt := cLibExt cLibObjPrefix := "-+ " @@ -3128,7 +3131,10 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) cBin_Dyn := cBin_Link cOpt_Link := '-Gn -Tpe -L{DL} {FL} ' + iif( hbmk[ _HBMK_lGUI ], "c0w32.obj", "c0x32.obj" ) + " {LO}, {OE}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} cw32mt.lib import32.lib,, {LS}{SCRIPT}" cOpt_Dyn := '-Gn -Tpd -L{DL} {FD} ' + "c0d32.obj" + " {LO}, {OD}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} cw32mt.lib import32.lib,, {LS}{SCRIPT}" - bBlk_ImpLib := {| cSourceDLL, cTargetLib | win_implib_command( hbmk, "implib {FI} {OL} {ID}", nCmd_Esc, cSourceDLL, cTargetLib, iif( lMakeImpLibMS_bcc, "-a", "" ) ) } + IF lMakeImpLibMS_bcc + cOpt_ImpLib := "-a" + ENDIF + bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command( hbmk, "implib {FI} {OL} {ID}", nCmd_Esc, cSourceDLL, cTargetLib, cFlags ) } cLibPathPrefix := "" cLibPathSep := ";" IF hbmk[ _HBMK_lMAP ] @@ -3272,16 +3278,16 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) cOptIncMask := "-I{DI}" cOpt_Link := "-nologo -out:{OE} {LO} {DL} {FL} {LL} {LB} {LS}" DO CASE - CASE hbmk[ _HBMK_cCOMP ] == "msvc" ; tmp := "-machine:x86" - CASE hbmk[ _HBMK_cCOMP ] == "msvc64" ; tmp := "-machine:x64" - CASE hbmk[ _HBMK_cCOMP ] == "msvcia64" ; tmp := "-machine:ia64" - CASE hbmk[ _HBMK_cCOMP ] == "icc" ; tmp := "-machine:x86" - CASE hbmk[ _HBMK_cCOMP ] == "iccia64" ; tmp := "-machine:ia64" - CASE hbmk[ _HBMK_cCOMP ] == "msvcarm" ; tmp := "-machine:xarm" - CASE hbmk[ _HBMK_cCOMP ] == "msvcmips" ; tmp := "-machine:mips" - CASE hbmk[ _HBMK_cCOMP ] == "msvcsh" ; tmp := "-machine:sh5" + CASE hbmk[ _HBMK_cCOMP ] == "msvc" ; cOpt_ImpLib := "-machine:x86" + CASE hbmk[ _HBMK_cCOMP ] == "msvc64" ; cOpt_ImpLib := "-machine:x64" + CASE hbmk[ _HBMK_cCOMP ] == "msvcia64" ; cOpt_ImpLib := "-machine:ia64" + CASE hbmk[ _HBMK_cCOMP ] == "icc" ; cOpt_ImpLib := "-machine:x86" + CASE hbmk[ _HBMK_cCOMP ] == "iccia64" ; cOpt_ImpLib := "-machine:ia64" + CASE hbmk[ _HBMK_cCOMP ] == "msvcarm" ; cOpt_ImpLib := "-machine:xarm" + CASE hbmk[ _HBMK_cCOMP ] == "msvcmips" ; cOpt_ImpLib := "-machine:mips" + CASE hbmk[ _HBMK_cCOMP ] == "msvcsh" ; cOpt_ImpLib := "-machine:sh5" ENDCASE - bBlk_ImpLib := {| cSourceDLL, cTargetLib | win_implib_command_msvc( cBin_Lib + " -nologo {FI} -def:{ID} -out:{OL}", nCmd_Esc, cSourceDLL, cTargetLib, tmp ) } + bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command_msvc( hbmk, cBin_Lib + " -nologo {FI} -def:{ID} -out:{OL}", nCmd_Esc, cSourceDLL, cTargetLib, cFlags ) } cLibPathPrefix := "-libpath:" cLibPathSep := " " IF hbmk[ _HBMK_lMAP ] @@ -3397,7 +3403,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) ENDIF cOptIncMask := "-I{DI}" cOpt_Dyn := "{FD} -dll -out:{OD} {DL} {LO} {LL} {LB} {LS}" - bBlk_ImpLib := {| cSourceDLL, cTargetLib | win_implib_command( hbmk, cBin_Lib + " {ID} -out:{OL}", nCmd_Esc, cSourceDLL, cTargetLib ) } + bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command( hbmk, cBin_Lib + " {ID} -out:{OL}", nCmd_Esc, cSourceDLL, cTargetLib, cFlags ) } IF hbmk[ _HBMK_cPLAT ] == "wce" AAdd( hbmk[ _HBMK_aOPTC ], "-DUNICODE" ) AAdd( hbmk[ _HBMK_aOPTC ], "-D_WINCE" ) /* Required by pocc Windows headers */ @@ -3606,11 +3612,13 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) IF ! Empty( cMakeImpLibDLL ) .AND. ! Empty( cMakeImpLibLib ) IF hb_FileExists( cMakeImpLibDLL ) tmp := FN_CookLib( hbmk, cMakeImpLibLib, cLibLibPrefix, cLibLibExt ) - IF Eval( bBlk_ImpLib, cMakeImpLibDLL, tmp ) + IF Eval( bBlk_ImpLib, cMakeImpLibDLL, tmp, cOpt_ImpLib ) hbmk_OutStd( hbmk, hb_StrFormat( I_( "Created import library: %1$s <= %2$s" ), tmp, cMakeImpLibDLL ) ) ELSE hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Failed creating import library %1$s from %2$s." ), tmp, cMakeImpLibDLL ) ) ENDIF + ELSE + hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Source dynamic library not found: %1$s" ), cMakeImpLibDLL ) ) ENDIF ELSE hbmk_OutErr( hbmk, I_( "Error: Missing parameter for import library creation." ) ) @@ -7758,7 +7766,7 @@ STATIC FUNCTION win_implib_command_msvc( hbmk, cCommand, nCmd_Esc, cSourceDLL, c LOCAL cCommandDump - cCommandDump := "dumpbin -exports {ID}" + cCommandDump := "dumpbin.exe -exports {ID}" cCommandDump := StrTran( cCommandDump, "{ID}", FN_Escape( cSourceDLL, nCmd_Esc ) ) IF hbmk[ _HBMK_lTRACE ]