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*.
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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 )
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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=<l> <d>" , I_( "convert <d> .dll into <l> import libaray (experimental)" ) },;
|
||||
NIL,;
|
||||
{ "-hbmake=<file>" , I_( "convert hbmake project file to .hbp file (experimental)" ) },;
|
||||
{ "-xbp=<file>" , I_( "convert .xbp (xbuild) project file to .hbp file (experimental)" ) },;
|
||||
{ "-xhp=<file>" , I_( "convert .xhp (xMate) project file to .hbp file (experimental)" ) },;
|
||||
|
||||
Reference in New Issue
Block a user