diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 5d8a29d03a..f869507b38 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,7 +16,26 @@ The license applies to all entries newer than 2009-04-28. */ -2010-07-18 1:04 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) +2010-07-18 12:09 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + + Will now append a _dll postfix in -hbdyn mode (and _exe in -hbexe mode) + to implib generated when -implib option is used. This is needed + to make it not collide with statis libraries generated in parallel. + + Added technique with which even the fatal borland C compiler can + tricked to create implibs with custom names. I didn't test it + very much, I just hope the implib is equivalent with the one + generated directly by linker. For borland users I recommend to + switch to a modern compiler. + + Will now also install implib if -instpath is specified and + -implib is used on platforms that it's supported. + ! Fixed to escape filenames in post-build command (strip on some + platforms and now implib). + + * contrib/make.hbs + + Enabled -implib hbmk2 option in HB_BUILD_CONTRIB_DLL=yes mode. + * Disabled debug stuff. + +2010-07-18 11:04 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * config/postinst.hbs * Changed to only create .hbd documentation file for the core. This is to ensure separation of components. diff --git a/harbour/contrib/make.hbs b/harbour/contrib/make.hbs index c6c3936b5d..5985c023ff 100755 --- a/harbour/contrib/make.hbs +++ b/harbour/contrib/make.hbs @@ -154,7 +154,7 @@ PROCEDURE Main( ... ) s_cHome := StrTran( hb_DirBase(), hb_ps(), "/" ) s_cRoot := s_cHome + "../" - IF "migr" $ hb_cmdLine() .OR. .T. + IF "migr" $ hb_cmdLine() // .OR. .T. hb_setenv( "_HB_BUILD_MIGR", "yes" ) ENDIF @@ -409,7 +409,7 @@ PROCEDURE GNUMake( ... ) aUtils,; aAddons } - OutStd( Len( aAll ) ) ; aAll := { { "rddads/rddads.hbp" } } +// OutStd( Len( aAll ) ) ; aAll := { { "rddads/rddads.hbp" } } OutStd( "! Calculating sorting order for contribs..." + hb_eol() ) @@ -481,8 +481,7 @@ PROCEDURE GNUMake( ... ) hb_FileExists( PathSepToSelf( FNameExtSet( cProject, ".hbc" ) ) ) cOptionsPre := cBaseOptions - /* TOFIX: Add -implib option. It collides with static lib so needs to be resolved. */ - cOptionsPost := " -hbdyn -nohblib- " + FNameExtSet( cProject, ".hbc" ) + cOptionsPost := " -hbdyn -nohblib- -implib " + FNameExtSet( cProject, ".hbc" ) call_hbmk2( cBinDir, cProject, cOptionsPre, cOptionsPost ) ENDIF diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 42ac3f760c..aa302c9da5 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -220,6 +220,9 @@ REQUEST hbmk_KEYW #define _HBMK_HAS_PREF "HBMK_HAS_" #define _HBMK_SCRIPT "__HBSCRIPT__HBMK" +#define _HBMK_IMPLIB_EXE_POST "_exe" +#define _HBMK_IMPLIB_DLL_POST "_dll" + #define _HBMK_NEST_MAX 10 #define _HBMK_HEAD_NEST_MAX 10 @@ -3455,7 +3458,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) AAdd( hbmk[ _HBMK_aOPTL ], "OP map" ) AAdd( hbmk[ _HBMK_aOPTD ], "OP map" ) ENDIF - IF hbmk[ _HBMK_lIMPLIB ] .AND. hbmk[ _HBMK_cPLAT ] $ "win|os2" + IF hbmk[ _HBMK_lIMPLIB ] .AND. hbmk[ _HBMK_cPLAT ] $ "win|os2" /* dos? */ AAdd( hbmk[ _HBMK_aOPTL ], "OP implib={OI}" ) AAdd( hbmk[ _HBMK_aOPTD ], "OP implib={OI}" ) ENDIF @@ -3571,8 +3574,14 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) AAdd( hbmk[ _HBMK_aOPTD ], "-ap" ) ENDIF IF hbmk[ _HBMK_lIMPLIB ] - AAdd( hbmk[ _HBMK_aOPTL ], "-Gi" ) - AAdd( hbmk[ _HBMK_aOPTD ], "-Gi" ) + /* NOTE: Borland C doesn't support creating implibs with a specific name, + so it's done using post command. The resulting implib won't be + as optimal as the generated one, but it _should_ be the same. + [vszakats] */ + /* AAdd( hbmk[ _HBMK_aOPTL ], "-Gi" ) */ + /* AAdd( hbmk[ _HBMK_aOPTD ], "-Gi" ) */ + cBin_Post := "implib.exe " + cOpt_Post := "{OI} {OB}" ENDIF IF ! Empty( hbmk[ _HBMK_cWorkDir ] ) AAdd( hbmk[ _HBMK_aOPTC ], "-n" + FNameEscape( hbmk[ _HBMK_cWorkDir ], hbmk[ _HBMK_nCmd_Esc ], hbmk[ _HBMK_nCmd_FNF ] ) ) @@ -4202,12 +4211,12 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) IF Empty( cExt ) .AND. ! Empty( cBinExt ) hbmk[ _HBMK_cPROGNAME ] := hb_FNameMerge( cDir, cName, cBinExt ) ENDIF - l_cIMPLIBNAME := hb_FNameMerge( cDir, cLibLibPrefix + cName, cLibLibExt ) + l_cIMPLIBNAME := hb_FNameMerge( cDir, cLibLibPrefix + cName + _HBMK_IMPLIB_EXE_POST, cLibLibExt ) CASE lStopAfterCComp .AND. hbmk[ _HBMK_lCreateDyn ] IF Empty( cExt ) .AND. ! Empty( cDynLibExt ) hbmk[ _HBMK_cPROGNAME ] := hb_FNameMerge( cDir, cName, cDynLibExt ) ENDIF - l_cIMPLIBNAME := hb_FNameMerge( cDir, cLibLibPrefix + cName, cLibLibExt ) + l_cIMPLIBNAME := hb_FNameMerge( cDir, cLibLibPrefix + cName + _HBMK_IMPLIB_DLL_POST, cLibLibExt ) CASE lStopAfterCComp .AND. hbmk[ _HBMK_lCreateLib ] hbmk[ _HBMK_cPROGNAME ] := hb_FNameMerge( cDir, cLibLibPrefix + cName, iif( Empty( cLibLibExt ), cExt, cLibLibExt ) ) ENDCASE @@ -5394,6 +5403,10 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) FErase( cScriptFile ) ENDIF + IF hbmk[ _HBMK_lIMPLIB ] .AND. hbmk[ _HBMK_nErrorLevel ] == 0 .AND. hbmk[ _HBMK_cPLAT ] $ "win|os2|dos" + hb_AIns( hbmk[ _HBMK_aINSTFILE ], 1, { "", l_cIMPLIBNAME }, .T. ) + ENDIF + IF hbmk[ _HBMK_nErrorLevel ] == 0 .AND. hbmk[ _HBMK_lGUI ] .AND. hbmk[ _HBMK_cPLAT ] == "darwin" /* Build app bundle for OS X GUI apps. (experimental) */ tmp := FNameDirGet( hbmk[ _HBMK_cPROGNAME ] ) @@ -5487,6 +5500,10 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) FErase( cScriptFile ) ENDIF + IF hbmk[ _HBMK_lIMPLIB ] .AND. hbmk[ _HBMK_nErrorLevel ] == 0 .AND. hbmk[ _HBMK_cPLAT ] $ "win|os2|dos" + hb_AIns( hbmk[ _HBMK_aINSTFILE ], 1, { "", l_cIMPLIBNAME }, .T. ) + ENDIF + CASE lStopAfterCComp .AND. hbmk[ _HBMK_lCreateLib ] .AND. ! Empty( cBin_Lib ) PlugIn_Execute_All( hbmk, "pre_lib" ) @@ -5604,7 +5621,8 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) IF ! Empty( cBin_Post ) - cOpt_Post := StrTran( cOpt_Post, "{OB}", hbmk[ _HBMK_cPROGNAME ] ) + cOpt_Post := StrTran( cOpt_Post, "{OB}", FNameEscape( hbmk[ _HBMK_cPROGNAME ], hbmk[ _HBMK_nCmd_Esc ], hbmk[ _HBMK_nCmd_FNF ] ) ) + cOpt_Post := StrTran( cOpt_Post, "{OI}", FNameEscape( l_cIMPLIBNAME, hbmk[ _HBMK_nCmd_Esc ], hbmk[ _HBMK_nCmd_FNF ] ) ) cOpt_Post := AllTrim( cOpt_Post ) cCommand := cBin_Post + " " + cOpt_Post @@ -10604,7 +10622,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong ) { "-[no]optim" , I_( "toggle C compiler optimizations (default: on)" ) },; { "-[no]cpp[=def]" , I_( "force C/C++ mode or reset to default" ) },; { "-[no]map" , I_( "create (or not) a map file" ) },; - { "-[no]implib" , I_( "create (or not) an import library (in -hbdyn mode)" ) },; + { "-[no]implib" , I_( "create (or not) an import library (in -hbdyn/-hbexe mode). The name will have a postfix added." ) },; { "-[no]strip" , I_( "strip (no strip) binaries" ) },; { "-[no]trace" , I_( "show commands executed" ) },; { "-[no]beep" , I_( "enable (or disable) single beep on successful exit, double beep on failure" ) },;