From 7fb6524767ab9eb9e12d2bec1204ffa200740b78 Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Wed, 27 Jan 2010 02:22:27 +0000 Subject: [PATCH] 2010-01-26 18:21 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbide/idemisc.prg * contrib/hbide/ideprojmanager.prg * contrib/hbxbp/hbpprocess.prg ! xMate project file .xhp loading more normalized. I could build almost all of my projects created from it. --- harbour/ChangeLog | 7 ++ harbour/contrib/hbide/idemisc.prg | 117 +++++++++++++++++++++ harbour/contrib/hbide/ideprojmanager.prg | 127 ++++++++++++++--------- harbour/contrib/hbxbp/hbpprocess.prg | 7 +- 4 files changed, 207 insertions(+), 51 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index b1b3d39e82..692cb3c510 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,13 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-01-26 18:21 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + * contrib/hbide/idemisc.prg + * contrib/hbide/ideprojmanager.prg + * contrib/hbxbp/hbpprocess.prg + ! xMate project file .xhp loading more normalized. + I could build almost all of my projects created from it. + 2010-01-26 22:19 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbwin/win_bmpd.c ! Pacified BCC warnings. diff --git a/harbour/contrib/hbide/idemisc.prg b/harbour/contrib/hbide/idemisc.prg index 8359593e97..9c95b39e75 100644 --- a/harbour/contrib/hbide/idemisc.prg +++ b/harbour/contrib/hbide/idemisc.prg @@ -1182,3 +1182,120 @@ FUNCTION hbide_getOS() RETURN cOS /*----------------------------------------------------------------------*/ +#if 0 +PROCEDURE hbide_convert_xhp_to_hbp( cSrcName ) + LOCAL cSrc := MemoRead( cSrcName ) + LOCAL cDst + LOCAL aDst := {} + LOCAL tmp + LOCAL cLine + LOCAL cSetting + LOCAL cValue + LOCAL aValue + LOCAL cFile + LOCAL hLIBPATH := {=>} + LOCAL cMAIN := NIL + LOCAL lFileSection := .F. + + LOCAL cHome, cOutname, cType, cDefine, cInclude, aFiles := {} + LOCAL cRun, cParams, cDestntn, cMap + + + cSrc := StrTran( cSrc, Chr( 13 ) + Chr( 10 ), Chr( 10 ) ) + cSrc := StrTran( cSrc, Chr( 9 ), Chr( 32 ) ) + + FOR EACH cLine IN hb_ATokens( cSrc, Chr( 10 ) ) + IF cLine == "[Files]" + lFileSection := .T. + ELSEIF lFileSection + tmp := At( "=", cLine ) + IF tmp > 0 + cFile := AllTrim( Left( cLine, tmp - 1 ) ) + SWITCH Lower( FN_ExtGet( cFile ) ) + CASE ".c" + CASE ".prg" + IF !( "%HB_INSTALL%\" $ cFile ) + AAdd( aDst, StrTran( cFile, "%HOME%\" ) ) + ENDIF + EXIT + CASE ".lib" + CASE ".a" + IF !( "%C_LIB_INSTALL%\" $ cFile ) .AND. ; + !( "%HB_LIB_INSTALL%\" $ cFile ) + cFile := StrTran( cFile, "%HOME%\" ) + IF !( FN_DirGet( cFile ) $ hLIBPATH ) + hLIBPATH[ FN_DirGet( cFile ) ] := NIL + ENDIF + AAdd( aDst, "-l" + FN_NameGet( cFile ) ) + ENDIF + EXIT + CASE ".obj" + CASE ".o" + IF !( "%C_LIB_INSTALL%\" $ cFile ) .AND. ; + !( "%HB_LIB_INSTALL%\" $ cFile ) + AAdd( aDst, StrTran( cFile, "%HOME%\" ) ) + ENDIF + EXIT + ENDSWITCH + ENDIF + ELSE + tmp := At( "=", cLine ) + IF tmp > 0 + cSetting := AllTrim( Left( cLine, tmp - 1 ) ) + cValue := AllTrim( SubStr( cLine, tmp + Len( "=" ) ) ) + aValue := hb_ATokens( cValue ) + IF ! Empty( cValue ) + SWITCH cSetting + CASE "Create Map/List File" + IF cValue == "Yes" + AAdd( aDst, "-map" ) + ENDIF + EXIT + CASE "Final Path" + IF ! Empty( cValue ) + AAdd( aDst, "-o" + DirAddPathSep( StrTran( cValue, "%HOME%\" ) ) ) + ENDIF + EXIT + CASE "Include" + FOR EACH tmp IN aValue + IF Left( tmp, 2 ) == "-I" + tmp := SubStr( tmp, 3 ) + ENDIF + AAdd( aDst, "-incpath=" + StrTran( StrTran( tmp, Chr( 34 ) ), "%HOME%\" ) ) + NEXT + EXIT + CASE "Define" + FOR EACH tmp IN aValue + IF Left( tmp, 2 ) == "-D" + tmp := SubStr( tmp, 3 ) + ENDIF + AAdd( aDst, "-D" + tmp ) + NEXT + EXIT + CASE "Params" + FOR EACH tmp IN aValue + AAdd( aDst, "-runflag=" + tmp ) + NEXT + EXIT + ENDSWITCH + ENDIF + ENDIF + ENDIF + NEXT + + FOR EACH tmp IN hLIBPATH + AAdd( aDst, "-L" + tmp:__enumKey() ) + NEXT + + cDst := "" + FOR EACH tmp IN aDst + cDst += tmp + hb_osNewLine() + NEXT + + hbmk_OutStd( hb_StrFormat( I_( "Saving as .hbp file: %1$s" ), cDstName ) ) + + hb_MemoWrit( cDstName, cDst ) + + RETURN +#endif +/*----------------------------------------------------------------------*/ diff --git a/harbour/contrib/hbide/ideprojmanager.prg b/harbour/contrib/hbide/ideprojmanager.prg index 8692ec33d3..10f23b04a2 100644 --- a/harbour/contrib/hbide/ideprojmanager.prg +++ b/harbour/contrib/hbide/ideprojmanager.prg @@ -689,9 +689,12 @@ METHOD IdeProjManager:save( lCanClose ) /*----------------------------------------------------------------------*/ METHOD IdeProjManager:loadXhpProject() - LOCAL cXhp, a_, s, n, cPart, cKey, cVal, b_ - LOCAL cHome, cOutname, cType, cDefine, cInclude, aFiles := {} + LOCAL cXhp, a_, s, n, cPart, cKey, cVal + LOCAL cHome, cOutname, cType, cDefine, cInclude LOCAL cRun, cParams, cDestntn, cMap + LOCAL cPath, cFile, cExt + LOCAL hLIBPATH := {=>} + LOCAL aLibs := {}, aFlags := {}, aFiles := {}, aSrc := {} cXhp := hbide_fetchAFile( ::oDlg, "Selecet xMate Project File", { { "xMate Project Files", "*.xhp" } } ) @@ -716,7 +719,6 @@ METHOD IdeProjManager:loadXhpProject() cPart := "" ENDIF ELSE -hbide_dbg( cPart ) SWITCH lower( cPart ) CASE "version" EXIT @@ -775,48 +777,76 @@ hbide_dbg( cPart ) NEXT /* Basic Parsing is complete , parse paths from keywords */ - hbide_justACall( cType ) + SWITCH cType + CASE "Executable" + ::oUI:q_comboPrjType:setCurrentIndex( 0 ) + EXIT + CASE "Library" + ::oUI:q_comboPrjType:setCurrentIndex( 1 ) + EXIT + CASE "Dll" + ::oUI:q_comboPrjType:setCurrentIndex( 2 ) + EXIT + OTHERWISE + ::oUI:q_comboPrjType:setCurrentIndex( 0 ) + EXIT + ENDSWITCH ::oUI:q_editPrjTitle :setText( cOutName ) ::oUI:q_editPrjLoctn :setText( cHome ) * ::oUI:q_editWrkFolder:setText( "" ) - ::oUI:q_editDstFolder:setText( iif( cDestntn == "%HOME%", cHome, hbide_xmateMetaToHbMeta( cDestntn ) ) ) + ::oUI:q_editDstFolder:setText( iif( cDestntn == "%HOME%", cHome, strtran( cDestntn, "%HOME%\", ) ) ) * ::oUI:q_editBackup :setText( "" ) ::oUI:q_editOutName :setText( cOutName ) ::oUI:q_editLaunchParams:setText( cParams ) ::oUI:q_editLaunchExe:setText( cRun ) - a_:= {} - aadd( a_, iif( empty( cMap ), "", cMap ) ) - aadd( a_, "" ) + IF !empty( cMap ) + aadd( aFlags, cMap ) + endif + aadd( aFlags, "-inc" ) IF !empty( cDefine ) - b_:= hb_aTokens( cDefine, ";" ) - FOR EACH s IN b_ + FOR EACH s IN hb_aTokens( cDefine, ";" ) IF !empty( s ) - s := "-D" + s + aadd( aFlags, "-D" + StrTran( s, "%HOME%\", ) ) ENDIF NEXT ENDIF - aeval( b_, {|e| aadd( a_, e ) } ) IF !empty( cInclude ) - b_:= hb_aTokens( cInclude, ";" ) - FOR EACH s IN b_ + FOR EACH s IN hb_aTokens( cInclude, ";" ) IF !empty( s ) - s := "-incpath=" + strtran( s, "%HOME%\" ) + IF !( "%HB_INSTALL%" $ s .OR. "%HB_LIB_INSTALL%" $ s .OR. "%C_LIB_INSTALL%" $ s ) + aadd( aFlags, "-incpath=" + StrTran( s, "%HOME%\", ) ) + ENDIF ENDIF NEXT ENDIF - aeval( b_, {|e| aadd( a_, e ) } ) - ::oUI:q_editFlags:setPlainText( hbide_arrayToMemo( a_ ) ) - - a_:= {} FOR EACH s IN aFiles - IF !( "%HB_LIB_INSTALL%" $ s .OR. "C_LIB_INSTALL" $ s ) - aadd( a_, strtran( s, "%HOME%\", ) ) + IF !( "%HB_INSTALL%" $ s .OR. "%HB_LIB_INSTALL%" $ s .OR. "%C_LIB_INSTALL%" $ s ) + hb_fNameSplit( s, @cPath, @cFile, @cExt ) + SWITCH lower( cExt ) + CASE ".lib" + CASE ".a" + IF !( cPath $ hLIBPATH ) + hLIBPATH[ cPath ] := NIL + ENDIF + aadd( aLibs, cFile ) + EXIT + OTHERWISE + aadd( aSrc, StrTran( s, "%HOME%\", ) ) + EXIT + ENDSWITCH ENDIF NEXT - ::oUI:q_editSources :setPlainText( hbide_arrayToMemo( a_ ) ) -* ::oUI:q_editMetaData :setPlainText( "" ) + FOR EACH s IN hLIBPATH + aadd( aFlags, "-L" + s:__enumKey() ) + NEXT + FOR EACH s IN aLibs + aadd( aFlags, "-l" + s ) + NEXT + + ::oUI:q_editFlags :setPlainText( hbide_arrayToMemo( aFlags ) ) + ::oUI:q_editSources:setPlainText( hbide_arrayToMemo( aSrc ) ) RETURN Self @@ -874,19 +904,19 @@ METHOD IdeProjManager:manageEnvironments() /*----------------------------------------------------------------------*/ METHOD IdeProjManager:saveEnvironments() - LOCAL cText + LOCAL cText, cPathMk2, cPathEnv - ::oProject:cPathMk2 := ::oUI:q_editPathMk2:text() - ::oProject:cPathEnv := ::oUI:q_editPathEnv:text() + cPathMk2 := ::oUI:q_editPathMk2:text() + cPathEnv := ::oUI:q_editPathEnv:text() - ::oIde:aINI[ INI_HBIDE, PathMk2 ] := ::oProject:cPathMk2 - ::oIde:aINI[ INI_HBIDE, PathEnv ] := ::oProject:cPathEnv + ::oIde:aINI[ INI_HBIDE, PathMk2 ] := cPathMk2 + ::oIde:aINI[ INI_HBIDE, PathEnv ] := cPathEnv // - ::oIde:cWrkPathMk2 := ::oProject:cPathMk2 - ::oIde:cWrkPathEnv := ::oProject:cPathEnv + ::oIde:cWrkPathMk2 := cPathMk2 + ::oIde:cWrkPathEnv := cPathEnv IF !empty( cText := ::oUI:q_editCompilers:toPlainText() ) - hb_MemoWrit( hbide_pathFile( ::oProject:cPathEnv, "hbide.env" ), cText ) + hb_MemoWrit( hbide_pathFile( cPathEnv, "hbide.env" ), cText ) ENDIF RETURN Self @@ -1311,7 +1341,7 @@ METHOD IdeProjManager:buildProject( cProject, lLaunch, lRebuild, lPPO, lViaQt ) aadd( aHbp, " " ) IF !( ::lPPO ) aadd( aHbp, "-o" + cTargetFN ) - aadd( aHbp, "-workdir=" + ::oProject:wrkDirectory + "/${hb_plat}/${hb_comp}" ) + * aadd( aHbp, "-workdir=" + ::oProject:wrkDirectory + "/${hb_plat}/${hb_comp}" ) ENDIF aadd( aHbp, "-q" ) aadd( aHbp, "-trace" ) @@ -1382,18 +1412,13 @@ METHOD IdeProjManager:buildProject( cProject, lLaunch, lRebuild, lPPO, lViaQt ) // ::oProcess:output := {|cOut, mp2, oHbp| ::showOutput( cOut,mp2,oHbp ) } ::oProcess:finished := {|nEC , nES, oHbp| ::finished( nEC ,nES,oHbp ) } - ::oProcess:workingPath := ::oProject:wrkDirectory - - #if 1 - cCmd := hbide_getShellCommand() - cC := iif( hbide_getOS() == "nix", "", "/C " ) - cArg := iif( empty( ::cBatch ), cC, cC + ::cBatch + " && " ) - - ::oProcess:addArg( cArg + cExeHbMk2 + " " + cHbpPath + iif( ::lPPO, " -hbraw", "" ) ) - #else - cCmd := cCmd + ::cBatch + " && " + cExeHbMk2 + " " + cHbpPath + iif( ::lPPO, " -hbraw", "" ) - #endif - + ::oProcess:workingPath := hbide_pathToOSPath( ::oProject:wrkDirectory ) + // + cCmd := hbide_getShellCommand() + cC := iif( hbide_getOS() == "nix", "", "/C " ) + cArg := iif( empty( ::cBatch ), cC, cC + ::cBatch + " && " ) + // + ::oProcess:addArg( cArg + cExeHbMk2 + " " + cHbpPath + iif( ::lPPO, " -hbraw", "" ) ) ::oProcess:start( cCmd ) ENDIF @@ -1444,7 +1469,8 @@ METHOD IdeProjManager:finished( nExitCode, nExitStatus, oProcess ) * 03/01/2010 - 09:24:50 */ METHOD IdeProjManager:launchProject( cProject ) - LOCAL qProcess, cTargetFN, cTmp, oProject + LOCAL cTargetFN, cTmp, oProject + LOCAL qProcess IF empty( cProject ) cProject := ::oPM:getCurrentProject() @@ -1468,14 +1494,19 @@ METHOD IdeProjManager:launchProject( cProject ) ELSEIF oProject:type == "Executable" cTmp := "Launching application [ " + cTargetFN + " ]" + #if 1 qProcess := QProcess():new() - // qProcess:setWorkingDirectory( hbide_pathToOSPath( oProject:wrkDirectory ) ) - qProcess:startDetached_2( cTargetFN ) qProcess:waitForStarted() qProcess:pPtr := 0 - qProcess := NIL + qProcess := NIL + #else + ::oProcess := HbpProcess():new() + ::oProcess:output := {|s| hbide_dbg( s ) } + ::oProcess:finished := {|n,nn| hbide_dbg( "Finished", n, nn ) } + ::oProcess:start( cTargetFN ) + #endif ELSE cTmp := "Launching application [ " + cTargetFN + " ] ( not applicable )." diff --git a/harbour/contrib/hbxbp/hbpprocess.prg b/harbour/contrib/hbxbp/hbpprocess.prg index 558a7f62dd..d164905ab7 100644 --- a/harbour/contrib/hbxbp/hbpprocess.prg +++ b/harbour/contrib/hbxbp/hbpprocess.prg @@ -205,9 +205,9 @@ METHOD HbpProcess:start( cShellCmd ) Qt_Slots_Connect( ::pSlots, ::qProcess, "bytesWritten(int)" , {|o,i| ::read( CHN_BYT, i, o ) } ) Qt_Slots_Connect( ::pSlots, ::qProcess, "stateChanged(int)" , {|o,i| ::read( CHN_STT, i, o ) } ) Qt_Slots_Connect( ::pSlots, ::qProcess, "error(int)" , {|o,i| ::read( CHN_ERE, i, o ) } ) - Qt_Slots_Connect( ::pSlots, ::qProcess, "started()" , {|o,i| ::read( CHN_BGN, i, o ) } ) #endif + Qt_Slots_Connect( ::pSlots, ::qProcess, "started()" , {|o,i| ::read( CHN_BGN, i, o ) } ) Qt_Slots_Connect( ::pSlots, ::qProcess, "readyReadStandardOutput()", {|o,i| ::read( CHN_OUT, i, o ) } ) Qt_Slots_Connect( ::pSlots, ::qProcess, "readyReadStandardError()" , {|o,i| ::read( CHN_ERR, i, o ) } ) Qt_Slots_Connect( ::pSlots, ::qProcess, "finished(int,int)" , {|o,i,ii| ::read( CHN_FIN, i, ii, o ) } ) @@ -233,7 +233,8 @@ METHOD HbpProcess:read( nMode, i, ii ) nSize := 16384 DO CASE - CASE nMode == CHN_REA + CASE nMode == CHN_BGN + ::outputMe( "Starting in: " + CurDir() + " : " + ::qProcess:workingDirectory() ) CASE nMode == CHN_OUT ::qProcess:setReadChannel( 0 ) @@ -278,8 +279,8 @@ METHOD HbpProcess:finish() Qt_Slots_disConnect( ::pSlots, ::qProcess, "bytesWritten(int)" ) Qt_Slots_disConnect( ::pSlots, ::qProcess, "stateChanged(int)" ) Qt_Slots_disConnect( ::pSlots, ::qProcess, "error(int)" ) - Qt_Slots_disConnect( ::pSlots, ::qProcess, "started()" ) #endif + Qt_Slots_disConnect( ::pSlots, ::qProcess, "started()" ) Qt_Slots_disConnect( ::pSlots, ::qProcess, "readyReadStandardOutput()" ) Qt_Slots_disConnect( ::pSlots, ::qProcess, "readyReadStandardError()" ) Qt_Slots_disConnect( ::pSlots, ::qProcess, "finished(int,int)" )