From 464f958e32fe485ec183ab330c5f6eb52d230cae Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 30 Jul 2010 18:18:12 +0000 Subject: [PATCH] 2010-07-30 20:17 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg + Will now autodetect /bin/plat/comp bin dir, if present. ! Fixed to set dynlib dir to bin dir on non-*nix platforms. As a conseqeunce bin dir will now be added to the libpath list on these platforms. Allowing to access .dlls directly in compilers that support it (mingw). ! Fixed to use HB_INSTALL_PREFIX instead of bin dir as a base to find addons/contribs dir structures (for .hbc autofind). ! Fixed to really include hbmaindllp stub added in recent commit. Anyhow, loading contrib .dlls dynamically still don't work. * contrib/make.hbs ! Fixed to honor user setting when creating dynlib in stdalone mode. * contrib/hbcomm/hbcomm.prg * space @ EOL. --- harbour/ChangeLog | 18 +++++++++++ harbour/contrib/hbcomm/hbcomm.prg | 2 +- harbour/contrib/make.hbs | 2 +- harbour/utils/hbmk2/hbmk2.prg | 52 ++++++++++++++++++++++--------- 4 files changed, 58 insertions(+), 16 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 505fc8c782..6ede0e902a 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,24 @@ The license applies to all entries newer than 2009-04-28. */ +2010-07-30 20:17 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + + Will now autodetect /bin/plat/comp bin dir, if present. + ! Fixed to set dynlib dir to bin dir on non-*nix platforms. + As a conseqeunce bin dir will now be added to the libpath + list on these platforms. Allowing to access .dlls directly + in compilers that support it (mingw). + ! Fixed to use HB_INSTALL_PREFIX instead of bin dir as a base + to find addons/contribs dir structures (for .hbc autofind). + ! Fixed to really include hbmaindllp stub added in recent commit. + Anyhow, loading contrib .dlls dynamically still don't work. + + * contrib/make.hbs + ! Fixed to honor user setting when creating dynlib in stdalone mode. + + * contrib/hbcomm/hbcomm.prg + * space @ EOL. + 2010-07-30 18:13 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg + Added -depimplib[-] option to contrib implib creation for diff --git a/harbour/contrib/hbcomm/hbcomm.prg b/harbour/contrib/hbcomm/hbcomm.prg index a6c7ab984e..eae5bce076 100644 --- a/harbour/contrib/hbcomm/hbcomm.prg +++ b/harbour/contrib/hbcomm/hbcomm.prg @@ -74,7 +74,7 @@ FUNCTION INIT_PORT( cPort, nBaud, nData, nParity, nStop, nBufferSize ) hb_comSetDevice( nPort, cPort ) ENDIF - hb_comClose( nPort ) + hb_comClose( nPort ) IF hb_comOpen( nPort ) diff --git a/harbour/contrib/make.hbs b/harbour/contrib/make.hbs index 4b4f0cc6b7..1436ef1dab 100755 --- a/harbour/contrib/make.hbs +++ b/harbour/contrib/make.hbs @@ -216,7 +216,7 @@ PROCEDURE Standalone( aParams, hPackageList ) GetEnv( "HB_BUILD_CONTRIB_DYN" ) == "yes" .AND. ; hb_FileExists( PathSepToSelf( FNameExtSet( cProject, ".hbc" ) ) ) - call_hbmk2( cProject, cOptions, " " + FNameExtSet( cProject, ".hbc" ) ) + call_hbmk2( cProject, cOptions + cOptionsUser, " " + FNameExtSet( cProject, ".hbc" ) ) ENDIF NEXT ENDIF diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 0b35cfb065..a5dc33ecda 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -1686,7 +1686,15 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel ) /* Finish detecting bin/lib/include dirs */ IF Empty( l_cHB_INSTALL_BIN ) - l_cHB_INSTALL_BIN := PathNormalize( DirAddPathSep( l_cHB_INSTALL_PREFIX ) + "bin" ) + /* Autodetect multi-compiler/platform bin structure (also .dlls are in bin dir on non-*nix platforms) */ + IF hb_DirExists( tmp := PathNormalize( DirAddPathSep( l_cHB_INSTALL_PREFIX ) ) + "bin" +; + hb_ps() + hbmk[ _HBMK_cPLAT ] +; + hb_ps() + hbmk[ _HBMK_cCOMP ] +; + iif( Empty( hbmk[ _HBMK_cBUILD ] ), "", PathSepToSelf( hbmk[ _HBMK_cBUILD ] ) ) ) + l_cHB_INSTALL_BIN := tmp + ELSE + l_cHB_INSTALL_BIN := PathNormalize( DirAddPathSep( l_cHB_INSTALL_PREFIX ) + "bin" ) + ENDIF ENDIF IF Empty( l_cHB_INSTALL_LIB ) /* Autodetect multi-compiler/platform lib structure */ @@ -1703,7 +1711,13 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel ) l_cHB_INSTALL_INC := PathNormalize( DirAddPathSep( l_cHB_INSTALL_PREFIX ) + "include" ) ENDIF - DEFAULT l_cHB_INSTALL_DYN TO l_cHB_INSTALL_LIB + IF l_cHB_INSTALL_DYN == NIL + IF hbmk[ _HBMK_cPLAT ] $ "win|wce|os2|dos" + l_cHB_INSTALL_DYN := l_cHB_INSTALL_BIN + ELSE + l_cHB_INSTALL_DYN := l_cHB_INSTALL_LIB + ENDIF + ENDIF IF hbmk[ _HBMK_lInfo ] hbmk_OutStd( hbmk, hb_StrFormat( I_( "Using Harbour: %1$s %2$s %3$s %4$s" ), l_cHB_INSTALL_BIN, l_cHB_INSTALL_INC, l_cHB_INSTALL_LIB, l_cHB_INSTALL_DYN ) ) @@ -1730,9 +1744,9 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel ) AAddNotEmpty( hbmk[ _HBMK_aINCPATH ], l_cHB_INSTALL_INC ) /* Add default search paths for .hbc files */ - l_cHB_INSTALL_ADD := PathNormalize( l_cHB_INSTALL_BIN + hb_ps() + ".." ) - AAdd( hbmk[ _HBMK_aLIBPATH ], l_cHB_INSTALL_ADD + hb_ps() + "contrib" + hb_ps() + "%{hb_name}" ) - AAdd( hbmk[ _HBMK_aLIBPATH ], l_cHB_INSTALL_ADD + hb_ps() + "addons" + hb_ps() + "%{hb_name}" ) + l_cHB_INSTALL_ADD := PathNormalize( DirAddPathSep( l_cHB_INSTALL_PREFIX ) ) + AAdd( hbmk[ _HBMK_aLIBPATH ], l_cHB_INSTALL_ADD + "contrib" + hb_ps() + "%{hb_name}" ) + AAdd( hbmk[ _HBMK_aLIBPATH ], l_cHB_INSTALL_ADD + "addons" + hb_ps() + "%{hb_name}" ) /* Build with shared libs by default, if we're installed to default system locations. */ @@ -4333,6 +4347,15 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel ) AAdd( hbmk[ _HBMK_aOPTC ], "-DHB_DYNLIB" ) ENDIF ENDIF +#if 0 + IF hbmk[ _HBMK_lCreateDyn ] + IF !( _HBMODE_IS_XHB( hbmk[ _HBMK_nHBMODE ] ) .OR. ; + hbmk[ _HBMK_nHBMODE ] == _HBMODE_HB10 .OR. ; + hbmk[ _HBMK_nHBMODE ] == _HBMODE_HB20 ) + AAdd( hbmk[ _HBMK_aOPTPRG ], "-DHB_DYNLIB" ) + ENDIF + ENDIF +#endif ENDIF /* Call plugins */ @@ -4733,16 +4756,16 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel ) ENDIF ENDIF - lHBMAINDLLP := AScan( hbmk[ _HBMK_aLIBUSER ], {| tmp | hb_FileMatch( tmp, "hbmaindllp" ) } ) > 0 + lHBMAINDLLP := lStopAfterCComp .AND. hbmk[ _HBMK_lCreateDyn ] .AND. ; + AScan( hbmk[ _HBMK_aLIBUSER ], {| tmp | hb_FileMatch( tmp, "hbmaindllp" ) } ) > 0 /* HACK: Override entry point requested by user or detected by us, and override the GT if requested by user. */ - IF ( ! lStopAfterCComp .OR. hbmk[ _HBMK_lDynVM ] ) .AND. ; - ( l_cMAIN != NIL .OR. ; - ! Empty( hbmk[ _HBMK_aLIBUSERGT ] ) .OR. ; - hbmk[ _HBMK_cGT ] != NIL .OR. ; - l_cCMAIN != NIL .OR. ; - lHBMAINDLLP ) + IF ( ( ! lStopAfterCComp .OR. hbmk[ _HBMK_lDynVM ] ) .AND. ; + ( l_cMAIN != NIL .OR. ; + ! Empty( hbmk[ _HBMK_aLIBUSERGT ] ) .OR. ; + hbmk[ _HBMK_cGT ] != NIL .OR. ; + l_cCMAIN != NIL ) ) .OR. lHBMAINDLLP l_cCSTUB := DirAddPathSep( hbmk[ _HBMK_cWorkDir ] ) + "_hbmkaut.c" @@ -4786,10 +4809,11 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel ) cFile := '/* This temp source file was generated by hbmk2 tool. */' + Chr( 10 ) +; '/* You can safely delete it. */' + Chr( 10 ) +; '' + Chr( 10 ) +; - '#include "hbapi.h"' + Chr( 10 ) + '#include "hbapi.h"' + Chr( 10 ) +; + '' + Chr( 10 ) + IF ! Empty( array ) .OR. l_cCMAIN != NIL AEval( array, {| tmp, i | array[ i ] := FuncNameEncode( tmp ) } ) - cFile += '' + Chr( 10 ) AEval( array, {| tmp | cFile += 'HB_FUNC_EXTERN( ' + tmp + ' );' + Chr( 10 ) } ) IF l_cCMAIN != NIL IF ! Empty( array )