From e808b13bc1a9d1b3da359f9cf33faaeebb2331c6 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Mon, 22 Mar 2010 00:34:28 +0000 Subject: [PATCH] 2010-03-22 01:33 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg + Added undocumented '-mkimplibms' option to allow for users to make bcc implib happy for some .dlls (translated to -a implib.exe option). Ugly solution, needed because bcc chose not to follow standards. * bin/postinst.bat + Some adjustments to hbmk2-based implib generation cmdlines. + Added exception to use static ocilibs with mingw. * bin/postinst.bat - bin/hb-mkimp.prg * package/winuni/mpkg_win_uni_extra_copy.bat * package/winuni/mpkg_win_uni.bat * package/winuni/mpkg_win_uni.nsi + Switched HB_BUILD_IMPLIB build option to use hbmk2 to create implibs instead of local solution (hb-mkimp.prg). Note, this means that implibs will now always be created dynamically from .dll, even when a package offers pre-built .lib for the compiler. This will in practice cause a change msvc and pocc compilers. This also means that from now on it's enough to have the .dll to create implibs. It's also easier for users to create implibs using hbmk2 any time, so it's possible that HB_BUILD_IMPLIB build-time option will be deleted in the future. ; Not tested yet. --- harbour/ChangeLog | 31 ++- harbour/bin/hb-mkimp.prg | 206 ------------------ harbour/bin/postinst.bat | 57 ++--- harbour/package/winuni/mpkg_win_uni.bat | 1 - harbour/package/winuni/mpkg_win_uni.nsi | 1 - .../winuni/mpkg_win_uni_extra_copy.bat | 1 - harbour/utils/hbmk2/hbmk2.prg | 11 +- 7 files changed, 69 insertions(+), 239 deletions(-) delete mode 100644 harbour/bin/hb-mkimp.prg diff --git a/harbour/ChangeLog b/harbour/ChangeLog index fedc40637b..91c9c8bd43 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,35 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-03-22 01:33 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + + Added undocumented '-mkimplibms' option to allow for users + to make bcc implib happy for some .dlls (translated to + -a implib.exe option). Ugly solution, needed because bcc + chose not to follow standards. + + * bin/postinst.bat + + Some adjustments to hbmk2-based implib generation cmdlines. + + Added exception to use static ocilibs with mingw. + + * bin/postinst.bat + - bin/hb-mkimp.prg + * package/winuni/mpkg_win_uni_extra_copy.bat + * package/winuni/mpkg_win_uni.bat + * package/winuni/mpkg_win_uni.nsi + + Switched HB_BUILD_IMPLIB build option to use hbmk2 + to create implibs instead of local solution (hb-mkimp.prg). + Note, this means that implibs will now always be + created dynamically from .dll, even when a package + offers pre-built .lib for the compiler. This will + in practice cause a change msvc and pocc compilers. + This also means that from now on it's enough to have + the .dll to create implibs. + It's also easier for users to create implibs using + hbmk2 any time, so it's possible that HB_BUILD_IMPLIB + build-time option will be deleted in the future. + ; Not tested yet. + 2010-03-22 01:02 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg + Finishing touches to -mkimplib option: @@ -38,7 +67,7 @@ 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). + contrib). [DONE - with hack] * config/win/xcc.mk * utils/hbmk2/hbmk2.prg diff --git a/harbour/bin/hb-mkimp.prg b/harbour/bin/hb-mkimp.prg deleted file mode 100644 index ef801845fa..0000000000 --- a/harbour/bin/hb-mkimp.prg +++ /dev/null @@ -1,206 +0,0 @@ -/* - * $Id$ - */ - -/* - * Copyright 2009-2010 Viktor Szakats (harbour.01 syenar.hu) - * See COPYING for licensing terms. - * - * Create import libs for various Windows compilers - * - * This script requires: - * - C compiler in PATH - * - HB_COMPILER and HB_LIB_INSTALL envvars set - * - HB_WITH_* envvars pointing to installed 3rd party _headers_ - */ - -/* TOFIX: Ugly hack to avoid #include "fileio.ch" */ -#define F_ERROR ( -1 ) - -PROCEDURE Main( cCompiler, cLibDir ) - LOCAL aLibs - LOCAL hComps - - LOCAL lib - LOCAL comp - - LOCAL cBase - LOCAL cSource - LOCAL cTarget - LOCAL lDone - - IF ! hb_isString( cCompiler ) - cCompiler := GetEnv( "HB_COMPILER" ) - ENDIF - IF ! hb_isString( cLibDir ) - cLibDir := GetEnv( "HB_LIB_INSTALL" ) - ENDIF - - IF ! Empty( cLibDir ) - - OutStd( "! Making import libs...", hb_osNewLine() ) - - #define _L_NAME 1 - #define _L_BASE 2 - #define _L_DLL 3 - #define _L_DLLMS 4 /* Controls BCC's iditoic -a implib flag. */ - #define _L_LIBMS 5 - #define _L_LIBMS64 6 - #define _L_LIBA 7 - - aLibs := {; - { "ace32" , "HB_WITH_ADS" , "Redistribute\ace32.dll" , .F. , "Redistribute\ace32.lib" , , }, ; - { "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. , , , }, ; - { "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. , , , "..\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" , , }, ; - { "libhpdf" , "HB_WITH_LIBHARU" , "..\libhpdf.dll" , .F. , "..\libhpdf.lib" , , }, ; - { "libhpdf" , "HB_WITH_LIBHARU" , "..\lib_dll\libhpdf.dll" , .F. , "..\lib_dll\libhpdf.lib" , , }, ; - { "libmysql" , "HB_WITH_MYSQL" , "..\bin\libmySQL.dll" , .F. , "..\lib\opt\libmySQL.lib" , , }, ; - { "ociliba" , "HB_WITH_OCILIB" , "..\lib32\ociliba.dll" , .F. , "..\lib32\ociliba.lib" , "..\lib64\ociliba.lib" , "..\lib32\libociliba.a" }, ; - { "ocilibm" , "HB_WITH_OCILIB" , "..\lib32\ocilibm.dll" , .F. , "..\lib32\ocilibm.lib" , "..\lib64\ocilibm.lib" , "..\lib32\libocilibm.a" }, ; - { "ocilibw" , "HB_WITH_OCILIB" , "..\lib32\ocilibw.dll" , .F. , "..\lib32\ocilibw.lib" , "..\lib64\ocilibw.lib" , "..\lib32\libocilibw.a" }, ; - { "libeay32" , "HB_WITH_OPENSSL" , "..\out32dll\libeay32.dll" , .T. , "..\out32dll\libeay32.lib" , , }, ; - { "ssleay32" , "HB_WITH_OPENSSL" , "..\out32dll\ssleay32.dll" , .T. , "..\out32dll\ssleay32.lib" , , }, ; - { "libeay32" , "HB_WITH_OPENSSL" , "..\dll\libeay32.dll" , .T. , "..\dll\libeay32.lib" , , }, ; - { "ssleay32" , "HB_WITH_OPENSSL" , "..\dll\ssleay32.dll" , .T. , "..\dll\ssleay32.lib" , , }, ; - { "libeay32" , "HB_WITH_OPENSSL" , "..\libeay32.dll" , .T. , "..\libeay32.lib" , , }, ; - { "ssleay32" , "HB_WITH_OPENSSL" , "..\ssleay32.dll" , .T. , "..\ssleay32.lib" , , }, ; - { "libpq" , "HB_WITH_PGSQL" , "..\lib\libpq.dll" , .T. , "..\lib\libpq.lib" , , } } - - #define _C_LIBPREFIX 1 - #define _C_LIBEXT 2 - #define _C_PROC_DLL 3 - #define _C_PROC_LIBMS 4 - #define _C_PROC_LIBMS64 5 - #define _C_PROC_LIBA 6 - - hComps := {; - "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 - - comp := hb_HGet( hComps, Lower( cCompiler ) ) - - FOR EACH lib IN aLibs - lDone := .F. - cSource := "" - IF ! Empty( cBase := GetEnv( lib[ _L_BASE ] ) ) - cTarget := DirAddPathSep( cLibDir ) + comp[ _C_LIBPREFIX ] + lib[ _L_NAME ] + comp[ _C_LIBEXT ] - IF ! lDone .AND. ! Empty( comp[ _C_PROC_LIBA ] ) .AND. ! Empty( lib[ _L_LIBA ] ) - cSource := DirAddPathSep( cBase ) + lib[ _L_LIBA ] - IF hb_FileExists( cSource ) - lDone := Eval( comp[ _C_PROC_LIBA ], cSource, cTarget, lib ) - ENDIF - ENDIF - IF ! lDone .AND. ! Empty( comp[ _C_PROC_LIBMS64 ] ) .AND. ! Empty( lib[ _L_LIBMS64 ] ) - cSource := DirAddPathSep( cBase ) + lib[ _L_LIBMS64 ] - IF hb_FileExists( cSource ) - lDone := Eval( comp[ _C_PROC_LIBMS64 ], cSource, cTarget, lib ) - ENDIF - ENDIF - IF ! lDone .AND. ! Empty( comp[ _C_PROC_LIBMS ] ) .AND. ! Empty( lib[ _L_LIBMS ] ) - cSource := DirAddPathSep( cBase ) + lib[ _L_LIBMS ] - IF hb_FileExists( cSource ) - lDone := Eval( comp[ _C_PROC_LIBMS ], cSource, cTarget, lib ) - ENDIF - ENDIF - IF ! lDone .AND. ! Empty( comp[ _C_PROC_DLL ] ) .AND. ! Empty( lib[ _L_DLL ] ) - cSource := DirAddPathSep( cBase ) + lib[ _L_DLL ] - IF hb_FileExists( cSource ) - lDone := Eval( comp[ _C_PROC_DLL ], cSource, cTarget, lib ) - ENDIF - ENDIF - ENDIF - IF lDone - OutStd( "! Import library created: " + cTarget ) - OutStd( " <= " + cSource ) - OutStd( hb_osNewLine() ) - ENDIF - NEXT - ENDIF - ENDIF - - RETURN - -STATIC FUNCTION MSVC_implib( s, t, cMode ) - LOCAL lSuccess := .F. - - LOCAL cExports - LOCAL fhnd - LOCAL cDef - LOCAL cLine - LOCAL tmp - LOCAL aCols - - LOCAL cFuncList - - IF hb_processRun( "dumpbin -exports " + FN_Escape( s ),, @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 := ( hb_processRun( "lib -nologo -machine:" + cMode + " -def:" + FN_Escape( cDef ) + " -out:" + FN_Escape( t ) ) == 0 ) - - FErase( cDef ) - ENDIF - ENDIF - - RETURN lSuccess - -STATIC FUNCTION FN_Escape( cFileName ) - RETURN Chr( 34 ) + cFileName + Chr( 34 ) - -STATIC FUNCTION FN_NameExtGet( cFileName ) - LOCAL cName, cExt - - hb_FNameSplit( cFileName,, @cName, @cExt ) - - RETURN hb_FNameMerge( NIL, cName, cExt ) - -STATIC FUNCTION DirAddPathSep( cDir ) - - IF ! Empty( cDir ) .AND. !( Right( cDir, 1 ) == hb_osPathSeparator() ) - cDir += hb_osPathSeparator() - ENDIF - - RETURN cDir diff --git a/harbour/bin/postinst.bat b/harbour/bin/postinst.bat index f89fce71e9..d72169f3a6 100644 --- a/harbour/bin/postinst.bat +++ b/harbour/bin/postinst.bat @@ -81,34 +81,37 @@ if "%HB_SHELL%" == "nt" goto _SH_NT if not "%HB_BUILD_IMPLIB%" == "yes" goto _NO_IMPLIB - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=ace32 "%HB_WITH_ADS%\Redistribute\ace32.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=ace32 "%HB_WITH_ADS%\ace32.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=ace32 "%HB_WITH_ADS%\32bit\ace32.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=alleg "%HB_WITH_ALLEGRO%\..\bin\alleg42.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=sde61 "%HB_WITH_APOLLO%\..\sde61.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=sde7 "%HB_WITH_APOLLO%\..\sde7.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=blat "%HB_WITH_BLAT%\..\blat.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=cairo "%HB_WITH_CAIRO%\..\..\bin\libcairo-2.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=libcurl "%HB_WITH_CURL%\..\libcurl.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=libcurl "%HB_WITH_CURL%\..\bin\libcurl.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=fbclient "%HB_WITH_FIREBIRD%\..\bin\fbclient.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=FreeImage "%HB_WITH_FREEIMAGE%\..\Dist\FreeImage.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=bgd "%HB_WITH_GD%\..\bin\bgd.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=libhpdf "%HB_WITH_LIBHARU%\..\libhpdf.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=libhpdf "%HB_WITH_LIBHARU%\..\lib_dll\libhpdf.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=libmysql "%HB_WITH_MYSQL%\..\bin\libmySQL.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=ociliba "%HB_WITH_OCILIB%\..\lib32\ociliba.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=ocilibm "%HB_WITH_OCILIB%\..\lib32\ocilibm.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=ocilibw "%HB_WITH_OCILIB%\..\lib32\ocilibw.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=libeay32 "%HB_WITH_OPENSSL%\..\out32dll\libeay32.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=ssleay32 "%HB_WITH_OPENSSL%\..\out32dll\ssleay32.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=libeay32 "%HB_WITH_OPENSSL%\..\dll\libeay32.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=ssleay32 "%HB_WITH_OPENSSL%\..\dll\ssleay32.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=libeay32 "%HB_WITH_OPENSSL%\..\libeay32.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=ssleay32 "%HB_WITH_OPENSSL%\..\ssleay32.dll" - rem "%HB_HOST_BIN_DIR%\hbmk2" -mkimplib=libpq "%HB_WITH_PGSQL%..\lib\libpq.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\ace32" "%HB_WITH_ADS%\Redistribute\ace32.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\ace32" "%HB_WITH_ADS%\ace32.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\ace32" "%HB_WITH_ADS%\32bit\ace32.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\alleg" "%HB_WITH_ALLEGRO%\..\bin\alleg42.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\sde61" "%HB_WITH_APOLLO%\..\sde61.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\sde7" "%HB_WITH_APOLLO%\..\sde7.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\blat" "%HB_WITH_BLAT%\..\blat.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\cairo" "%HB_WITH_CAIRO%\..\..\bin\libcairo-2.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\libcurl" "%HB_WITH_CURL%\..\libcurl.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\libcurl" "%HB_WITH_CURL%\..\bin\libcurl.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\fbclient" "%HB_WITH_FIREBIRD%\..\bin\fbclient.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\FreeImage" "%HB_WITH_FREEIMAGE%\..\Dist\FreeImage.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\bgd" "%HB_WITH_GD%\..\bin\bgd.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\libhpdf" "%HB_WITH_LIBHARU%\..\libhpdf.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\libhpdf" "%HB_WITH_LIBHARU%\..\lib_dll\libhpdf.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\libmysql" "%HB_WITH_MYSQL%\..\bin\libmySQL.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\ociliba" "%HB_WITH_OCILIB%\..\lib32\ociliba.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\ocilibm" "%HB_WITH_OCILIB%\..\lib32\ocilibm.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\ocilibw" "%HB_WITH_OCILIB%\..\lib32\ocilibw.dll" + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\libeay32" "%HB_WITH_OPENSSL%\..\out32dll\libeay32.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\ssleay32" "%HB_WITH_OPENSSL%\..\out32dll\ssleay32.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\libeay32" "%HB_WITH_OPENSSL%\..\dll\libeay32.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\ssleay32" "%HB_WITH_OPENSSL%\..\dll\ssleay32.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\libeay32" "%HB_WITH_OPENSSL%\..\libeay32.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\ssleay32" "%HB_WITH_OPENSSL%\..\ssleay32.dll" -mkimplibms + "%HB_HOST_BIN_DIR%\hbmk2" "-mkimplib=%HB_LIB_INSTALL%\libpq" "%HB_WITH_PGSQL%..\lib\libpq.dll" -mkimplibms - "%HB_HOST_BIN_DIR%\hbrun" --hb:gtcgi "%~dp0hb-mkimp.prg" + rem ; Exception: We use static libs with mingw. + if "%HB_COMPILER%" == "mingw" copy /b /y "%HB_WITH_OCILIB%\..\lib32\libociliba.a" "%HB_LIB_INSTALL%\libociliba.a" + if "%HB_COMPILER%" == "mingw" copy /b /y "%HB_WITH_OCILIB%\..\lib32\libocilibm.a" "%HB_LIB_INSTALL%\libocilibm.a" + if "%HB_COMPILER%" == "mingw" copy /b /y "%HB_WITH_OCILIB%\..\lib32\libocilibw.a" "%HB_LIB_INSTALL%\libocilibw.a" :_NO_IMPLIB diff --git a/harbour/package/winuni/mpkg_win_uni.bat b/harbour/package/winuni/mpkg_win_uni.bat index 31e2d0dd68..8d039d92a5 100644 --- a/harbour/package/winuni/mpkg_win_uni.bat +++ b/harbour/package/winuni/mpkg_win_uni.bat @@ -19,7 +19,6 @@ echo "hb20\INSTALL" >> _hbfiles echo "hb20\COPYING" >> _hbfiles echo "hb20\TODO" >> _hbfiles echo "hb20\ChangeLog*" >> _hbfiles -echo "hb20\bin\hb-mkimp.prg" >> _hbfiles echo "hb20\bin\harbour-20.dll" >> _hbfiles echo "hb20\bin\harbourmt-20.dll" >> _hbfiles echo "hb20\bin\harbour.exe" >> _hbfiles diff --git a/harbour/package/winuni/mpkg_win_uni.nsi b/harbour/package/winuni/mpkg_win_uni.nsi index 12c4b52439..6c61869d50 100644 --- a/harbour/package/winuni/mpkg_win_uni.nsi +++ b/harbour/package/winuni/mpkg_win_uni.nsi @@ -106,7 +106,6 @@ Section "Main components" hb_main File "$%HB_ROOT%hb20\bin\hbrun.exe" File "$%HB_ROOT%hb20\bin\hbtest.exe" File "$%HB_ROOT%hb20\bin\hbformat.exe" - File "$%HB_ROOT%hb20\bin\hb-mkimp.prg" File "$%HB_ROOT%hb20\bin\hbmk.cfg" File "$%HB_ROOT%hb20\bin\upx*.*" diff --git a/harbour/package/winuni/mpkg_win_uni_extra_copy.bat b/harbour/package/winuni/mpkg_win_uni_extra_copy.bat index cb6c9acd4b..19abf1d2db 100644 --- a/harbour/package/winuni/mpkg_win_uni_extra_copy.bat +++ b/harbour/package/winuni/mpkg_win_uni_extra_copy.bat @@ -10,7 +10,6 @@ xcopy /y RELNOTES F:\hb\hb20\ xcopy /y /s ..\..\examples\*.* F:\hb\hb20\examples\ xcopy /y /s ..\..\tests\*.* F:\hb\hb20\tests\ -xcopy /y ..\..\bin\hb-mkimp.prg F:\hb\hb20\bin\ xcopy /y HARBOUR_README_ADDONS F:\hb\hb20\addons\ xcopy /y HARBOUR_README_DJGPP F:\hb\hb20\comp\djgpp\ xcopy /y HARBOUR_README_MINGW F:\hb\hb20\comp\mingw\ diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index a72688dc8d..2a649e8250 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -702,6 +702,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) LOCAL lMakeImpLib := .F. LOCAL cMakeImpLibDLL := NIL LOCAL cMakeImpLibLib := NIL + LOCAL lMakeImpLibMS_bcc := .F. LOCAL cWorkDir := NIL @@ -1750,6 +1751,13 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) lMakeImpLib := .T. cMakeImpLibLib := SubStr( cParam, Len( "-mkimplib=" ) + 1 ) + /* 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 + bcc chose not to follow name-mangling/callconv standard. */ + CASE cParamL == "-mkimplibms" + + lMakeImpLibMS_bcc := .T. + CASE lMakeImpLib .AND. Empty( cMakeImpLibDLL ) cMakeImpLibDLL := PathProc( cParam, aParam[ _PAR_cFileName ] ) @@ -3120,8 +3128,7 @@ 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, "" ) } + bBlk_ImpLib := {| s, t | win_implib_command( "implib {FI} {OL} {ID}", nCmd_Esc, s, t, iif( lMakeImpLibMS_bcc, "-a", "" ) ) } cLibPathPrefix := "" cLibPathSep := ";" IF hbmk[ _HBMK_lMAP ]