2010-07-02 16:13 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbqt/hbmk2_plugin_qt.prg
* Changed to use __binarystreaminclude facility instead
of rolling local .prg (or .c) generation logic.
- Deleted .qrc to .c generator.
- Deleted standalong mode of .qrc to source conversion
(there is nothing interesting in it anymore)
* ChangeLog
; Previous TODO marked as NONISSUE: string encoding
in .ppo file is not often subject to editing.
This commit is contained in:
@@ -16,6 +16,18 @@
|
||||
The license applies to all entries newer than 2009-04-28.
|
||||
*/
|
||||
|
||||
2010-07-02 16:13 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hbqt/hbmk2_plugin_qt.prg
|
||||
* Changed to use __binarystreaminclude facility instead
|
||||
of rolling local .prg (or .c) generation logic.
|
||||
- Deleted .qrc to .c generator.
|
||||
- Deleted standalong mode of .qrc to source conversion
|
||||
(there is nothing interesting in it anymore)
|
||||
|
||||
* ChangeLog
|
||||
; Previous TODO marked as NONISSUE: string encoding
|
||||
in .ppo file is not often subject to editing.
|
||||
|
||||
2010-07-02 16:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/src/pp/ppcore.c
|
||||
% do not allocate 16MB buffer even if included file has 1 byte.
|
||||
@@ -30,7 +42,9 @@
|
||||
is ~16MB and it accepts binary files for input.
|
||||
; TODO: The encoding now contains high ascii chars which
|
||||
is unsafe as it can be converted by editors thus
|
||||
corrupting the embedded binary.
|
||||
corrupting the embedded binary. [NONISSUE: the
|
||||
problem could only be with the .ppo file, which is
|
||||
rarely edited.]
|
||||
|
||||
* contrib/hbqt/hbmk2_plugin_qt.prg
|
||||
% Optimized .qrc to .prg converter to not split the lines.
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
FUNCTION hbmk2_plugin_qt( hbmk2 )
|
||||
LOCAL cRetVal := ""
|
||||
|
||||
LOCAL cMOC_BIN
|
||||
LOCAL cUIC_BIN
|
||||
LOCAL cRCC_BIN
|
||||
LOCAL cUIC_BIN
|
||||
LOCAL cMOC_BIN
|
||||
|
||||
LOCAL cSrc
|
||||
LOCAL cDst
|
||||
@@ -29,6 +29,7 @@ FUNCTION hbmk2_plugin_qt( hbmk2 )
|
||||
LOCAL tDst
|
||||
|
||||
LOCAL cTmp
|
||||
LOCAL cPRG
|
||||
|
||||
LOCAL cCommand
|
||||
LOCAL nError
|
||||
@@ -39,35 +40,38 @@ FUNCTION hbmk2_plugin_qt( hbmk2 )
|
||||
|
||||
/* Gather input parameters */
|
||||
|
||||
hbmk2[ "vars" ][ "aMOC_Src" ] := {}
|
||||
hbmk2[ "vars" ][ "aUIC_Src" ] := {}
|
||||
hbmk2[ "vars" ][ "aQRC_Src" ] := {}
|
||||
hbmk2[ "vars" ][ "aUIC_Src" ] := {}
|
||||
hbmk2[ "vars" ][ "aMOC_Src" ] := {}
|
||||
|
||||
FOR EACH cSrc IN hbmk2[ "params" ]
|
||||
SWITCH Lower( hbmk2_FNameExtGet( cSrc ) )
|
||||
CASE ".hpp"
|
||||
CASE ".h"
|
||||
AAdd( hbmk2[ "vars" ][ "aMOC_Src" ], cSrc )
|
||||
CASE ".qrc"
|
||||
AAdd( hbmk2[ "vars" ][ "aQRC_Src" ], cSrc )
|
||||
EXIT
|
||||
CASE ".ui"
|
||||
AAdd( hbmk2[ "vars" ][ "aUIC_Src" ], cSrc )
|
||||
EXIT
|
||||
CASE ".qrc"
|
||||
AAdd( hbmk2[ "vars" ][ "aQRC_Src" ], cSrc )
|
||||
CASE ".hpp"
|
||||
CASE ".h"
|
||||
AAdd( hbmk2[ "vars" ][ "aMOC_Src" ], cSrc )
|
||||
EXIT
|
||||
ENDSWITCH
|
||||
NEXT
|
||||
|
||||
/* Create output file lists */
|
||||
|
||||
hbmk2[ "vars" ][ "aMOC_Dst" ] := {}
|
||||
hbmk2[ "vars" ][ "aUIC_Dst" ] := {}
|
||||
hbmk2[ "vars" ][ "aQRC_Dst" ] := {}
|
||||
hbmk2[ "vars" ][ "aQRC_PRG" ] := {}
|
||||
hbmk2[ "vars" ][ "aUIC_Dst" ] := {}
|
||||
hbmk2[ "vars" ][ "aMOC_Dst" ] := {}
|
||||
|
||||
FOR EACH cSrc IN hbmk2[ "vars" ][ "aMOC_Src" ]
|
||||
cDst := hbmk2_FNameDirExtSet( "moc_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".cpp" )
|
||||
AAdd( hbmk2[ "vars" ][ "aMOC_Dst" ], cDst )
|
||||
hbmk2_AddInput_CPP( hbmk2, cDst )
|
||||
FOR EACH cSrc IN hbmk2[ "vars" ][ "aQRC_Src" ]
|
||||
cDst := hbmk2_FNameDirExtSet( "rcc_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".qrb" )
|
||||
AAdd( hbmk2[ "vars" ][ "aQRC_Dst" ], cDst )
|
||||
cDst := hbmk2_FNameDirExtSet( "rcc_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".prg" )
|
||||
AAdd( hbmk2[ "vars" ][ "aQRC_PRG" ], cDst )
|
||||
hbmk2_AddInput_PRG( hbmk2, cDst )
|
||||
NEXT
|
||||
|
||||
FOR EACH cSrc IN hbmk2[ "vars" ][ "aUIC_Src" ]
|
||||
@@ -76,16 +80,83 @@ FUNCTION hbmk2_plugin_qt( hbmk2 )
|
||||
hbmk2_AddInput_PRG( hbmk2, cDst )
|
||||
NEXT
|
||||
|
||||
FOR EACH cSrc IN hbmk2[ "vars" ][ "aQRC_Src" ]
|
||||
cDst := hbmk2_FNameDirExtSet( "rcc_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".c" )
|
||||
AAdd( hbmk2[ "vars" ][ "aQRC_Dst" ], cDst )
|
||||
hbmk2_AddInput_C( hbmk2, cDst )
|
||||
FOR EACH cSrc IN hbmk2[ "vars" ][ "aMOC_Src" ]
|
||||
cDst := hbmk2_FNameDirExtSet( "moc_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".cpp" )
|
||||
AAdd( hbmk2[ "vars" ][ "aMOC_Dst" ], cDst )
|
||||
hbmk2_AddInput_CPP( hbmk2, cDst )
|
||||
NEXT
|
||||
|
||||
EXIT
|
||||
|
||||
CASE "pre_prg"
|
||||
|
||||
IF ! hbmk2[ "lCLEAN" ] .AND. ! Empty( hbmk2[ "vars" ][ "aQRC_Src" ] )
|
||||
|
||||
/* Detect 'rcc' tool location */
|
||||
|
||||
cRCC_BIN := qt_tool_detect( hbmk2, "rcc", "RCC_BIN" )
|
||||
|
||||
IF ! Empty( cRCC_BIN )
|
||||
|
||||
/* Execute 'rcc' commands on input files */
|
||||
|
||||
FOR EACH cSrc, cDst, cPRG IN hbmk2[ "vars" ][ "aQRC_Src" ], hbmk2[ "vars" ][ "aQRC_Dst" ], hbmk2[ "vars" ][ "aQRC_PRG" ]
|
||||
|
||||
IF hbmk2[ "lINC" ] .AND. ! hbmk2[ "lREBUILD" ]
|
||||
lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ;
|
||||
! hb_FGetDateTime( cSrc, @tSrc ) .OR. ;
|
||||
tSrc > tDst
|
||||
ELSE
|
||||
lBuildIt := .T.
|
||||
ENDIF
|
||||
|
||||
IF lBuildIt
|
||||
|
||||
cCommand := 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_osNewLine() +;
|
||||
hb_osNewLine() +;
|
||||
"#pragma -km+" + hb_osNewLine() +;
|
||||
hb_osNewLine() +;
|
||||
"FUNCTION hbqtres_" + hbmk2_FNameToSymbol( hbmk2_FNameNameGet( cSrc ) ) + "()" + hb_osNewLine() +;
|
||||
" #pragma __binarystreaminclude " + Chr( 34 ) + hbmk2_FNameNameExtGet( cDst ) + Chr( 34 ) + "|RETURN %s" + hb_osNewLine()
|
||||
|
||||
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
|
||||
NEXT
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF ! hbmk2[ "lCLEAN" ] .AND. ! Empty( hbmk2[ "vars" ][ "aUIC_Src" ] )
|
||||
|
||||
/* Detect 'uic' tool location */
|
||||
@@ -200,77 +271,15 @@ FUNCTION hbmk2_plugin_qt( hbmk2 )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF ! hbmk2[ "lCLEAN" ] .AND. ! Empty( hbmk2[ "vars" ][ "aQRC_Src" ] )
|
||||
|
||||
/* Detect 'rcc' tool location */
|
||||
|
||||
cRCC_BIN := qt_tool_detect( hbmk2, "rcc", "RCC_BIN" )
|
||||
|
||||
IF ! Empty( cRCC_BIN )
|
||||
|
||||
/* Execute 'rcc' commands on input files */
|
||||
|
||||
FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aQRC_Src" ], hbmk2[ "vars" ][ "aQRC_Dst" ]
|
||||
|
||||
IF hbmk2[ "lINC" ] .AND. ! hbmk2[ "lREBUILD" ]
|
||||
lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ;
|
||||
! hb_FGetDateTime( cSrc, @tSrc ) .OR. ;
|
||||
tSrc > tDst
|
||||
ELSE
|
||||
lBuildIt := .T.
|
||||
ENDIF
|
||||
|
||||
IF lBuildIt
|
||||
|
||||
FClose( hb_FTempCreateEx( @cTmp ) )
|
||||
|
||||
cCommand := cRCC_BIN +;
|
||||
" -binary" +;
|
||||
" " + 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_( "'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" ]
|
||||
FErase( cTmp )
|
||||
cRetVal := "error"
|
||||
EXIT
|
||||
ENDIF
|
||||
ELSE
|
||||
IF ! qrc_bin_to_src( hbmk2, cTmp, cDst, hbmk2_FNameToSymbol( hbmk2_FNameNameGet( cSrc ) ) )
|
||||
IF ! hbmk2[ "lIGNOREERROR" ]
|
||||
FErase( cTmp )
|
||||
cRetVal := "error"
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
FErase( cTmp )
|
||||
ENDIF
|
||||
NEXT
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
EXIT
|
||||
|
||||
CASE "post_all"
|
||||
|
||||
IF ! hbmk2[ "lINC" ] .OR. hbmk2[ "lCLEAN" ]
|
||||
AEval( hbmk2[ "vars" ][ "aMOC_Dst" ], {| tmp | FErase( tmp ) } )
|
||||
AEval( hbmk2[ "vars" ][ "aUIC_Dst" ], {| tmp | FErase( tmp ) } )
|
||||
AEval( hbmk2[ "vars" ][ "aQRC_Dst" ], {| tmp | FErase( tmp ) } )
|
||||
AEval( hbmk2[ "vars" ][ "aQRC_PRG" ], {| tmp | FErase( tmp ) } )
|
||||
AEval( hbmk2[ "vars" ][ "aUIC_Dst" ], {| tmp | FErase( tmp ) } )
|
||||
AEval( hbmk2[ "vars" ][ "aMOC_Dst" ], {| tmp | FErase( tmp ) } )
|
||||
ENDIF
|
||||
|
||||
EXIT
|
||||
@@ -328,7 +337,7 @@ STATIC FUNCTION qt_tool_detect( hbmk2, cName, cEnvQT, cEnvHB )
|
||||
|
||||
#else
|
||||
|
||||
/* Standalone test code conversions ) */
|
||||
/* Standalone test code conversions */
|
||||
PROCEDURE Main( cSrc, cDst )
|
||||
LOCAL cTmp
|
||||
LOCAL nError
|
||||
@@ -336,8 +345,6 @@ PROCEDURE Main( cSrc, cDst )
|
||||
|
||||
LOCAL cName
|
||||
|
||||
OutStd( "Test mode", hb_osNewLine() )
|
||||
|
||||
IF cSrc != NIL .AND. ;
|
||||
cDst != NIL
|
||||
|
||||
@@ -348,16 +355,6 @@ PROCEDURE Main( cSrc, cDst )
|
||||
hb_FNameSplit( cSrc,,, @cExt )
|
||||
|
||||
SWITCH Lower( cExt )
|
||||
CASE ".qrc"
|
||||
IF ( nError := hb_processRun( "rcc " + cSrc + " -binary -o " + cTmp ) ) == 0
|
||||
IF ! qrc_bin_to_src( NIL, cTmp, cDst, cName )
|
||||
nError := 9
|
||||
ENDIF
|
||||
ELSE
|
||||
OutErr( "Error: Calling 'rcc' tool: " + hb_ntos( nError ) + hb_osNewLine() )
|
||||
ENDIF
|
||||
EXIT
|
||||
|
||||
CASE ".ui"
|
||||
IF ( nError := hb_processRun( "uic " + cSrc + " -o " + cTmp ) ) == 0
|
||||
IF ! uic_to_prg( NIL, cTmp, cDst, cName )
|
||||
@@ -389,75 +386,6 @@ STATIC FUNCTION hbmk2_OutErr( hbmk2, ... )
|
||||
|
||||
#endif
|
||||
|
||||
STATIC FUNCTION qrc_bin_to_src( hbmk2, cFileNameSrc, cFileNameDst, cName )
|
||||
LOCAL cFile
|
||||
LOCAL cChar
|
||||
LOCAL cOutput
|
||||
LOCAL cExt
|
||||
|
||||
IF hb_FileExists( cFileNameSrc )
|
||||
|
||||
cFile := hb_MemoRead( cFileNameSrc )
|
||||
|
||||
IF ! Empty( cFile )
|
||||
|
||||
cName := "hbqtres_" + cName
|
||||
|
||||
hb_FNameSplit( cFileNameDst,,, @cExt )
|
||||
|
||||
cOutput := "/* WARNING: Automatically generated source file. DO NOT EDIT! */" + hb_osNewLine()
|
||||
cOutput += hb_osNewLine()
|
||||
|
||||
SWITCH Lower( cExt )
|
||||
CASE ".c"
|
||||
|
||||
cOutput += '#include "hbapi.h"' + hb_osNewLine()
|
||||
cOutput += hb_osNewLine()
|
||||
cOutput += "HB_FUNC( " + Upper( cName ) + " )" + hb_osNewLine()
|
||||
cOutput += "{" + hb_osNewLine()
|
||||
cOutput += Chr( 9 ) + "static const char s_res_data[] =" + hb_osNewLine()
|
||||
cOutput += Chr( 9 ) + "{" + hb_osNewLine()
|
||||
cOutput += Chr( 9 ) + Chr( 9 )
|
||||
FOR EACH cChar IN cFile
|
||||
cOutput += "0x" + hb_NumToHex( Asc( cChar ) ) + ","
|
||||
NEXT
|
||||
cOutput += hb_osNewLine()
|
||||
cOutput += Chr( 9 ) + "};" + hb_osNewLine()
|
||||
cOutput += hb_osNewLine()
|
||||
cOutput += Chr( 9 ) + "hb_retclen_const( s_res_data, sizeof( s_res_data ) );" + hb_osNewLine()
|
||||
cOutput += "}" + hb_osNewLine()
|
||||
|
||||
EXIT
|
||||
|
||||
CASE ".prg"
|
||||
|
||||
cOutput += "#pragma -km+" + hb_osNewLine()
|
||||
cOutput += hb_osNewLine()
|
||||
cOutput += "FUNCTION " + cName + "()" + hb_osNewLine()
|
||||
cOutput += Chr( 9 ) + "RETURN e" + Chr( 34 )
|
||||
FOR EACH cChar IN cFile
|
||||
cOutput += "\x" + hb_NumToHex( Asc( cChar ), 2 )
|
||||
NEXT
|
||||
cOutput += Chr( 34 ) + hb_osNewLine()
|
||||
|
||||
EXIT
|
||||
|
||||
ENDSWITCH
|
||||
|
||||
IF hb_MemoWrit( cFileNameDst, cOutput )
|
||||
RETURN .T.
|
||||
ELSE
|
||||
hbmk2_OutErr( hbmk2, hb_StrFormat( "Error: Cannot create file: %1$s", cFileNameDst ) )
|
||||
ENDIF
|
||||
ELSE
|
||||
hbmk2_OutErr( hbmk2, hb_StrFormat( "Error: Empty intermediate file: %1$s", cFileNameSrc ) )
|
||||
ENDIF
|
||||
ELSE
|
||||
hbmk2_OutErr( hbmk2, hb_StrFormat( "Error: Cannot find intermediate file: %1$s", cFileNameSrc ) )
|
||||
ENDIF
|
||||
|
||||
RETURN .F.
|
||||
|
||||
STATIC FUNCTION uic_to_prg( hbmk2, cFileNameSrc, cFileNameDst, cName )
|
||||
LOCAL aLinesPRG
|
||||
LOCAL cFile
|
||||
|
||||
Reference in New Issue
Block a user