diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 4d1d8d353c..92e93bbd67 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,22 @@ The license applies to all entries newer than 2009-04-28. */ +2010-07-07 01:01 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.pt_BR.po + * utils/hbmk2/hbmk2.hu_HU.po + * utils/hbmk2/hbmk2.prg + + Added new experimental feature: + .hbp: -autohbc=<.ch>:<.hbc> + .hbc: autohbcs=<.ch>:<.hbc> + If such setting is used, f.e. in hbmk.hbc, it's possible + to automatically trigger .hbc files by key headers. + So f.e. if 'autohbcs=hbwin.ch:hbwin.hbc' is added to + hbmk.hbc, every projects where any .prg file references + hbwin.ch will automatically include hbwin.hbc, thus setting + up headers dir, libs and everything else that's required + for hbwin. + % Minor opt to -instfile handling. + 2010-07-06 15:02 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) * contrib/hbqt/hbqt_hbqplaintextedit.cpp ! Corrected: code completion popup's vertical positioning. diff --git a/harbour/utils/hbmk2/hbmk2.hu_HU.po b/harbour/utils/hbmk2/hbmk2.hu_HU.po index 190c1e4849..eeeb3cee44 100644 --- a/harbour/utils/hbmk2/hbmk2.hu_HU.po +++ b/harbour/utils/hbmk2/hbmk2.hu_HU.po @@ -1009,5 +1009,5 @@ msgstr "c #: hbmk2.prg:7959 #, c-format -msgid ".hbc options (they should come in separate lines): libs=[], hbcs=[<.hbc file[s]>], gt=[gtname], syslibs=[], prgflags=[Harbour flags], cflags=[C compiler flags], resflags=[resource compiler flags], ldflags=[linker flags], pflags=[flags for plugins], libpaths=[paths], sources=[source files], psources=[source files for plugins], incpaths=[paths], instfiles=[files], instpaths=[paths], plugins=[plugins], gui|mt|shared|nulrdd|debug|opt|map|implib|hbcppmm|strip|run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def], compr=[yes|no|def|min|max], head=[off|partial|full|native], skip=[yes|no], echo=\nLines starting with '#' char are ignored" -msgstr ".hbc opciók (külön sorokba írandók): libs=[], hbcs=[<.hbc nevek>], gt=[gtnév], syslibs=[], prgflags=[Harbour opciók], cflags=[C fordító opciók], resflags=[erőforrás fordító kapcsolók], ldflags=[szerkesztő kapcsolók], libpaths=[útvonalak], sources=[forrás fájlok], incpaths=[útvonalak], instfiles=[fájlok], instpaths=[útvonalak], gui|mt|shared|nulrdd|debug|opt|hbcppmm|map|implib|strip|run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def], compr=[yes|no|def|min|max], head=[off|partial|full|native], skip=[yes|no], echo=\\n'#' karakterrel kezdődő sorokat figyelmen kívül hagyja" +msgid ".hbc options (they should come in separate lines): libs=[], hbcs=[<.hbc file[s]>], gt=[gtname], syslibs=[], prgflags=[Harbour flags], cflags=[C compiler flags], resflags=[resource compiler flags], ldflags=[linker flags], pflags=[flags for plugins], libpaths=[paths], sources=[source files], psources=[source files for plugins], incpaths=[paths], instfiles=[files], instpaths=[paths], autohbcs=[<.ch>:<.hbc>], plugins=[plugins], gui|mt|shared|nulrdd|debug|opt|map|implib|hbcppmm|strip|run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def], compr=[yes|no|def|min|max], head=[off|partial|full|native], skip=[yes|no], echo=\nLines starting with '#' char are ignored" +msgstr ".hbc opciók (külön sorokba írandók): libs=[], hbcs=[<.hbc nevek>], gt=[gtnév], syslibs=[], prgflags=[Harbour opciók], cflags=[C fordító opciók], resflags=[erőforrás fordító kapcsolók], ldflags=[szerkesztő kapcsolók], libpaths=[útvonalak], sources=[forrás fájlok], incpaths=[útvonalak], instfiles=[fájlok], instpaths=[útvonalak], autohbcs=[<.ch>:<.hbc>], plugins=[plugin-ek], gui|mt|shared|nulrdd|debug|opt|hbcppmm|map|implib|strip|run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def], compr=[yes|no|def|min|max], head=[off|partial|full|native], skip=[yes|no], echo=\\n'#' karakterrel kezdődő sorokat figyelmen kívül hagyja" diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 8664ae2ae7..bfc1582e73 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -384,7 +384,10 @@ REQUEST hbmk_KEYW #define _HBMK_cPROGDIR 107 #define _HBMK_cPROGNAME 108 -#define _HBMK_MAX_ 108 +#define _HBMK_hAUTOHBC 109 +#define _HBMK_hAUTOHBCFOUND 110 + +#define _HBMK_MAX_ 110 #define _HBMK_DEP_CTRL_MARKER ".control." /* must be an invalid path */ @@ -835,6 +838,8 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) hbmk[ _HBMK_lHBCPPMM ] := .F. hbmk[ _HBMK_aVAR ] := {} hbmk[ _HBMK_hDEP ] := { => } + hbmk[ _HBMK_hAUTOHBC ] := { => } + hbmk[ _HBMK_hAUTOHBCFOUND ] := { => } hb_HSetCaseMatch( hbmk[ _HBMK_hDEP ], .F. ) @@ -1937,17 +1942,17 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) CASE Left( cParamL, Len( "-instfile=" ) ) == "-instfile=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-instfile=" ) + 1 ), aParam[ _PAR_cFileName ] ) - inst_split_arg( cParam, @tmp, @cParam ) - FOR EACH cParam IN FN_Expand( PathProc( cParam, aParam[ _PAR_cFileName ] ), Empty( aParam[ _PAR_cFileName ] ) ) - AAddNewINST( hbmk[ _HBMK_aINSTFILE ], { tmp, cParam } ) - NEXT + IF inst_split_arg( cParam, @tmp, @cParam ) + FOR EACH cParam IN FN_Expand( PathProc( cParam, aParam[ _PAR_cFileName ] ), Empty( aParam[ _PAR_cFileName ] ) ) + AAddNewINST( hbmk[ _HBMK_aINSTFILE ], { tmp, cParam } ) + NEXT + ENDIF CASE Left( cParamL, Len( "-instpath=" ) ) == "-instpath=" .AND. ; Len( cParamL ) > Len( "-instpath=" ) cParam := MacroProc( hbmk, SubStr( cParam, Len( "-instpath=" ) + 1 ), aParam[ _PAR_cFileName ] ) - inst_split_arg( cParam, @tmp, @cParam ) - IF ! Empty( cParam ) + IF inst_split_arg( cParam, @tmp, @cParam ) AAddNewINST( hbmk[ _HBMK_aINSTPATH ], { tmp, PathNormalize( PathProc( PathSepToSelf( cParam ), aParam[ _PAR_cFileName ] ) ) } ) ENDIF @@ -2112,6 +2117,24 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) ENDIF ENDIF + CASE Left( cParam, Len( "-autohbc=" ) ) == "-autohbc=" + + cParam := MacroProc( hbmk, SubStr( cParam, Len( "-autohbc=" ) + 1 ), aParam[ _PAR_cFileName ] ) + IF autohbc_split_arg( cParam, @tmp, @cParam ) + + cParam := PathProc( PathSepToSelf( MacroProc( hbmk, cParam, aParam[ _PAR_cFileName ] ) ), aParam[ _PAR_cFileName ] ) + IF ! hb_FileExists( cParam ) + FOR EACH tmp IN hbmk[ _HBMK_aLIBPATH ] + IF hb_FileExists( DirAddPathSep( PathSepToSelf( MacroProc( hbmk, tmp, cParam, _MACRO_LATE_PREFIX ) ) ) + FN_NameExtGet( cParam ) ) + cParam := DirAddPathSep( PathSepToSelf( MacroProc( hbmk, tmp, cParam, _MACRO_LATE_PREFIX ) ) ) + FN_NameExtGet( cParam ) + EXIT + ENDIF + NEXT + ENDIF + + hbmk[ _HBMK_hAUTOHBC ][ AllTrim( StrTran( tmp, "\", "/" ) ) ] := cParam + ENDIF + CASE Left( cParam, Len( "-deppkgname=" ) ) == "-deppkgname=" cParam := MacroProc( hbmk, SubStr( cParam, Len( "-deppkgname=" ) + 1 ), aParam[ _PAR_cFileName ] ) @@ -4105,8 +4128,21 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) ENDIF NEXT ELSE + IF ! Empty( hbmk[ _HBMK_hAUTOHBC ] ) + FOR EACH tmp IN hbmk[ _HBMK_aPRG ] + FindNewerHeaders( hbmk, tmp, NIL, .F., NIL, .F., cBin_CompC, @headstate ) + NEXT + ENDIF + l_aPRG_TODO := hbmk[ _HBMK_aPRG ] ENDIF + + FOR EACH tmp IN hbmk[ _HBMK_hAUTOHBCFOUND ] + IF hbmk[ _HBMK_lInfo ] + hbmk_OutStd( hbmk, hb_StrFormat( I_( "Processing (triggered by '%1$s' header): %2$s" ), tmp:__enumKey(), tmp ) ) + ENDIF + HBC_ProcessOne( hbmk, tmp, 1 ) + NEXT ELSE l_aPRG_TODO := hbmk[ _HBMK_aPRG ] ENDIF @@ -5486,7 +5522,7 @@ STATIC PROCEDURE DoInstCopy( hbmk ) cInstPath := aInstPath[ _INST_cData ] - nCopied := 0 /* file copied */ + nCopied := 0 /* files copied */ FOR EACH aInstFile IN hbmk[ _HBMK_aINSTFILE ] cInstFile := aInstFile[ _INST_cData ] @@ -5849,7 +5885,13 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT ENDIF IF hb_FGetDateTime( cDependency, @tTimeDependency ) .AND. tTimeDependency > tTimeParent headstate[ _HEADSTATE_lAnyNewer ] := .T. - RETURN .T. + IF Empty( hbmk[ _HBMK_hAUTOHBC ] ) + RETURN .T. + ENDIF + ENDIF + IF cDependency $ hbmk[ _HBMK_hAUTOHBC ] + hbmk[ _HBMK_hAUTOHBCFOUND ][ cDependency ] := hbmk[ _HBMK_hAUTOHBC ][ cDependency ] + hb_HDel( hbmk[ _HBMK_hAUTOHBC ], cDependency ) ENDIF ENDIF NEXT @@ -5896,7 +5938,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT ENDIF IF hb_FGetDateTime( cDependency, @tTimeDependency ) .AND. tTimeDependency > tTimeParent headstate[ _HEADSTATE_lAnyNewer ] := .T. - RETURN .T. + RETURN .T. ENDIF ENDIF NEXT @@ -5946,8 +5988,13 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, cParentDir, lSystemHeader, tT 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 */ - RETURN .T. + IF lCMode .OR. Empty( hbmk[ _HBMK_hAUTOHBC ] ) + RETURN .T. + ENDIF + ENDIF + IF ! lCMode .AND. cHeader $ hbmk[ _HBMK_hAUTOHBC ] + hbmk[ _HBMK_hAUTOHBCFOUND ][ cHeader ] := hbmk[ _HBMK_hAUTOHBC ][ cHeader ] + hb_HDel( hbmk[ _HBMK_hAUTOHBC ], cHeader ) ENDIF NEXT ENDIF @@ -6023,7 +6070,7 @@ STATIC FUNCTION deplst_add( hDeps, cList ) RETURN .T. -STATIC PROCEDURE inst_split_arg( cParam, /* @ */ cName, /* @ */ cData ) +STATIC FUNCTION inst_split_arg( cParam, /* @ */ cName, /* @ */ cData ) LOCAL nPos /* separate install group from install file or path. @@ -6039,7 +6086,21 @@ STATIC PROCEDURE inst_split_arg( cParam, /* @ */ cName, /* @ */ cData ) cData := PathSepToSelf( cData ) - RETURN + RETURN ! Empty( cData ) + +STATIC FUNCTION autohbc_split_arg( cParam, /* @ */ cName, /* @ */ cData ) + LOCAL nPos + + IF ( nPos := At( ":", cParam ) ) > 1 + cName := Left( cParam, nPos - 1 ) + cData := SubStr( cParam, nPos + 1 ) + RETURN ! Empty( cName ) .AND. ! Empty( cData ) + ENDIF + + cName := NIL + cData := NIL + + RETURN .F. STATIC FUNCTION dep_split_arg( hbmk, cParam, /* @ */ cName, /* @ */ cData ) LOCAL nPos @@ -7736,6 +7797,30 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel ) ENDIF NEXT + CASE Lower( Left( cLine, Len( "autohbcs=" ) ) ) == "autohbcs=" ; cLine := SubStr( cLine, Len( "autohbcs=" ) + 1 ) + FOR EACH cItem IN hb_ATokens( cLine,, .T. ) + cItem := MacroProc( hbmk, StrStripQuote( cItem ), cFileName ) + IF autohbc_split_arg( cItem, @cName, @cItem ) + + cItem := PathProc( PathSepToSelf( MacroProc( hbmk, StrStripQuote( cItem ), cFileName ) ), FN_DirGet( cFileName ) ) + + IF Empty( FN_ExtGet( cItem ) ) + cItem := FN_ExtSet( cItem, ".hbc" ) + ENDIF + + IF ! hb_FileExists( cItem ) + FOR EACH tmp IN hbmk[ _HBMK_aLIBPATH ] + IF hb_FileExists( DirAddPathSep( PathSepToSelf( MacroProc( hbmk, tmp, cItem, _MACRO_LATE_PREFIX ) ) ) + FN_NameExtGet( cItem ) ) + cItem := DirAddPathSep( PathSepToSelf( MacroProc( hbmk, tmp, cItem, _MACRO_LATE_PREFIX ) ) ) + FN_NameExtGet( cItem ) + EXIT + ENDIF + NEXT + ENDIF + + hbmk[ _HBMK_hAUTOHBC ][ AllTrim( StrTran( cName, "\", "/" ) ) ] := cItem + ENDIF + NEXT + CASE Lower( Left( cLine, Len( "libpaths=" ) ) ) == "libpaths=" ; cLine := SubStr( cLine, Len( "libpaths=" ) + 1 ) FOR EACH cItem IN hb_ATokens( cLine,, .T. ) cItem := MacroProc( hbmk, StrStripQuote( cItem ), cFileName ) @@ -7753,11 +7838,9 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel ) NEXT CASE Lower( Left( cLine, Len( "instfiles=" ) ) ) == "instfiles=" ; cLine := SubStr( cLine, Len( "instfiles=" ) + 1 ) - FOR EACH cItem IN hb_ATokens( cLine,, .T. ) cItem := MacroProc( hbmk, StrStripQuote( cItem ), cFileName ) - inst_split_arg( cItem, @cName, @cItem ) - IF ! Empty( cItem ) + IF inst_split_arg( cItem, @cName, @cItem ) cItem := PathNormalize( PathProc( cItem, FN_DirGet( cFileName ) ) ) FOR EACH tmp IN FN_Expand( cItem, .F. ) AAddNewINST( hbmk[ _HBMK_aINSTFILE ], { cName, tmp } ) @@ -7768,8 +7851,7 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel ) CASE Lower( Left( cLine, Len( "instpaths=" ) ) ) == "instpaths=" ; cLine := SubStr( cLine, Len( "instpaths=" ) + 1 ) FOR EACH cItem IN hb_ATokens( cLine,, .T. ) cItem := MacroProc( hbmk, StrStripQuote( cItem ), cFileName ) - inst_split_arg( cItem, @cName, @cItem ) - IF ! Empty( cItem ) + IF inst_split_arg( cItem, @cName, @cItem ) AAddNewINST( hbmk[ _HBMK_aINSTPATH ], { cName, PathNormalize( PathProc( PathSepToSelf( cItem ), FN_DirGet( cFileName ) ) ) } ) ENDIF NEXT @@ -10129,6 +10211,8 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong ) { "-[no]minipo" , I_( "do (not) add Harbour version number and source file reference to .po (default: add them)" ) },; { "-rebuildpo" , I_( "recreate .po file, thus removing all obsolete entries in it" ) },; NIL,; + { "-autohbc=<.ch:.hbc>", I_( "<.ch> is a header file name. <.hbc> is a .hbc filename to be automatically included in case the header is found in any of the compiled sources. EXPERIMENTAL." ) },; + NIL,; { "-deppkgname=" , I_( " is the name of the dependency. name of the package depedency. Can be specified multiple times." ) },; { "-depkeyhead=" , I_( " is the name of the dependency. is the key header (.h) of the package dependency. Multiple alternative headers can be specified." ) },; { "-depoptional=" , I_( " is the name of the dependency. can be 'yes' or 'no', specifies whether the dependency is optional. Default: no" ) },; @@ -10186,7 +10270,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong ) I_( "Regular Harbour compiler options are also accepted.\n(see them with -harbourhelp option)" ),; hb_StrFormat( I_( "%1$s option file in hbmk2 directory is always processed if it exists. On *nix platforms ~/.harbour, /etc/harbour, /etc/harbour, /etc are checked (in that order) before the hbmk2 directory." ), _HBMK_CFG_NAME ),; hb_StrFormat( I_( "%1$s make script in current directory is always processed if it exists." ), _HBMK_AUTOHBM_NAME ),; - I_( ".hbc options (they should come in separate lines): libs=[], hbcs=[<.hbc file[s]>], gt=[gtname], syslibs=[], prgflags=[Harbour flags], cflags=[C compiler flags], resflags=[resource compiler flags], ldflags=[linker flags], pflags=[flags for plugins], libpaths=[paths], sources=[source files], psources=[source files for plugins], incpaths=[paths], instfiles=[files], instpaths=[paths], plugins=[plugins], gui|mt|shared|nulrdd|debug|opt|map|implib|hbcppmm|strip|run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def], compr=[yes|no|def|min|max], head=[off|partial|full|native], skip=[yes|no], echo=\nLines starting with '#' char are ignored" ),; + I_( ".hbc options (they should come in separate lines): libs=[], hbcs=[<.hbc file[s]>], gt=[gtname], syslibs=[], prgflags=[Harbour flags], cflags=[C compiler flags], resflags=[resource compiler flags], ldflags=[linker flags], pflags=[flags for plugins], libpaths=[paths], sources=[source files], psources=[source files for plugins], incpaths=[paths], instfiles=[files], instpaths=[paths], autohbcs=[<.ch>:<.hbc>], plugins=[plugins], gui|mt|shared|nulrdd|debug|opt|map|implib|hbcppmm|strip|run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def], compr=[yes|no|def|min|max], head=[off|partial|full|native], skip=[yes|no], echo=\nLines starting with '#' char are ignored" ),; I_( "Platform filters are accepted in each .hbc line and with several options.\nFilter format: {[!][|||]}. Filters can be combined using '&', '|' operators and grouped by parantheses. Ex.: {win}, {gcc}, {linux|darwin}, {win&!pocc}, {(win|linux)&!watcom}, {unix&mt&gui}, -cflag={win}-DMYDEF, -stop{dos}, -stop{!allwin}, {allwin|allmsvc|allgcc|allmingw|allicc|allpocc|unix}, {x86|x86_64|ia64|arm|mips|sh}, {debug|nodebug|gui|std|mt|st|shared|static|unicode|ascii|xhb}" ),; I_( "Certain .hbc lines (libs=, hbcs=, prgflags=, cflags=, ldflags=, libpaths=, instfiles=, instpaths=, echo=) and corresponding command line parameters will accept macros: ${hb_root}, ${hb_dir}, ${hb_name}, ${hb_plat}, ${hb_comp}, ${hb_build}, ${hb_cpu}, ${hb_bin}, ${hb_lib}, ${hb_dyn}, ${hb_inc}, ${}. libpaths= also accepts %{hb_name} which translates to the name of the .hbc file under search." ),; I_( 'Options accepting macros also support command substitution. Enclose command inside ``, and, if the command contains space, also enclose in double quotes. F.e. "-cflag=`wx-config --cflags`", or ldflags={unix&gcc}"`wx-config --libs`".' ),; diff --git a/harbour/utils/hbmk2/hbmk2.pt_BR.po b/harbour/utils/hbmk2/hbmk2.pt_BR.po index 42a1f2d6b1..4ec4c03a58 100644 --- a/harbour/utils/hbmk2/hbmk2.pt_BR.po +++ b/harbour/utils/hbmk2/hbmk2.pt_BR.po @@ -515,9 +515,9 @@ msgstr "Op # #: hbmk2.prg:7960 #, c-format -msgid ".hbc options (they should come in separate lines): libs=[], hbcs=[<.hbc file[s]>], gt=[gtname], syslibs=[], prgflags=[Harbour flags], cflags=[C compiler flags], resflags=[resource compiler flags], ldflags=[linker flags], pflags=[flags for plugins], libpaths=[paths], sources=[source files], psources=[source files for plugins], incpaths=[paths], instfiles=[files], instpaths=[paths], plugins=[plugins], gui|mt|shared|nulrdd|debug|opt|map|implib|hbcppmm|strip|run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def], compr=[yes|no|def|min|max], head=[off|partial|full|native], skip=[yes|no], echo=\nLines starting with '#' char are ignored" +msgid ".hbc options (they should come in separate lines): libs=[], hbcs=[<.hbc file[s]>], gt=[gtname], syslibs=[], prgflags=[Harbour flags], cflags=[C compiler flags], resflags=[resource compiler flags], ldflags=[linker flags], pflags=[flags for plugins], libpaths=[paths], sources=[source files], psources=[source files for plugins], incpaths=[paths], instfiles=[files], instpaths=[paths], autohbcs=[<.ch>:<.hbc>], plugins=[plugins], gui|mt|shared|nulrdd|debug|opt|map|implib|hbcppmm|strip|run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def], compr=[yes|no|def|min|max], head=[off|partial|full|native], skip=[yes|no], echo=\nLines starting with '#' char are ignored" msgstr "" -"As opçőes em um arquivo .hbc devem estar em linhas separadas e săo: libs=[], hbcs=[<.hbc file[s]>], gt=[gtname], syslibs=[], prgflags=[flags do Harbour], cflags=[flags do compilador C], resflags=[flags do compilador de recursos], ldflags=[flags do linkeditor], libpaths=[paths], sources=[módulos fontes], incpaths=[paths], instfiles=[files], instpaths=[paths], gui|mt|shared|nulrdd|debug|opt|hbcppmm|map|implib|strip|run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def], compr=[yes|no|def|min|max], head=[off|partial|full|native], skip=[yes|no], echo=\\n" +"As opçőes em um arquivo .hbc devem estar em linhas separadas e săo: libs=[], hbcs=[<.hbc file[s]>], gt=[gtname], syslibs=[], prgflags=[flags do Harbour], cflags=[flags do compilador C], resflags=[flags do compilador de recursos], ldflags=[flags do linkeditor], libpaths=[paths], sources=[módulos fontes], incpaths=[paths], instfiles=[files], instpaths=[paths], autohbcs=[<.ch>:<.hbc>], plugins=[plugins], gui|mt|shared|nulrdd|debug|opt|hbcppmm|map|implib|strip|run|inc=[yes|no], cpp=[yes|no|def], warn=[max|yes|low|no|def], compr=[yes|no|def|min|max], head=[off|partial|full|native], skip=[yes|no], echo=\\n" "Linhas iniciadas com '#' săo interpretadas como comentários e serăo ignoradas" #: hbmk2.prg:7942