diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 538a51e3f6..96fc4de547 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,53 @@ 2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2009-04-20 21:15 UTC+0200 Viktor Szakats (harbour.01 syenar hu) + * utils/hbmk2/hbmk2.prg + ! Fixed to find headers in originating file directory. + This may need further tweaking. This works a little + differently in Harbour and C compilers and hbmk2 tries + to mimic both. Possible that it's still not fully + compatible, if you know something pls speak up. + + Added -incpath= option and incpaths= .hbp option. This + is now the preferred method to add headers paths. All + path will be added to both Harbour and C compiler. + Important: a synonym for this switch is simply -i, just + like before, but now the path will be also added to + C compiler command line. + * From now on Harbour include dir will always be the first + one on the include path list passed to compilers. Before + in Harbour it was always first, in C compilers it was + always last. (disregarding include dirs passed directly + to compiler, which will always come first, but isn't + recommended). The ordering is thus this: + compiler ... flags harbourincludedir incpaths ... + - Deleted include path option detection, from now on + only those paths will be scanned wich were passed to + hbmk2 via -incpath/-i options. + % Added -kmo optimization for hbmk2 source. + + -info and -quiet will now work in .hbm files. + (they will not control some close-to-startup messages + if specified this way though) + + * external/libhpdf/Makefile + * external/libpng/Makefile + + Enabled for darwin. + + * contrib/hbqt/generator/hbqtgen.prg + ! Recent fix to hbqt.h applied to generator. + + * utils/hbmk2/hbmk2.hbm + - Removed no longer needed -km switch. + + * utils/hbmk2/examples/hmg.hbp + * utils/hbmk2/examples/hwgui.hbp + * utils/hbmk2/examples/fwh.hbp + % Updated to use -incpaths= + + * utils/hbmk2/examples/fwh.hbp + * Updated to work like similar hwgui and hmg files. + ; QUESTION: Is hbwin lib required for FWH? + 2009-04-20 20:53 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/source/rtl/filesys.c ! restored hack used for non POSIX compatible _POSIX_SYNCHRONIZED_IO diff --git a/harbour/contrib/hbqt/generator/hbqtgen.prg b/harbour/contrib/hbqt/generator/hbqtgen.prg index bf39ecd4d6..6825c6029b 100644 --- a/harbour/contrib/hbqt/generator/hbqtgen.prg +++ b/harbour/contrib/hbqt/generator/hbqtgen.prg @@ -1236,12 +1236,12 @@ STATIC FUNCTION Build_HBQT_H( cPathOut ) aadd( txt_, "#ifndef __HBQT_H " ) aadd( txt_, "#define __HBQT_H " ) aadd( txt_, " " ) - aadd( txt_, "#include " ) - aadd( txt_, "#include " ) - aadd( txt_, "#include " ) - aadd( txt_, "#include " ) - aadd( txt_, "#include " ) - aadd( txt_, "#include " ) + aadd( txt_, "#include " ) + aadd( txt_, "#include " ) + aadd( txt_, "#include " ) + aadd( txt_, "/* #include */ " ) + aadd( txt_, "#include " ) + aadd( txt_, "#include " ) aadd( txt_, " " ) aadd( txt_, "#if QT_VERSION >= 0x040500 " ) aadd( txt_, " " ) diff --git a/harbour/external/libhpdf/Makefile b/harbour/external/libhpdf/Makefile index 2bc2e86c40..57c80135d9 100644 --- a/harbour/external/libhpdf/Makefile +++ b/harbour/external/libhpdf/Makefile @@ -40,6 +40,9 @@ endif ifeq ($(HB_ARCHITECTURE),dos) HB_INC_LIBPNG += $(TOP)$(ROOT)external/libpng endif +ifeq ($(HB_ARCHITECTURE),darwin) +HB_INC_LIBPNG += $(TOP)$(ROOT)external/libpng +endif endif endif diff --git a/harbour/external/libpng/Makefile b/harbour/external/libpng/Makefile index 8cd481c943..b2895bb5bd 100644 --- a/harbour/external/libpng/Makefile +++ b/harbour/external/libpng/Makefile @@ -22,6 +22,9 @@ endif ifeq ($(HB_ARCHITECTURE),dos) HB_WITH_LIBPNG=yes endif +ifeq ($(HB_ARCHITECTURE),darwin) +HB_WITH_LIBPNG=yes +endif ifeq ($(HB_COMPILER),poccarm) HB_WITH_LIBPNG=no endif diff --git a/harbour/utils/hbmk2/examples/fwh.hbp b/harbour/utils/hbmk2/examples/fwh.hbp index db8ccc1e04..93d08ddb7c 100644 --- a/harbour/utils/hbmk2/examples/fwh.hbp +++ b/harbour/utils/hbmk2/examples/fwh.hbp @@ -2,4 +2,15 @@ # $Id$ # +# Copy this file to FWH root dir and include it in hbmk2 +# command line to build an app: +# > hbmk2 test.prg C:\fwh\fwh.hbp + +{win}incpaths=${hb_self}include +{win}libpaths=${hb_self}lib + +{win}gt=gtgui + {win}libs=fiveh fivehc +{win}libs=nddeapi iphlpapi rasapi32 +{win}libs=hbwin diff --git a/harbour/utils/hbmk2/examples/hmg.hbp b/harbour/utils/hbmk2/examples/hmg.hbp index b8930664cc..7756870111 100644 --- a/harbour/utils/hbmk2/examples/hmg.hbp +++ b/harbour/utils/hbmk2/examples/hmg.hbp @@ -6,8 +6,7 @@ # command line to build an app: # > hbmk2 test.prg C:\hmg\hmg.hbp -{win}prgflags=-i${hb_self}include -{win}cflags=-I${hb_self}include +{win}incpaths=${hb_self}include {win}libpaths=${hb_self}lib ${hb_self}harbour\lib {win}gt=gtgui diff --git a/harbour/utils/hbmk2/examples/hwgui.hbp b/harbour/utils/hbmk2/examples/hwgui.hbp index 464d16cc6c..a38bff0f3c 100644 --- a/harbour/utils/hbmk2/examples/hwgui.hbp +++ b/harbour/utils/hbmk2/examples/hwgui.hbp @@ -6,8 +6,7 @@ # command line to build an app: # > hbmk2 test.prg C:\hwgui\hwgui.hbp -{win}prgflags=-i${hb_self}include -{win}cflags=-I${hb_self}include +{win}incpaths=${hb_self}include {win}libpaths=${hb_self}lib {win}gt=gtgui diff --git a/harbour/utils/hbmk2/hbmk2.hbm b/harbour/utils/hbmk2/hbmk2.hbm index 56607f7950..b7b05aff1f 100644 --- a/harbour/utils/hbmk2/hbmk2.hbm +++ b/harbour/utils/hbmk2/hbmk2.hbm @@ -2,5 +2,5 @@ # $Id$ # --nulrdd -km +-nulrdd hbmk2.prg diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 050bb5936d..cded748775 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -41,6 +41,9 @@ */ #pragma linenumber=on +/* Optimizations */ +#pragma -km+ +#pragma -ko+ /* Program Library HOWTO: @@ -130,6 +133,7 @@ STATIC s_lGUI := .F. STATIC s_lMT := .F. STATIC s_lDEBUG := .F. STATIC s_nHEAD := _HEAD_PARTIAL +STATIC s_aINCPATH STATIC s_aINCTRYPATH STATIC s_lREBUILD := .F. @@ -778,6 +782,9 @@ FUNCTION hbmk( aArgs ) AAddNotEmpty( s_aLIBPATH, s_cHB_DYN_INSTALL ) ENDIF + /* Add main Harbour header dir to header path list */ + AAddNotEmpty( s_aINCPATH, s_cHB_INC_INSTALL ) + /* Process environment */ IF Lower( GetEnv( "HB_MT" ) ) == "mt" ; s_lMT := .T. ; ENDIF /* Compatibility */ @@ -804,6 +811,7 @@ FUNCTION hbmk( aArgs ) s_aOPTRUN := {} s_aRESSRC := {} s_aRESCMP := {} + s_aINCPATH := {} s_aINCTRYPATH := {} s_aLIBUSER := {} s_aLIBUSERGT := {} @@ -854,6 +862,7 @@ FUNCTION hbmk( aArgs ) @s_aLIBUSERGT,; @s_aLIBPATH,; @s_aLIBDYNHAS,; + @s_aINCPATH,; @s_aINCTRYPATH,; @s_aOPTPRG,; @s_aOPTC,; @@ -893,8 +902,7 @@ FUNCTION hbmk( aArgs ) cParamL := Lower( cParam ) DO CASE - CASE cParamL == "-quiet" .OR. ; - Left( cParamL, 6 ) == "-comp=" .OR. ; + CASE Left( cParamL, 6 ) == "-comp=" .OR. ; Left( cParamL, 6 ) == "-arch=" .OR. ; cParamL == "-hbcmp" .OR. ; cParamL == "-hbcc" .OR. ; @@ -903,11 +911,12 @@ FUNCTION hbmk( aArgs ) cParamL == "-clipper" .OR. ; cParamL == "-rtlink" .OR. ; cParamL == "-blinker" .OR. ; - cParamL == "-exospace" .OR. ; - cParamL == "-info" + cParamL == "-exospace" /* Simply ignore. They were already processed in the first pass. */ + CASE cParamL == "-quiet" ; s_lQuiet := .T. ; s_lInfo := .F. + CASE cParamL == "-info" ; s_lInfo := .T. CASE cParamL == "-hblib" ; s_lInfo := .F. ; lStopAfterHarbour := .F. ; lStopAfterCComp := .T. ; lCreateLib := .T. ; lCreateDyn := .F. CASE cParamL == "-hbdyn" ; s_lInfo := .F. ; lStopAfterHarbour := .F. ; lStopAfterCComp := .T. ; lCreateLib := .F. ; lCreateDyn := .T. CASE cParamL == "-gui" .OR. ; @@ -1065,6 +1074,22 @@ FUNCTION hbmk( aArgs ) AAdd( s_aLIBPATH, PathSepToTarget( cParam ) ) ENDIF + CASE Left( cParamL, 2 ) == "-i" .AND. ; + Len( cParamL ) > 2 + + cParam := MacroProc( tmp := ArchCompFilter( SubStr( cParam, 3 ) ) ) + IF ! Empty( cParam ) + AAdd( s_aINCPATH, PathSepToTarget( cParam ) ) + ENDIF + + CASE Left( cParamL, Len( "-incpath=" ) ) == "-incpath=" .AND. ; + Len( cParamL ) > Len( "-incpath=" ) + + cParam := MacroProc( tmp := ArchCompFilter( SubStr( cParam, Len( "-incpath=" ) + 1 ) ) ) + IF ! Empty( cParam ) + AAdd( s_aINCPATH, PathSepToTarget( cParam ) ) + ENDIF + CASE Left( cParamL, Len( "-inctrypath=" ) ) == "-inctrypath=" .AND. ; Len( cParamL ) > Len( "-inctrypath=" ) @@ -1195,6 +1220,7 @@ FUNCTION hbmk( aArgs ) @s_aLIBUSERGT,; @s_aLIBPATH,; @s_aLIBDYNHAS,; + @s_aINCPATH,; @s_aINCTRYPATH,; @s_aOPTPRG,; @s_aOPTC,; @@ -1419,7 +1445,7 @@ FUNCTION hbmk( aArgs ) IF s_lOPT cOpt_CompC += " -O3" ENDIF - cOpt_CompC += " {FC} -I{DI}" + cOpt_CompC += " {FC}" IF s_lINC .AND. ! Empty( cWorkDir ) cOpt_CompC += " {IC} -o {OO}" ELSE @@ -1570,7 +1596,7 @@ FUNCTION hbmk( aArgs ) cOpt_CompC += " -fomit-frame-pointer" ENDIF ENDIF - cOpt_CompC += ' {FC} -I"{DI}"' + cOpt_CompC += " {FC}" cOptIncMask := '-I"{DI}"' IF s_lINC .AND. ! Empty( cWorkDir ) cOpt_CompC += " {IC} -o {OO}" @@ -1661,7 +1687,7 @@ FUNCTION hbmk( aArgs ) IF s_lOPT cOpt_CompC += " -O3" ENDIF - cOpt_CompC += " {FC} -I{DI}" + cOpt_CompC += " {FC}" IF s_lINC .AND. ! Empty( cWorkDir ) cOpt_CompC += " {IC} -o {OO}" ELSE @@ -1708,7 +1734,7 @@ FUNCTION hbmk( aArgs ) IF s_lOPT cOpt_CompC += " -O3" ENDIF - cOpt_CompC += " {FC} -I{DI}" + cOpt_CompC += " {FC}" IF s_lINC .AND. ! Empty( cWorkDir ) cOpt_CompC += " {IC} -o {OO}" ELSE @@ -1761,7 +1787,7 @@ FUNCTION hbmk( aArgs ) cOpt_CompC += " -oi" ENDIF ENDIF - cOpt_CompC += " -zq -bt=DOS {FC} -i{DI}" + cOpt_CompC += " -zq -bt=DOS {FC}" cOptIncMask := "-i{DI}" IF s_lINC .AND. ! Empty( cWorkDir ) cOpt_CompC += " {IC} -fo={OO}" @@ -1806,7 +1832,7 @@ FUNCTION hbmk( aArgs ) ELSE cOpt_CompC += " -3s" ENDIF - cOpt_CompC += " -zq -bt=NT {FC} -i{DI}" + cOpt_CompC += " -zq -bt=NT {FC}" cOptIncMask := "-i{DI}" IF s_lINC .AND. ! Empty( cWorkDir ) cOpt_CompC += " {IC} -fo={OO}" @@ -1875,7 +1901,7 @@ FUNCTION hbmk( aArgs ) cOpt_CompC += " -oi" ENDIF ENDIF - cOpt_CompC += " -zq -bt=OS2 {FC} -i{DI}" + cOpt_CompC += " -zq -bt=OS2 {FC}" cOptIncMask := "-i{DI}" IF s_lINC .AND. ! Empty( cWorkDir ) cOpt_CompC += " {IC} -fo={OO}" @@ -1921,7 +1947,7 @@ FUNCTION hbmk( aArgs ) cOpt_CompC += " -oi" ENDIF ENDIF - cOpt_CompC += " -zq -bt=linux {FC} -i{DI}" + cOpt_CompC += " -zq -bt=linux {FC}" cOptIncMask := "-i{DI}" IF s_lINC .AND. ! Empty( cWorkDir ) cOpt_CompC += " {IC} -fo={OO}" @@ -1971,7 +1997,7 @@ FUNCTION hbmk( aArgs ) IF s_lOPT cOpt_CompC += " -d -6 -O2 -OS -Ov -Oi -Oc" ENDIF - cOpt_CompC += " {FC} -I{DI} {LC}" + cOpt_CompC += " {FC} {LC}" cBin_Res := "brcc32.exe" cOpt_Res := "{FR} {IR} -fo{OS}" cResExt := ".res" @@ -2067,7 +2093,7 @@ FUNCTION hbmk( aArgs ) ENDIF ENDIF ENDIF - cOpt_CompC += ' {FC} -I"{DI}" {LC}' + cOpt_CompC += " {FC} {LC}" cOptIncMask := '-I"{DI}"' cOpt_Link := "-nologo /out:{OE} {LO} {DL} {FL} {LL} {LS}" cLibPathPrefix := "/libpath:" @@ -2172,7 +2198,7 @@ FUNCTION hbmk( aArgs ) cBin_Res := "porc.exe" ENDIF cBin_Dyn := cBin_Link - cOpt_CompC := "/c /Ze /Go {FC} /I{DI} {IC} /Fo{OO}" + cOpt_CompC := "/c /Ze /Go {FC} {IC} /Fo{OO}" cOptIncMask := "/I{DI}" cOpt_Dyn := "{FD} /dll /out:{OD} {DL} {LO} {LL} {LS}" DO CASE @@ -2236,6 +2262,13 @@ FUNCTION hbmk( aArgs ) ENDIF ENDIF + /* Header paths */ + + FOR EACH tmp IN s_aINCPATH + AAdd( s_aOPTPRG, "-i" + tmp ) + AAdd( s_aOPTC, StrTran( cOptIncMask, "{DI}", tmp ) ) + NEXT + /* Do header detection and create incremental file list for .c files */ IF ! lStopAfterInit .AND. ! lStopAfterHarbour @@ -2252,7 +2285,7 @@ FUNCTION hbmk( aArgs ) IF ! hb_FGetDateTime( FN_DirExtSet( tmp, cWorkDir, cObjExt ), @tmp2 ) .OR. ; ! hb_FGetDateTime( tmp, @tmp1 ) .OR. ; tmp1 > tmp2 .OR. ; - ( s_nHEAD != _HEAD_OFF .AND. FindNewerHeaders( tmp, tmp2, ! Empty( s_aINCTRYPATH ), OPTC_to_INCPATH( s_aOPTC, s_cHB_INC_INSTALL ), s_aOPTC, cOptIncMask, @headstate ) ) + ( s_nHEAD != _HEAD_OFF .AND. FindNewerHeaders( tmp, NIL, tmp2, ! Empty( s_aINCTRYPATH ), .T., @headstate ) ) AAdd( s_aC_TODO, tmp ) ELSE AAdd( s_aC_DONE, tmp ) @@ -2266,7 +2299,7 @@ FUNCTION hbmk( aArgs ) /* Header dir detection if needed and if FindNewerHeaders() wasn't called yet. */ IF ! Empty( s_aINCTRYPATH ) .AND. ! Empty( s_aC_TODO ) .AND. headstate == NIL FOR EACH tmp IN s_aC - FindNewerHeaders( tmp, NIL, .T., OPTC_to_INCPATH( s_aOPTC, s_cHB_INC_INSTALL ), s_aOPTC, cOptIncMask, @headstate ) + FindNewerHeaders( tmp, NIL, NIL, .T., .T., @headstate ) NEXT ENDIF ENDIF @@ -2287,7 +2320,7 @@ FUNCTION hbmk( aArgs ) IF ! hb_FGetDateTime( FN_DirExtSet( tmp, cWorkDir, ".c" ), @tmp2 ) .OR. ; ! hb_FGetDateTime( FN_ExtSet( tmp, ".prg" ), @tmp1 ) .OR. ; tmp1 > tmp2 .OR. ; - ( s_nHEAD != _HEAD_OFF .AND. FindNewerHeaders( FN_ExtSet( tmp, ".prg" ), tmp2, .F., OPTPRG_to_INCPATH( s_aOPTPRG, s_cHB_INC_INSTALL ), NIL, NIL, @headstate ) ) + ( s_nHEAD != _HEAD_OFF .AND. FindNewerHeaders( FN_ExtSet( tmp, ".prg" ), NIL, tmp2, .F., .F., @headstate ) ) AAdd( s_aPRG_TODO, tmp ) ENDIF NEXT @@ -2311,7 +2344,6 @@ FUNCTION hbmk( aArgs ) #if defined( HBMK_INTEGRATED_COMPILER ) aCommand := ArrayAJoin( { { iif( lCreateLib .OR. lCreateDyn, "-n1", "-n2" ) },; s_aPRG_TODO,; - { "-i" + s_cHB_INC_INSTALL },; iif( s_lBLDFLGP, { " " + cSelfFlagPRG }, {} ),; ListToArray( iif( ! Empty( GetEnv( "HB_USER_PRGFLAGS" ) ), " " + GetEnv( "HB_USER_PRGFLAGS" ), "" ) ),; s_aOPTPRG } ) @@ -2334,7 +2366,6 @@ FUNCTION hbmk( aArgs ) cBin_CompPRG +; " " + iif( lCreateLib .OR. lCreateDyn, "-n1", "-n2" ) +; " " + ArrayToList( s_aPRG_TODO ) +; - " -i" + s_cHB_INC_INSTALL +; iif( s_lBLDFLGP, " " + cSelfFlagPRG, "" ) +; iif( ! Empty( GetEnv( "HB_USER_PRGFLAGS" ) ), " " + GetEnv( "HB_USER_PRGFLAGS" ), "" ) +; iif( ! Empty( s_aOPTPRG ), " " + ArrayToList( s_aOPTPRG ), "" ) @@ -2502,7 +2533,7 @@ FUNCTION hbmk( aArgs ) IF ! hb_FGetDateTime( FN_DirExtSet( tmp, cWorkDir, cResExt ), @tmp2 ) .OR. ; ! hb_FGetDateTime( tmp, @tmp1 ) .OR. ; tmp1 > tmp2 .OR. ; - ( s_nHEAD != _HEAD_OFF .AND. FindNewerHeaders( tmp, tmp2, .F., OPTC_to_INCPATH( s_aOPTRES, s_cHB_INC_INSTALL ), NIL, NIL, @headstate ) ) + ( s_nHEAD != _HEAD_OFF .AND. FindNewerHeaders( tmp, NIL, tmp2, .F., .T., @headstate ) ) AAdd( s_aRESSRC_TODO, tmp ) ENDIF NEXT @@ -3072,7 +3103,7 @@ STATIC FUNCTION SetupForGT( cGT, /* @ */ s_cGT, /* @ */ s_lGUI ) #define _HEADSTATE_lAnyNewer 2 #define _HEADSTATE_MAX_ 2 -STATIC FUNCTION FindNewerHeaders( cFileName, tTimeParent, lIncTry, aINCPATH, aOPT, cOptMask, /* @ */ headstate, nEmbedLevel ) +STATIC FUNCTION FindNewerHeaders( cFileName, cParentDir, tTimeParent, lIncTry, lCMode, /* @ */ headstate, nEmbedLevel ) LOCAL cFile LOCAL fhnd LOCAL nPos @@ -3083,6 +3114,7 @@ STATIC FUNCTION FindNewerHeaders( cFileName, tTimeParent, lIncTry, aINCPATH, aOP STATIC s_aExcl := { "windows.h", "ole2.h", "os2.h" } DEFAULT nEmbedLevel TO 1 + DEFAULT cParentDir TO FN_DirGet( cFileName ) IF nEmbedLevel == 1 headstate := Array( _HEADSTATE_MAX_ ) @@ -3110,7 +3142,7 @@ STATIC FUNCTION FindNewerHeaders( cFileName, tTimeParent, lIncTry, aINCPATH, aOP RETURN .F. ENDIF - cFileName := FindHeader( cFileName, aINCPATH, iif( lIncTry, s_aINCTRYPATH, NIL ), aOPT, cOptMask ) + cFileName := FindHeader( cFileName, cParentDir, iif( lIncTry, s_aINCTRYPATH, NIL ) ) IF Empty( cFileName ) RETURN .F. ENDIF @@ -3156,7 +3188,8 @@ STATIC FUNCTION FindNewerHeaders( cFileName, tTimeParent, lIncTry, aINCPATH, aOP DO WHILE ( tmp := hb_At( '#include "', cFile, nPos ) ) > 0 nPos := tmp + Len( '#include "' ) IF ( tmp := hb_At( '"', cFile, nPos ) ) > 0 - IF FindNewerHeaders( SubStr( cFile, nPos, tmp - nPos ), tTimeParent, lIncTry, aINCPATH, aOPT, cOptMask, @headstate, nEmbedLevel + 1 ) + IF FindNewerHeaders( SubStr( cFile, nPos, tmp - nPos ),; + iif( lCMode, FN_DirGet( cFileName ), cParentDir ), tTimeParent, lIncTry, lCMode, @headstate, nEmbedLevel + 1 ) headstate[ _HEADSTATE_lAnyNewer ] := .T. /* Let it continue if we want to scan for header locations */ IF ! lIncTry @@ -3168,55 +3201,22 @@ STATIC FUNCTION FindNewerHeaders( cFileName, tTimeParent, lIncTry, aINCPATH, aOP RETURN headstate[ _HEADSTATE_lAnyNewer ] -STATIC FUNCTION OPTPRG_to_INCPATH( aOPT, cHB_INC_INSTALL ) - LOCAL aINCPATH := {} - LOCAL cItem - - /* NOTE: Order has to be in sync with cOpt_Prg setup */ - AAdd( aINCPATH, cHB_INC_INSTALL ) - - FOR EACH cItem IN aOPT - IF Len( cItem ) > 2 .AND. ; - ( Lower( Left( cItem, 2 ) ) == "-i" .OR. ; - Lower( Left( cItem, 2 ) ) == "-I" ) - AAdd( aINCPATH, SubStr( cItem, 3 ) ) - ENDIF - NEXT - - FOR EACH cItem IN hb_ATokens( GetEnv( "INCLUDE" ), hb_osPathListSeparator() ) - IF ! Empty( cItem ) - AAdd( aINCPATH, cItem ) - ENDIF - NEXT - - RETURN aINCPATH - -STATIC FUNCTION OPTC_to_INCPATH( aOPT, cHB_INC_INSTALL ) - LOCAL aINCPATH := {} - LOCAL cItem - - FOR EACH cItem IN aOPT - IF Len( cItem ) > 2 .AND. Left( cItem, 2 ) == "-I" - AAdd( aINCPATH, SubStr( cItem, 3 ) ) - ENDIF - NEXT - - /* NOTE: Order has to be in sync with cOpt_CompC setup */ - AAdd( aINCPATH, cHB_INC_INSTALL ) - - RETURN aINCPATH - -STATIC FUNCTION FindHeader( cFileName, aINCPATH, aINCTRYPATH, aOPT, cOptMask ) +STATIC FUNCTION FindHeader( cFileName, cParentDir, aINCTRYPATH ) LOCAL cDir - LOCAL cOption /* Check in current dir */ IF hb_FileExists( cFileName ) RETURN cFileName ENDIF - /* Check in include path list */ - FOR EACH cDir IN aINCPATH + /* Check in parent dir */ + + IF hb_FileExists( DirAddPathSep( PathSepToSelf( cParentDir ) ) + cFileName ) + RETURN DirAddPathSep( PathSepToSelf( cParentDir ) ) + cFileName + ENDIF + + /* Check in include path list specified via -incpath options */ + FOR EACH cDir IN s_aINCPATH IF hb_FileExists( DirAddPathSep( PathSepToSelf( cDir ) ) + cFileName ) RETURN DirAddPathSep( PathSepToSelf( cDir ) ) + cFileName ENDIF @@ -3227,15 +3227,11 @@ STATIC FUNCTION FindHeader( cFileName, aINCPATH, aINCTRYPATH, aOPT, cOptMask ) FOR EACH cDir IN aINCTRYPATH IF hb_FileExists( DirAddPathSep( PathSepToSelf( cDir ) ) + cFileName ) /* Add these dir to include paths */ - IF AScan( aINCPATH, { |tmp| tmp == cDir } ) == 0 - AAdd( aINCPATH, cDir ) - ENDIF - cOption := StrTran( cOptMask, "{DI}", cDir ) - IF AScan( aOPT, { |tmp| tmp == cOption } ) == 0 + IF AScan( s_aINCPATH, { |tmp| tmp == cDir } ) == 0 + AAdd( s_aINCPATH, cDir ) IF s_lDEBUGINC OutStd( "hbmk: debuginc: Autodetected header dir for " + cFileName + ": " + cDir, hb_osNewLine() ) ENDIF - AAdd( aOPT, cOption ) ENDIF RETURN DirAddPathSep( PathSepToSelf( cDir ) ) + cFileName ENDIF @@ -3774,6 +3770,7 @@ STATIC PROCEDURE HBP_ProcessAll( lConfigOnly,; /* @ */ aLIBUSERGT,; /* @ */ aLIBPATH,; /* @ */ aLIBDYNHAS,; + /* @ */ aINCPATH,; /* @ */ aINCTRYPATH,; /* @ */ aOPTPRG,; /* @ */ aOPTC,; @@ -3819,6 +3816,7 @@ STATIC PROCEDURE HBP_ProcessAll( lConfigOnly,; @aLIBUSERGT,; @aLIBPATH,; @aLIBDYNHAS,; + @aINCPATH,; @aINCTRYPATH,; @aOPTPRG,; @aOPTC,; @@ -3854,6 +3852,7 @@ STATIC PROCEDURE HBP_ProcessAll( lConfigOnly,; @aLIBUSERGT,; @aLIBPATH,; @aLIBDYNHAS,; + @aINCPATH,; @aINCTRYPATH,; @aOPTPRG,; @aOPTC,; @@ -3886,6 +3885,7 @@ STATIC PROCEDURE HBP_ProcessOne( cFileName,; /* @ */ aLIBUSERGT,; /* @ */ aLIBPATH,; /* @ */ aLIBDYNHAS,; + /* @ */ aINCPATH,; /* @ */ aINCTRYPATH,; /* @ */ aOPTPRG,; /* @ */ aOPTC,; @@ -3937,6 +3937,14 @@ STATIC PROCEDURE HBP_ProcessOne( cFileName,; ENDIF NEXT + CASE Lower( Left( cLine, Len( "incpaths=" ) ) ) == "incpaths=" ; cLine := SubStr( cLine, Len( "incpaths=" ) + 1 ) + FOR EACH cItem IN hb_ATokens( cLine,, .T. ) + cItem := PathSepToTarget( MacroProc( StrStripQuote( cItem ), FN_DirGet( cFileName ) ) ) + IF AScan( aINCPATH, {|tmp| tmp == cItem } ) == 0 + AAddNotEmpty( aINCPATH, cItem ) + ENDIF + NEXT + CASE Lower( Left( cLine, Len( "inctrypaths=" ) ) ) == "inctrypaths=" ; cLine := SubStr( cLine, Len( "inctrypaths=" ) + 1 ) FOR EACH cItem IN hb_ATokens( cLine,, .T. ) cItem := PathSepToTarget( MacroProc( StrStripQuote( cItem ), FN_DirGet( cFileName ) ) ) @@ -4707,77 +4715,78 @@ STATIC PROCEDURE ShowHelp( lLong ) "Syntax: hbmk [options] [] " ,; "" ,; "Options:" ,; - " -o output file name" ,; - " -l link with library" ,; - " -L additional path to search for libraries" ,; - " -static|-shared link with static/shared libs" ,; - " -mt|-st link with multi/single-thread VM" ,; - " -gt link with GT GT driver, can be repeated to link" ,; - " with more GTs. First one will be the default at runtime" } + " -o output file name" ,; + " -l link with library" ,; + " -L additional path to search for libraries" ,; + " -static|-shared link with static/shared libs" ,; + " -mt|-st link with multi/single-thread VM" ,; + " -gt link with GT GT driver, can be repeated to link" ,; + " with more GTs. First one will be the default at runtime" } LOCAL aText_Help := {; - " -help|--help long help" } + " -help|--help long help" } LOCAL aText_Long := {; "" ,; - " -gui|-std create GUI/console executable" ,; - " -main= override the name of starting function/procedure" ,; - " -fullstatic link with all static libs" ,; - " -nulrdd[-] link with nulrdd" ,; - " -[no]debug add/exclude C compiler debug info" ,; - " -[no]opt toggle C compiler optimizations (default: on)" ,; - " -[no]map create (or not) a map file" ,; - " -[no]strip strip (no strip) binaries" ,; - " -[no]trace show commands executed" ,; - " -traceonly show commands to be executed, but don't execute them" ,; - " -[no]compr[=lev] compress executable/dynamic lib (needs UPX)" ,; - " can be: min, max, def" ,; - " -[no]run run/don't run output executable" ,; - " -nohbp do not process .hbp files in current directory" ,; - " -stop stop without doing anything" ,; + " -gui|-std create GUI/console executable" ,; + " -main= override the name of starting function/procedure" ,; + " -fullstatic link with all static libs" ,; + " -nulrdd[-] link with nulrdd" ,; + " -[no]debug add/exclude C compiler debug info" ,; + " -[no]opt toggle C compiler optimizations (default: on)" ,; + " -[no]map create (or not) a map file" ,; + " -[no]strip strip (no strip) binaries" ,; + " -[no]trace show commands executed" ,; + " -traceonly show commands to be executed, but don't execute them" ,; + " -[no]compr[=lev] compress executable/dynamic lib (needs UPX)" ,; + " can be: min, max, def" ,; + " -[no]run run/don't run output executable" ,; + " -nohbp do not process .hbp files in current directory" ,; + " -stop stop without doing anything" ,; "" ,; - " -bldf[-] inherit all/no (default) flags from Harbour build" ,; - " -bldf=[p][c][l] inherit .prg/.c/linker flags (or none) from Harbour build" ,; - " -inctrypath=

additional path to autodetect .c header locations" ,; - " -prgflag= pass flag to Harbour" ,; - " -cflag= pass flag to C compiler" ,; - " -resflag= pass flag to resource compiler (Windows only)" ,; - " -ldflag= pass flag to linker (executable)" ,; - " -aflag= pass flag to linker (static library)" ,; - " -dflag= pass flag to linker (dynamic library)" ,; - " -runflag= pass flag to output executable when -run option is used" ,; - " -jobs= start n compilation threads (MT builds only)" ,; - " -inc enable incremental build mode" ,; - " -[no]head[=] control source header parsing (in incremental build mode)" ,; - " can be: full, partial (default), off" ,; - " -rebuild rebuild all (in incremental build mode)" ,; - " -clean clean (in incremental build mode)" ,; - " -workdir=

working directory for incremental build mode" ,; - " (default: arch/comp)" ,; - " -hbcmp|-clipper stop after creating the object files" ,; - " create link/copy hbmk to hbcmp/clipper for the same effect" ,; - " -hbcc stop after creating the object files and accept raw C flags" ,; - " create link/copy hbmk to hbcc for the same effect" ,; - " -hblnk accept raw linker flags" ,; - " -hblib create static library" ,; - " -hbdyn create dynamic library" ,; - " -rtlink " ,; - " -blinker " ,; - " -exospace emulate Clipper compatible linker behavior" ,; - " create link/copy hbmk to rtlink/blinker/exospace for the" ,; - " same effect" ,; - " --hbdirbin output Harbour binary directory" ,; - " --hbdirdyn output Harbour dynamic library directory" ,; - " --hbdirlib output Harbour static library directory" ,; - " --hbdirinc output Harbour header directory" ,; + " -bldf[-] inherit all/no (default) flags from Harbour build" ,; + " -bldf=[p][c][l] inherit .prg/.c/linker flags (or none) from Harbour build" ,; + " -incpath=

|-i

additional path to search for headers" ,; + " -inctrypath=

additional path to autodetect .c header locations" ,; + " -prgflag= pass flag to Harbour" ,; + " -cflag= pass flag to C compiler" ,; + " -resflag= pass flag to resource compiler (Windows only)" ,; + " -ldflag= pass flag to linker (executable)" ,; + " -aflag= pass flag to linker (static library)" ,; + " -dflag= pass flag to linker (dynamic library)" ,; + " -runflag= pass flag to output executable when -run option is used" ,; + " -jobs= start n compilation threads (MT builds only)" ,; + " -inc enable incremental build mode" ,; + " -[no]head[=] control source header parsing (in incremental build mode)" ,; + " can be: full, partial (default), off" ,; + " -rebuild rebuild all (in incremental build mode)" ,; + " -clean clean (in incremental build mode)" ,; + " -workdir=

working directory for incremental build mode" ,; + " (default: arch/comp)" ,; + " -hbcmp|-clipper stop after creating the object files" ,; + " create link/copy hbmk to hbcmp/clipper for the same effect" ,; + " -hbcc stop after creating the object files and accept raw C flags" ,; + " create link/copy hbmk to hbcc for the same effect" ,; + " -hblnk accept raw linker flags" ,; + " -hblib create static library" ,; + " -hbdyn create dynamic library" ,; + " -rtlink " ,; + " -blinker " ,; + " -exospace emulate Clipper compatible linker behavior" ,; + " create link/copy hbmk to rtlink/blinker/exospace for the" ,; + " same effect" ,; + " --hbdirbin output Harbour binary directory" ,; + " --hbdirdyn output Harbour dynamic library directory" ,; + " --hbdirlib output Harbour static library directory" ,; + " --hbdirinc output Harbour header directory" ,; "" ,; - " -arch= assume specific architecure. Same as HB_ARCHITECTURE envvar" ,; - " -comp= use specific compiler. Same as HB_COMPILER envvar" ,; - " Special value:" ,; - " - bld: use original build settings (default on *nix)" ,; - " --version display version header only" ,; - " -info turn on informational messages" ,; - " -quiet suppress all screen messages" ,; + " -arch= assume specific architecure. Same as HB_ARCHITECTURE envvar" ,; + " -comp= use specific compiler. Same as HB_COMPILER envvar" ,; + " Special value:" ,; + " - bld: use original build settings (default on *nix)" ,; + " --version display version header only" ,; + " -info turn on informational messages" ,; + " -quiet suppress all screen messages" ,; "" ,; "Notes:" ,; " -