diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 21d1f1d829..fedc40637b 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,16 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-03-22 01:02 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + + Finishing touches to -mkimplib option: + - Automatic "dressing" of target library name with extension, lib prefix. + - More detailed feedback. + + * bin/postinst.bat + + Added hb-mkimp.prg replacement logic based on hbmk2. + (not yet enabled) + 2010-03-22 00:43 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg + Added experimental -mkimplib= option to "convert" .dll diff --git a/harbour/bin/postinst.bat b/harbour/bin/postinst.bat index a4a600c5be..f89fce71e9 100644 --- a/harbour/bin/postinst.bat +++ b/harbour/bin/postinst.bat @@ -79,7 +79,36 @@ if "%HB_SHELL%" == "nt" goto _SH_NT :_NO_ICON_BIN - if "%HB_BUILD_IMPLIB%" == "yes" "%HB_HOST_BIN_DIR%\hbrun" --hb:gtcgi "%~dp0hb-mkimp.prg" + 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%\hbrun" --hb:gtcgi "%~dp0hb-mkimp.prg" :_NO_IMPLIB diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 6b103ef38a..a72688dc8d 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -3597,9 +3597,13 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) 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." ) ) + IF hb_FileExists( cMakeImpLibDLL ) + tmp := FN_CookLib( hbmk, cMakeImpLibLib, cLibLibPrefix, cLibLibExt ) + IF Eval( bBlk_ImpLib, cMakeImpLibDLL, tmp ) + 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 ENDIF ELSE hbmk_OutErr( hbmk, I_( "Error: Missing parameter for import library creation." ) ) @@ -5814,6 +5818,40 @@ STATIC FUNCTION ListCookLib( hbmk, aLIB, aLIBA, array, cPrefix, cExtNew ) RETURN array +STATIC FUNCTION FN_CookLib( hbmk, cLibName, cPrefix, cExtNew ) + LOCAL cDir + LOCAL cLibNameCooked + + IF hbmk[ _HBMK_cCOMP ] $ "gcc|mingw|mingw64|mingwarm|djgpp|cygwin|gccomf|clang|open64" + hb_FNameSplit( cLibName, @cDir ) + IF Empty( cDir ) + cLibNameCooked := cLibName +#if 0 + /* Don't attempt to strip this as it can be valid for libs which have double lib prefixes (f.e. libpng) */ + IF Left( cLibNameCooked, 3 ) == "lib" + cLibNameCooked := SubStr( cLibNameCooked, 4 ) + ENDIF +#endif + IF cPrefix != NIL + cLibNameCooked := cPrefix + cLibNameCooked + ENDIF + IF cExtNew != NIL + cLibNameCooked := FN_ExtSet( cLibNameCooked, cExtNew ) + ENDIF + RETURN cLibNameCooked + ELSE + RETURN cLibName + ENDIF + ELSE + IF cExtNew != NIL + RETURN FN_ExtSet( cLibName, cExtNew ) + ELSE + RETURN cLibName + ENDIF + ENDIF + + RETURN NIL + /* Append optional prefix and optional extension to all members */ STATIC FUNCTION ListCook( arraySrc, cExtNew ) LOCAL array := AClone( arraySrc )