From 504e7698e91e665b30891c2541293b50a0abfe22 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sun, 21 Mar 2010 23:44:16 +0000 Subject: [PATCH] 2010-03-22 00:43 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg + Added experimental -mkimplib= option to "convert" .dll files into import libraries. Syntax tentative. ; TODO: Support for idiotic -a Borland C implib option. If anyone has an idea how to detect when to use -a and when not, I will implement it. If not, I will most probably drop maintaining -a option for bcc and leave it off. This leaves implibs working for most .dlls we currently use, but will break some (blat, curl, cairo, pq, alleg from contrib). * config/win/xcc.mk * utils/hbmk2/hbmk2.prg ! Fixed to use case-correct filenames for xcc tools. * bin/hb-mkimp.prg + Added msvcia64, msvcarm, xcc support. ! Fixed few library specs for msvc*. * FS_ERROR -> F_ERROR ! Fixed handling spaces inside dll name for msvc*. ! Fixed handling non .dll extension for msvc*. --- harbour/ChangeLog | 24 +++++++ harbour/bin/hb-mkimp.prg | 43 ++++++------ harbour/config/win/xcc.mk | 6 +- harbour/utils/hbmk2/hbmk2.prg | 121 ++++++++++++++++++++++++++++++++-- 4 files changed, 166 insertions(+), 28 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index c8bea8ab70..21d1f1d829 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,30 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-03-22 00:43 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + + Added experimental -mkimplib= option to "convert" .dll + files into import libraries. Syntax tentative. + ; TODO: Support for idiotic -a Borland C implib option. + If anyone has an idea how to detect when to use + -a and when not, I will implement it. If not, + I will most probably drop maintaining -a option + for bcc and leave it off. This leaves implibs + working for most .dlls we currently use, but will + break some (blat, curl, cairo, pq, alleg from + contrib). + + * config/win/xcc.mk + * utils/hbmk2/hbmk2.prg + ! Fixed to use case-correct filenames for xcc tools. + + * bin/hb-mkimp.prg + + Added msvcia64, msvcarm, xcc support. + ! Fixed few library specs for msvc*. + * FS_ERROR -> F_ERROR + ! Fixed handling spaces inside dll name for msvc*. + ! Fixed handling non .dll extension for msvc*. + 2010-03-21 20:30 UTC+0100 Xavi (jarabal/at/gmail.com) * harbour/src/rtl/teditor.prg ! Fixing MemoEdit parameter calculation: nTextBuffRow, nWindowColumn. diff --git a/harbour/bin/hb-mkimp.prg b/harbour/bin/hb-mkimp.prg index a8f7f44ae1..ef801845fa 100644 --- a/harbour/bin/hb-mkimp.prg +++ b/harbour/bin/hb-mkimp.prg @@ -15,7 +15,7 @@ */ /* TOFIX: Ugly hack to avoid #include "fileio.ch" */ -#define FS_ERROR ( -1 ) +#define F_ERROR ( -1 ) PROCEDURE Main( cCompiler, cLibDir ) LOCAL aLibs @@ -53,12 +53,12 @@ PROCEDURE Main( cCompiler, cLibDir ) { "ace32" , "HB_WITH_ADS" , "ace32.dll" , .F. , "ace32.lib" , , }, ; { "ace32" , "HB_WITH_ADS" , "32bit\ace32.dll" , .F. , "32bit\ace32.lib" , , }, ; { "alleg" , "HB_WITH_ALLEGRO" , "..\bin\alleg42.dll" , .T. , "..\lib\alleg.lib" , , }, ; - { "sde61" , "HB_WITH_APOLLO" , "..\sde61.dll" , .F. , "..\sde61.dll" , , }, ; - { "sde7" , "HB_WITH_APOLLO" , "..\sde7.dll" , .F. , "..\sde7.dll" , , }, ; + { "sde61" , "HB_WITH_APOLLO" , "..\sde61.dll" , .F. , , , }, ; + { "sde7" , "HB_WITH_APOLLO" , "..\sde7.dll" , .F. , , , }, ; { "blat" , "HB_WITH_BLAT" , "..\blat.dll" , .T. , "..\blat.lib" , , }, ; { "cairo" , "HB_WITH_CAIRO" , "..\..\bin\libcairo-2.dll" , .T. , "..\..\lib\cairo.lib" , , "..\..\lib\libcairo.dll.a" }, ; - { "libcurl" , "HB_WITH_CURL" , "..\libcurl.dll" , .T. , "..\libcurl.dll" , , "..\lib\libcurl.a" }, ; - { "libcurl" , "HB_WITH_CURL" , "..\bin\libcurl.dll" , .T. , "..\bin\libcurl.dll" , , "..\lib\libcurldll.a" }, ; + { "libcurl" , "HB_WITH_CURL" , "..\libcurl.dll" , .T. , , , "..\lib\libcurl.a" }, ; + { "libcurl" , "HB_WITH_CURL" , "..\bin\libcurl.dll" , .T. , , , "..\lib\libcurldll.a" }, ; { "fbclient" , "HB_WITH_FIREBIRD" , "..\bin\fbclient.dll" , .F. , "..\lib\fbclient_ms.lib" , , }, ; { "FreeImage" , "HB_WITH_FREEIMAGE" , "..\Dist\FreeImage.dll" , .F. , "..\Dist\FreeImage.lib" , , }, ; { "bgd" , "HB_WITH_GD" , "..\bin\bgd.dll" , .F. , "..\lib\bgd.lib" , , }, ; @@ -84,14 +84,17 @@ PROCEDURE Main( cCompiler, cLibDir ) #define _C_PROC_LIBA 6 hComps := {; - "mingw" => { "lib", ".a" , {| s, t | hb_FCopy( s, t ) != FS_ERROR }, {| s, t | hb_FCopy( s, t ) != FS_ERROR }, NIL, {| s, t | hb_FCopy( s, t ) != FS_ERROR } }, ; - "mingw64" => { "lib", ".a" , {| s, t | hb_FCopy( s, t ) != FS_ERROR }, NIL, {| s, t | hb_FCopy( s, t ) != FS_ERROR }, {| s, t | hb_FCopy( s, t ) != FS_ERROR } }, ; - "msvc" => { "" , ".lib", {| s, t | MSVC_implib( s, t, "x86" ) }, {| s, t | hb_FCopy( s, t ) != FS_ERROR }, NIL, NIL }, ; - "msvc64" => { "" , ".lib", {| s, t | MSVC_implib( s, t, "x64" ) }, NIL, {| s, t | hb_FCopy( s, t ) != FS_ERROR }, NIL }, ; - "pocc" => { "" , ".lib", {| s, t | hb_processRun( "polib " + FN_Escape( s ) + " /out:" + FN_Escape( t ) ) == 0 }, {| s, t | hb_FCopy( s, t ) != FS_ERROR }, NIL, NIL }, ; - "pocc64" => { "" , ".lib", {| s, t | hb_processRun( "polib " + FN_Escape( s ) + " /out:" + FN_Escape( t ) ) == 0 }, NIL, {| s, t | hb_FCopy( s, t ) != FS_ERROR }, NIL }, ; - "watcom" => { "" , ".lib", {| s, t | hb_processRun( "wlib -q -o=" + FN_Escape( t ) + " " + FN_Escape( s ) ) == 0 }, NIL, NIL, NIL }, ; - "bcc" => { "" , ".lib", {| s, t, lib | hb_processRun( "implib " + iif( lib[ _L_DLLMS ], "-a", "" ) + " " + FN_Escape( t ) + " " + FN_Escape( s ) ) == 0 }, NIL, NIL, NIL } } + "mingw" => { "lib", ".a" , {| s, t | hb_FCopy( s, t ) != F_ERROR }, {| s, t | hb_FCopy( s, t ) != F_ERROR }, NIL, {| s, t | hb_FCopy( s, t ) != F_ERROR } }, ; + "mingw64" => { "lib", ".a" , {| s, t | hb_FCopy( s, t ) != F_ERROR }, NIL, {| s, t | hb_FCopy( s, t ) != F_ERROR }, {| s, t | hb_FCopy( s, t ) != F_ERROR } }, ; + "msvc" => { "" , ".lib", {| s, t | MSVC_implib( s, t, "x86" ) }, {| s, t | hb_FCopy( s, t ) != F_ERROR }, NIL, NIL }, ; + "msvc64" => { "" , ".lib", {| s, t | MSVC_implib( s, t, "x64" ) }, NIL, {| s, t | hb_FCopy( s, t ) != F_ERROR }, NIL }, ; + "msvcia64" => { "" , ".lib", {| s, t | MSVC_implib( s, t, "ia86" ) }, NIL, NIL, NIL }, ; + "msvcarm" => { "" , ".lib", {| s, t | MSVC_implib( s, t, "arm" ) }, NIL, NIL, NIL }, ; + "xcc" => { "" , ".lib", {| s, t | hb_processRun( "xLib " + FN_Escape( s ) + " /out:" + FN_Escape( t ) ) == 0 }, {| s, t | hb_FCopy( s, t ) != F_ERROR }, NIL, NIL }, ; + "pocc" => { "" , ".lib", {| s, t | hb_processRun( "polib " + FN_Escape( s ) + " /out:" + FN_Escape( t ) ) == 0 }, {| s, t | hb_FCopy( s, t ) != F_ERROR }, NIL, NIL }, ; + "pocc64" => { "" , ".lib", {| s, t | hb_processRun( "polib " + FN_Escape( s ) + " /out:" + FN_Escape( t ) ) == 0 }, NIL, {| s, t | hb_FCopy( s, t ) != F_ERROR }, NIL }, ; + "watcom" => { "" , ".lib", {| s, t | hb_processRun( "wlib -q -o=" + FN_Escape( t ) + " " + FN_Escape( s ) ) == 0 }, NIL, NIL, NIL }, ; + "bcc" => { "" , ".lib", {| s, t, lib | hb_processRun( "implib " + iif( lib[ _L_DLLMS ], "-a", "" ) + " " + FN_Escape( t ) + " " + FN_Escape( s ) ) == 0 }, NIL, NIL, NIL } } IF Lower( cCompiler ) $ hComps @@ -152,7 +155,7 @@ STATIC FUNCTION MSVC_implib( s, t, cMode ) IF hb_processRun( "dumpbin -exports " + FN_Escape( s ),, @cExports ) == 0 - cFuncList := "LIBRARY " + FN_NameGet( s ) + hb_osNewLine() +; + cFuncList := "LIBRARY " + Chr( 34 ) + FN_NameExtGet( s ) + Chr( 34 ) + hb_osNewLine() +; "EXPORTS" + hb_osNewLine() cExports := StrTran( cExports, Chr( 13 ) + Chr( 10 ), Chr( 10 ) ) @@ -172,13 +175,13 @@ STATIC FUNCTION MSVC_implib( s, t, cMode ) NEXT fhnd := hb_FTempCreateEx( @cDef ) - IF fhnd != FS_ERROR + IF fhnd != F_ERROR FWrite( fhnd, cFuncList ) FClose( fhnd ) lSuccess := ( hb_processRun( "lib -nologo -machine:" + cMode + " -def:" + FN_Escape( cDef ) + " -out:" + FN_Escape( t ) ) == 0 ) - FErase( cFuncList ) + FErase( cDef ) ENDIF ENDIF @@ -187,12 +190,12 @@ STATIC FUNCTION MSVC_implib( s, t, cMode ) STATIC FUNCTION FN_Escape( cFileName ) RETURN Chr( 34 ) + cFileName + Chr( 34 ) -STATIC FUNCTION FN_NameGet( cFileName ) - LOCAL cName +STATIC FUNCTION FN_NameExtGet( cFileName ) + LOCAL cName, cExt - hb_FNameSplit( cFileName,, @cName ) + hb_FNameSplit( cFileName,, @cName, @cExt ) - RETURN cName + RETURN hb_FNameMerge( NIL, cName, cExt ) STATIC FUNCTION DirAddPathSep( cDir ) diff --git a/harbour/config/win/xcc.mk b/harbour/config/win/xcc.mk index 4f2e836c29..7a34bc6d3a 100644 --- a/harbour/config/win/xcc.mk +++ b/harbour/config/win/xcc.mk @@ -10,7 +10,7 @@ LIB_EXT := .lib HB_DYN_COPT := -DHB_DYNLIB -CC := xcc.exe +CC := xCC.exe CC_IN := -c CC_OUT := -Fo @@ -41,7 +41,7 @@ ifeq ($(HB_BUILD_DEBUG),yes) CFLAGS += -Zi endif -LD := xlink.exe +LD := xLink.exe LD_OUT := -out: LIBPATHS := -libpath:$(LIB_DIR) @@ -49,7 +49,7 @@ LDLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT)) LDFLAGS += $(LIBPATHS) -AR := xlib.exe +AR := xLib.exe AR_RULE = $(AR) $(ARFLAGS) $(HB_AFLAGS) $(HB_USER_AFLAGS) -out:$(LIB_DIR)/$@ $(^F) DY := $(LD) diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 173601a58f..6b103ef38a 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -678,6 +678,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) LOCAL cBin_Res LOCAL cBin_Lib LOCAL cBin_Dyn + LOCAL bBlk_ImpLib LOCAL cPath_CompC LOCAL nErrorLevel := 0 LOCAL tmp, tmp1, tmp2, tmp3, array @@ -698,6 +699,9 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) LOCAL lAcceptLDFlag := .F. LOCAL lAcceptLDClipper := .F. LOCAL lHarbourInfo := .F. + LOCAL lMakeImpLib := .F. + LOCAL cMakeImpLibDLL := NIL + LOCAL cMakeImpLibLib := NIL LOCAL cWorkDir := NIL @@ -1740,6 +1744,16 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) OutStd( l_cHB_INC_INSTALL ) + CASE Left( cParamL, Len( "-mkimplib=" ) ) == "-mkimplib=" + + lStopAfterInit := .T. + lMakeImpLib := .T. + cMakeImpLibLib := SubStr( cParam, Len( "-mkimplib=" ) + 1 ) + + CASE lMakeImpLib .AND. Empty( cMakeImpLibDLL ) + + cMakeImpLibDLL := PathProc( cParam, aParam[ _PAR_cFileName ] ) + CASE Left( cParamL, Len( "-jobs=" ) ) == "-jobs=" cParam := ArchCompFilter( hbmk, SubStr( cParam, Len( "-jobs=" ) + 1 ) ) @@ -2240,7 +2254,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) ENDIF ENDIF - IF ! lStopAfterInit .AND. ! lStopAfterHarbour + IF ( ! lStopAfterInit .AND. ! lStopAfterHarbour ) .OR. lMakeImpLib IF hbmk[ _HBMK_cGT ] != NIL .AND. hbmk[ _HBMK_cGT ] == hbmk[ _HBMK_cGTDEFAULT ] hbmk[ _HBMK_cGT ] := NIL @@ -2611,6 +2625,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) cOpt_Dyn := "-shared -o {OD} {LO} {FD} {DL} {LS}" cBin_Link := cBin_CompC cOpt_Link := "{LO} {LA} {LS} {FL} {DL}" + bBlk_ImpLib := {| s, t | hb_FCopy( s, t ) != F_ERROR } cLibPathPrefix := "-L" cLibPathSep := " " cLibLibExt := ".a" @@ -2743,6 +2758,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) cOpt_Dyn := "-shared -o {OD} {LO} {LL} {LB} {FD} {DL} {LS}" cBin_Link := cBin_CompC cOpt_Link := "{LO} {LA} {FL} {DL}" + bBlk_ImpLib := {| s, t | hb_FCopy( s, t ) != F_ERROR } cLibPathPrefix := "-L" cLibPathSep := " " IF hbmk[ _HBMK_cCOMP ] == "gccomf" @@ -2991,6 +3007,9 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) ENDIF cBin_Lib := "wlib" + cCCEXT cOpt_Lib := "-q {FA} {OL} {LO}{SCRIPT}" + IF hbmk[ _HBMK_cPLAT ] $ "win|os2" + bBlk_ImpLib := {| s, t | win_implib_command( cBin_Lib + " -q -o={OL} {ID}", nCmd_Esc, s, t ) } + ENDIF cLibLibExt := cLibExt cLibObjPrefix := "-+ " IF hbmk[ _HBMK_lMT ] .AND. hbmk[ _HBMK_cPLAT ] $ "win|os2" @@ -3101,6 +3120,8 @@ 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}" + /* TODO: Add support for idiotic BCC -a option. */ + bBlk_ImpLib := {| s, t | win_implib_command( "implib {FI} {OL} {ID}", nCmd_Esc, s, t, "" ) } cLibPathPrefix := "" cLibPathSep := ";" IF hbmk[ _HBMK_lMAP ] @@ -3243,6 +3264,17 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) cOpt_CompC += " {FC} {LC}" 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" + ENDCASE + bBlk_ImpLib := {| s, t | win_implib_command_msvc( cBin_Lib + " -nologo {FI} -def:{ID} -out:{OL}", nCmd_Esc, s, t, tmp ) } cLibPathPrefix := "-libpath:" cLibPathSep := " " IF hbmk[ _HBMK_lMAP ] @@ -3332,10 +3364,10 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) cObjExt := ".obj" cLibLibExt := cLibExt IF hbmk[ _HBMK_cCOMP ] == "xcc" - cBin_CompC := "xcc.exe" - cBin_Lib := "xlib.exe" - cBin_Link := "xlink.exe" - cBin_Res := "xrc.exe" + cBin_CompC := "xCC.exe" + cBin_Lib := "xLib.exe" + cBin_Link := "xLink.exe" + cBin_Res := "xRC.exe" ELSE cBin_CompC := "pocc.exe" cBin_Lib := "polib.exe" @@ -3358,6 +3390,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) ENDIF cOptIncMask := "-I{DI}" cOpt_Dyn := "{FD} -dll -out:{OD} {DL} {LO} {LL} {LB} {LS}" + bBlk_ImpLib := {| s, t | win_implib_command( cBin_Lib + " {ID} -out:{OL}", nCmd_Esc, s, t ) } IF hbmk[ _HBMK_cPLAT ] == "wce" AAdd( hbmk[ _HBMK_aOPTC ], "-DUNICODE" ) AAdd( hbmk[ _HBMK_aOPTC ], "-D_WINCE" ) /* Required by pocc Windows headers */ @@ -3561,6 +3594,21 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) ENDIF ENDIF + IF lMakeImpLib + IF ISBLOCK( bBlk_ImpLib ) + IF ! Empty( cMakeImpLibDLL ) .AND. ! Empty( cMakeImpLibLib ) + hbmk_OutStd( hbmk, I_( "Creating import library..." ) ) + IF ! Eval( bBlk_ImpLib, cMakeImpLibDLL, cMakeImpLibLib ) + hbmk_OutErr( hbmk, I_( "Error: Creating import libraries failed." ) ) + ENDIF + ELSE + hbmk_OutErr( hbmk, I_( "Error: Missing parameter for import library creation." ) ) + ENDIF + ELSE + hbmk_OutErr( hbmk, I_( "Error: Creating import libraries is not supported for this platform or compiler." ) ) + ENDIF + ENDIF + DEFAULT nScr_Esc TO nCmd_Esc /* Delete all lib paths which contain late-evaluation macros. */ @@ -7634,6 +7682,67 @@ STATIC FUNCTION GenHBL( hbmk, aFiles, cFileOut, lEmpty ) RETURN lRetVal +STATIC FUNCTION win_implib_command( cCommand, nCmd_Esc, s, t, f ) + + DEFAULT f TO "" + + cCommand := StrTran( cCommand, "{FI}", f ) + cCommand := StrTran( cCommand, "{ID}", FN_Escape( s, nCmd_Esc ) ) + cCommand := StrTran( cCommand, "{OL}", FN_Escape( t, nCmd_Esc ) ) + + RETURN hb_processRun( cCommand ) == 0 + +STATIC FUNCTION win_implib_command_msvc( cCommand, nCmd_Esc, s, t, f ) + LOCAL lSuccess := .F. + + LOCAL cExports + LOCAL fhnd + LOCAL cDef + LOCAL cLine + LOCAL tmp + LOCAL aCols + + LOCAL cFuncList + + LOCAL cCommandDump + + cCommandDump := "dumpbin -exports {ID}" + cCommandDump := StrTran( cCommandDump, "{ID}", FN_Escape( s, nCmd_Esc ) ) + + IF hb_processRun( cCommandDump,, @cExports ) == 0 + + cFuncList := "LIBRARY " + Chr( 34 ) + FN_NameExtGet( s ) + Chr( 34 ) + hb_osNewLine() +; + "EXPORTS" + hb_osNewLine() + + cExports := StrTran( cExports, Chr( 13 ) + Chr( 10 ), Chr( 10 ) ) + + tmp := At( "ordinal hint", cExports ) + IF tmp > 0 + cExports := SubStr( cExports, tmp + Len( "ordinal hint" ) ) + ENDIF + + FOR EACH cLine IN hb_ATokens( cExports, Chr( 10 ) ) + IF ! Empty( cLine ) + aCols := hb_ATokens( cLine ) + IF Len( aCols ) >= 4 + cFuncList += aCols[ 4 ] + hb_osNewLine() + ENDIF + ENDIF + NEXT + + fhnd := hb_FTempCreateEx( @cDef ) + IF fhnd != F_ERROR + FWrite( fhnd, cFuncList ) + FClose( fhnd ) + + lSuccess := win_implib_command( cCommand, nCmd_Esc, cDef, t, f ) + + FErase( cDef ) + ENDIF + ENDIF + + RETURN lSuccess + #define _VCS_UNKNOWN 0 #define _VCS_SVN 1 #define _VCS_GIT 2 @@ -8475,6 +8584,8 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong ) { "-blinker" , "" },; { "-exospace" , I_( "emulate Clipper compatible linker behavior\ncreate link/copy hbmk2 to rtlink/blinker/exospace for the same effect" ) },; NIL,; + { "-mkimplib= " , I_( "convert .dll into import libaray (experimental)" ) },; + NIL,; { "-hbmake=" , I_( "convert hbmake project file to .hbp file (experimental)" ) },; { "-xbp=" , I_( "convert .xbp (xbuild) project file to .hbp file (experimental)" ) },; { "-xhp=" , I_( "convert .xhp (xMate) project file to .hbp file (experimental)" ) },;