From dde5e868398252aee805ee8a2089d82a9873b294 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Wed, 21 Jul 2010 18:40:16 +0000 Subject: [PATCH] 2010-07-21 20:37 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * src/rtl/stuff.c ! Fixed GPF in STUFF() when HB_SIZE is signed value. (HB_SIZE_SIGNED mode) * contrib/make.hbs % Normalized some dirs to give cleaner and shorter output. + Shows HB_BUILD_CONTRIBS value. ! Fixed to only generate doc once for multi-hbp packages (HBQT f.e.). % Internal cleanups. * contrib/hbqt/hbmk2_plugin_qt.hbs + Honor HB_WITH_QT also on OS/2. * Internal. Feedback is still not perfect. * utils/hbmk2/hbmk2.prg + Normalize implib source dirs, -o dirs, -workdir dirs. + Implibs automatically generated for dependencies are now put in the 'implib' install target category, so they can be controlled separately. * contrib/hbpost.hbm ! Fixed to only install new automatic implibs when HB_BUILD_IMPLIB=yes. ; TODO: Rename this setting to HB_INSTALL_IMPLIB (or some better name). Now implib are always made, this setting only controls whether to install them (f.e. we don't want to install them when creating package for distribution). - Deleted stuff belonging to stdalone -hbimplib targets. This method is deprecated inside contrib area. * config/global.mk - Do not show HB_CONTRIBLIBS value anymore. --- harbour/ChangeLog | 33 ++++ harbour/config/global.mk | 6 - harbour/contrib/hbpost.hbm | 9 +- harbour/contrib/hbqt/hbmk2_plugin_qt.hbs | 238 ++++++++++++----------- harbour/contrib/make.hbs | 41 ++-- harbour/src/rtl/stuff.c | 4 +- harbour/utils/hbmk2/hbmk2.prg | 20 +- 7 files changed, 195 insertions(+), 156 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index e4e2924ee1..ec4f36d94d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,39 @@ The license applies to all entries newer than 2009-04-28. */ +2010-07-21 20:37 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * src/rtl/stuff.c + ! Fixed GPF in STUFF() when HB_SIZE is signed value. + (HB_SIZE_SIGNED mode) + + * contrib/make.hbs + % Normalized some dirs to give cleaner and shorter output. + + Shows HB_BUILD_CONTRIBS value. + ! Fixed to only generate doc once for multi-hbp packages (HBQT f.e.). + % Internal cleanups. + + * contrib/hbqt/hbmk2_plugin_qt.hbs + + Honor HB_WITH_QT also on OS/2. + * Internal. Feedback is still not perfect. + + * utils/hbmk2/hbmk2.prg + + Normalize implib source dirs, -o dirs, -workdir dirs. + + Implibs automatically generated for dependencies are now put + in the 'implib' install target category, so they can be controlled + separately. + + * contrib/hbpost.hbm + ! Fixed to only install new automatic implibs when HB_BUILD_IMPLIB=yes. + ; TODO: Rename this setting to HB_INSTALL_IMPLIB (or some better + name). Now implib are always made, this setting only controls + whether to install them (f.e. we don't want to install them + when creating package for distribution). + - Deleted stuff belonging to stdalone -hbimplib targets. This + method is deprecated inside contrib area. + + * config/global.mk + - Do not show HB_CONTRIBLIBS value anymore. + 2010-07-21 16:14 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbblat/hbblat.hbp ! Added missed flag for bcc. (was there in .hbi) diff --git a/harbour/config/global.mk b/harbour/config/global.mk index 85a73111a9..457f5a7f06 100644 --- a/harbour/config/global.mk +++ b/harbour/config/global.mk @@ -302,12 +302,6 @@ ifeq ($(HB_INIT_DONE),) ifneq ($(HB_BUILD_PARTS),) $(info ! HB_BUILD_PARTS: $(HB_BUILD_PARTS)) endif - ifneq ($(HB_CONTRIBLIBS),) - $(info ! HB_CONTRIBLIBS: $(HB_CONTRIBLIBS)) - endif - ifneq ($(HB_CONTRIB_ADDONS),) - $(info ! HB_CONTRIB_ADDONS: $(HB_CONTRIB_ADDONS)) - endif ifneq ($(HB_EXTERNALLIBS),) $(info ! HB_EXTERNALLIBS: $(HB_EXTERNALLIBS)) endif diff --git a/harbour/contrib/hbpost.hbm b/harbour/contrib/hbpost.hbm index 76e4070282..0d19c282e9 100644 --- a/harbour/contrib/hbpost.hbm +++ b/harbour/contrib/hbpost.hbm @@ -5,7 +5,7 @@ # These are mandatory in Harbour SVN, they will always # override project options. -"{HB_BUILD_PARTS='lib'&!(hbimplib|hblib)}-stop=! Skipped because HB_BUILD_PARTS=lib" +"{HB_BUILD_PARTS='lib'&!hblib}-stop=! Skipped because HB_BUILD_PARTS=lib" -prgflag=-w3 -prgflag=-es2 @@ -36,13 +36,14 @@ {(hbdyn|hbexe)&HB_BUILD_SHARED='yes'}-shared -{hblib|hbimplib}-o../lib/${hb_plat}/${hb_comp}${hb_build}/ +{hblib}-o../lib/${hb_plat}/${hb_comp}${hb_build}/ {hbexe|hbdyn}-o../bin/${hb_plat}/${hb_comp}${hb_build}/ -{hblib|hbimplib}-workdir=../lib/${hb_plat}/${hb_comp}${hb_build}/${hb_work}/${hb_outputname}${hb_workdynsub} +{hblib}-workdir=../lib/${hb_plat}/${hb_comp}${hb_build}/${hb_work}/${hb_outputname}${hb_workdynsub} {hbexe|hbdyn}-workdir=../bin/${hb_plat}/${hb_comp}${hb_build}/${hb_work}/${hb_outputname}${hb_workdynsub} -{_HB_BUILD_INSTALL&(hblib|(hbimplib&HB_BUILD_IMPLIB='yes'))}-instpath=${_HB_LIB_INSTALL}/ +{_HB_BUILD_INSTALL&hblib}-instpath=${_HB_LIB_INSTALL}/ {_HB_BUILD_INSTALL&hbexe}-instpath=${_HB_BIN_INSTALL}/ {_HB_BUILD_INSTALL&hbdyn}-instpath=${_HB_DYN_INSTALL}/ {_HB_BUILD_INSTALL&hblib}-instpath=inc:${_HB_INC_INSTALL}/ +{_HB_BUILD_INSTALL&HB_BUILD_IMPLIB='yes'}-instpath=implib:${_HB_LIB_INSTALL}/ diff --git a/harbour/contrib/hbqt/hbmk2_plugin_qt.hbs b/harbour/contrib/hbqt/hbmk2_plugin_qt.hbs index c7ff8c55aa..85f657e3b9 100644 --- a/harbour/contrib/hbqt/hbmk2_plugin_qt.hbs +++ b/harbour/contrib/hbqt/hbmk2_plugin_qt.hbs @@ -135,122 +135,126 @@ FUNCTION hbmk2_plugin_qt( hbmk2 ) CASE "pre_prg" IF ! hbmk2[ "lCLEAN" ] .AND. ; - ! Empty( hbmk2[ "vars" ][ "aQRC_Src" ] ) .AND. ; - ! Empty( hbmk2[ "vars" ][ "cRCC_BIN" ] ) + ! Empty( hbmk2[ "vars" ][ "aQRC_Src" ] ) - /* Execute 'rcc' commands on input files */ + IF ! Empty( hbmk2[ "vars" ][ "cRCC_BIN" ] ) - FOR EACH cSrc, cDst, cPRG IN hbmk2[ "vars" ][ "aQRC_Src" ], hbmk2[ "vars" ][ "aQRC_Dst" ], hbmk2[ "vars" ][ "aQRC_PRG" ] + /* Execute 'rcc' commands on input files */ - IF hbmk2[ "lINC" ] .AND. ! hbmk2[ "lREBUILD" ] - lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ; - ! hb_FGetDateTime( cSrc, @tSrc ) .OR. ; - tSrc > tDst - ELSE - lBuildIt := .T. - ENDIF + FOR EACH cSrc, cDst, cPRG IN hbmk2[ "vars" ][ "aQRC_Src" ], hbmk2[ "vars" ][ "aQRC_Dst" ], hbmk2[ "vars" ][ "aQRC_PRG" ] - IF lBuildIt - - cCommand := hbmk2[ "vars" ][ "cRCC_BIN" ] +; - " -binary" +; - " " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cSrc ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) +; - " -o " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cDst ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) - - IF hbmk2[ "lTRACE" ] - IF ! hbmk2[ "lQUIET" ] - hbmk2_OutStd( hbmk2, I_( "'rcc' command:" ) ) - ENDIF - hbmk2_OutStdRaw( cCommand ) + IF hbmk2[ "lINC" ] .AND. ! hbmk2[ "lREBUILD" ] + lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ; + ! hb_FGetDateTime( cSrc, @tSrc ) .OR. ; + tSrc > tDst + ELSE + lBuildIt := .T. ENDIF - IF ! hbmk2[ "lDONTEXEC" ] - IF ( nError := hb_processRun( cCommand ) ) != 0 - hbmk2_OutErr( hbmk2, hb_StrFormat( I_( "Error: Running 'rcc' executable. %1$s" ), hb_ntos( nError ) ) ) - IF ! hbmk2[ "lQUIET" ] - hbmk2_OutErrRaw( cCommand ) - ENDIF - IF ! hbmk2[ "lIGNOREERROR" ] - cRetVal := "error" - EXIT - ENDIF - ELSE - /* Create little .prg stub which includes the binary */ - cTmp := "/* WARNING: Automatically generated source file. DO NOT EDIT! */" + hb_eol() +; - hb_eol() +; - "#pragma -km+" + hb_eol() +; - hb_eol() +; - "FUNCTION hbqtres_" + hbmk2_FNameToSymbol( hbmk2_FNameNameGet( cSrc ) ) + "()" + hb_eol() +; - " #pragma __binarystreaminclude " + Chr( 34 ) + hbmk2_FNameNameExtGet( cDst ) + Chr( 34 ) + "|RETURN %s" + hb_eol() + IF lBuildIt - IF ! hb_MemoWrit( cPRG, cTmp ) - hbmk2_OutErr( hbmk2, hb_StrFormat( "Error: Cannot create file: %1$s", cPRG ) ) + cCommand := hbmk2[ "vars" ][ "cRCC_BIN" ] +; + " -binary" +; + " " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cSrc ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) +; + " -o " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cDst ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) + + IF hbmk2[ "lTRACE" ] + IF ! hbmk2[ "lQUIET" ] + hbmk2_OutStd( hbmk2, I_( "'rcc' command:" ) ) + ENDIF + hbmk2_OutStdRaw( cCommand ) + ENDIF + + IF ! hbmk2[ "lDONTEXEC" ] + IF ( nError := hb_processRun( cCommand ) ) != 0 + hbmk2_OutErr( hbmk2, hb_StrFormat( I_( "Error: Running 'rcc' executable. %1$s" ), hb_ntos( nError ) ) ) + IF ! hbmk2[ "lQUIET" ] + hbmk2_OutErrRaw( cCommand ) + ENDIF IF ! hbmk2[ "lIGNOREERROR" ] cRetVal := "error" EXIT ENDIF + ELSE + /* Create little .prg stub which includes the binary */ + cTmp := "/* WARNING: Automatically generated source file. DO NOT EDIT! */" + hb_eol() +; + hb_eol() +; + "#pragma -km+" + hb_eol() +; + hb_eol() +; + "FUNCTION hbqtres_" + hbmk2_FNameToSymbol( hbmk2_FNameNameGet( cSrc ) ) + "()" + hb_eol() +; + " #pragma __binarystreaminclude " + Chr( 34 ) + hbmk2_FNameNameExtGet( cDst ) + Chr( 34 ) + "|RETURN %s" + hb_eol() + + IF ! hb_MemoWrit( cPRG, cTmp ) + hbmk2_OutErr( hbmk2, hb_StrFormat( "Error: Cannot create file: %1$s", cPRG ) ) + IF ! hbmk2[ "lIGNOREERROR" ] + cRetVal := "error" + EXIT + ENDIF + ENDIF ENDIF ENDIF ENDIF - ENDIF - NEXT + NEXT + ENDIF ENDIF IF ! hbmk2[ "lCLEAN" ] .AND. ; - ! Empty( hbmk2[ "vars" ][ "aUIC_Src" ] ) .AND. ; - ! Empty( hbmk2[ "vars" ][ "cUIC_BIN" ] ) + ! Empty( hbmk2[ "vars" ][ "aUIC_Src" ] ) - /* Execute 'uic' commands on input files */ + IF ! Empty( hbmk2[ "vars" ][ "cUIC_BIN" ] ) - FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aUIC_Src" ], hbmk2[ "vars" ][ "aUIC_Dst" ] + /* Execute 'uic' commands on input files */ - IF hbmk2[ "lINC" ] .AND. ! hbmk2[ "lREBUILD" ] - lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ; - ! hb_FGetDateTime( cSrc, @tSrc ) .OR. ; - tSrc > tDst - ELSE - lBuildIt := .T. - ENDIF + FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aUIC_Src" ], hbmk2[ "vars" ][ "aUIC_Dst" ] - IF lBuildIt - - FClose( hb_FTempCreateEx( @cTmp ) ) - - cCommand := hbmk2[ "vars" ][ "cUIC_BIN" ] +; - " " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cSrc ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) +; - " -o " + hbmk2_FNameEscape( cTmp, hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) - - IF hbmk2[ "lTRACE" ] - IF ! hbmk2[ "lQUIET" ] - hbmk2_OutStd( hbmk2, I_( "'uic' command:" ) ) - ENDIF - hbmk2_OutStdRaw( cCommand ) + IF hbmk2[ "lINC" ] .AND. ! hbmk2[ "lREBUILD" ] + lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ; + ! hb_FGetDateTime( cSrc, @tSrc ) .OR. ; + tSrc > tDst + ELSE + lBuildIt := .T. ENDIF - IF ! hbmk2[ "lDONTEXEC" ] - IF ( nError := hb_processRun( cCommand ) ) != 0 - hbmk2_OutErr( hbmk2, hb_StrFormat( I_( "Error: Running 'uic' executable. %1$s" ), hb_ntos( nError ) ) ) + IF lBuildIt + + FClose( hb_FTempCreateEx( @cTmp ) ) + + cCommand := hbmk2[ "vars" ][ "cUIC_BIN" ] +; + " " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cSrc ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) +; + " -o " + hbmk2_FNameEscape( cTmp, hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) + + IF hbmk2[ "lTRACE" ] IF ! hbmk2[ "lQUIET" ] - hbmk2_OutErrRaw( cCommand ) + hbmk2_OutStd( hbmk2, I_( "'uic' command:" ) ) ENDIF - IF ! hbmk2[ "lIGNOREERROR" ] - FErase( cTmp ) - cRetVal := "error" - EXIT - ENDIF - ELSE - IF ! uic_to_prg( hbmk2, cTmp, cDst, hbmk2_FNameToSymbol( hbmk2_FNameNameGet( cSrc ) ) ) + hbmk2_OutStdRaw( cCommand ) + ENDIF + + IF ! hbmk2[ "lDONTEXEC" ] + IF ( nError := hb_processRun( cCommand ) ) != 0 + hbmk2_OutErr( hbmk2, hb_StrFormat( I_( "Error: Running 'uic' executable. %1$s" ), hb_ntos( nError ) ) ) + IF ! hbmk2[ "lQUIET" ] + hbmk2_OutErrRaw( cCommand ) + ENDIF IF ! hbmk2[ "lIGNOREERROR" ] FErase( cTmp ) cRetVal := "error" EXIT ENDIF + ELSE + IF ! uic_to_prg( hbmk2, cTmp, cDst, hbmk2_FNameToSymbol( hbmk2_FNameNameGet( cSrc ) ) ) + IF ! hbmk2[ "lIGNOREERROR" ] + FErase( cTmp ) + cRetVal := "error" + EXIT + ENDIF + ENDIF ENDIF ENDIF + FErase( cTmp ) ENDIF - FErase( cTmp ) - ENDIF - NEXT + NEXT + ENDIF ENDIF EXIT @@ -258,46 +262,48 @@ FUNCTION hbmk2_plugin_qt( hbmk2 ) CASE "pre_c" IF ! hbmk2[ "lCLEAN" ] .AND. ; - ! Empty( hbmk2[ "vars" ][ "aMOC_Src" ] ) .AND. ; - ! Empty( hbmk2[ "vars" ][ "cMOC_BIN" ] ) + ! Empty( hbmk2[ "vars" ][ "aMOC_Src" ] ) - /* Execute 'moc' commands on input files */ + IF ! Empty( hbmk2[ "vars" ][ "cMOC_BIN" ] ) - FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aMOC_Src" ], hbmk2[ "vars" ][ "aMOC_Dst" ] + /* Execute 'moc' commands on input files */ - IF hbmk2[ "lINC" ] .AND. ! hbmk2[ "lREBUILD" ] - lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ; - ! hb_FGetDateTime( cSrc, @tSrc ) .OR. ; - tSrc > tDst - ELSE - lBuildIt := .T. - ENDIF + FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aMOC_Src" ], hbmk2[ "vars" ][ "aMOC_Dst" ] - IF lBuildIt - - cCommand := hbmk2[ "vars" ][ "cMOC_BIN" ] +; - " " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cSrc ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) +; - " -o " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cDst ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) - - IF hbmk2[ "lTRACE" ] - IF ! hbmk2[ "lQUIET" ] - hbmk2_OutStd( hbmk2, I_( "'moc' command:" ) ) - ENDIF - hbmk2_OutStdRaw( cCommand ) + IF hbmk2[ "lINC" ] .AND. ! hbmk2[ "lREBUILD" ] + lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ; + ! hb_FGetDateTime( cSrc, @tSrc ) .OR. ; + tSrc > tDst + ELSE + lBuildIt := .T. ENDIF - IF ! hbmk2[ "lDONTEXEC" ] .AND. ( nError := hb_processRun( cCommand ) ) != 0 - hbmk2_OutErr( hbmk2, hb_StrFormat( I_( "Error: Running 'moc' executable. %1$s" ), hb_ntos( nError ) ) ) - IF ! hbmk2[ "lQUIET" ] - hbmk2_OutErrRaw( cCommand ) + IF lBuildIt + + cCommand := hbmk2[ "vars" ][ "cMOC_BIN" ] +; + " " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cSrc ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) +; + " -o " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cDst ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] ) + + IF hbmk2[ "lTRACE" ] + IF ! hbmk2[ "lQUIET" ] + hbmk2_OutStd( hbmk2, I_( "'moc' command:" ) ) + ENDIF + hbmk2_OutStdRaw( cCommand ) ENDIF - IF ! hbmk2[ "lIGNOREERROR" ] - cRetVal := "error" - EXIT + + IF ! hbmk2[ "lDONTEXEC" ] .AND. ( nError := hb_processRun( cCommand ) ) != 0 + hbmk2_OutErr( hbmk2, hb_StrFormat( I_( "Error: Running 'moc' executable. %1$s" ), hb_ntos( nError ) ) ) + IF ! hbmk2[ "lQUIET" ] + hbmk2_OutErrRaw( cCommand ) + ENDIF + IF ! hbmk2[ "lIGNOREERROR" ] + cRetVal := "error" + EXIT + ENDIF ENDIF ENDIF - ENDIF - NEXT + NEXT + ENDIF ENDIF EXIT @@ -334,7 +340,7 @@ STATIC FUNCTION qt_tool_detect( hbmk2, cName, cEnvQT, cEnvHB ) ! hb_FileExists( cBIN := GetEnv( "HB_QTPATH" ) + cName ) cBIN := "" - IF hbmk2[ "cPLAT" ] == "win" + IF hbmk2[ "cPLAT" ] $ "win|os2" hb_AIns( aEnvList, 1, "HB_WITH_QT", .T. ) @@ -342,7 +348,7 @@ STATIC FUNCTION qt_tool_detect( hbmk2, cName, cEnvQT, cEnvHB ) IF GetEnv( "HB_WITH_QT" ) == "no" /* Return silently. It shall fail at dependency detection inside hbmk2 */ - RETURN "" + RETURN NIL ELSE IF ! hb_FileExists( cBIN := hbmk2_PathNormalize( GetEnv( "HB_WITH_QT" ) + "\..\bin\" + cName + ".exe" ) ) hbmk2_OutErr( hbmk2, hb_StrFormat( "Warning: HB_WITH_QT points to incomplete QT installation. '%1$s' executable not found.", cName ) ) diff --git a/harbour/contrib/make.hbs b/harbour/contrib/make.hbs index c6392967e6..c06aafc44d 100755 --- a/harbour/contrib/make.hbs +++ b/harbour/contrib/make.hbs @@ -179,7 +179,6 @@ PROCEDURE Standalone( ... ) LOCAL cBinDir LOCAL hProject - LOCAL cProject LOCAL cDir LOCAL cOptions @@ -258,7 +257,7 @@ PROCEDURE Standalone( ... ) aPairList := {} FOR EACH hProject IN s_hPackageList[ "." ] - call_hbmk2_hbinfo( cBinDir, s_cBase + "." + "/" + hProject[ "cFileName" ], hProject ) + call_hbmk2_hbinfo( cBinDir, s_cBase + hProject[ "cFileName" ], hProject ) DeptLinesToDeptPairList( aPairList, ".", hProject[ "aDept" ] ) NEXT @@ -270,8 +269,9 @@ PROCEDURE Standalone( ... ) IF cDir == "." .AND. hProject[ "cType" ] $ "hbhrb|hbppo" LOOP ENDIF - cProject := s_cBase + iif( cDir == ".", "", s_cHome ) + cDir + "/" + hProject[ "cFileName" ] - call_hbmk2( cBinDir, cProject, iif( cDir == ".", cOptions + cOptionsUser, "" ), "" ) + call_hbmk2( cBinDir,; + s_cBase + iif( cDir == ".", "", s_cHome + cDir + "/" ) + hProject[ "cFileName" ],; + iif( cDir == ".", cOptions + cOptionsUser, "" ), "" ) NEXT NEXT ENDIF @@ -333,6 +333,10 @@ PROCEDURE GNUMake( ... ) cFilter := GetEnv( "HB_CONTRIBLIBS" ) ENDIF + IF ! Empty( cFilter ) + OutStd( "! HB_BUILD_CONTRIBS: " + cFilter + hb_eol() ) + ENDIF + IF cFilter == "no" ErrorLevel( 0 ) RETURN @@ -446,19 +450,20 @@ PROCEDURE GNUMake( ... ) OutStd( hb_StrFormat( "! Contribs %1$s...", hActions[ nAction ] ) + hb_eol() ) FOR EACH cDir IN aSortedList DESCEND - FOR EACH hProject IN s_hPackageList[ cDir ] - cProject := s_cBase + cDir + "/" + hProject[ "cFileName" ] + IF Empty( aFilter ) .OR. ; + iif( lFilterNegative,; + AScan( aFilter, {| tmp | tmp == cDir } ) == 0,; + AScan( aFilter, {| tmp | tmp == cDir } ) > 0 ) - IF Empty( aFilter ) .OR. ; - iif( lFilterNegative,; - AScan( aFilter, {| tmp | tmp == cDir } ) == 0,; - AScan( aFilter, {| tmp | tmp == cDir } ) > 0 ) + FOR EACH hProject IN s_hPackageList[ cDir ] IF hProject[ "cType" ] $ "hbhrb|hbppo" LOOP ENDIF + cProject := s_cBase + cDir + "/" + hProject[ "cFileName" ] + call_hbmk2( cBinDir, cProject, cOptions, "" ) /* Highly experimental */ @@ -468,16 +473,16 @@ PROCEDURE GNUMake( ... ) call_hbmk2( cBinDir, cProject, cOptions, " -hbdyn -nohblib- -implib " + FNameExtSet( cProject, ".hbc" ) ) ENDIF + NEXT - /* Compile documentation */ - IF nAction == _ACT_INC_INST .OR. ; - nAction == _ACT_INC_REBUILD_INST - mk_hbd( PathSepToSelf( cDir ) ) - ENDIF - ELSE - /* OutStd( hb_StrFormat( "! project '%1$s' skipped", cProject ) + hb_eol() ) */ + /* Compile documentation */ + IF nAction == _ACT_INC_INST .OR. ; + nAction == _ACT_INC_REBUILD_INST + mk_hbd( PathSepToSelf( cDir ) ) ENDIF - NEXT + ELSE + /* OutStd( hb_StrFormat( "! package '%1$s' skipped due to custom filter", cDir ) + hb_eol() ) */ + ENDIF NEXT OutStd( hb_eol() ) diff --git a/harbour/src/rtl/stuff.c b/harbour/src/rtl/stuff.c index 56ad01f1f5..13bf8d1100 100644 --- a/harbour/src/rtl/stuff.c +++ b/harbour/src/rtl/stuff.c @@ -68,10 +68,10 @@ HB_FUNC( STUFF ) if( nPos > 0 ) nPos--; - if( nPos > nText ) + if( nPos < 0 || nPos > nText ) nPos = nText; - if( nDel > nText - nPos ) + if( nDel < 0 || nDel > nText - nPos ) nDel = nText - nPos; if( ( nTotalLen = nText + nInsert - nDel ) > 0 ) diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 988793f4c7..16facf974a 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -2054,16 +2054,16 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) hb_FNameSplit( tmp, @cDir, @cName, @cExt ) DO CASE CASE Empty( cDir ) - tmp := PathMakeAbsolute( tmp, aParam[ _PAR_cFileName ] ) + tmp := PathNormalize( PathMakeAbsolute( tmp, aParam[ _PAR_cFileName ] ) ) hb_FNameSplit( tmp, @cDir, @cName, @cExt ) IF hbmk[ _HBMK_cPROGDIR ] == NIL hbmk[ _HBMK_cPROGDIR ] := cDir ENDIF hbmk[ _HBMK_cPROGNAME ] := FNameNameExtGet( tmp ) CASE ! Empty( cDir ) .AND. Empty( cName ) .AND. Empty( cExt ) - hbmk[ _HBMK_cPROGDIR ] := PathMakeAbsolute( cDir, aParam[ _PAR_cFileName ] ) + hbmk[ _HBMK_cPROGDIR ] := PathNormalize( PathMakeAbsolute( cDir, aParam[ _PAR_cFileName ] ) ) OTHERWISE /* ! Empty( cDir ) .AND. !( Empty( cName ) .AND. Empty( cExt ) ) */ - hbmk[ _HBMK_cPROGDIR ] := PathMakeAbsolute( cDir, aParam[ _PAR_cFileName ] ) + hbmk[ _HBMK_cPROGDIR ] := PathNormalize( PathMakeAbsolute( cDir, aParam[ _PAR_cFileName ] ) ) hbmk[ _HBMK_cPROGNAME ] := FNameNameExtGet( tmp ) ENDCASE ENDIF @@ -2224,7 +2224,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) CASE Left( cParamL, Len( "-workdir=" ) ) == "-workdir=" - hbmk[ _HBMK_cWorkDir ] := PathMakeAbsolute( PathSepToSelf( MacroProc( hbmk, SubStr( cParam, Len( "-workdir=" ) + 1 ), aParam[ _PAR_cFileName ] ) ), aParam[ _PAR_cFileName ] ) + hbmk[ _HBMK_cWorkDir ] := PathNormalize( PathMakeAbsolute( PathSepToSelf( MacroProc( hbmk, SubStr( cParam, Len( "-workdir=" ) + 1 ), aParam[ _PAR_cFileName ] ) ), aParam[ _PAR_cFileName ] ) ) CASE Left( cParamL, Len( "-vcshead=" ) ) == "-vcshead=" @@ -4256,7 +4256,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) /* ; */ IF ! hbmk[ _HBMK_lStopAfterInit ] .AND. hbmk[ _HBMK_lCreateImpLib ] .AND. ! lDumpInfo - DoIMPLIB( hbmk, bBlk_ImpLib, cLibLibPrefix, cLibLibExt, hbmk[ _HBMK_aIMPLIBSRC ], hbmk[ _HBMK_cPROGNAME ] ) + DoIMPLIB( hbmk, bBlk_ImpLib, cLibLibPrefix, cLibLibExt, hbmk[ _HBMK_aIMPLIBSRC ], hbmk[ _HBMK_cPROGNAME ], "" ) hbmk[ _HBMK_lStopAfterInit ] := .T. ENDIF @@ -4494,7 +4494,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) IF ! hbmk[ _HBMK_lStopAfterInit ] .AND. hbmk[ _HBMK_lDEPIMPLIB ] .AND. ISBLOCK( bBlk_ImpLib ) FOR EACH tmp IN hbmk[ _HBMK_hDEP ] IF tmp[ _HBMKDEP_lFound ] .AND. ! Empty( tmp[ _HBMKDEP_aIMPLIBSRC ] ) - DoIMPLIB( hbmk, bBlk_ImpLib, cLibLibPrefix, cLibLibExt, tmp[ _HBMKDEP_aIMPLIBSRC ], tmp[ _HBMKDEP_cIMPLIBDST ] ) + DoIMPLIB( hbmk, bBlk_ImpLib, cLibLibPrefix, cLibLibExt, tmp[ _HBMKDEP_aIMPLIBSRC ], tmp[ _HBMKDEP_cIMPLIBDST ], "implib" ) ENDIF NEXT ENDIF @@ -5905,7 +5905,7 @@ STATIC PROCEDURE vxworks_env_init( hbmk ) RETURN -STATIC PROCEDURE DoIMPLIB( hbmk, bBlk_ImpLib, cLibLibPrefix, cLibLibExt, aIMPLIBSRC, cPROGNAME ) +STATIC PROCEDURE DoIMPLIB( hbmk, bBlk_ImpLib, cLibLibPrefix, cLibLibExt, aIMPLIBSRC, cPROGNAME, cInstCat ) LOCAL cMakeImpLibDLL LOCAL tmp, tmp1 LOCAL nNotFound @@ -5929,7 +5929,7 @@ STATIC PROCEDURE DoIMPLIB( hbmk, bBlk_ImpLib, cLibLibPrefix, cLibLibExt, aIMPLIB SWITCH Eval( bBlk_ImpLib, cMakeImpLibDLL, tmp, ArrayToList( hbmk[ _HBMK_aOPTI ] ) ) CASE _HBMK_IMPLIB_OK hbmk_OutStd( hbmk, hb_StrFormat( I_( "Created import library: %1$s <= %2$s" ), tmp, cMakeImpLibDLL ) ) - AAddNewINST( hbmk[ _HBMK_aINSTFILE ], { "", tmp }, .T. ) + AAddNewINST( hbmk[ _HBMK_aINSTFILE ], { cInstCat, tmp }, .T. ) EXIT CASE _HBMK_IMPLIB_FAILED hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Failed creating import library %1$s from %2$s." ), tmp, cMakeImpLibDLL ) ) @@ -6818,7 +6818,7 @@ STATIC FUNCTION dep_try_pkg_detection( hbmk, dep ) hbmk[ _HBMK_hDEPTSDIR ][ cIncludeDir ] := NIL /* Adjust implib source names with component path */ FOR EACH tmp IN dep[ _HBMKDEP_aIMPLIBSRC ] - tmp := PathMakeAbsolute( tmp, DirAddPathSep( cIncludeDir ) ) + tmp := PathNormalize( PathMakeAbsolute( tmp, DirAddPathSep( cIncludeDir ) ) ) NEXT ENDIF IF hbmk[ _HBMK_lDEBUGDEPD ] @@ -6854,7 +6854,7 @@ STATIC FUNCTION dep_try_header_detection( hbmk, dep ) hbmk[ _HBMK_hDEPTSDIR ][ dep[ _HBMKDEP_cFound ] ] := NIL /* Adjust implib source names with component path */ FOR EACH tmp IN dep[ _HBMKDEP_aIMPLIBSRC ] - tmp := PathMakeAbsolute( tmp, DirAddPathSep( dep[ _HBMKDEP_cFound ] ) ) + tmp := PathNormalize( PathMakeAbsolute( tmp, DirAddPathSep( dep[ _HBMKDEP_cFound ] ) ) ) NEXT dep[ _HBMKDEP_lFound ] := .T. dep[ _HBMKDEP_lFoundLOCAL ] := ( aINCPATH:__enumIndex() == 2 )