2010-06-29 12:44 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.prg
+ Separated package dependency by key header autodetection logic
from header dependency parsing logic. This way the code is
cleaner and it has the added benefit that dependencies
will be detected even without actual source code using the
key headers. This f.e. makes it possible to pull dependencies
for autogenerated code (such example can be found in hbide
where generated .cpp depends on qt).
Another benefit is that pkg detection by header will also
work in non incremental mode or forcefully disabled header
parsing option, it also causes better header parsing
performance.
* contrib/hbqt/hbqt_common.hbm
- contrib/hbqt/hbmk2_plugin_moc.prg
* contrib/hbqt/hbmk2_plugin_qt.prg
+ Merged moc plugin into qt plugin. This way some of the
common code and logic is now integrated, forming a common
hbmk2 plugin for all QT purposes.
% Merged common code.
* Some internal renames.
* Further changes regarding proper -clean behavior.
* contrib/hbide/hbide.prg
* contrib/hbide/ideprojmanager.prg
- contrib/hbide/resources/hbide.env
+ contrib/hbide/hbide.env
* Moved hbide.env to hbide root.
; TODO: It remains to be solved that hbide.env be searched
at the same locations as as hbide.ini. It would be even better
if hbide.env could use more standard .ini layout and be simply
merged into hbide.ini.
Pritpal, could you check this issue?
This commit is contained in:
@@ -16,6 +16,41 @@
|
||||
The license applies to all entries newer than 2009-04-28.
|
||||
*/
|
||||
|
||||
2010-06-29 12:44 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* utils/hbmk2/hbmk2.prg
|
||||
+ Separated package dependency by key header autodetection logic
|
||||
from header dependency parsing logic. This way the code is
|
||||
cleaner and it has the added benefit that dependencies
|
||||
will be detected even without actual source code using the
|
||||
key headers. This f.e. makes it possible to pull dependencies
|
||||
for autogenerated code (such example can be found in hbide
|
||||
where generated .cpp depends on qt).
|
||||
Another benefit is that pkg detection by header will also
|
||||
work in non incremental mode or forcefully disabled header
|
||||
parsing option, it also causes better header parsing
|
||||
performance.
|
||||
|
||||
* contrib/hbqt/hbqt_common.hbm
|
||||
- contrib/hbqt/hbmk2_plugin_moc.prg
|
||||
* contrib/hbqt/hbmk2_plugin_qt.prg
|
||||
+ Merged moc plugin into qt plugin. This way some of the
|
||||
common code and logic is now integrated, forming a common
|
||||
hbmk2 plugin for all QT purposes.
|
||||
% Merged common code.
|
||||
* Some internal renames.
|
||||
* Further changes regarding proper -clean behavior.
|
||||
|
||||
* contrib/hbide/hbide.prg
|
||||
* contrib/hbide/ideprojmanager.prg
|
||||
- contrib/hbide/resources/hbide.env
|
||||
+ contrib/hbide/hbide.env
|
||||
* Moved hbide.env to hbide root.
|
||||
; TODO: It remains to be solved that hbide.env be searched
|
||||
at the same locations as as hbide.ini. It would be even better
|
||||
if hbide.env could use more standard .ini layout and be simply
|
||||
merged into hbide.ini.
|
||||
Pritpal, could you check this issue?
|
||||
|
||||
2010-06-29 09:52 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* INSTALL
|
||||
+ Added HB_QT_RCC_BIN
|
||||
@@ -50,8 +85,7 @@
|
||||
hbide.env, plus the fact the internal html pages make references
|
||||
to these external files, too.)
|
||||
- Deleted some unnecessary trash from source.
|
||||
; TOFIX: hbide.env should reside in same place as hbide.ini.
|
||||
Pritpal could you check it?
|
||||
; TOFIX: hbide.env should reside in same place as hbide.ini. [DONE]
|
||||
; TOFIX: hbide internal html pages make reference to .png files
|
||||
on disk.
|
||||
|
||||
|
||||
@@ -252,7 +252,7 @@ CLASS HbIde
|
||||
DATA cWrkTheme INIT ""
|
||||
DATA cWrkCodec INIT ""
|
||||
DATA cWrkPathMk2 INIT hb_getenv( "HBIDE_DIR_HBMK2" )
|
||||
DATA cWrkPathEnv INIT hb_DirBase() + "resources"
|
||||
DATA cWrkPathEnv INIT hb_DirBase()
|
||||
DATA cWrkEnvironment INIT ""
|
||||
DATA cWrkFind INIT ""
|
||||
DATA cWrkFolderFind INIT ""
|
||||
|
||||
@@ -137,7 +137,7 @@ CLASS IdeProject
|
||||
DATA dotHbp INIT ""
|
||||
DATA compilers INIT ""
|
||||
DATA cPathMk2 INIT hb_getenv( "HBIDE_DIR_HBMK2" )
|
||||
DATA cPathEnv INIT hb_DirBase() + "resources"
|
||||
DATA cPathEnv INIT hb_DirBase()
|
||||
DATA hSources INIT {=>}
|
||||
DATA hPaths INIT {=>}
|
||||
DATA lPathAbs INIT .F. // Lets try relative paths first . xhp and hbp will be relative anyway
|
||||
|
||||
@@ -1,150 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2010 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* www - http://harbour-project.org
|
||||
*
|
||||
* See COPYING for licensing terms.
|
||||
*/
|
||||
|
||||
#define I_( x ) hb_i18n_gettext( x )
|
||||
|
||||
FUNCTION hbmk2_plugin_moc( hbmk2 )
|
||||
LOCAL cRetVal := ""
|
||||
|
||||
LOCAL cMOC_BIN
|
||||
|
||||
LOCAL aMOC
|
||||
LOCAL aMOC_Dst
|
||||
|
||||
LOCAL cSrc
|
||||
LOCAL cDst
|
||||
LOCAL tSrc
|
||||
LOCAL tDst
|
||||
|
||||
LOCAL cCommand
|
||||
LOCAL nError
|
||||
LOCAL lBuildIt
|
||||
|
||||
SWITCH hbmk2[ "cSTATE" ]
|
||||
CASE "pre_all"
|
||||
|
||||
/* Gather input parameters */
|
||||
|
||||
aMOC := {}
|
||||
aMOC_Dst := {}
|
||||
|
||||
FOR EACH cSrc IN hbmk2[ "params" ]
|
||||
IF Lower( hbmk2_FNameExtGet( cSrc ) ) == ".h" .OR. ;
|
||||
Lower( hbmk2_FNameExtGet( cSrc ) ) == ".hpp"
|
||||
cDst := hbmk2_FNameDirExtSet( "moc_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".cpp" )
|
||||
AAdd( aMOC, cSrc )
|
||||
AAdd( aMOC_Dst, cDst )
|
||||
hbmk2_AddInput_CPP( hbmk2, cDst )
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
hbmk2[ "vars" ][ "aMOC" ] := aMOC
|
||||
hbmk2[ "vars" ][ "aMOC_Dst" ] := aMOC_Dst
|
||||
|
||||
EXIT
|
||||
|
||||
CASE "pre_c"
|
||||
|
||||
IF ! Empty( hbmk2[ "vars" ][ "aMOC" ] )
|
||||
|
||||
/* Detect 'moc' tool location */
|
||||
|
||||
cMOC_BIN := GetEnv( "MOC_BIN" )
|
||||
IF Empty( cMOC_BIN )
|
||||
IF Empty( GetEnv( "HB_QT_MOC_BIN" ) )
|
||||
IF hbmk2[ "cPLAT" ] == "win"
|
||||
IF GetEnv( "HB_WITH_QT" ) == "no"
|
||||
RETURN NIL
|
||||
ELSE
|
||||
cMOC_BIN := GetEnv( "HB_WITH_QT" ) + "\..\bin\moc.exe"
|
||||
IF ! hb_FileExists( cMOC_BIN )
|
||||
hbmk2_OutErr( hbmk2, "HB_WITH_QT points to incomplete QT installation. 'moc' executable not found." )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
ELSE
|
||||
cMOC_BIN := hbmk2_FindInPath( "moc", GetEnv( "PATH" ) + hb_osPathListSeparator() + "/opt/qtsdk/qt/bin" )
|
||||
IF Empty( cMOC_BIN )
|
||||
cMOC_BIN := hbmk2_FindInPath( "moc-qt4", GetEnv( "PATH" ) + hb_osPathListSeparator() + "/opt/qtsdk/qt/bin" )
|
||||
IF Empty( cMOC_BIN )
|
||||
hbmk2_OutErr( hbmk2, "HB_QT_MOC_BIN not set, could not autodetect" )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF hbmk2[ "lINFO" ]
|
||||
hbmk2_OutStd( hbmk2, hb_StrFormat( "Using QT 'moc' executable: %1$s (autodetected)", cMOC_BIN ) )
|
||||
ENDIF
|
||||
ELSE
|
||||
IF hb_FileExists( GetEnv( "HB_QT_MOC_BIN" ) )
|
||||
cMOC_BIN := GetEnv( "HB_QT_MOC_BIN" )
|
||||
IF hbmk2[ "lINFO" ]
|
||||
hbmk2_OutStd( hbmk2, hb_StrFormat( "Using QT 'moc' executable: %1$s", cMOC_BIN ) )
|
||||
ENDIF
|
||||
ELSE
|
||||
hbmk2_OutErr( hbmk2, "HB_QT_MOC_BIN points to non-existent file. Make sure to set it to full path and filename of 'moc' executable." )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
/* Execute 'moc' commands on input files */
|
||||
|
||||
FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aMOC" ], hbmk2[ "vars" ][ "aMOC_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
|
||||
|
||||
cCommand := 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[ "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
|
||||
NEXT
|
||||
ENDIF
|
||||
|
||||
EXIT
|
||||
|
||||
CASE "post_all"
|
||||
|
||||
IF ! hbmk2[ "lINC" ] .OR. hbmk2[ "lCLEAN" ]
|
||||
AEval( hbmk2[ "vars" ][ "aMOC_Dst" ], {| tmp | FErase( tmp ) } )
|
||||
ENDIF
|
||||
|
||||
EXIT
|
||||
|
||||
ENDSWITCH
|
||||
|
||||
RETURN cRetVal
|
||||
@@ -15,6 +15,7 @@
|
||||
FUNCTION hbmk2_plugin_qt( hbmk2 )
|
||||
LOCAL cRetVal := ""
|
||||
|
||||
LOCAL cMOC_BIN
|
||||
LOCAL cUIC_BIN
|
||||
LOCAL cRCC_BIN
|
||||
|
||||
@@ -34,213 +35,213 @@ FUNCTION hbmk2_plugin_qt( hbmk2 )
|
||||
|
||||
/* Gather input parameters */
|
||||
|
||||
hbmk2[ "vars" ][ "aUI" ] := {}
|
||||
hbmk2[ "vars" ][ "aUI_Dst" ] := {}
|
||||
|
||||
hbmk2[ "vars" ][ "aMOC" ] := {}
|
||||
hbmk2[ "vars" ][ "aUIC" ] := {}
|
||||
hbmk2[ "vars" ][ "aQRC" ] := {}
|
||||
hbmk2[ "vars" ][ "aQRC_Dst" ] := {}
|
||||
|
||||
FOR EACH cSrc IN hbmk2[ "params" ]
|
||||
SWITCH Lower( hbmk2_FNameExtGet( cSrc ) )
|
||||
CASE ".hpp"
|
||||
CASE ".h"
|
||||
AAdd( hbmk2[ "vars" ][ "aMOC" ], cSrc )
|
||||
EXIT
|
||||
CASE ".ui"
|
||||
cDst := hbmk2_FNameDirExtSet( "ui_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".prg" )
|
||||
AAdd( hbmk2[ "vars" ][ "aUI" ], cSrc )
|
||||
AAdd( hbmk2[ "vars" ][ "aUI_Dst" ], cDst )
|
||||
hbmk2_AddInput_PRG( hbmk2, cDst )
|
||||
AAdd( hbmk2[ "vars" ][ "aUIC" ], cSrc )
|
||||
EXIT
|
||||
CASE ".qrc"
|
||||
cDst := hbmk2_FNameDirExtSet( "qrc_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".cpp" )
|
||||
AAdd( hbmk2[ "vars" ][ "aQRC" ], cSrc )
|
||||
AAdd( hbmk2[ "vars" ][ "aQRC_Dst" ], cDst )
|
||||
hbmk2_AddInput_CPP( hbmk2, cDst )
|
||||
EXIT
|
||||
ENDSWITCH
|
||||
NEXT
|
||||
|
||||
/* Create output file lists */
|
||||
|
||||
hbmk2[ "vars" ][ "aMOC_Dst" ] := {}
|
||||
hbmk2[ "vars" ][ "aUIC_Dst" ] := {}
|
||||
hbmk2[ "vars" ][ "aQRC_Dst" ] := {}
|
||||
|
||||
FOR EACH cSrc IN hbmk2[ "vars" ][ "aMOC" ]
|
||||
cDst := hbmk2_FNameDirExtSet( "moc_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".cpp" )
|
||||
AAdd( hbmk2[ "vars" ][ "aMOC_Dst" ], cDst )
|
||||
hbmk2_AddInput_CPP( hbmk2, cDst )
|
||||
NEXT
|
||||
|
||||
FOR EACH cSrc IN hbmk2[ "vars" ][ "aUIC" ]
|
||||
cDst := hbmk2_FNameDirExtSet( "uic_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".prg" )
|
||||
AAdd( hbmk2[ "vars" ][ "aUIC_Dst" ], cDst )
|
||||
hbmk2_AddInput_PRG( hbmk2, cDst )
|
||||
NEXT
|
||||
|
||||
FOR EACH cSrc IN hbmk2[ "vars" ][ "aQRC" ]
|
||||
cDst := hbmk2_FNameDirExtSet( "rcc_" + hbmk2_FNameNameGet( cSrc ), hbmk2[ "cWorkDir" ], ".cpp" )
|
||||
AAdd( hbmk2[ "vars" ][ "aQRC_Dst" ], cDst )
|
||||
hbmk2_AddInput_CPP( hbmk2, cDst )
|
||||
NEXT
|
||||
|
||||
EXIT
|
||||
|
||||
CASE "pre_prg"
|
||||
|
||||
IF ! Empty( hbmk2[ "vars" ][ "aUI" ] )
|
||||
IF ! hbmk2[ "lCLEAN" ] .AND. ! Empty( hbmk2[ "vars" ][ "aUIC" ] )
|
||||
|
||||
/* Detect 'uic' tool location */
|
||||
|
||||
cUIC_BIN := GetEnv( "UIC_BIN" )
|
||||
IF Empty( cUIC_BIN )
|
||||
IF Empty( GetEnv( "HB_QT_UIC_BIN" ) )
|
||||
IF hbmk2[ "cPLAT" ] == "win"
|
||||
IF GetEnv( "HB_WITH_QT" ) == "no"
|
||||
RETURN NIL
|
||||
ELSE
|
||||
cUIC_BIN := GetEnv( "HB_WITH_QT" ) + "\..\bin\uic.exe"
|
||||
IF ! hb_FileExists( cUIC_BIN )
|
||||
hbmk2_OutErr( hbmk2, "HB_WITH_QT points to incomplete QT installation. 'uic' executable not found." )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
cUIC_BIN := qt_tool_detect( hbmk2, "UIC_BIN", "HB_QT_UIC_BIN", "uic" )
|
||||
|
||||
IF ! Empty( cUIC_BIN )
|
||||
|
||||
/* Execute 'uic' commands on input files */
|
||||
|
||||
FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aUIC" ], hbmk2[ "vars" ][ "aUIC_Dst" ]
|
||||
|
||||
IF hbmk2[ "lINC" ] .AND. ! hbmk2[ "lREBUILD" ]
|
||||
lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ;
|
||||
! hb_FGetDateTime( cSrc, @tSrc ) .OR. ;
|
||||
tSrc > tDst
|
||||
ELSE
|
||||
cUIC_BIN := hbmk2_FindInPath( "uic", GetEnv( "PATH" ) + hb_osPathListSeparator() + "/opt/qtsdk/qt/bin" )
|
||||
IF Empty( cUIC_BIN )
|
||||
cUIC_BIN := hbmk2_FindInPath( "uic-qt4", GetEnv( "PATH" ) + hb_osPathListSeparator() + "/opt/qtsdk/qt/bin" )
|
||||
IF Empty( cUIC_BIN )
|
||||
hbmk2_OutErr( hbmk2, "HB_QT_UIC_BIN not set, could not autodetect" )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF hbmk2[ "lINFO" ]
|
||||
hbmk2_OutStd( hbmk2, hb_StrFormat( "Using QT 'uic' executable: %1$s (autodetected)", cUIC_BIN ) )
|
||||
ENDIF
|
||||
ELSE
|
||||
IF hb_FileExists( GetEnv( "HB_QT_UIC_BIN" ) )
|
||||
cUIC_BIN := GetEnv( "HB_QT_UIC_BIN" )
|
||||
IF hbmk2[ "lINFO" ]
|
||||
hbmk2_OutStd( hbmk2, hb_StrFormat( "Using QT 'uic' executable: %1$s", cUIC_BIN ) )
|
||||
ENDIF
|
||||
ELSE
|
||||
hbmk2_OutErr( hbmk2, "HB_QT_UIC_BIN points to non-existent file. Make sure to set it to full path and filename of 'uic' executable." )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
/* Execute 'uic' commands on input files */
|
||||
|
||||
FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aUI" ], hbmk2[ "vars" ][ "aUI_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 := 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 )
|
||||
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 := 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 ! ui_to_prg( hbmk2, cTmp, cDst, 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, cSrc )
|
||||
IF ! hbmk2[ "lIGNOREERROR" ]
|
||||
FErase( cTmp )
|
||||
cRetVal := "error"
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
FErase( cTmp )
|
||||
ENDIF
|
||||
FErase( cTmp )
|
||||
ENDIF
|
||||
NEXT
|
||||
NEXT
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
EXIT
|
||||
|
||||
CASE "pre_c"
|
||||
|
||||
IF ! Empty( hbmk2[ "vars" ][ "aQRC" ] )
|
||||
IF ! hbmk2[ "lCLEAN" ] .AND. ! Empty( hbmk2[ "vars" ][ "aMOC" ] )
|
||||
|
||||
/* Detect 'moc' tool location */
|
||||
|
||||
cMOC_BIN := qt_tool_detect( hbmk2, "MOC_BIN", "HB_QT_MOC_BIN", "moc" )
|
||||
|
||||
IF ! Empty( cMOC_BIN )
|
||||
|
||||
/* Execute 'moc' commands on input files */
|
||||
|
||||
FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aMOC" ], hbmk2[ "vars" ][ "aMOC_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
|
||||
|
||||
cCommand := 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[ "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
|
||||
NEXT
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF ! hbmk2[ "lCLEAN" ] .AND. ! Empty( hbmk2[ "vars" ][ "aQRC" ] )
|
||||
|
||||
/* Detect 'rcc' tool location */
|
||||
|
||||
cRCC_BIN := GetEnv( "RCC_BIN" )
|
||||
IF Empty( cRCC_BIN )
|
||||
IF Empty( GetEnv( "HB_QT_RCC_BIN" ) )
|
||||
IF hbmk2[ "cPLAT" ] == "win"
|
||||
IF GetEnv( "HB_WITH_QT" ) == "no"
|
||||
RETURN NIL
|
||||
ELSE
|
||||
cRCC_BIN := GetEnv( "HB_WITH_QT" ) + "\..\bin\rcc.exe"
|
||||
IF ! hb_FileExists( cRCC_BIN )
|
||||
hbmk2_OutErr( hbmk2, "HB_WITH_QT points to incomplete QT installation. 'rcc' executable not found." )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
cRCC_BIN := qt_tool_detect( hbmk2, "RCC_BIN", "HB_QT_RCC_BIN", "rcc" )
|
||||
|
||||
IF ! Empty( cRCC_BIN )
|
||||
|
||||
/* Execute 'rcc' commands on input files */
|
||||
|
||||
FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aQRC" ], hbmk2[ "vars" ][ "aQRC_Dst" ]
|
||||
|
||||
IF hbmk2[ "lINC" ] .AND. ! hbmk2[ "lREBUILD" ]
|
||||
lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ;
|
||||
! hb_FGetDateTime( cSrc, @tSrc ) .OR. ;
|
||||
tSrc > tDst
|
||||
ELSE
|
||||
cRCC_BIN := hbmk2_FindInPath( "rcc", GetEnv( "PATH" ) + hb_osPathListSeparator() + "/opt/qtsdk/qt/bin" )
|
||||
IF Empty( cRCC_BIN )
|
||||
cRCC_BIN := hbmk2_FindInPath( "rcc-qt4", GetEnv( "PATH" ) + hb_osPathListSeparator() + "/opt/qtsdk/qt/bin" )
|
||||
IF Empty( cRCC_BIN )
|
||||
hbmk2_OutErr( hbmk2, "HB_QT_RCC_BIN not set, could not autodetect" )
|
||||
RETURN NIL
|
||||
lBuildIt := .T.
|
||||
ENDIF
|
||||
|
||||
IF lBuildIt
|
||||
|
||||
cCommand := cRCC_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_( "'rcc' command:" ) )
|
||||
ENDIF
|
||||
hbmk2_OutStdRaw( cCommand )
|
||||
ENDIF
|
||||
|
||||
IF ! hbmk2[ "lDONTEXEC" ] .AND. ( 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
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF hbmk2[ "lINFO" ]
|
||||
hbmk2_OutStd( hbmk2, hb_StrFormat( "Using QT 'rcc' executable: %1$s (autodetected)", cRCC_BIN ) )
|
||||
ENDIF
|
||||
ELSE
|
||||
IF hb_FileExists( GetEnv( "HB_QT_RCC_BIN" ) )
|
||||
cRCC_BIN := GetEnv( "HB_QT_RCC_BIN" )
|
||||
IF hbmk2[ "lINFO" ]
|
||||
hbmk2_OutStd( hbmk2, hb_StrFormat( "Using QT 'rcc' executable: %1$s", cRCC_BIN ) )
|
||||
ENDIF
|
||||
ELSE
|
||||
hbmk2_OutErr( hbmk2, "HB_QT_RCC_BIN points to non-existent file. Make sure to set it to full path and filename of 'rcc' executable." )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
NEXT
|
||||
ENDIF
|
||||
|
||||
/* Execute 'rcc' commands on input files */
|
||||
|
||||
FOR EACH cSrc, cDst IN hbmk2[ "vars" ][ "aQRC" ], 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
|
||||
|
||||
cCommand := cRCC_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_( "'rcc' command:" ) )
|
||||
ENDIF
|
||||
hbmk2_OutStdRaw( cCommand )
|
||||
ENDIF
|
||||
|
||||
IF ! hbmk2[ "lDONTEXEC" ] .AND. ( 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
|
||||
ENDIF
|
||||
ENDIF
|
||||
NEXT
|
||||
ENDIF
|
||||
|
||||
EXIT
|
||||
@@ -248,7 +249,8 @@ FUNCTION hbmk2_plugin_qt( hbmk2 )
|
||||
CASE "post_all"
|
||||
|
||||
IF ! hbmk2[ "lINC" ] .OR. hbmk2[ "lCLEAN" ]
|
||||
AEval( hbmk2[ "vars" ][ "aUI_Dst" ], {| tmp | FErase( tmp ) } )
|
||||
AEval( hbmk2[ "vars" ][ "aMOC_Dst" ], {| tmp | FErase( tmp ) } )
|
||||
AEval( hbmk2[ "vars" ][ "aUIC_Dst" ], {| tmp | FErase( tmp ) } )
|
||||
AEval( hbmk2[ "vars" ][ "aQRC_Dst" ], {| tmp | FErase( tmp ) } )
|
||||
ENDIF
|
||||
|
||||
@@ -258,9 +260,53 @@ FUNCTION hbmk2_plugin_qt( hbmk2 )
|
||||
|
||||
RETURN cRetVal
|
||||
|
||||
STATIC FUNCTION qt_tool_detect( hbmk2, cEnvQT, cEnvHB, cName )
|
||||
LOCAL cBIN
|
||||
|
||||
cBIN := GetEnv( cEnvQT )
|
||||
IF Empty( cBIN )
|
||||
IF Empty( GetEnv( cEnvHB ) )
|
||||
IF hbmk2[ "cPLAT" ] == "win"
|
||||
IF GetEnv( "HB_WITH_QT" ) == "no"
|
||||
RETURN NIL
|
||||
ELSE
|
||||
cBIN := GetEnv( "HB_WITH_QT" ) + "\..\bin\" + cName + ".exe"
|
||||
IF ! hb_FileExists( cBIN )
|
||||
hbmk2_OutErr( hbmk2, hb_StrFormat( "HB_WITH_QT points to incomplete QT installation. '%1$s' executable not found.", cName ) )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
ELSE
|
||||
cBIN := hbmk2_FindInPath( cName, GetEnv( "PATH" ) + hb_osPathListSeparator() + "/opt/qtsdk/qt/bin" )
|
||||
IF Empty( cBIN )
|
||||
cBIN := hbmk2_FindInPath( cName + "-qt4", GetEnv( "PATH" ) + hb_osPathListSeparator() + "/opt/qtsdk/qt/bin" )
|
||||
IF Empty( cBIN )
|
||||
hbmk2_OutErr( hbmk2, hb_StrFormat( "%1$s not set, could not autodetect", cEnvHB ) )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF hbmk2[ "lINFO" ]
|
||||
hbmk2_OutStd( hbmk2, hb_StrFormat( "Using QT '%1$s' executable: %2$s (autodetected)", cName, cBIN ) )
|
||||
ENDIF
|
||||
ELSE
|
||||
IF hb_FileExists( GetEnv( cEnvHB ) )
|
||||
cBIN := GetEnv( cEnvHB )
|
||||
IF hbmk2[ "lINFO" ]
|
||||
hbmk2_OutStd( hbmk2, hb_StrFormat( "Using QT '%1$s' executable: %2$s", cName, cBIN ) )
|
||||
ENDIF
|
||||
ELSE
|
||||
hbmk2_OutErr( hbmk2, hb_StrFormat( "%1$s points to non-existent file. Make sure to set it to full path and filename of '%2$s' executable.", cEnvHB, cName ) )
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN cBIN
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
STATIC FUNCTION ui_to_prg( hbmk2, cFileNameSrc, cFileNameDst, cOriSrc )
|
||||
STATIC FUNCTION uic_to_prg( hbmk2, cFileNameSrc, cFileNameDst, cOriSrc )
|
||||
LOCAL aLinesPRG
|
||||
LOCAL cFile
|
||||
LOCAL cName
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
-stop{dos|watcom|bcc|pocc|pocc64|poccarm|msvcia64}
|
||||
|
||||
-plugin=hbmk2_plugin_moc.prg
|
||||
-plugin=hbmk2_plugin_qt.prg
|
||||
|
||||
-depkeyhead=qt:QtCore/qglobal.h
|
||||
-depcontrol=qt:${HB_WITH_QT}
|
||||
|
||||
@@ -325,64 +325,63 @@ REQUEST hbmk_KEYW
|
||||
#define _HBMK_lHBCPPMM 59
|
||||
#define _HBMK_aVAR 60
|
||||
#define _HBMK_hDEP 61
|
||||
#define _HBMK_hDEPBYHEADER 62
|
||||
|
||||
#define _HBMK_lCreateLib 63
|
||||
#define _HBMK_lCreateDyn 64
|
||||
#define _HBMK_lCreateImpLib 65
|
||||
#define _HBMK_lCreateLib 62
|
||||
#define _HBMK_lCreateDyn 63
|
||||
#define _HBMK_lCreateImpLib 64
|
||||
|
||||
#define _HBMK_lDynVM 66
|
||||
#define _HBMK_lDynVM 65
|
||||
|
||||
#define _HBMK_lBLDFLGP 67
|
||||
#define _HBMK_lBLDFLGC 68
|
||||
#define _HBMK_lBLDFLGL 69
|
||||
#define _HBMK_lBLDFLGP 66
|
||||
#define _HBMK_lBLDFLGC 67
|
||||
#define _HBMK_lBLDFLGL 68
|
||||
|
||||
#define _HBMK_cFIRST 70
|
||||
#define _HBMK_aPRG 71
|
||||
#define _HBMK_aC 72
|
||||
#define _HBMK_aCPP 73
|
||||
#define _HBMK_aRESSRC 74
|
||||
#define _HBMK_aRESCMP 75
|
||||
#define _HBMK_aOBJUSER 76
|
||||
#define _HBMK_aICON 77
|
||||
#define _HBMK_aIMPLIBSRC 78
|
||||
#define _HBMK_aDEF 79
|
||||
#define _HBMK_hDEPTS 80
|
||||
#define _HBMK_cFIRST 69
|
||||
#define _HBMK_aPRG 70
|
||||
#define _HBMK_aC 71
|
||||
#define _HBMK_aCPP 72
|
||||
#define _HBMK_aRESSRC 73
|
||||
#define _HBMK_aRESCMP 74
|
||||
#define _HBMK_aOBJUSER 75
|
||||
#define _HBMK_aICON 76
|
||||
#define _HBMK_aIMPLIBSRC 77
|
||||
#define _HBMK_aDEF 78
|
||||
#define _HBMK_hDEPTS 79
|
||||
|
||||
#define _HBMK_aPO 81
|
||||
#define _HBMK_cHBL 82
|
||||
#define _HBMK_cHBLDir 83
|
||||
#define _HBMK_aLNG 84
|
||||
#define _HBMK_cPO 85
|
||||
#define _HBMK_aPO 80
|
||||
#define _HBMK_cHBL 81
|
||||
#define _HBMK_cHBLDir 82
|
||||
#define _HBMK_aLNG 83
|
||||
#define _HBMK_cPO 84
|
||||
|
||||
#define _HBMK_aPLUGIN 86
|
||||
#define _HBMK_hPLUGINHRB 87
|
||||
#define _HBMK_hPLUGINVars 88
|
||||
#define _HBMK_aPLUGINPars 89
|
||||
#define _HBMK_aPLUGIN 85
|
||||
#define _HBMK_hPLUGINHRB 86
|
||||
#define _HBMK_hPLUGINVars 87
|
||||
#define _HBMK_aPLUGINPars 88
|
||||
|
||||
#define _HBMK_lDEBUGTIME 90
|
||||
#define _HBMK_lDEBUGINC 91
|
||||
#define _HBMK_lDEBUGSTUB 92
|
||||
#define _HBMK_lDEBUGI18N 93
|
||||
#define _HBMK_lDEBUGDEPD 94
|
||||
#define _HBMK_lDEBUGTIME 89
|
||||
#define _HBMK_lDEBUGINC 90
|
||||
#define _HBMK_lDEBUGSTUB 91
|
||||
#define _HBMK_lDEBUGI18N 92
|
||||
#define _HBMK_lDEBUGDEPD 93
|
||||
|
||||
#define _HBMK_cCCPATH 95
|
||||
#define _HBMK_cCCPREFIX 96
|
||||
#define _HBMK_cCCPOSTFIX 97
|
||||
#define _HBMK_cCCEXT 98
|
||||
#define _HBMK_cCCPATH 94
|
||||
#define _HBMK_cCCPREFIX 95
|
||||
#define _HBMK_cCCPOSTFIX 96
|
||||
#define _HBMK_cCCEXT 97
|
||||
|
||||
#define _HBMK_cWorkDir 99
|
||||
#define _HBMK_cWorkDirDynSub 100
|
||||
#define _HBMK_nCmd_Esc 101
|
||||
#define _HBMK_nScr_Esc 102
|
||||
#define _HBMK_nCmd_FNF 103
|
||||
#define _HBMK_nScr_FNF 104
|
||||
#define _HBMK_nErrorLevel 105
|
||||
#define _HBMK_cWorkDir 98
|
||||
#define _HBMK_cWorkDirDynSub 99
|
||||
#define _HBMK_nCmd_Esc 100
|
||||
#define _HBMK_nScr_Esc 101
|
||||
#define _HBMK_nCmd_FNF 102
|
||||
#define _HBMK_nScr_FNF 103
|
||||
#define _HBMK_nErrorLevel 104
|
||||
|
||||
#define _HBMK_cPROGDIR 106
|
||||
#define _HBMK_cPROGNAME 107
|
||||
#define _HBMK_cPROGDIR 105
|
||||
#define _HBMK_cPROGNAME 106
|
||||
|
||||
#define _HBMK_MAX_ 107
|
||||
#define _HBMK_MAX_ 106
|
||||
|
||||
#define _HBMK_DEP_CTRL_MARKER ".control." /* must be an invalid path */
|
||||
|
||||
@@ -2468,11 +2467,11 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
|
||||
/usr/local/include (FHS)
|
||||
*/
|
||||
|
||||
dep_postprocess_2( hbmk )
|
||||
|
||||
/* Process any package requirements */
|
||||
FOR EACH tmp IN hbmk[ _HBMK_hDEP ]
|
||||
dep_try_pkg_detection( hbmk, tmp )
|
||||
IF ! dep_try_pkg_detection( hbmk, tmp )
|
||||
dep_try_header_detection( hbmk, tmp )
|
||||
ENDIF
|
||||
NEXT
|
||||
ENDIF
|
||||
|
||||
@@ -4034,20 +4033,13 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
|
||||
IF ! hb_FGetDateTime( FN_DirExtSet( tmp, hbmk[ _HBMK_cWorkDir ], cObjExt ), @tmp2 ) .OR. ;
|
||||
! hb_FGetDateTime( tmp, @tmp1 ) .OR. ;
|
||||
tmp1 > tmp2 .OR. ;
|
||||
( hbmk[ _HBMK_nHEAD ] != _HEAD_OFF .AND. FindNewerHeaders( hbmk, tmp, NIL, .F., tmp2, ! Empty( hbmk[ _HBMK_hDEPBYHEADER ] ), .T., cBin_CompC, @headstate ) )
|
||||
( hbmk[ _HBMK_nHEAD ] != _HEAD_OFF .AND. FindNewerHeaders( hbmk, tmp, NIL, .F., tmp2, .T., cBin_CompC, @headstate ) )
|
||||
AAdd( l_aC_TODO, tmp )
|
||||
ENDIF
|
||||
NEXT
|
||||
ELSE
|
||||
l_aC_TODO := AClone( hbmk[ _HBMK_aC ] )
|
||||
ENDIF
|
||||
|
||||
/* Header dir detection if needed and if FindNewerHeaders() wasn't called yet. */
|
||||
IF ! Empty( hbmk[ _HBMK_hDEPBYHEADER ] ) .AND. ! Empty( l_aC_TODO ) .AND. headstate == NIL
|
||||
FOR EACH tmp IN l_aC_TODO
|
||||
FindNewerHeaders( hbmk, tmp, NIL, .F., NIL, .T., .T., cBin_CompC, @headstate )
|
||||
NEXT
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
/* Do header detection and create incremental file list for .cpp files */
|
||||
@@ -4065,20 +4057,13 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
|
||||
IF ! hb_FGetDateTime( FN_DirExtSet( tmp, hbmk[ _HBMK_cWorkDir ], cObjExt ), @tmp2 ) .OR. ;
|
||||
! hb_FGetDateTime( tmp, @tmp1 ) .OR. ;
|
||||
tmp1 > tmp2 .OR. ;
|
||||
( hbmk[ _HBMK_nHEAD ] != _HEAD_OFF .AND. FindNewerHeaders( hbmk, tmp, NIL, .F., tmp2, ! Empty( hbmk[ _HBMK_hDEPBYHEADER ] ), .T., cBin_CompCPP, @headstate ) )
|
||||
( hbmk[ _HBMK_nHEAD ] != _HEAD_OFF .AND. FindNewerHeaders( hbmk, tmp, NIL, .F., tmp2, .T., cBin_CompCPP, @headstate ) )
|
||||
AAdd( l_aCPP_TODO, tmp )
|
||||
ENDIF
|
||||
NEXT
|
||||
ELSE
|
||||
l_aCPP_TODO := AClone( hbmk[ _HBMK_aCPP ] )
|
||||
ENDIF
|
||||
|
||||
/* Header dir detection if needed and if FindNewerHeaders() wasn't called yet. */
|
||||
IF ! Empty( hbmk[ _HBMK_hDEPBYHEADER ] ) .AND. ! Empty( l_aCPP_TODO ) .AND. headstate == NIL
|
||||
FOR EACH tmp IN l_aCPP_TODO
|
||||
FindNewerHeaders( hbmk, tmp, NIL, .F., NIL, .T., .T., cBin_CompCPP, @headstate )
|
||||
NEXT
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
/* Create incremental file list for .prg files */
|
||||
@@ -4086,9 +4071,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
|
||||
IF ( ! lSkipBuild .AND. ! lStopAfterInit .AND. ! lStopAfterHarbour .AND. hbmk[ _HBMK_nHBMODE ] != _HBMODE_RAW_C ) .OR. ;
|
||||
( nHarbourPPO >= 2 .AND. lStopAfterHarbour ) /* or in preprocessor mode */
|
||||
|
||||
IF ! hbmk[ _HBMK_lCLEAN ]
|
||||
PlugIn_Execute( hbmk, "pre_prg" )
|
||||
ENDIF
|
||||
PlugIn_Execute( hbmk, "pre_prg" )
|
||||
|
||||
/* Incremental */
|
||||
|
||||
@@ -4114,7 +4097,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
|
||||
IF ! hb_FGetDateTime( FN_DirExtSet( tmp3, cHarbourOutputDir, cHarbourOutputExt ), @tmp2 ) .OR. ;
|
||||
! hb_FGetDateTime( tmp3, @tmp1 ) .OR. ;
|
||||
tmp1 > tmp2 .OR. ;
|
||||
( hbmk[ _HBMK_nHEAD ] != _HEAD_OFF .AND. FindNewerHeaders( hbmk, tmp, NIL, .F., tmp2, .F., .F., cBin_CompC, @headstate ) )
|
||||
( hbmk[ _HBMK_nHEAD ] != _HEAD_OFF .AND. FindNewerHeaders( hbmk, tmp, NIL, .F., tmp2, .F., cBin_CompC, @headstate ) )
|
||||
AAdd( l_aPRG_TODO, tmp )
|
||||
ENDIF
|
||||
NEXT
|
||||
@@ -4632,7 +4615,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
|
||||
IF ! hb_FGetDateTime( FN_DirExtSet( tmp, hbmk[ _HBMK_cWorkDir ], cResExt ), @tmp2 ) .OR. ;
|
||||
! hb_FGetDateTime( tmp, @tmp1 ) .OR. ;
|
||||
tmp1 > tmp2 .OR. ;
|
||||
( hbmk[ _HBMK_nHEAD ] != _HEAD_OFF .AND. FindNewerHeaders( hbmk, tmp, NIL, .F., tmp2, .F., .T., cBin_CompC, @headstate ) )
|
||||
( hbmk[ _HBMK_nHEAD ] != _HEAD_OFF .AND. FindNewerHeaders( hbmk, tmp, NIL, .F., tmp2, .T., cBin_CompC, @headstate ) )
|
||||
AAdd( l_aRESSRC_TODO, tmp )
|
||||
ENDIF
|
||||
NEXT
|
||||
@@ -4838,9 +4821,9 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF ! hbmk[ _HBMK_lCLEAN ]
|
||||
PlugIn_Execute( hbmk, "pre_c" )
|
||||
|
||||
PlugIn_Execute( hbmk, "pre_c" )
|
||||
IF ! hbmk[ _HBMK_lCLEAN ]
|
||||
|
||||
FOR EACH tmp3 IN { _CCOMP_PASS_C, _CCOMP_PASS_CPP }
|
||||
|
||||
@@ -5601,7 +5584,7 @@ STATIC FUNCTION SetupForGT( cGT_New, /* @ */ cGT, /* @ */ lGUI )
|
||||
#define _HEADSTATE_lAnyNewer 2
|
||||
#define _HEADSTATE_MAX_ 2
|
||||
|
||||
STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tTimeParent, lIncTry, lCMode, cBin_CompC, /* @ */ headstate, nNestingLevel )
|
||||
STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tTimeParent, lCMode, cBin_CompC, /* @ */ headstate, nNestingLevel )
|
||||
LOCAL cFile
|
||||
LOCAL fhnd
|
||||
LOCAL tTimeSelf
|
||||
@@ -5625,7 +5608,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT
|
||||
headstate[ _HEADSTATE_lAnyNewer ] := .F.
|
||||
ENDIF
|
||||
|
||||
IF ! lIncTry .AND. hbmk[ _HBMK_nHEAD ] == _HEAD_OFF
|
||||
IF hbmk[ _HBMK_nHEAD ] == _HEAD_OFF
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
@@ -5735,7 +5718,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT
|
||||
ENDIF
|
||||
|
||||
IF nNestingLevel > 1
|
||||
cFileName := FindHeader( hbmk, cFileName, cParentDir, lIncTry, lSystemHeader )
|
||||
cFileName := FindHeader( hbmk, cFileName, cParentDir, lSystemHeader )
|
||||
IF Empty( cFileName )
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
@@ -5752,10 +5735,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT
|
||||
|
||||
IF tTimeParent != NIL .AND. hb_FGetDateTime( cFileName, @tTimeSelf ) .AND. tTimeSelf > tTimeParent
|
||||
headstate[ _HEADSTATE_lAnyNewer ] := .T.
|
||||
/* Let it continue if we want to scan for header locations */
|
||||
IF ! lIncTry
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
|
||||
cExt := Lower( FN_ExtGet( cFileName ) )
|
||||
@@ -5770,9 +5750,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT
|
||||
FOR EACH cDependency IN hbmk[ _HBMK_hDEPTS ][ cFileName ]
|
||||
IF hb_FGetDateTime( cDependency, @tTimeDependency ) .AND. tTimeDependency > tTimeParent
|
||||
headstate[ _HEADSTATE_lAnyNewer ] := .T.
|
||||
IF ! lIncTry
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
@@ -5808,9 +5786,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT
|
||||
ENDIF
|
||||
IF hb_FGetDateTime( cDependency, @tTimeDependency ) .AND. tTimeDependency > tTimeParent
|
||||
headstate[ _HEADSTATE_lAnyNewer ] := .T.
|
||||
IF ! lIncTry
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
ENDIF
|
||||
NEXT
|
||||
@@ -5826,9 +5802,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT
|
||||
ENDIF
|
||||
IF hb_FGetDateTime( cDependency, @tTimeDependency ) .AND. tTimeDependency > tTimeParent
|
||||
headstate[ _HEADSTATE_lAnyNewer ] := .T.
|
||||
IF ! lIncTry
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
ENDIF
|
||||
NEXT
|
||||
@@ -5859,9 +5833,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT
|
||||
ENDIF
|
||||
IF hb_FGetDateTime( cDependency, @tTimeDependency ) .AND. tTimeDependency > tTimeParent
|
||||
headstate[ _HEADSTATE_lAnyNewer ] := .T.
|
||||
IF ! lIncTry
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
ENDIF
|
||||
NEXT
|
||||
@@ -5877,7 +5849,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT
|
||||
.prg, .c and .res sources. Please try to keep it simple,
|
||||
as speed and maintainability is also important. [vszakats] */
|
||||
|
||||
IF lIncTry .OR. hbmk[ _HBMK_nHEAD ] == _HEAD_FULL
|
||||
IF hbmk[ _HBMK_nHEAD ] == _HEAD_FULL
|
||||
cFile := MemoRead( cFileName )
|
||||
ELSE
|
||||
IF ( fhnd := FOpen( cFileName, FO_READ + FO_SHARED ) ) == F_ERROR
|
||||
@@ -5909,12 +5881,10 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT
|
||||
lSystemHeader := ( Left( cHeader, 1 ) == "<" )
|
||||
cHeader := SubStr( cHeader, 2, Len( cHeader ) - 2 )
|
||||
|
||||
IF FindNewerHeaders( hbmk, cHeader, iif( lCMode, FN_DirGet( cFileName ), cParentDir ), lSystemHeader, tTimeParent, lIncTry, lCMode, cBin_CompC, @headstate, nNestingLevel + 1 )
|
||||
IF FindNewerHeaders( hbmk, cHeader, iif( lCMode, FN_DirGet( cFileName ), cParentDir ), lSystemHeader, tTimeParent, lCMode, cBin_CompC, @headstate, nNestingLevel + 1 )
|
||||
headstate[ _HEADSTATE_lAnyNewer ] := .T.
|
||||
/* Let it continue if we want to scan for header locations */
|
||||
IF ! lIncTry
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
NEXT
|
||||
ENDIF
|
||||
@@ -6086,41 +6056,6 @@ STATIC PROCEDURE dep_postprocess( hbmk )
|
||||
|
||||
RETURN
|
||||
|
||||
STATIC PROCEDURE dep_postprocess_2( hbmk )
|
||||
LOCAL dep
|
||||
LOCAL tmp
|
||||
|
||||
/* Create a hash table of dependencies "indexed" by key header,
|
||||
for header detection. */
|
||||
|
||||
hbmk[ _HBMK_hDEPBYHEADER ] := { => }
|
||||
|
||||
#if defined( __PLATFORM__UNIX )
|
||||
hb_HSetCaseMatch( hbmk[ _HBMK_hDEPBYHEADER ], .T. )
|
||||
#else
|
||||
hb_HSetCaseMatch( hbmk[ _HBMK_hDEPBYHEADER ], .F. )
|
||||
#endif
|
||||
|
||||
FOR EACH dep IN hbmk[ _HBMK_hDEP ]
|
||||
IF ! Empty( dep[ _HBMKDEP_aKeyHeader ] ) .AND. ;
|
||||
! dep[ _HBMKDEP_lFound ]
|
||||
IF ! Empty( dep[ _HBMKDEP_aINCPATH ] ) .OR. ;
|
||||
! Empty( dep[ _HBMKDEP_aINCPATHLOCAL ] )
|
||||
FOR EACH tmp IN dep[ _HBMKDEP_aKeyHeader ]
|
||||
IF tmp $ hbmk[ _HBMK_hDEPBYHEADER ]
|
||||
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Same key header used for multiple dependencies: %1$s in %2$s (found already in: %3$s)" ), tmp, dep[ _HBMKDEP_cName ], hbmk[ _HBMK_hDEPBYHEADER ][ tmp ][ _HBMKDEP_cName ] ) )
|
||||
ELSE
|
||||
hbmk[ _HBMK_hDEPBYHEADER ][ tmp ] := dep
|
||||
ENDIF
|
||||
NEXT
|
||||
ELSE
|
||||
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Key header specified without header search paths: %1$s" ), dep[ _HBMKDEP_cName ] ) )
|
||||
ENDIF
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
RETURN
|
||||
|
||||
STATIC FUNCTION dep_evaluate( hbmk )
|
||||
LOCAL dep
|
||||
|
||||
@@ -6175,7 +6110,7 @@ STATIC FUNCTION dep_evaluate( hbmk )
|
||||
RETURN .T.
|
||||
|
||||
/* Try '*-config' and 'pkg-config *' detection */
|
||||
STATIC PROCEDURE dep_try_pkg_detection( hbmk, dep )
|
||||
STATIC FUNCTION dep_try_pkg_detection( hbmk, dep )
|
||||
LOCAL cStdOut
|
||||
LOCAL cErrOut
|
||||
LOCAL cItem
|
||||
@@ -6251,14 +6186,45 @@ STATIC PROCEDURE dep_try_pkg_detection( hbmk, dep )
|
||||
hbmk_OutStd( hbmk, hb_StrFormat( "debugdepd: REQ %1$s: found as pkg at %2$s (%3$s)", dep[ _HBMKDEP_cName ], dep[ _HBMKDEP_cFound ], dep[ _HBMKDEP_cVersion ] ) )
|
||||
ENDIF
|
||||
AAdd( hbmk[ _HBMK_aOPTC ], "-D" + _HBMK_HAS_PREF + StrToDefine( cName ) )
|
||||
EXIT
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
RETURN
|
||||
RETURN .F.
|
||||
|
||||
/* Try detection by header */
|
||||
STATIC FUNCTION dep_try_header_detection( hbmk, dep )
|
||||
LOCAL aINCPATH
|
||||
LOCAL cDir
|
||||
LOCAL cFileName
|
||||
|
||||
/* Check dependency include path list */
|
||||
|
||||
IF ! dep[ _HBMKDEP_lFound ]
|
||||
FOR EACH aINCPATH IN { dep[ _HBMKDEP_aINCPATH ],;
|
||||
dep[ _HBMKDEP_aINCPATHLOCAL ] }
|
||||
FOR EACH cDir IN aINCPATH
|
||||
FOR EACH cFileName IN dep[ _HBMKDEP_aKeyHeader ]
|
||||
IF HeaderExists( cDir, cFileName ) != NIL
|
||||
dep[ _HBMKDEP_cFound ] := DirDelPathSep( PathSepToSelf( cDir ) )
|
||||
dep[ _HBMKDEP_lFound ] := .T.
|
||||
dep[ _HBMKDEP_lFoundLOCAL ] := ( aINCPATH:__enumIndex() == 2 )
|
||||
IF hbmk[ _HBMK_lDEBUGDEPD ]
|
||||
hbmk_OutStd( hbmk, hb_StrFormat( "debugdepd: REQ %1$s: found by %2$s header at %3$s %4$s", dep[ _HBMKDEP_cName ], PathSepToSelf( cFileName ), dep[ _HBMKDEP_cFound ], iif( dep[ _HBMKDEP_lFoundLOCAL ], "(local)", "" ) ) )
|
||||
ENDIF
|
||||
AAddNew( hbmk[ _HBMK_aINCPATH ], DirDelPathSep( PathSepToSelf( cDir ) ) )
|
||||
AAdd( hbmk[ _HBMK_aOPTC ], "-D" + _HBMK_HAS_PREF + StrToDefine( dep[ _HBMKDEP_cName ] ) )
|
||||
RETURN .T.
|
||||
ENDIF
|
||||
NEXT
|
||||
NEXT
|
||||
NEXT
|
||||
ENDIF
|
||||
|
||||
RETURN .F.
|
||||
|
||||
STATIC FUNCTION StrToDefine( cString )
|
||||
LOCAL cDefine := ""
|
||||
@@ -6285,10 +6251,8 @@ STATIC FUNCTION AMerge( aDst, aSrc )
|
||||
|
||||
RETURN aDst
|
||||
|
||||
STATIC FUNCTION FindHeader( hbmk, cFileName, cParentDir, lIncTry, lSystemHeader )
|
||||
STATIC FUNCTION FindHeader( hbmk, cFileName, cParentDir, lSystemHeader )
|
||||
LOCAL cDir
|
||||
LOCAL aINCPATH
|
||||
LOCAL dep
|
||||
LOCAL tmp
|
||||
|
||||
/* Check in current dir */
|
||||
@@ -6313,36 +6277,6 @@ STATIC FUNCTION FindHeader( hbmk, cFileName, cParentDir, lIncTry, lSystemHeader
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
/* Check dependency include path list */
|
||||
IF lIncTry
|
||||
cFileName := StrTran( cFileName, "\", "/" )
|
||||
IF cFileName $ hbmk[ _HBMK_hDEPBYHEADER ]
|
||||
dep := hbmk[ _HBMK_hDEPBYHEADER ][ cFileName ]
|
||||
IF ! dep[ _HBMKDEP_lFound ]
|
||||
FOR EACH aINCPATH IN { dep[ _HBMKDEP_aINCPATH ],;
|
||||
dep[ _HBMKDEP_aINCPATHLOCAL ] }
|
||||
FOR EACH cDir IN aINCPATH
|
||||
tmp := HeaderExists( cDir, cFileName )
|
||||
IF tmp != NIL
|
||||
dep[ _HBMKDEP_cFound ] := DirDelPathSep( PathSepToSelf( cDir ) )
|
||||
dep[ _HBMKDEP_lFound ] := .T.
|
||||
dep[ _HBMKDEP_lFoundLOCAL ] := ( aINCPATH:__enumIndex() == 2 )
|
||||
IF hbmk[ _HBMK_lDEBUGDEPD ]
|
||||
hbmk_OutStd( hbmk, hb_StrFormat( "debugdepd: REQ %1$s: found by %2$s header at %3$s %4$s", dep[ _HBMKDEP_cName ], PathSepToSelf( cFileName ), dep[ _HBMKDEP_cFound ], iif( dep[ _HBMKDEP_lFoundLOCAL ], "(local)", "" ) ) )
|
||||
ENDIF
|
||||
AAddNew( hbmk[ _HBMK_aINCPATH ], DirDelPathSep( PathSepToSelf( cDir ) ) )
|
||||
AAdd( hbmk[ _HBMK_aOPTC ], "-D" + _HBMK_HAS_PREF + StrToDefine( dep[ _HBMKDEP_cName ] ) )
|
||||
FOR EACH cFileName IN hbmk[ _HBMK_hDEP ][ dep[ _HBMKDEP_cName ] ][ _HBMKDEP_aKeyHeader ]
|
||||
hb_HDel( hbmk[ _HBMK_hDEPBYHEADER ], cFileName )
|
||||
NEXT
|
||||
RETURN tmp
|
||||
ENDIF
|
||||
NEXT
|
||||
NEXT
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN NIL
|
||||
|
||||
STATIC FUNCTION HeaderExists( cDir, cFileName )
|
||||
|
||||
Reference in New Issue
Block a user