diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 3e249a849f..d2c33ac5fb 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,125 @@ The license applies to all entries newer than 2009-04-28. */ +2010-07-23 13:04 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + - Deleted handling of .hbi extension. + - Deleted -target and -alltarget cmdline options as an + effort for simplification. Now all cmdline options apply + to all targets. + + .hbp file references will now be executed as sub-projects, + using an internal recursive call to the hbmk2 engine. + This means that projects can now be embedded. INCOMPATIBLE + if someone used .hbp file references inside other make + files. If you want to create common settings in a separate + file, always use .hbm extension. + Pls note that sub-projects will inherit all cmdline options + of original hbmk2 invocation. + + Added ${hb_targetname} macro to return the parent project + name. + + Added ${hb_targettype} macro. Returning target type. + + Changed -run option to only run the top level project. + + Changed --hbinfo to return a flat list of information + about all projects involved. Currently the main project + is the last one in the list (order of execution). + + Filters can now be used also for file inclusion and -skip + options (which means they can now be used for all possible + cmdline and .hbm/.hbp options) + ! Fixed the way automatic cmdline options based on + hbmk2's own filename are created. From now -hbcmp, -hblnk, + -hbcc, -rtlink, -xhb, -hb10 will be added to the left side + of the existing option (to precede everything else), while + the rest (f.e. -hblib, -hbexe, -hbdyn) will be added last. + ; NOTE: Quite heavy changes so pls expect (and report) any + regressions. Most probably there will be room for + tweaks here and there to make the new cascading build + feature as smooth as possible. + + * contrib/make.hbs + % Internally simplified since now the handling of sub-projects + is the job of hbmk2 and .hbp make files. + + In standalone mode it will now detect the name of the project + in current dir, so the codepaths are much similar to the + GNU Make mode now and stdalone mode will also rely on pkglist, + instead of trying to detect what to build on its own. + + Not require pkglist to list any sub-projects anymore, now + it's simple list of main .hbp files. + + Changed along with hbmk2 to deal with multiple project + information returned by --hbinfo. + + Avoid using the word "contrib", use "package" instead. + + * contrib/pkglist + * Simplified to a mere list of main .hbp files for packages. + + * utils/hbrun/hbrun.prg + * contrib/make.hbs + * config/postinst.hbs + * PathSepToSelf() rewritten to not make assumptions about + __PLATFORM__* macro vs hb_ps() value, instead use hb_ps() + value to decide what to do. + + * utils/hbrun/hbrun.prg + ! Fixed to not save the (empty) history after each non-interactive + session. + + * config/win/cygwin.mk + ! Fixed to add z and pcre libs if the locally hosted ones + aren't used. + + * contrib/hbqt/generator/hbqtgen.prg + ! Fixed OS names in doc output. + * Formatting. + + * contrib/gtalleg/gtalleg.hbm + * contrib/gtalleg/gtalleg.hbp + * contrib/gtalleg/gtallegs.hbp + * contrib/hbcurl/hbcurl.hbm + * contrib/hbcurl/hbcurl.hbp + * contrib/hbcurl/hbcurls.hbp + * contrib/hbtip/hbtip.hbm + * contrib/hbtip/hbtip.hbp + * contrib/hbtip/hbtipssl.hbp + * contrib/hbssl/hbssl.hbm + * contrib/hbssl/hbssl.hbp + * contrib/hbssl/hbssls.hbp + * contrib/hbqt/hbqt_common.hbm + - contrib/hbqt/hbqt.hbm + + contrib/hbqt/filelist.hbm + * contrib/hbqt/hbqt.hbp + * contrib/hbqt/hbqts.hbp + * contrib/hbqt/hbqtgui.hbp + * contrib/hbqt/hbqtguis.hbp + * contrib/hbqt/hbqtcore.hbp + * contrib/hbqt/hbqtcores.hbp + * contrib/hbqt/hbqtnetwork.hbp + * contrib/hbqt/hbqtnetworks.hbp + - contrib/hbqt/gtqtc/gtqtc.hbm + + contrib/hbqt/gtqtc/filelist.hbm + * contrib/hbqt/gtqtc/gtqtc.hbp + * contrib/hbqt/gtqtc/gtqtcs.hbp + * contrib/hbqt/qtwebkit/hbqtwebkit.hbp + * contrib/hbqt/qtwebkit/hbqtwebkits.hbp + * contrib/hbqt/qtdesigner/hbqtdesigner.hbp + * contrib/hbqt/qtdesigner/hbqtdesigners.hbp + * contrib/hbqt/hbqscintilla/hbqscintilla.hbp + * Cleanup along with latest changes: + Using ${hb_targetname} instead of ${hb_name}, so it's safe to + use it inside .hbm file, instead of replicating them in every + .hbp file. + + Now primary .hbp project files always reference the sub-project + .hbp files: + - hbqt + + hbqts + + hbqtcore + + hbqtcores + + hbqtgui + + hbqtguis + + hbqtnetwork + + hbqtnetworks + Which means that 'hbmk2 hbqt.hbp' will rebuild the whole + stuff (all libs, and even static libs if requested) in one pass. + * Renamed some file for more uniform layout. + 2010-07-22 18:51 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) * contrib/hbxbp/xbpbrowse.prg + Changed: width of the columns : maximum of data or header. @@ -27,11 +146,11 @@ + Implemented: ideDBU - context menu: > Scroll to... Opens a input dialog to fetch fieldname ( case insensitive ). - Any first characters will scroll the browser to - make that column visible. Vey handy especially in + Any first characters will scroll the browser to + make that column visible. Vey handy especially in tables with lot of fields. > Search in Field Opens input dialog to fetch a value to be searched - sequentially on the highlighted field. This option is + sequentially on the highlighted field. This option is available in any state of the table, indexed or natural order. > Form View Triggers the form-view scrollable widget visible. diff --git a/harbour/config/postinst.hbs b/harbour/config/postinst.hbs index faaffd32ae..91c41acaea 100644 --- a/harbour/config/postinst.hbs +++ b/harbour/config/postinst.hbs @@ -187,10 +187,4 @@ STATIC FUNCTION FNameExtSet( cFileName, cExt ) RETURN hb_FNameMerge( cDir, cName, cExt ) STATIC FUNCTION PathSepToSelf( cFileName ) -#if defined( __PLATFORM__WINDOWS ) .OR. ; - defined( __PLATFORM__DOS ) .OR. ; - defined( __PLATFORM__OS2 ) - RETURN StrTran( cFileName, "/", "\" ) -#else - RETURN StrTran( cFileName, "\", "/" ) -#endif + RETURN StrTran( cFileName, iif( hb_ps() == "\", "/", "\" ), hb_ps() ) diff --git a/harbour/config/win/cygwin.mk b/harbour/config/win/cygwin.mk index 5c651dfc95..55c8eceb8f 100644 --- a/harbour/config/win/cygwin.mk +++ b/harbour/config/win/cygwin.mk @@ -48,6 +48,15 @@ endif LD := $(CC) LD_OUT := -o +ifneq ($(HB_HAS_PCRE),) + ifeq ($(HB_HAS_PCRE_LOCAL),) + SYSLIBS += pcre + endif +endif +ifeq ($(HB_HAS_ZLIB_LOCAL),) + SYSLIBS += z +endif + LIBPATHS := -L$(LIB_DIR) LDLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),-l$(lib)) diff --git a/harbour/contrib/gtalleg/gtalleg.hbm b/harbour/contrib/gtalleg/gtalleg.hbm index f010b3ad24..dd40619c88 100644 --- a/harbour/contrib/gtalleg/gtalleg.hbm +++ b/harbour/contrib/gtalleg/gtalleg.hbm @@ -5,6 +5,9 @@ -hblib -inc +-o${hb_targetname} +-workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_targetname} + -w3 -es2 -stop{pocc|pocc64|poccarm|xcc|dmc|watcom|mingwarm|msvcarm} diff --git a/harbour/contrib/gtalleg/gtalleg.hbp b/harbour/contrib/gtalleg/gtalleg.hbp index 58ee9b175f..a1e0ad398c 100644 --- a/harbour/contrib/gtalleg/gtalleg.hbp +++ b/harbour/contrib/gtalleg/gtalleg.hbp @@ -4,5 +4,4 @@ gtalleg.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} +gtallegs.hbp diff --git a/harbour/contrib/gtalleg/gtallegs.hbp b/harbour/contrib/gtalleg/gtallegs.hbp index 58413846b0..9efdf8a891 100644 --- a/harbour/contrib/gtalleg/gtallegs.hbp +++ b/harbour/contrib/gtalleg/gtallegs.hbp @@ -4,9 +4,6 @@ gtalleg.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - -stop{!msvc} -cflag=-DALLEGRO_STATICLINK diff --git a/harbour/contrib/hbcurl/hbcurl.hbm b/harbour/contrib/hbcurl/hbcurl.hbm index 7558552f7c..176847b1d3 100644 --- a/harbour/contrib/hbcurl/hbcurl.hbm +++ b/harbour/contrib/hbcurl/hbcurl.hbm @@ -5,6 +5,9 @@ -hblib -inc +-o${hb_targetname} +-workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_targetname} + -w3 -es2 -depkeyhead=curl:curl/curl.h diff --git a/harbour/contrib/hbcurl/hbcurl.hbp b/harbour/contrib/hbcurl/hbcurl.hbp index ce26df7acf..ba1d0ad9f5 100644 --- a/harbour/contrib/hbcurl/hbcurl.hbp +++ b/harbour/contrib/hbcurl/hbcurl.hbp @@ -4,10 +4,9 @@ hbcurl.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - -depimplibs=curl:../libcurl.dll -depimplibs=curl:../bin/libcurl.dll -iflag={bcc}-a + +hbcurls.hbp diff --git a/harbour/contrib/hbcurl/hbcurls.hbp b/harbour/contrib/hbcurl/hbcurls.hbp index 21979288e4..ab5b93a521 100644 --- a/harbour/contrib/hbcurl/hbcurls.hbp +++ b/harbour/contrib/hbcurl/hbcurls.hbp @@ -4,9 +4,6 @@ hbcurl.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - -stop{!(win|wce)} -cflag=-DCURL_STATICLIB diff --git a/harbour/contrib/hbqt/hbqt.hbm b/harbour/contrib/hbqt/filelist.hbm similarity index 62% rename from harbour/contrib/hbqt/hbqt.hbm rename to harbour/contrib/hbqt/filelist.hbm index 085878246d..1c31e59b15 100644 --- a/harbour/contrib/hbqt/hbqt.hbm +++ b/harbour/contrib/hbqt/filelist.hbm @@ -2,13 +2,6 @@ # $Id$ # -hbqt_common.hbm - --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - --instfile=inc:hbqt.ch - hbqt_base.cpp hbqt_destruct.cpp hbqt_hbqabstractitemmodel.cpp @@ -30,6 +23,3 @@ hbqt_hbqplaintextedit.h hbqt_hbqsyntaxhighlighter.h hbqt_hbqtableview.h hbqt_hbslots.h - -{darwin&!HB_WITH_QT}-cflag=-I/Library/Frameworks/QtGui.framework/Headers -{darwin&!HB_WITH_QT}-cflag=-I/Library/Frameworks/QtNetwork.framework/Headers diff --git a/harbour/contrib/hbqt/generator/hbqtgen.prg b/harbour/contrib/hbqt/generator/hbqtgen.prg index 6a434d43b3..cd625598dd 100644 --- a/harbour/contrib/hbqt/generator/hbqtgen.prg +++ b/harbour/contrib/hbqt/generator/hbqtgen.prg @@ -100,33 +100,33 @@ FUNCTION Main( ... ) cLParam := lower( cParam ) DO CASE - CASE left( cParam,1 ) == '@' + CASE left( cParam,1 ) == "@" x := substr( cParam,2 ) hb_fNameSplit( x, @cPath, @cFile, @cExt ) - IF empty( cExt ) .or. lower( cExt ) != 'qtp' - cExt := 'qtp' + IF empty( cExt ) .or. !( lower( cExt ) == ".qtp" ) + cExt := ".qtp" ENDIF - x := iif( empty( cPath ), "", cPath + s_PathSep )+ cFile + "." + cExt + x := iif( empty( cPath ), "", cPath + s_PathSep )+ cFile + cExt aadd( aPrjFiles, x ) - CASE right( cLParam,4 ) == '.qtp' + CASE right( cLParam,4 ) == ".qtp" aadd( aPrjFiles, cParam ) - CASE right( cLParam,4 ) == '.qth' + CASE right( cLParam,4 ) == ".qth" aadd( aProFiles, cParam ) - CASE lower( left( cParam,2 ) ) == '-o' + CASE lower( left( cParam,2 ) ) == "-o" cPathOut := substr( cParam, 3 ) - CASE lower( left( cParam,2 ) ) == '-i' + CASE lower( left( cParam,2 ) ) == "-i" cPathIn := substr( cParam, 3 ) - CASE lower( left( cParam,2 ) ) == '-d' + CASE lower( left( cParam,2 ) ) == "-d" cPathDoc := substr( cParam, 3 ) - CASE cParam == '-c' + CASE cParam == "-c" - CASE cLParam == '-help' + CASE cLParam == "-help" DispHelp() RETURN nil @@ -214,13 +214,13 @@ STATIC FUNCTION ManageProject( cProFile, cPathIn, cPathOut, cPathDoc ) /* Pullout all ANSI C style comments */ DO WHILE .t. - IF ( n := at( '/*', cPrj ) ) == 0 + IF ( n := at( "/*", cPrj ) ) == 0 EXIT ENDIF /* We must have a matching pair */ - nn := at( '*/', cPrj ) + nn := at( "*/", cPrj ) IF nn == 0 - OutStd( 'Project file has unbalanced comment section...' + s_NewLine ) + OutStd( "Project file has unbalanced comment section..." + s_NewLine ) RETURN nil ENDIF cPrj := substr( cPrj, 1, n-1 ) + substr( cPrj, nn+2 ) @@ -236,29 +236,29 @@ STATIC FUNCTION ManageProject( cProFile, cPathIn, cPathOut, cPathDoc ) FOR EACH cPrj IN prj_ cPrj := alltrim( cPrj ) - IF left( cPrj,1 ) $ ':#;/*' + IF left( cPrj,1 ) $ ":#;/*" LOOP ENDIF - IF ( n := at( '=', cPrj ) ) > 0 + IF ( n := at( "=", cPrj ) ) > 0 cTkn := alltrim( substr( cPrj,1,n-1 ) ) cVal := alltrim( substr( cPrj,n+1 ) ) //IF !empty( cVal ) DO CASE - CASE cTkn == '-I' + CASE cTkn == "-I" cPIn := cVal - CASE cTkn == '-O' + CASE cTkn == "-O" cPOut := cVal - CASE cTkn == '-D' + CASE cTkn == "-D" cPDoc := cVal ENDCASE //ENDIF - ELSEIF lower( right( cPrj,4 ) ) == '.qth' + ELSEIF lower( right( cPrj,4 ) ) == ".qth" a_:= GenSource( cPrj, cPIn, cPOut, cPDoc ) IF !empty( a_[ 1 ] ) aadd( cpp_, a_[ 1 ] ) @@ -283,8 +283,8 @@ STATIC FUNCTION PullOutSection( cQth, cSec ) LOCAL cTxt, n, nn, cTknB, cTknE LOCAL a_:={} - cTknB := '<' + cSec + '>' - cTknE := '' + cTknB := "<" + cSec + ">" + cTknE := "" IF ( n := at( cTknB, cQth ) ) > 0 IF( nn := at( cTknE, cQth ) ) > 0 @@ -361,22 +361,22 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc ) ENDIF cls_:={} - IF !empty( class_:= PullOutSection( @cQth, 'CLASS' ) ) + IF !empty( class_:= PullOutSection( @cQth, "CLASS" ) ) FOR EACH s IN class_ - IF ( n := at( '=', s ) ) > 0 + IF ( n := at( "=", s ) ) > 0 aadd( cls_, { alltrim( substr( s, 1, n-1 ) ), alltrim( substr( s, n+1 ) ) } ) ENDIF NEXT ENDIF /* Pull out SUBCLASS section */ - subCls_ := PullOutSection( @cQth, 'SUBCLASS' ) + subCls_ := PullOutSection( @cQth, "SUBCLASS" ) /* Pull out Doc Section */ - docum_ := PullOutSection( @cQth, 'DOC' ) + docum_ := PullOutSection( @cQth, "DOC" ) /* Pull out Code Section */ - code_ := PullOutSection( @cQth, 'CODE' ) + code_ := PullOutSection( @cQth, "CODE" ) /* Separate constructor function */ new_:={} @@ -410,23 +410,23 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc ) /* Pull out Enumerators */ - enums_ := PullOutSection( @cQth, 'ENUMS' ) + enums_ := PullOutSection( @cQth, "ENUMS" ) enum_:={} FOR EACH s IN enums_ - IF ( 'enum ' $ s .or. 'flags ' $ s ) - b_:= hb_ATokens( alltrim( s ),' ' ) + IF ( "enum " $ s .or. "flags " $ s ) + b_:= hb_ATokens( alltrim( s ), " " ) aadd( enum_, b_[ 2 ] ) ENDIF NEXT /* Pull out Prototypes */ - protos_ := PullOutSection( @cQth, 'PROTOS' ) + protos_ := PullOutSection( @cQth, "PROTOS" ) /* Pull out Variables */ - varbls_ := PullOutSection( @cQth, 'VARIABLES' ) + varbls_ := PullOutSection( @cQth, "VARIABLES" ) /* Pull Out Signals */ - slots_ := PullOutSection( @cQth, 'SLOTS' ) + slots_ := PullOutSection( @cQth, "SLOTS" ) /* Combine signals and protos : same nature */ aeval( slots_, {|e| aadd( protos_, e ) } ) @@ -453,18 +453,18 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc ) ENDIF /* Check if proto is commented out */ - IF left( s,2 ) == '//' + IF left( s,2 ) == "//" aadd( cmntd_, cOrg ) nFuncs++ LOOP ENDIF /* Check if it is not ANSI C Comment */ - IF left( alltrim( cOrg ),1 ) $ '/*' + IF left( alltrim( cOrg ),1 ) $ "/*" LOOP ENDIF /* Another comment tokens */ - IF empty( s ) .or. left( s,1 ) $ '#;' + IF empty( s ) .or. left( s,1 ) $ "#;" LOOP ENDIF @@ -472,7 +472,7 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc ) /* Lists - Later */ #if 0 - IF '<' $ s + IF "<" $ s aadd( dummy_, cOrg ) LOOP ENDIF @@ -497,24 +497,24 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc ) LOOP ENDIF /* Check if proto is commented out */ - IF left( s,2 ) == '//' + IF left( s,2 ) == "//" aadd( cmntd_, cOrg ) nFuncs++ LOOP ENDIF /* Check if it is not ANSI C Comment */ - IF left( alltrim( cOrg ),1 ) $ '/*' + IF left( alltrim( cOrg ),1 ) $ "/*" LOOP ENDIF /* Another comment tokens */ - IF empty( s ) .or. left( s,1 ) $ '#;' + IF empty( s ) .or. left( s,1 ) $ "#;" LOOP ENDIF nFuncs++ /* Lists - Later */ - IF '<' $ s + IF "<" $ s aadd( dummy_, cOrg ) LOOP ENDIF @@ -535,36 +535,36 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc ) /* Place ENUM definitions into the source */ #if 1 IF !empty( enums_ ) - aadd( cpp_, '/*' ) - aeval( enums_, {|e| iif( !empty( e ), aadd( cpp_, ' * ' + e ), NIL ) } ) - aadd( cpp_, ' */ ' ) - aadd( cpp_, '' ) + aadd( cpp_, "/*" ) + aeval( enums_, {|e| iif( !empty( e ), aadd( cpp_, " * " + e ), NIL ) } ) + aadd( cpp_, " */ " ) + aadd( cpp_, "" ) ENDIF #endif /* Insert information about prototypes not converted to functions */ IF !empty( dummy_ ) - aadd( cpp_, '/*' ) - aadd( cpp_, ' * Constructed[ ' + hb_ntos( nCnvrtd ) + '/' + hb_ntos( nFuncs ) + ' [ ' + hb_ntos( nCnvrtd / nFuncs * 100 ) + '% ] ]' ) - aadd( cpp_, ' * ' ) - aadd( cpp_, ' * *** Unconvered Prototypes ***' ) - aadd( cpp_, ' * -----------------------------' ) - aadd( cpp_, ' * ' ) - aeval( dummy_, {|e| aadd( cpp_, ' * ' + e ) } ) + aadd( cpp_, "/*" ) + aadd( cpp_, " * Constructed[ " + hb_ntos( nCnvrtd ) + "/" + hb_ntos( nFuncs ) + " [ " + hb_ntos( nCnvrtd / nFuncs * 100 ) + "% ] ]" ) + aadd( cpp_, " * " ) + aadd( cpp_, " * *** Unconvered Prototypes ***" ) + aadd( cpp_, " * -----------------------------" ) + aadd( cpp_, " * " ) + aeval( dummy_, {|e| aadd( cpp_, " * " + e ) } ) IF !empty( cmntd_ ) - aadd( cpp_, ' * ' ) - aadd( cpp_, ' * ' + '*** Commented out protos which construct fine but do not compile ***' ) - aadd( cpp_, ' * ' ) - aeval( cmntd_, {|e| aadd( cpp_, ' * ' + e ) } ) + aadd( cpp_, " * " ) + aadd( cpp_, " * " + "*** Commented out protos which construct fine but do not compile ***" ) + aadd( cpp_, " * " ) + aeval( cmntd_, {|e| aadd( cpp_, " * " + e ) } ) ENDIF - aadd( cpp_, ' */ ' ) - aadd( cpp_, '' ) + aadd( cpp_, " */ " ) + aadd( cpp_, "" ) ENDIF /* Insert user defined code - INCLUDEs */ aadd( cpp_, "#include " ) IF !empty( code_ ) - aeval( code_, {|e| aadd( cpp_, strtran( e, chr( 13 ), '' ) ) } ) + aeval( code_, {|e| aadd( cpp_, strtran( e, chr( 13 ), "" ) ) } ) aadd( cpp_, "" ) ENDIF @@ -737,7 +737,7 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc ) aadd( cpp_, "" ) /* Insert Functions */ - aeval( txt_, {|e| aadd( cpp_, strtran( e, chr( 13 ), '' ) ) } ) + aeval( txt_, {|e| aadd( cpp_, strtran( e, chr( 13 ), "" ) ) } ) /* Footer */ BuildFooter( @cpp_ ) @@ -749,7 +749,7 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc ) /* Build Class PRG Source */ /* Distribute in specific lib subfolder */ - cFileCpp := GetSourcePathByLib( cWidget, cPathOut, '.cpp', NIL, cls_ ) + cFileCpp := GetSourcePathByLib( cWidget, cPathOut, ".cpp", NIL, cls_ ) CreateTarget( cFileCpp, cpp_ ) /* Build CLASS */ @@ -757,7 +757,7 @@ STATIC FUNCTION GenSource( cProFile, cPathIn, cPathOut, cPathDoc ) Build_Class( cWidget, cls_, doc_, cPathOut, subCls_ ) cPRG := cWidget ELSE - cPRG := '' + cPRG := "" ENDIF cCPP := cWidget ENDIF @@ -815,18 +815,18 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB LOCAL cPre, cPar, cRet, cFun, cParas, cDocs, cCmd, cPas, s, ss, cFirstParamCast LOCAL cWdg, cCmn, cPrgRet, cHBFunc, cHBIdx, cDocNM LOCAL lSuccess, FP - LOCAL cInt := 'int,qint16,quint16,short,ushort,unsigned' - LOCAL cIntLong := 'qint32,quint32,QRgb' - LOCAL cIntLongLong := 'qint64,quint64,qlonglong,qulonglong,ulong' + LOCAL cInt := "int,qint16,quint16,short,ushort,unsigned" + LOCAL cIntLong := "qint32,quint32,QRgb" + LOCAL cIntLongLong := "qint64,quint64,qlonglong,qulonglong,ulong" LOCAL lRetIsList - cParas := '' - cDocs := '' + cParas := "" + cDocs := "" aRet := {}; aArgus := {} - n := at( '(', cProto ) + n := at( "(", cProto ) IF n > 0 - nn := rat( ')', cProto ) + nn := rat( ")", cProto ) IF nn > 0 /* Pull out pre-mid-post components */ cPre := alltrim( substr( cProto, 1, n-1 ) ) @@ -836,30 +836,30 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB lRetIsList := "<" $ cPre /* parse cPre, it has two components */ - n := rat( ' ', cPre ) + n := rat( " ", cPre ) IF n > 0 /* And it must be, otherwise it is constructor function which we write in section */ cFun := alltrim( substr( cPre, n + 1 ) ) cRet := alltrim( substr( cPre, 1, n - 1 ) ) ELSE cFun := cPre - cRet := '' + cRet := "" ENDIF aRet := array( PRT_ATTRB_MAX ) JustACall( cPas ) //////////////////////////////////////////////////////// - aRet[ PRT_L_CONST ] := 'const' $ cRet //.or. 'const' $ cPas - aRet[ PRT_L_AND ] := '&' $ cRet - aRet[ PRT_L_FAR ] := '*' $ cRet - aRet[ PRT_L_VIRT ] := 'virtual' $ cRet - aRet[ PRT_L_CONST_LAST ] := 'const' $ cPas + aRet[ PRT_L_CONST ] := "const" $ cRet //.or. "const" $ cPas + aRet[ PRT_L_AND ] := "&" $ cRet + aRet[ PRT_L_FAR ] := "*" $ cRet + aRet[ PRT_L_VIRT ] := "virtual" $ cRet + aRet[ PRT_L_CONST_LAST ] := "const" $ cPas - cRet := strtran( cRet, 'virtual ', '' ) - cRet := strtran( cRet, 'const ' , '' ) + cRet := strtran( cRet, "virtual ", "" ) + cRet := strtran( cRet, "const " , "" ) IF ! lRetIsList - cRet := strtran( cRet, '& ' , '' ) - cRet := strtran( cRet, '&' , '' ) - cRet := strtran( cRet, '* ' , '' ) - cRet := strtran( cRet, '*' , '' ) + cRet := strtran( cRet, "& " , "" ) + cRet := strtran( cRet, "&" , "" ) + cRet := strtran( cRet, "* " , "" ) + cRet := strtran( cRet, "*" , "" ) ENDIF /* Normalize */ @@ -867,7 +867,7 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB IF lRetIsList aRet[ PRT_CAST ] := cRet ELSE - n := at( ' ', cRet ) + n := at( " ", cRet ) IF n > 0 aRet[ PRT_CAST ] := substr( cRet, 1, n-1 ) ELSE @@ -877,16 +877,16 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB aRet[ PRT_NAME ] := aRet[ PRT_CAST ] IF ascan( aEnum, {|e| iif( empty( e ), .f., e == aRet[ PRT_CAST ] ) } ) > 0 - aRet[ PRT_CAST ] := cWidget + '::' + aRet[ PRT_CAST ] + aRet[ PRT_CAST ] := cWidget + "::" + aRet[ PRT_CAST ] ENDIF /* Parse arguments */ - aArg := hb_ATokens( cPar, ',' ) + aArg := hb_ATokens( cPar, "," ) /* Normalize */ aeval( aArg, {|e,i| aArg[ i ] := alltrim( e ) } ) - cParas := '' - cDocs := '' + cParas := "" + cDocs := "" /* TO hold arguments by reference */ aPre := {} @@ -897,30 +897,30 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB aA[ PRT_RAW ] := cPre - aA[ PRT_L_CONST ] := 'const' $ cPre - aA[ PRT_L_AND ] := '&' $ cPre - aA[ PRT_L_FAR ] := '*' $ cPre - aA[ PRT_L_VIRT ] := 'virtual' $ cPre + aA[ PRT_L_CONST ] := "const" $ cPre + aA[ PRT_L_AND ] := "&" $ cPre + aA[ PRT_L_FAR ] := "*" $ cPre + aA[ PRT_L_VIRT ] := "virtual" $ cPre /* Check if default value is defined */ - n := at( '=', cPre ) + n := at( "=", cPre ) IF n > 0 aA[ PRT_DEFAULT ] := alltrim( substr( cPre, n+1 ) ) cPre := substr( cPre, 1, n-1 ) ENDIF /* Normalize */ - cPre := strtran( cPre, 'const ' , '' ) - cPre := strtran( cPre, '& ' , '' ) - cPre := strtran( cPre, '&' , '' ) - cPre := strtran( cPre, '* ' , '' ) - cPre := strtran( cPre, '*' , '' ) - cPre := strtran( cPre, 'virtual ', '' ) - cPre := strtran( cPre, ' ' , ' ' ) - cPre := strtran( cPre, ' ' , ' ' ) + cPre := strtran( cPre, "const " , "" ) + cPre := strtran( cPre, "& " , "" ) + cPre := strtran( cPre, "&" , "" ) + cPre := strtran( cPre, "* " , "" ) + cPre := strtran( cPre, "*" , "" ) + cPre := strtran( cPre, "virtual ", "" ) + cPre := strtran( cPre, " " , " " ) + cPre := strtran( cPre, " " , " " ) cPre := alltrim( cPre ) /* left may be two elements, name and cast */ - n := at( ' ', cPre ) + n := at( " ", cPre ) IF n > 0 aA[ PRT_CAST ] := substr( cPre, 1, n-1 ) aA[ PRT_NAME ] := substr( cPre, n+1 ) @@ -930,7 +930,7 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB ENDIF IF ascan( aEnum, {|e| iif( empty( e ), .f., e == aA[ PRT_CAST ] ) } ) > 0 - aA[ PRT_CAST ] := cWidget + '::' + aA[ PRT_CAST ] + aA[ PRT_CAST ] := cWidget + "::" + aA[ PRT_CAST ] ENDIF /* Add to main array */ @@ -942,171 +942,171 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB IF empty( cFirstParamCast ) cFirstParamCast := aA[ PRT_CAST ] - IF '::' $ cFirstParamCast - cFirstParamCast := substr( cFirstParamCast, at( '::', cFirstParamCast ) + 2 ) + IF "::" $ cFirstParamCast + cFirstParamCast := substr( cFirstParamCast, at( "::", cFirstParamCast ) + 2 ) ENDIF ENDIF DO CASE - CASE aA[ PRT_CAST ] == 'PHB_ITEM' - aA[ PRT_BODY ] := 'hb_param( ' + cHBIdx + ', HB_IT_ANY )' - aA[ PRT_DOC ] := 'x' + cDocNM + CASE aA[ PRT_CAST ] == "PHB_ITEM" + aA[ PRT_BODY ] := "hb_param( " + cHBIdx + ", HB_IT_ANY )" + aA[ PRT_DOC ] := "x" + cDocNM - CASE aA[ PRT_CAST ] == 'T' - aA[ PRT_BODY ] := 'hb_param( ' + cHBIdx + ', HB_IT_ANY )' - aA[ PRT_DOC ] := 'x' + cDocNM + CASE aA[ PRT_CAST ] == "T" + aA[ PRT_BODY ] := "hb_param( " + cHBIdx + ", HB_IT_ANY )" + aA[ PRT_DOC ] := "x" + cDocNM /* Values by reference */ CASE aA[ PRT_CAST ] $ cInt .and. aA[ PRT_L_FAR ] - aadd( aPre, { aA[ PRT_CAST ] + ' i' + cDocNM + ' = 0;', nHBIdx, 'i' + cDocNM, 'hb_storni' } ) - aA[ PRT_BODY ] := '&i' + cDocNM - aA[ PRT_DOC ] := '@n' + cDocNM + aadd( aPre, { aA[ PRT_CAST ] + " i" + cDocNM + " = 0;", nHBIdx, "i" + cDocNM, "hb_storni" } ) + aA[ PRT_BODY ] := "&i" + cDocNM + aA[ PRT_DOC ] := "@n" + cDocNM CASE aA[ PRT_CAST ] $ cIntLong .and. aA[ PRT_L_FAR ] - aadd( aPre, { aA[ PRT_CAST ] + ' i' + cDocNM + ' = 0;', nHBIdx, 'i' + cDocNM, 'hb_stornl' } ) - aA[ PRT_BODY ] := '&i' + cDocNM - aA[ PRT_DOC ] := '@n' + cDocNM + aadd( aPre, { aA[ PRT_CAST ] + " i" + cDocNM + " = 0;", nHBIdx, "i" + cDocNM, "hb_stornl" } ) + aA[ PRT_BODY ] := "&i" + cDocNM + aA[ PRT_DOC ] := "@n" + cDocNM CASE aA[ PRT_CAST ] $ cIntLongLong .and. aA[ PRT_L_FAR ] - aadd( aPre, { aA[ PRT_CAST ] + ' i' + cDocNM + ' = 0;', nHBIdx, 'i' + cDocNM, 'hb_stornint' } ) - aA[ PRT_BODY ] := '&i' + cDocNM - aA[ PRT_DOC ] := '@n' + cDocNM + aadd( aPre, { aA[ PRT_CAST ] + " i" + cDocNM + " = 0;", nHBIdx, "i" + cDocNM, "hb_stornint" } ) + aA[ PRT_BODY ] := "&i" + cDocNM + aA[ PRT_DOC ] := "@n" + cDocNM CASE aA[ PRT_CAST ] $ cInt IF !empty( aA[ PRT_DEFAULT ] ) .AND. !( aA[ PRT_DEFAULT ] == "0" ) - aA[ PRT_BODY ] := 'hb_parnidef( ' + cHBIdx + ", " + aA[ PRT_DEFAULT ] + ' )' + aA[ PRT_BODY ] := "hb_parnidef( " + cHBIdx + ", " + aA[ PRT_DEFAULT ] + " )" ELSE - aA[ PRT_BODY ] := 'hb_parni( ' + cHBIdx + ' )' + aA[ PRT_BODY ] := "hb_parni( " + cHBIdx + " )" ENDIF - aA[ PRT_DOC ] := 'n' + cDocNM + aA[ PRT_DOC ] := "n" + cDocNM CASE aA[ PRT_CAST ] $ cIntLong IF !empty( aA[ PRT_DEFAULT ] ) .AND. !( aA[ PRT_DEFAULT ] == "0" ) - aA[ PRT_BODY ] := 'hb_parnldef( ' + cHBIdx + ", " + aA[ PRT_DEFAULT ] + ' )' + aA[ PRT_BODY ] := "hb_parnldef( " + cHBIdx + ", " + aA[ PRT_DEFAULT ] + " )" ELSE - aA[ PRT_BODY ] := 'hb_parnl( ' + cHBIdx + ' )' + aA[ PRT_BODY ] := "hb_parnl( " + cHBIdx + " )" ENDIF - aA[ PRT_DOC ] := 'n' + cDocNM + aA[ PRT_DOC ] := "n" + cDocNM CASE aA[ PRT_CAST ] $ "qlonglong,qulonglong" IF !empty( aA[ PRT_DEFAULT ] ) .AND. !( aA[ PRT_DEFAULT ] == "0" ) - aA[ PRT_BODY ] := '( ' + aA[ PRT_CAST ] + ' ) hb_parnintdef( ' + cHBIdx + ", " + aA[ PRT_DEFAULT ] + ' )' + aA[ PRT_BODY ] := "( " + aA[ PRT_CAST ] + " ) hb_parnintdef( " + cHBIdx + ", " + aA[ PRT_DEFAULT ] + " )" ELSE - aA[ PRT_BODY ] := '( ' + aA[ PRT_CAST ] + ' ) hb_parnint( ' + cHBIdx + ' )' + aA[ PRT_BODY ] := "( " + aA[ PRT_CAST ] + " ) hb_parnint( " + cHBIdx + " )" ENDIF - aA[ PRT_DOC ] := 'n' + cDocNM + aA[ PRT_DOC ] := "n" + cDocNM CASE aA[ PRT_CAST ] $ cIntLongLong IF !empty( aA[ PRT_DEFAULT ] ) .AND. !( aA[ PRT_DEFAULT ] == "0" ) - aA[ PRT_BODY ] := 'hb_parnintdef( ' + cHBIdx + ", " + aA[ PRT_DEFAULT ] + ' )' + aA[ PRT_BODY ] := "hb_parnintdef( " + cHBIdx + ", " + aA[ PRT_DEFAULT ] + " )" ELSE - aA[ PRT_BODY ] := 'hb_parnint( ' + cHBIdx + ' )' + aA[ PRT_BODY ] := "hb_parnint( " + cHBIdx + " )" ENDIF - aA[ PRT_DOC ] := 'n' + cDocNM + aA[ PRT_DOC ] := "n" + cDocNM - CASE aA[ PRT_CAST ] $ 'double,qreal' .and. aA[ PRT_L_FAR ] - aadd( aPre, { 'qreal qr' + cDocNM + ' = 0;', nHBIdx, 'qr' + cDocNM, 'hb_stornd' } ) - aA[ PRT_BODY ] := '&qr' + cDocNM - aA[ PRT_DOC ] := '@n' + cDocNM + CASE aA[ PRT_CAST ] $ "double,qreal" .and. aA[ PRT_L_FAR ] + aadd( aPre, { "qreal qr" + cDocNM + " = 0;", nHBIdx, "qr" + cDocNM, "hb_stornd" } ) + aA[ PRT_BODY ] := "&qr" + cDocNM + aA[ PRT_DOC ] := "@n" + cDocNM - CASE aA[ PRT_CAST ] $ 'double,qreal,float' - aA[ PRT_BODY ] := 'hb_parnd( ' + cHBIdx + ' )' - aA[ PRT_DOC ] := 'n' + cDocNM + CASE aA[ PRT_CAST ] $ "double,qreal,float" + aA[ PRT_BODY ] := "hb_parnd( " + cHBIdx + " )" + aA[ PRT_DOC ] := "n" + cDocNM - CASE aA[ PRT_CAST ] == 'uchar' .and. aA[ PRT_L_FAR ] .and. !( aA[ PRT_L_CONST ] ) - aA[ PRT_BODY ] := '( char * ) hb_parc( ' + cHBIdx + ' )' - aA[ PRT_DOC ] := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "uchar" .and. aA[ PRT_L_FAR ] .and. !( aA[ PRT_L_CONST ] ) + aA[ PRT_BODY ] := "( char * ) hb_parc( " + cHBIdx + " )" + aA[ PRT_DOC ] := "c" + cDocNM - CASE aA[ PRT_CAST ] == 'uchar' .and. !( aA[ PRT_L_FAR ] ) .and. !( aA[ PRT_L_CONST ] ) - aA[ PRT_BODY ] := '( char ) hb_parni( ' + cHBIdx + ' )' - aA[ PRT_DOC ] := 'n' + cDocNM + CASE aA[ PRT_CAST ] == "uchar" .and. !( aA[ PRT_L_FAR ] ) .and. !( aA[ PRT_L_CONST ] ) + aA[ PRT_BODY ] := "( char ) hb_parni( " + cHBIdx + " )" + aA[ PRT_DOC ] := "n" + cDocNM - CASE aA[ PRT_CAST ] == 'char' .and. aA[ PRT_L_FAR ] .and. !( aA[ PRT_L_CONST ] ) - aA[ PRT_BODY ] := '( char * ) hb_parc( ' + cHBIdx + ' )' - aA[ PRT_DOC ] := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "char" .and. aA[ PRT_L_FAR ] .and. !( aA[ PRT_L_CONST ] ) + aA[ PRT_BODY ] := "( char * ) hb_parc( " + cHBIdx + " )" + aA[ PRT_DOC ] := "c" + cDocNM - CASE aA[ PRT_CAST ] == 'char' .and. !( aA[ PRT_L_FAR ] ) .and. !( aA[ PRT_L_CONST ] ) - aA[ PRT_BODY ] := '( char ) hb_parni( ' + cHBIdx + ' )' - aA[ PRT_DOC ] := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "char" .and. !( aA[ PRT_L_FAR ] ) .and. !( aA[ PRT_L_CONST ] ) + aA[ PRT_BODY ] := "( char ) hb_parni( " + cHBIdx + " )" + aA[ PRT_DOC ] := "c" + cDocNM - CASE ( '::' $ aA[ PRT_CAST ] ) .and. aA[ PRT_L_FAR ] - aadd( aPre, { aA[ PRT_CAST ] + ' i' + cDocNM + ' = ( ' + aA[ PRT_CAST ] + ' ) 0;', nHBIdx, 'i' + cDocNM, 'hb_storni' } ) - aA[ PRT_BODY ] := '&i' + cDocNM - aA[ PRT_DOC ] := '@n' + cDocNM + CASE ( "::" $ aA[ PRT_CAST ] ) .and. aA[ PRT_L_FAR ] + aadd( aPre, { aA[ PRT_CAST ] + " i" + cDocNM + " = ( " + aA[ PRT_CAST ] + " ) 0;", nHBIdx, "i" + cDocNM, "hb_storni" } ) + aA[ PRT_BODY ] := "&i" + cDocNM + aA[ PRT_DOC ] := "@n" + cDocNM - CASE ( '::' $ aA[ PRT_CAST ] ) - s := '( ' + aA[ PRT_CAST ] + ' ) hb_parni( ' + cHBIdx + ' )' + CASE ( "::" $ aA[ PRT_CAST ] ) + s := "( " + aA[ PRT_CAST ] + " ) hb_parni( " + cHBIdx + " )" IF !empty( aA[ PRT_DEFAULT ] ) .AND. !( aA[ PRT_DEFAULT ] == "0" ) IF ascan( aEnum, aA[ PRT_DEFAULT ] ) > 0 - ss := cWidget + '::' + aA[ PRT_DEFAULT ] + ss := cWidget + "::" + aA[ PRT_DEFAULT ] ELSE - ss := iif( '::' $ aA[ PRT_DEFAULT ], aA[ PRT_DEFAULT ], ; - iif( isDigit( left( aA[ PRT_DEFAULT ], 1 ) ), aA[ PRT_DEFAULT ], cWidget + '::' + aA[ PRT_DEFAULT ] ) ) + ss := iif( "::" $ aA[ PRT_DEFAULT ], aA[ PRT_DEFAULT ], ; + iif( isDigit( left( aA[ PRT_DEFAULT ], 1 ) ), aA[ PRT_DEFAULT ], cWidget + "::" + aA[ PRT_DEFAULT ] ) ) ENDIF - ss := '( ' + aA[ PRT_CAST ] + ' ) ' + ss - aA[ PRT_BODY ] := '( HB_ISNUM( ' + cHBIdx + ' ) ? ' + s + ' : ' + ss + ' )' + ss := "( " + aA[ PRT_CAST ] + " ) " + ss + aA[ PRT_BODY ] := "( HB_ISNUM( " + cHBIdx + " ) ? " + s + " : " + ss + " )" ELSE aA[ PRT_BODY ] := s ENDIF - aA[ PRT_DOC ] := 'n' + cDocNM + aA[ PRT_DOC ] := "n" + cDocNM - CASE aA[ PRT_CAST ] == 'bool' .and. aA[ PRT_L_FAR ] - aadd( aPre, { 'bool i' + cDocNM + ' = 0;', nHBIdx, 'i' + cDocNM, 'hb_stornl' } ) - aA[ PRT_BODY ] := '&i' + cDocNM - aA[ PRT_DOC ] := '@l' + cDocNM + CASE aA[ PRT_CAST ] == "bool" .and. aA[ PRT_L_FAR ] + aadd( aPre, { "bool i" + cDocNM + " = 0;", nHBIdx, "i" + cDocNM, "hb_stornl" } ) + aA[ PRT_BODY ] := "&i" + cDocNM + aA[ PRT_DOC ] := "@l" + cDocNM - CASE aA[ PRT_CAST ] == 'bool' - aA[ PRT_BODY ] := 'hb_parl( ' + cHBIdx + ' )' - aA[ PRT_DOC ] := 'l' + cDocNM + CASE aA[ PRT_CAST ] == "bool" + aA[ PRT_BODY ] := "hb_parl( " + cHBIdx + " )" + aA[ PRT_DOC ] := "l" + cDocNM - CASE aA[ PRT_CAST ] == 'QString' + CASE aA[ PRT_CAST ] == "QString" IF !( s_isObject ) - aA[ PRT_BODY ] := 'hbqt_par_QString( ' + cHBIdx + ' )' + aA[ PRT_BODY ] := "hbqt_par_QString( " + cHBIdx + " )" ELSE - aA[ PRT_BODY ] := cWidget+'::tr( hb_parc( ' + cHBIdx + ' ) )' + aA[ PRT_BODY ] := cWidget+"::tr( hb_parc( " + cHBIdx + " ) )" ENDIF - aA[ PRT_DOC ] := 'c' + cDocNM + aA[ PRT_DOC ] := "c" + cDocNM - CASE aA[ PRT_CAST ] == 'FT_Face' - aA[ PRT_BODY ] := 'hbqt_par_FT_Face( ' + cHBIdx + ' )' - aA[ PRT_DOC ] := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "FT_Face" + aA[ PRT_BODY ] := "hbqt_par_FT_Face( " + cHBIdx + " )" + aA[ PRT_DOC ] := "c" + cDocNM - CASE aA[ PRT_CAST ] == 'QIcon' - aA[ PRT_BODY ] := 'QIcon( hbqt_par_QString( ' + cHBIdx + ' ) )' - aA[ PRT_DOC ] := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "QIcon" + aA[ PRT_BODY ] := "QIcon( hbqt_par_QString( " + cHBIdx + " ) )" + aA[ PRT_DOC ] := "c" + cDocNM CASE aA[ PRT_L_FAR ] - aA[ PRT_BODY ] := 'hbqt_par_' + aA[ PRT_CAST ] + '( ' + cHBIdx + ' )' - aA[ PRT_DOC ] := 'p' + cDocNM + aA[ PRT_BODY ] := "hbqt_par_" + aA[ PRT_CAST ] + "( " + cHBIdx + " )" + aA[ PRT_DOC ] := "p" + cDocNM CASE aA[ PRT_L_AND ] .and. aA[ PRT_L_CONST ] - s := '*hbqt_par_' + aA[ PRT_CAST ] + '( ' + cHBIdx + ' )' - IF !empty( aA[ PRT_DEFAULT ] ) .and. ( '(' $ aA[ PRT_DEFAULT ] ) - aA[ PRT_BODY ] := '( HB_ISPOINTER( ' + cHBIdx + ' ) ? ' + s + ' : ' + aA[ PRT_DEFAULT ] + ' )' + s := "*hbqt_par_" + aA[ PRT_CAST ] + "( " + cHBIdx + " )" + IF !empty( aA[ PRT_DEFAULT ] ) .and. ( "(" $ aA[ PRT_DEFAULT ] ) + aA[ PRT_BODY ] := "( HB_ISPOINTER( " + cHBIdx + " ) ? " + s + " : " + aA[ PRT_DEFAULT ] + " )" ELSE aA[ PRT_BODY ] := s ENDIF - aA[ PRT_DOC ] := 'p' + cDocNM + aA[ PRT_DOC ] := "p" + cDocNM CASE aA[ PRT_L_AND ] - aA[ PRT_BODY ] := '*hbqt_par_' + aA[ PRT_CAST ] + '( ' + cHBIdx + ' )' - aA[ PRT_DOC ] := 'p' + cDocNM + aA[ PRT_BODY ] := "*hbqt_par_" + aA[ PRT_CAST ] + "( " + cHBIdx + " )" + aA[ PRT_DOC ] := "p" + cDocNM - CASE aA[ PRT_CAST ] == 'QChar' - aA[ PRT_BODY ] := '*hbqt_par_' + aA[ PRT_CAST ] + '( ' + cHBIdx + ' )' - aA[ PRT_DOC ] := 'p' + cDocNM + CASE aA[ PRT_CAST ] == "QChar" + aA[ PRT_BODY ] := "*hbqt_par_" + aA[ PRT_CAST ] + "( " + cHBIdx + " )" + aA[ PRT_DOC ] := "p" + cDocNM OTHERWISE - aA[ PRT_BODY ] := '' - aA[ PRT_DOC ] := '' + aA[ PRT_BODY ] := "" + aA[ PRT_DOC ] := "" ENDCASE - cParas += aA[ PRT_BODY ] + ', ' - cDocs += aA[ PRT_DOC ] + ', ' + cParas += aA[ PRT_BODY ] + ", " + cDocs += aA[ PRT_DOC ] + ", " NEXT - IF right( cParas, 2 ) == ', ' + IF right( cParas, 2 ) == ", " cParas := substr( cParas, 1, len( cParas ) - 2 ) cDocs := substr( cDocs , 1, len( cDocs ) - 2 ) ENDIF @@ -1115,8 +1115,8 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB IF .t. aA := aRet /* T A K E C A R E */ // - cWdg := 'hbqt_par_' + cWidget + '( 1 )->' - cParas := '( ' + cParas + ' )' + cWdg := "hbqt_par_" + cWidget + "( 1 )->" + cParas := "( " + cParas + " )" cCmn := cWdg + cFun + cParas cDocNM := THIS_PROPER( aA[ PRT_NAME ] ) @@ -1143,119 +1143,119 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB cPrgRet := "" OTHERWISE - cCmd := 'hb_retptrGC( hbqt_gcAllocate_QList( new ' + aA[ PRT_CAST ] + '( ' + cCmn + ' ), true ) )' - cPrgRet := 'p' + cDocNM + cCmd := "hb_retptrGC( hbqt_gcAllocate_QList( new " + aA[ PRT_CAST ] + "( " + cCmn + " ), true ) )" + cPrgRet := "p" + cDocNM ENDCASE - CASE aA[ PRT_CAST ] == 'T' - cCmd := 'hb_retptr( ' + cCmn + ' )' - cPrgRet := 'p' + cDocNM + CASE aA[ PRT_CAST ] == "T" + cCmd := "hb_retptr( " + cCmn + " )" + cPrgRet := "p" + cDocNM - CASE aA[ PRT_CAST ] == 'void' + CASE aA[ PRT_CAST ] == "void" cCmd := cCmn - cPrgRet := 'NIL' + cPrgRet := "NIL" CASE aA[ PRT_CAST ] $ cInt - cCmd := 'hb_retni( ' + cCmn + ' )' - cPrgRet := 'n' + cDocNM + cCmd := "hb_retni( " + cCmn + " )" + cPrgRet := "n" + cDocNM CASE aA[ PRT_CAST ] $ cIntLong - cCmd := 'hb_retnl( ' + cCmn + ' )' - cPrgRet := 'n' + cDocNM + cCmd := "hb_retnl( " + cCmn + " )" + cPrgRet := "n" + cDocNM CASE aA[ PRT_CAST ] $ cIntLongLong - cCmd := 'hb_retnint( ' + cCmn + ' )' - cPrgRet := 'n' + cDocNM + cCmd := "hb_retnint( " + cCmn + " )" + cPrgRet := "n" + cDocNM - CASE aA[ PRT_CAST ] $ 'double,qreal,float' - cCmd := 'hb_retnd( ' + cCmn + ' )' - cPrgRet := 'n' + cDocNM + CASE aA[ PRT_CAST ] $ "double,qreal,float" + cCmd := "hb_retnd( " + cCmn + " )" + cPrgRet := "n" + cDocNM - CASE ( '::' $ aA[ PRT_CAST ] ) - cCmd := 'hb_retni( ( ' + aA[ PRT_CAST ] + ' ) ' + cCmn + ' )' - cPrgRet := 'n' + cDocNM + CASE ( "::" $ aA[ PRT_CAST ] ) + cCmd := "hb_retni( ( " + aA[ PRT_CAST ] + " ) " + cCmn + " )" + cPrgRet := "n" + cDocNM - CASE aA[ PRT_CAST ] == 'bool' - cCmd := 'hb_retl( ' + cCmn + ' )' - cPrgRet := 'l' + cDocNM + CASE aA[ PRT_CAST ] == "bool" + cCmd := "hb_retl( " + cCmn + " )" + cPrgRet := "l" + cDocNM - CASE aA[ PRT_CAST ] == 'char' .AND. aA[ PRT_L_FAR ] - cCmd := 'hb_retc( ' + cCmn + ' )' - cPrgRet := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "char" .AND. aA[ PRT_L_FAR ] + cCmd := "hb_retc( " + cCmn + " )" + cPrgRet := "c" + cDocNM - CASE aA[ PRT_CAST ] == 'char' - cCmd := 'hb_retni( ' + cCmn + ' )' - cPrgRet := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "char" + cCmd := "hb_retni( " + cCmn + " )" + cPrgRet := "c" + cDocNM - CASE aA[ PRT_CAST ] == 'QString' - cCmd := 'hb_retc( ' + cCmn + '.toAscii().data()' + ' )' - cPrgRet := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "QString" + cCmd := "hb_retc( " + cCmn + ".toAscii().data()" + " )" + cPrgRet := "c" + cDocNM - CASE aA[ PRT_CAST ] == 'FT_Face' - cCmd := 'hb_retc( ' + cCmn + ' )' - cPrgRet := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "FT_Face" + cCmd := "hb_retc( " + cCmn + " )" + cPrgRet := "c" + cDocNM CASE aA[ PRT_L_FAR ] .AND. ( aA[ PRT_CAST ] $ "uchar" ) - //cCmd := 'hb_retptr( ( ' + aA[ PRT_CAST ] + '* ) ' + cCmn + ' )' - cCmd := 'hb_retc( ( const char * ) ' + cCmn + ' )' - cPrgRet := 'p' + cDocNM + //cCmd := "hb_retptr( ( " + aA[ PRT_CAST ] + "* ) " + cCmn + " )" + cCmd := "hb_retc( ( const char * ) " + cCmn + " )" + cPrgRet := "p" + cDocNM // CASE aA[ PRT_L_FAR ] CASE aA[ PRT_L_FAR ] .AND. !( aA[ PRT_L_CONST ] ) - //cCmd := 'hb_retptr( ( ' + aA[ PRT_CAST ] + '* ) ' + cCmn + ' )' + //cCmd := "hb_retptr( ( " + aA[ PRT_CAST ] + "* ) " + cCmn + " )" IF ( isAqtObject( aA[ PRT_CAST ] ) ) cCmd := Get_Command( aA[ PRT_CAST ], cCmn, .F. ) ELSE - cCmd := 'hb_retptr( ( ' + aA[ PRT_CAST ] + '* ) ' + cCmn + ' )' + cCmd := "hb_retptr( ( " + aA[ PRT_CAST ] + "* ) " + cCmn + " )" ENDIF - cPrgRet := 'p' + cDocNM + cPrgRet := "p" + cDocNM CASE ( isAqtObject( aA[ PRT_CAST ] ) ) .AND. ; aA[ PRT_L_FAR ] .AND. ; aA[ PRT_L_CONST ] .AND. ; ( "Abstract" $ aA[ PRT_CAST ] ) - //cCmd := 'hb_retptr( ( ' + aA[ PRT_CAST ] + '* ) ' + cCmn + ' )' - cCmd := 'hb_retptrGC( hbqt_gcAllocate_' + aA[ PRT_CAST ] + '( ( void * ) ' + cCmn + ', false ) )' - cPrgRet := 'p' + cDocNM + //cCmd := "hb_retptr( ( " + aA[ PRT_CAST ] + "* ) " + cCmn + " )" + cCmd := "hb_retptrGC( hbqt_gcAllocate_" + aA[ PRT_CAST ] + "( ( void * ) " + cCmn + ", false ) )" + cPrgRet := "p" + cDocNM CASE ( isAqtObject( aA[ PRT_CAST ] ) ) .AND. ; aA[ PRT_L_FAR ] .AND. ; aA[ PRT_L_CONST ] .AND. ; aA[ PRT_L_VIRT ] - //cCmd := 'hb_retptr( ( ' + aA[ PRT_CAST ] + '* ) ' + cCmn + ' )' - cCmd := 'hb_retptrGC( hbqt_gcAllocate_' + aA[ PRT_CAST ] + '( ( void * ) ' + cCmn + ', false ) )' - cPrgRet := 'p' + cDocNM + //cCmd := "hb_retptr( ( " + aA[ PRT_CAST ] + "* ) " + cCmn + " )" + cCmd := "hb_retptrGC( hbqt_gcAllocate_" + aA[ PRT_CAST ] + "( ( void * ) " + cCmn + ", false ) )" + cPrgRet := "p" + cDocNM CASE ( isAqtObject( aA[ PRT_CAST ] ) ) .AND. ; aA[ PRT_L_FAR ] .AND. ; aA[ PRT_L_CONST ] .AND. ; aA[ PRT_L_CONST_LAST ] cCmd := Get_Command_1( aA[ PRT_CAST ], cCmn ) - cPrgRet := 'p' + cDocNM + cPrgRet := "p" + cDocNM CASE aA[ PRT_L_AND ] .AND. aA[ PRT_L_CONST ] cCmd := Get_Command( aA[ PRT_CAST ], cCmn ) - cPrgRet := 'p' + cDocNM + cPrgRet := "p" + cDocNM CASE aA[ PRT_L_CONST ] cCmd := Get_Command( aA[ PRT_CAST ], cCmn ) - cPrgRet := 'p' + cDocNM + cPrgRet := "p" + cDocNM CASE aA[ PRT_L_AND ] cCmd := Get_Command( aA[ PRT_CAST ], cCmn ) - cPrgRet := 'p' + cDocNM + cPrgRet := "p" + cDocNM OTHERWISE /* No attribute is attached to return value */ IF ( isAqtObject( aA[ PRT_CAST ] ) ) cCmd := Get_Command( aA[ PRT_CAST ], cCmn ) - cPrgRet := 'p' + cDocNM + cPrgRet := "p" + cDocNM ELSE - OutStd( '<<< ' + cProto + ' | ' + aA[ PRT_CAST ] + ' >>>' + s_NewLine ) - cCmd := '' - cPrgRet := '' + OutStd( "<<< " + cProto + " | " + aA[ PRT_CAST ] + " >>>" + s_NewLine ) + cCmd := "" + cPrgRet := "" ENDIF @@ -1267,7 +1267,7 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB ENDIF IF ! Empty( cCmd ) - cCmd := StrTran( cCmd, '( )', '()' ) + ';' + cCmd := StrTran( cCmd, "( )", "()" ) + ";" ENDIF ENDIF ENDIF @@ -1276,15 +1276,15 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB IF ( lSuccess := ! Empty( cCmd ) ) IF ( n := ascan( func_, {|e_| e_[ 1 ] == cFun } ) ) > 0 func_[ n,2 ]++ - cHBFunc := cFun + '_' + hb_ntos( func_[ n, 2 ] ) + cHBFunc := cFun + "_" + hb_ntos( func_[ n, 2 ] ) #if 0 /* TODO: Refine to get duplicate name resolution - this mechanism has problems */ IF empty( cFirstParamCast ) - cHBFunc := cFun + '_' + hb_ntos( func_[ n, 2 ] ) + cHBFunc := cFun + "_" + hb_ntos( func_[ n, 2 ] ) ELSE IF cFirstParamCast == func_[ n,3 ] - cHBFunc := cFun + '_' + cFirstParamCast + "_" + hb_ntos( func_[ n, 2 ] ) + cHBFunc := cFun + "_" + cFirstParamCast + "_" + hb_ntos( func_[ n, 2 ] ) ELSE - cHBFunc := cFun + '_' + cFirstParamCast + cHBFunc := cFun + "_" + cFirstParamCast ENDIF ENDIF func_[ n,3 ] := cFirstParamCast @@ -1295,7 +1295,7 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB ENDIF aadd( txt_, "/*" ) - aadd( txt_, " * " + strtran( cProto, chr(13), '' ) ) + aadd( txt_, " * " + strtran( cProto, chr(13), "" ) ) aadd( txt_, " */" ) aadd( txt_, "HB_FUNC( QT_" + upper( cWidget ) + "_" + upper( cHBFunc ) + " )" ) aadd( txt_, "{" ) @@ -1333,9 +1333,9 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB aadd( txt_, "}" ) aadd( txt_, "" ) - aadd( doc_, 'Qt_' + cWidget + '_' + cHBFunc + '( p' + cWidget + ; - iif( empty( cDocs ), '', ', ' + cDocs ) + ' ) -> ' + cPrgRet ) - aadd( doc_, '' ) + aadd( doc_, "Qt_" + cWidget + "_" + cHBFunc + "( p" + cWidget + ; + iif( empty( cDocs ), "", ", " + cDocs ) + " ) -> " + cPrgRet ) + aadd( doc_, "" ) ENDIF RETURN lSuccess @@ -1343,7 +1343,7 @@ STATIC FUNCTION ParseProto( cProto, cWidget, txt_, doc_, aEnum, func_, lList, fB /*----------------------------------------------------------------------*/ STATIC FUNCTION isAqtObject( cCast ) - RETURN left( cCast, 1 ) == 'Q' .OR. left( cCast, 3 ) == "HBQ" + RETURN left( cCast, 1 ) == "Q" .OR. left( cCast, 3 ) == "HBQ" /*----------------------------------------------------------------------*/ @@ -1353,16 +1353,16 @@ STATIC FUNCTION ParseVariables( cProto, cWidget, txt_, doc_, aEnum, func_ ) LOCAL cRet, cFun, cDocs, cCmd LOCAL cWdg, cCmn, cPrgRet, cHBFunc, cDocNM LOCAL lSuccess - * LOCAL cInt := 'int,qint16,quint16,QChar,short,ushort' - LOCAL cInt := 'int,qint16,quint16,short,ushort' - LOCAL cIntLong := 'qint32,quint32,QRgb' - LOCAL cIntLongLong := 'qint64,quint64,qlonglong,qulonglong' + * LOCAL cInt := "int,qint16,quint16,QChar,short,ushort" + LOCAL cInt := "int,qint16,quint16,short,ushort" + LOCAL cIntLong := "qint32,quint32,QRgb" + LOCAL cIntLongLong := "qint64,quint64,qlonglong,qulonglong" aPre := {} - cDocs := '' + cDocs := "" aRet := {} - n := at( ' ', cProto ) + n := at( " ", cProto ) IF n > 0 IF .t. cRet := alltrim( substr( cProto, 1, n - 1 ) ) @@ -1375,78 +1375,78 @@ STATIC FUNCTION ParseVariables( cProto, cWidget, txt_, doc_, aEnum, func_ ) aRet[ PRT_NAME ] := aRet[ PRT_CAST ] IF ascan( aEnum, {|e| iif( empty( e ), .f., e == aRet[ PRT_CAST ] ) } ) > 0 - aRet[ PRT_CAST ] := cWidget + '::' + aRet[ PRT_CAST ] + aRet[ PRT_CAST ] := cWidget + "::" + aRet[ PRT_CAST ] ENDIF /* Build complete code line */ IF .t. aA := aRet - cWdg := 'hbqt_par_' + cWidget + '( 1 )->' + cWdg := "hbqt_par_" + cWidget + "( 1 )->" cCmn := cWdg + cFun cDocNM := THIS_PROPER( aA[ PRT_NAME ] ) DO CASE - CASE aA[ PRT_CAST ] == 'T' - cCmd := 'hb_ret( ' + cCmn + ' )' - cPrgRet := 'x' + cDocNM + CASE aA[ PRT_CAST ] == "T" + cCmd := "hb_ret( " + cCmn + " )" + cPrgRet := "x" + cDocNM CASE aA[ PRT_CAST ] $ cInt - cCmd := 'hb_retni( ' + cCmn + ' )' - cPrgRet := 'n' + cDocNM + cCmd := "hb_retni( " + cCmn + " )" + cPrgRet := "n" + cDocNM CASE aA[ PRT_CAST ] $ cIntLong - cCmd := 'hb_retnl( ' + cCmn + ' )' - cPrgRet := 'n' + cDocNM + cCmd := "hb_retnl( " + cCmn + " )" + cPrgRet := "n" + cDocNM CASE aA[ PRT_CAST ] $ cIntLongLong - cCmd := 'hb_retnint( ' + cCmn + ' )' - cPrgRet := 'n' + cDocNM + cCmd := "hb_retnint( " + cCmn + " )" + cPrgRet := "n" + cDocNM - CASE aA[ PRT_CAST ] $ 'double,qreal,float' - cCmd := 'hb_retnd( ' + cCmn + ' )' - cPrgRet := 'n' + cDocNM + CASE aA[ PRT_CAST ] $ "double,qreal,float" + cCmd := "hb_retnd( " + cCmn + " )" + cPrgRet := "n" + cDocNM - CASE ( '::' $ aA[ PRT_CAST ] ) - cCmd := 'hb_retni( ( ' + aA[ PRT_CAST ] + ' ) ' + cCmn + ' )' - cPrgRet := 'n' + cDocNM + CASE ( "::" $ aA[ PRT_CAST ] ) + cCmd := "hb_retni( ( " + aA[ PRT_CAST ] + " ) " + cCmn + " )" + cPrgRet := "n" + cDocNM - CASE aA[ PRT_CAST ] == 'bool' - cCmd := 'hb_retl( ' + cCmn + ' )' - cPrgRet := 'l' + cDocNM + CASE aA[ PRT_CAST ] == "bool" + cCmd := "hb_retl( " + cCmn + " )" + cPrgRet := "l" + cDocNM - CASE aA[ PRT_CAST ] == 'char*' - cCmd := 'hb_retc( ' + cCmn + ' )' - cPrgRet := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "char*" + cCmd := "hb_retc( " + cCmn + " )" + cPrgRet := "c" + cDocNM - CASE aA[ PRT_CAST ] == 'char' - cCmd := 'hb_retni( ' + cCmn + ' )' - cPrgRet := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "char" + cCmd := "hb_retni( " + cCmn + " )" + cPrgRet := "c" + cDocNM - CASE aA[ PRT_CAST ] == 'QString' - cCmd := 'hb_retc( ' + cCmn + '.toLatin1().data()' + ' )' - cPrgRet := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "QString" + cCmd := "hb_retc( " + cCmn + ".toLatin1().data()" + " )" + cPrgRet := "c" + cDocNM - CASE aA[ PRT_CAST ] == 'FT_Face' - cCmd := 'hb_retc( ' + cCmn + ' )' - cPrgRet := 'c' + cDocNM + CASE aA[ PRT_CAST ] == "FT_Face" + cCmd := "hb_retc( " + cCmn + " )" + cPrgRet := "c" + cDocNM OTHERWISE /* No attribute is attached to return value */ - IF (left( aA[ PRT_CAST ], 1 ) == 'Q') + IF (left( aA[ PRT_CAST ], 1 ) == "Q") cCmd := Get_Command( aA[ PRT_CAST ], cCmn ) - cPrgRet := 'p' + cDocNM + cPrgRet := "p" + cDocNM ELSE - OutStd( '<<< ' + cProto + ' | ' + aA[ PRT_CAST ] + ' >>>' + s_NewLine ) - cCmd := '' - cPrgRet := '' + OutStd( "<<< " + cProto + " | " + aA[ PRT_CAST ] + " >>>" + s_NewLine ) + cCmd := "" + cPrgRet := "" ENDIF ENDCASE IF !empty( cCmd ) - cCmd := strtran( cCmd, '( )', '()' ) + ';' + cCmd := strtran( cCmd, "( )", "()" ) + ";" ENDIF ENDIF ENDIF @@ -1455,14 +1455,14 @@ STATIC FUNCTION ParseVariables( cProto, cWidget, txt_, doc_, aEnum, func_ ) IF ( lSuccess := !empty( cCmd ) ) IF ( n := ascan( func_, {|e_| e_[ 1 ] == cFun } ) ) > 0 func_[ n, 2 ]++ - cHBFunc := cFun + '_' + hb_ntos( func_[ n, 2 ] ) + cHBFunc := cFun + "_" + hb_ntos( func_[ n, 2 ] ) ELSE cHBFunc := cFun aadd( func_, { cFun, 0 } ) ENDIF aadd( txt_, "/*" ) - aadd( txt_, " * " + strtran( cProto, chr( 13 ), '' ) ) + aadd( txt_, " * " + strtran( cProto, chr( 13 ), "" ) ) aadd( txt_, " */" ) aadd( txt_, "HB_FUNC( QT_" + upper( cWidget ) + "_" + upper( cHBFunc ) + " )" ) @@ -1490,9 +1490,9 @@ STATIC FUNCTION ParseVariables( cProto, cWidget, txt_, doc_, aEnum, func_ ) aadd( txt_, "}" ) aadd( txt_, "" ) - aadd( doc_, 'Qt_' + cWidget + '_' + cHBFunc + '( p' + cWidget + ; - iif( empty( cDocs ), '', ', ' + cDocs ) + ' ) -> ' + cPrgRet ) - aadd( doc_, '' ) + aadd( doc_, "Qt_" + cWidget + "_" + cHBFunc + "( p" + cWidget + ; + iif( empty( cDocs ), "", ", " + cDocs ) + " ) -> " + cPrgRet ) + aadd( doc_, "" ) ENDIF RETURN lSuccess @@ -1593,21 +1593,21 @@ STATIC FUNCTION BuildFooter( txt_ ) /*----------------------------------------------------------------------*/ STATIC FUNCTION DispHelp() - LOCAL cHlp := '' + LOCAL cHlp := "" - cHlp += '' + s_NewLine - cHlp += 'Syntax:' + s_NewLine - cHlp += ' hbqtgen.exe [Options] [[@]] []' + s_NewLine - cHlp += '' + s_NewLine - cHlp += 'Options:' + s_NewLine - cHlp += ' -O [ e.g. c:\harbour\contrib\hbqt ] [D] Current folder' + s_NewLine - cHlp += ' -I [ e.g. c:\harbour\contrib\hbqt\protos ] [D] Current folder' + s_NewLine - cHlp += ' -D [ e.g. c:\harbour\contrib\hbqt\doc ] [D] Current folder' + s_NewLine - cHlp += ' ' + s_NewLine - cHlp += ' -c If QT env is set, attempts to compile resulting .cpp' + s_NewLine - cHlp += '' + s_NewLine - cHlp += ' -noretobject Skip object returning methods' + s_NewLine - cHlp += '' + s_NewLine + cHlp += "" + s_NewLine + cHlp += "Syntax:" + s_NewLine + cHlp += " hbqtgen.exe [Options] [[@]] []" + s_NewLine + cHlp += "" + s_NewLine + cHlp += "Options:" + s_NewLine + cHlp += " -O [ e.g. c:\harbour\contrib\hbqt ] [D] Current folder" + s_NewLine + cHlp += " -I [ e.g. c:\harbour\contrib\hbqt\protos ] [D] Current folder" + s_NewLine + cHlp += " -D [ e.g. c:\harbour\contrib\hbqt\doc ] [D] Current folder" + s_NewLine + cHlp += " " + s_NewLine + cHlp += " -c If QT env is set, attempts to compile resulting .cpp" + s_NewLine + cHlp += "" + s_NewLine + cHlp += " -noretobject Skip object returning methods" + s_NewLine + cHlp += "" + s_NewLine OutStd( cHlp ) @@ -1616,13 +1616,13 @@ STATIC FUNCTION DispHelp() /*----------------------------------------------------------------------*/ STATIC FUNCTION DispLogo() - LOCAL cHlp := '' + LOCAL cHlp := "" - cHlp += '' + s_NewLine + cHlp += "" + s_NewLine cHlp += "Harbour Source Generator for QT " + HBRawVersion() + s_NewLine cHlp += "Copyright (c) 2009, Pritpal Bedi " + s_NewLine cHlp += "http://harbour-project.org/" + s_NewLine - cHlp += '' + s_NewLine + cHlp += "" + s_NewLine OutStd( cHlp ) @@ -1659,93 +1659,93 @@ STATIC FUNCTION Build_Class( cWidget, cls_, doc_, cPathOut, subCls_ ) BuildHeader( @txt_, 1 ) - aadd( txt_, '' ) + aadd( txt_, "" ) - n := ascan( cls_, {|e_| left( lower( e_[ 1 ] ), 7 ) == 'inherit' .and. !empty( e_[ 2 ] ) } ) - //s := 'CREATE CLASS ' + cWidget + iif( n > 0, ' INHERIT HbQtObjectHandler' + iif( empty( cls_[ n, 2 ] ), "" , ", " + cls_[ n, 2 ] ), '' ) - s := 'CREATE CLASS ' + cWidget + ' INHERIT HbQtObjectHandler' + iif( n > 0, ", " + cls_[ n, 2 ], '' ) + n := ascan( cls_, {|e_| left( lower( e_[ 1 ] ), 7 ) == "inherit" .and. !empty( e_[ 2 ] ) } ) + //s := "CREATE CLASS " + cWidget + iif( n > 0, " INHERIT HbQtObjectHandler" + iif( empty( cls_[ n, 2 ] ), "" , ", " + cls_[ n, 2 ] ), "" ) + s := "CREATE CLASS " + cWidget + " INHERIT HbQtObjectHandler" + iif( n > 0, ", " + cls_[ n, 2 ], "" ) aadd( txt_, s ) - aadd( txt_, ' ' ) + aadd( txt_, " " ) #if 0 - aadd( txt_, ' VAR pPtr' ) - aadd( txt_, ' ' ) - aadd( txt_, ' ERROR HANDLER onError()' ) - aadd( txt_, ' ' ) + aadd( txt_, " VAR pPtr" ) + aadd( txt_, " " ) + aadd( txt_, " ERROR HANDLER onError()" ) + aadd( txt_, " " ) #endif - aadd( txt_, ' METHOD new( ... )' ) - //aadd( txt_, ' METHOD configure( xObject )' ) - aadd( txt_, ' ' ) + aadd( txt_, " METHOD new( ... )" ) + //aadd( txt_, " METHOD configure( xObject )" ) + aadd( txt_, " " ) /* Populate METHODS */ FOR EACH s IN doc_ - n := at( '-> ', s ) + n := at( "-> ", s ) IF n > 0 s := substr( s, 1, n-1 ) - s := strtran( s, '@', '' ) /* Just in Case */ - s := strtran( s, '::', '_' ) /* Just in Case */ + s := strtran( s, "@", "" ) /* Just in Case */ + s := strtran( s, "::", "_" ) /* Just in Case */ n := at( cWidget, s ) sm := substr( s, n+nLen+1 ) - ss := 'p' + cWidget + ',' - cM := strtran( sm, ss, '' ) - ss := 'p' + cWidget - cM := strtran( cM, ss, '' ) - cM := strtran( cM, '( )', '()' ) - cM := strtran( cM, '( ', '( ' ) + ss := "p" + cWidget + "," + cM := strtran( sm, ss, "" ) + ss := "p" + cWidget + cM := strtran( cM, ss, "" ) + cM := strtran( cM, "( )", "()" ) + cM := strtran( cM, "( ", "( " ) cM := iif( len( cM ) > 35, cM, pad( cM,35 ) ) - ss := 'p' + cWidget - cCall := strtran( s, ss, '::pPtr' ) + ss := "p" + cWidget + cCall := strtran( s, ss, "::pPtr" ) aadd( mth_, { cM, cCall } ) - aadd( txt_, ' METHOD ' + cM ) + aadd( txt_, " METHOD " + cM ) ENDIF NEXT - aadd( txt_, ' ' ) - aadd( txt_, ' ENDCLASS' ) - aadd( txt_, ' ' ) - aadd( txt_, ' ' ) - aadd( txt_, 'METHOD ' + cWidget + ':new( ... )' ) - aadd( txt_, ' LOCAL p' ) - aadd( txt_, ' FOR EACH p IN { ... }' ) - aadd( txt_, ' hb_pvalue( p:__enumIndex(), hbqt_ptr( p ) )' ) - aadd( txt_, ' NEXT' ) - aadd( txt_, ' ::pPtr := Qt_' + cWidget + '( ... )' ) - aadd( txt_, ' RETURN Self' ) - aadd( txt_, ' ' ) + aadd( txt_, " " ) + aadd( txt_, " ENDCLASS" ) + aadd( txt_, " " ) + aadd( txt_, " " ) + aadd( txt_, "METHOD " + cWidget + ":new( ... )" ) + aadd( txt_, " LOCAL p" ) + aadd( txt_, " FOR EACH p IN { ... }" ) + aadd( txt_, " hb_pvalue( p:__enumIndex(), hbqt_ptr( p ) )" ) + aadd( txt_, " NEXT" ) + aadd( txt_, " ::pPtr := Qt_" + cWidget + "( ... )" ) + aadd( txt_, " RETURN Self" ) + aadd( txt_, " " ) #if 0 - aadd( txt_, ' ' ) - aadd( txt_, 'METHOD ' + cWidget + ':configure( xObject )' ) - aadd( txt_, ' IF hb_isObject( xObject )' ) - aadd( txt_, ' ::pPtr := xObject:pPtr' ) - aadd( txt_, ' ELSEIF hb_isPointer( xObject )' ) - aadd( txt_, ' ::pPtr := xObject' ) - aadd( txt_, ' ENDIF' ) - aadd( txt_, ' RETURN Self' ) - aadd( txt_, ' ' ) - aadd( txt_, ' ' ) - aadd( txt_, 'METHOD ' + cWidget + ':onError()' ) - aadd( txt_, ' RETURN hbqt_showError( __GetMessage() )' ) - aadd( txt_, ' ' ) + aadd( txt_, " " ) + aadd( txt_, "METHOD " + cWidget + ":configure( xObject )" ) + aadd( txt_, " IF hb_isObject( xObject )" ) + aadd( txt_, " ::pPtr := xObject:pPtr" ) + aadd( txt_, " ELSEIF hb_isPointer( xObject )" ) + aadd( txt_, " ::pPtr := xObject" ) + aadd( txt_, " ENDIF" ) + aadd( txt_, " RETURN Self" ) + aadd( txt_, " " ) + aadd( txt_, " " ) + aadd( txt_, "METHOD " + cWidget + ":onError()" ) + aadd( txt_, " RETURN hbqt_showError( __GetMessage() )" ) + aadd( txt_, " " ) #endif /* Define methods */ FOR i := 1 TO len( mth_ ) - aadd( txt_, '' ) - aadd( txt_, 'METHOD ' + cWidget + ':' + mth_[ i, 1 ] ) - aadd( txt_, ' RETURN ' + ParsePtr( mth_[ i, 2 ] ) ) - aadd( txt_, '' ) + aadd( txt_, "" ) + aadd( txt_, "METHOD " + cWidget + ":" + mth_[ i, 1 ] ) + aadd( txt_, " RETURN " + ParsePtr( mth_[ i, 2 ] ) ) + aadd( txt_, "" ) NEXT IF !empty( subCls_ ) - aadd( txt_, '' ) + aadd( txt_, "" ) aeval( subCls_, {|e| aadd( txt_, e ) } ) - aadd( txt_, '' ) + aadd( txt_, "" ) ENDIF /* Generate .prg */ - cFile := GetSourcePathByLib( cWidget, cPathOut, '.prg', 'T', cls_ ) + cFile := GetSourcePathByLib( cWidget, cPathOut, ".prg", "T", cls_ ) CreateTarget( cFile, txt_ ) RETURN nil @@ -1762,8 +1762,8 @@ STATIC FUNCTION Build_Document( cWidget, cls_, doc_, cPathDoc, subCls_, docum_ ) HB_SYMBOL_UNUSED( cls_ ) HB_SYMBOL_UNUSED( subCls_ ) - n := ascan( cls_, {|e_| left( lower( e_[ 1 ] ), 7 ) == 'inherit' .and. !empty( e_[ 2 ] ) } ) - cInherits := iif( n > 0, cls_[ n, 2 ], '' ) + n := ascan( cls_, {|e_| left( lower( e_[ 1 ] ), 7 ) == "inherit" .and. !empty( e_[ 2 ] ) } ) + cInherits := iif( n > 0, cls_[ n, 2 ], "" ) IF ascan( aGui, cWidget ) > 0 cLib := "qtgui" @@ -1777,87 +1777,87 @@ STATIC FUNCTION Build_Document( cWidget, cls_, doc_, cPathDoc, subCls_, docum_ ) cLib := "" ENDIF - aadd( txt_, '/* ' ) - aadd( txt_, ' * hbQTgen v1.0 - Harbour Callable Wrappers Generator for Qt v4.5+' ) - aadd( txt_, ' * Please do not modify this document as it is subject to change in future.' ) - aadd( txt_, ' * Pritpal Bedi ' ) - aadd( txt_, ' */ ' ) - aadd( txt_, ' ' ) - aadd( txt_, '/* $DOC$ ' ) - aadd( txt_, ' $TEMPLATE$ ' ) - aadd( txt_, ' Class' ) - aadd( txt_, ' $NAME$ ' ) - aadd( txt_, ' ' + cWidget + '()' ) - aadd( txt_, ' $CATEGORY$ ' ) - aadd( txt_, ' ' + 'Harbour Bindings for Qt' ) - aadd( txt_, ' $SUBCATEGORY$ ' ) - aadd( txt_, ' ' + 'GUI' ) - aadd( txt_, ' $EXTERNALLINK$' ) - aadd( txt_, ' ' + QT_WEB + QT_VER + '/' + lower( cWidget ) + '.html' ) - aadd( txt_, ' $ONELINER$ ' ) - aadd( txt_, ' ' + 'Creates a new ' + cWidget + ' object.' ) - aadd( txt_, ' $INHERITS$ ' ) - aadd( txt_, ' ' + cInherits ) - aadd( txt_, ' $SYNTAX$ ' ) - aadd( txt_, ' ' + cWidget + '():new( ... )' ) - aadd( txt_, ' ' + cWidget + '():from( pPtr_OR_oObj_of_type_' + cWidget +' )' ) - aadd( txt_, ' ' + cWidget + '():configure( pPtr_OR_oObj_of_type_' + cWidget +' )' ) - aadd( txt_, ' $ARGUMENTS$ ' ) - aadd( txt_, ' ' ) - aadd( txt_, ' $RETURNS$ ' ) - aadd( txt_, ' ' + 'An instance of the object of type ' + cWidget ) - aadd( txt_, ' $METHODS$ ' ) + aadd( txt_, "/* " ) + aadd( txt_, " * hbQTgen v1.0 - Harbour Callable Wrappers Generator for Qt v4.5+" ) + aadd( txt_, " * Please do not modify this document as it is subject to change in future." ) + aadd( txt_, " * Pritpal Bedi " ) + aadd( txt_, " */ " ) + aadd( txt_, " " ) + aadd( txt_, "/* $DOC$ " ) + aadd( txt_, " $TEMPLATE$ " ) + aadd( txt_, " Class" ) + aadd( txt_, " $NAME$ " ) + aadd( txt_, " " + cWidget + "()" ) + aadd( txt_, " $CATEGORY$ " ) + aadd( txt_, " " + "Harbour Bindings for Qt" ) + aadd( txt_, " $SUBCATEGORY$ " ) + aadd( txt_, " " + "GUI" ) + aadd( txt_, " $EXTERNALLINK$" ) + aadd( txt_, " " + QT_WEB + QT_VER + "/" + lower( cWidget ) + ".html" ) + aadd( txt_, " $ONELINER$ " ) + aadd( txt_, " " + "Creates a new " + cWidget + " object." ) + aadd( txt_, " $INHERITS$ " ) + aadd( txt_, " " + cInherits ) + aadd( txt_, " $SYNTAX$ " ) + aadd( txt_, " " + cWidget + "():new( ... )" ) + aadd( txt_, " " + cWidget + "():from( pPtr_OR_oObj_of_type_" + cWidget +" )" ) + aadd( txt_, " " + cWidget + "():configure( pPtr_OR_oObj_of_type_" + cWidget +" )" ) + aadd( txt_, " $ARGUMENTS$ " ) + aadd( txt_, " " ) + aadd( txt_, " $RETURNS$ " ) + aadd( txt_, " " + "An instance of the object of type " + cWidget ) + aadd( txt_, " $METHODS$ " ) nLen := len( cWidget ) n := at( cWidget, doc_[ 1 ] ) - pWidget := 'p' + cWidget + pWidget := "p" + cWidget FOR i := 1 TO len( doc_ ) cText := doc_[ i ] IF !empty( cText ) cText := substr( cText, n+nLen+1 ) - cText := strtran( cText, pWidget + ', ', '' ) - cText := strtran( cText, pWidget, '' ) - cText := strtran( cText, '( )', '()' ) - n1 := at( '->', cText ) + cText := strtran( cText, pWidget + ", ", "" ) + cText := strtran( cText, pWidget, "" ) + cText := strtran( cText, "( )", "()" ) + n1 := at( "->", cText ) cRet := alltrim( substr( cText, n1+2 ) ) cText := substr( cText, 1, n1-1 ) n2 := max( 50, len( cText ) ) cText := padR( cText, n2 ) IF !empty( cRet ) - aadd( txt_, ' :' + cText + ' -> ' + cRet ) + aadd( txt_, " :" + cText + " -> " + cRet ) ENDIF ENDIF NEXT - aadd( txt_, ' ' ) - aadd( txt_, ' $DESCRIPTION$ ' ) - aadd( txt_, ' ' ) - aadd( txt_, ' $EXAMPLES$ ' ) + aadd( txt_, " " ) + aadd( txt_, " $DESCRIPTION$ " ) + aadd( txt_, " " ) + aadd( txt_, " $EXAMPLES$ " ) FOR EACH cText IN docum_ IF !empty( cText ) - aadd( txt_, ' ' + cText ) + aadd( txt_, " " + cText ) ENDIF NEXT - aadd( txt_, ' ' ) - aadd( txt_, ' $TESTS$ ' ) - aadd( txt_, ' ' ) - aadd( txt_, ' $STATUS$ ' ) - aadd( txt_, ' ' + 'R' ) - aadd( txt_, ' $COMPLIANCE$ ' ) - aadd( txt_, ' ' + 'Not Clipper Compatible' ) - aadd( txt_, ' $PLATFORMS$ ' ) - aadd( txt_, ' ' + 'Windows, Linux, MacOS, OS2' ) - aadd( txt_, ' $VERSION$ ' ) - aadd( txt_, ' ' + '4.5 or upper' ) - aadd( txt_, ' $FILES$ ' ) - aadd( txt_, ' ' + 'Prg source : ' + 'contrib/hbqt' + iif( empty( cLib ), '', '/' + cLib ) + '/T' + cWidget + '.prg' ) - aadd( txt_, ' ' + 'C++ wrappers : ' + 'contrib/hbqt' + iif( empty( cLib ), '', '/' + cLib ) + '/' + cWidget + '.cpp' ) - aadd( txt_, ' ' + 'Library : ' + 'hb' + cLib ) - aadd( txt_, ' $SEEALSO$ ' ) - * aadd( txt_, ' ' + iif( empty( cInherits ), "", cInherits + ", " ) + QT_WEB + QT_VER + '/' + lower( cWidget ) + '.html' ) - aadd( txt_, ' ' + cInherits ) - aadd( txt_, ' $END$ ' ) - aadd( txt_, ' */ ' ) + aadd( txt_, " " ) + aadd( txt_, " $TESTS$ " ) + aadd( txt_, " " ) + aadd( txt_, " $STATUS$ " ) + aadd( txt_, " " + "R" ) + aadd( txt_, " $COMPLIANCE$ " ) + aadd( txt_, " " + "Not Clipper compatible" ) + aadd( txt_, " $PLATFORMS$ " ) + aadd( txt_, " " + "Windows, Linux, Mac OS X, OS/2" ) + aadd( txt_, " $VERSION$ " ) + aadd( txt_, " " + "4.5 or upper" ) + aadd( txt_, " $FILES$ " ) + aadd( txt_, " " + "Harbour source: " + "contrib/hbqt" + iif( Empty( cLib ), "", "/" + cLib ) + "/T" + cWidget + ".prg" ) + aadd( txt_, " " + "C++ wrappers : " + "contrib/hbqt" + iif( Empty( cLib ), "", "/" + cLib ) + "/" + cWidget + ".cpp" ) + aadd( txt_, " " + "Library : " + "hb" + cLib ) + aadd( txt_, " $SEEALSO$ " ) + * aadd( txt_, " " + iif( Empty( cInherits ), "", cInherits + ", " ) + QT_WEB + QT_VER + "/" + lower( cWidget ) + ".html" ) + aadd( txt_, " " + cInherits ) + aadd( txt_, " $END$ " ) + aadd( txt_, " */ " ) - cFile := cPathDoc + s_PathSep + 'en' + s_PathSep + 'class_' + lower( cWidget ) + ".txt" + cFile := cPathDoc + s_PathSep + "en" + s_PathSep + "class_" + lower( cWidget ) + ".txt" RETURN CreateTarget( cFile, txt_ ) @@ -1951,7 +1951,7 @@ STATIC FUNCTION Build_MakeFile( cpp_, prg_, cPathOut ) #define CRLF chr( 13 )+chr( 10 ) FUNCTION Build_HTML( cWidget, aHM_, aHF_, cPathOut, docum_ ) - LOCAL cFile := cPathOut + s_PathSep + 'html' + s_PathSep + cWidget + '.htm' + LOCAL cFile := cPathOut + s_PathSep + "html" + s_PathSep + cWidget + ".htm" LOCAL i, j, s, nCounter := 0, cPara LOCAL nCols, aHTML LOCAL setColorBG, setColorText, setColorTable @@ -1959,11 +1959,11 @@ FUNCTION Build_HTML( cWidget, aHM_, aHF_, cPathOut, docum_ ) HB_SYMBOL_UNUSED( aHM_ ) - setColorText := '#000000' - SetColorBG := '#FFFFFF' - SetColorTable := '#D0D0D0' - aColumns := { { 1,'Function', 'C', 100 },; - { 2,'Returns' , 'C', 20 } } + setColorText := "#000000" + SetColorBG := "#FFFFFF" + SetColorTable := "#D0D0D0" + aColumns := { { 1,"Function", "C", 100 },; + { 2,"Returns" , "C", 20 } } aHTML := {} nCols := len( aColumns ) @@ -1975,7 +1975,7 @@ FUNCTION Build_HTML( cWidget, aHM_, aHF_, cPathOut, docum_ ) aadd( aHtml, s ) Build_HtmlTable( @aHTML, , SetColorTable ) - aadd( aHtml, '' ) + aadd( aHtml, "" ) /* Class Documentation */ s := "" + "CLASS REFERENCE" + "" @@ -1989,7 +1989,7 @@ FUNCTION Build_HTML( cWidget, aHM_, aHF_, cPathOut, docum_ ) IF !empty( docum_ ) s := "" - cPara := 'pr' + hb_ntos( ++nCounter ) + cPara := "pr" + hb_ntos( ++nCounter ) s += '' s += '
'
@@ -2000,7 +2000,7 @@ FUNCTION Build_HTML( cWidget, aHM_, aHF_, cPathOut, docum_ )
       for i := 1 to len( docum_ )
          s += docum_[ i ] + CRLF
       next
-      s += '
' + s += "" aadd( aHtml, s + "" ) ENDIF @@ -2015,7 +2015,7 @@ FUNCTION Build_HTML( cWidget, aHM_, aHF_, cPathOut, docum_ ) else cCell := uColData endif - s += '' + cCell + s += "" + cCell next aadd( aHtml, s + "" ) @@ -2036,7 +2036,7 @@ FUNCTION Build_HTML( cWidget, aHM_, aHF_, cPathOut, docum_ ) else cCell := uColData endif - s += '' + cCell + s += "" + cCell next aadd( aHtml, s + "" ) @@ -2058,21 +2058,21 @@ FUNCTION Build_HtmlTable( aHTML, cTitle, SetColorTable ) LOCAL nCellPadding := 4 LOCAL nCols := 2 - aadd( aHtml, '
' ) + aadd( aHtml, "
" ) - s := '' + "BORDER=" + hb_ntos( nBorder ) + " " +; + "FRAME=ALL " +; + "CellPadding=" + hb_ntos( nCellPadding ) + " " +; + "CellSpacing=" + hb_ntos( nCellSpacing ) + " " +; + "COLS=" + hb_ntos( nCols ) + " " +; + "WIDTH=90% " +; + ">" aadd( aHtml, s ) if !Empty( cTitle ) - aadd( aHtml, '' ) + aadd( aHtml, "" ) endif Return NIL @@ -2081,40 +2081,40 @@ FUNCTION Build_HtmlTable( aHTML, cTitle, SetColorTable ) FUNCTION Build_HtmlHeader( aHTML ) - aadd( aHtml, ' ' ) + aadd( aHtml, " " ) aadd( aHtml, ' ' ) aadd( aHtml, ' ' ) aadd( aHtml, ' ' ) - aadd( aHtml, ' ' ) + aadd( aHtml, " " ) aadd( aHtml, ' ' ) - aadd( aHtml, ' ' ) - aadd( aHtml, ' ' ) + aadd( aHtml, " th " ) + aadd( aHtml, " { " ) + aadd( aHtml, " colspan : 1; " ) + aadd( aHtml, " text-align : center; " ) + aadd( aHtml, " vertical-align : baseline; " ) + aadd( aHtml, " horizontal-align : left; " ) + aadd( aHtml, " } " ) + aadd( aHtml, " td " ) + aadd( aHtml, " { " ) + aadd( aHtml, " vertical-align : top; " ) + aadd( aHtml, " horizontal-align : left; " ) + aadd( aHtml, " } " ) + aadd( aHtml, " td.only " ) + aadd( aHtml, " { " ) + aadd( aHtml, " cursor : hand; " ) + aadd( aHtml, " vertical-align : top; " ) + aadd( aHtml, " horizontal-align : left; " ) + aadd( aHtml, " } " ) + aadd( aHtml, " pre " ) + aadd( aHtml, " { " ) + aadd( aHtml, " font-family : Courier New; " ) + aadd( aHtml, " font-size : .7em; " ) + aadd( aHtml, " color : black; " ) + aadd( aHtml, " cursor : text; " ) + aadd( aHtml, " } " ) + aadd( aHtml, " " ) + aadd( aHtml, " " ) + aadd( aHtml, " " ) RETURN Nil @@ -2451,7 +2451,7 @@ FUNCTION IsMemObject( cWidget ) FUNCTION Get_Command_1( cWgt, cCmn ) - RETURN 'hb_retptrGC( hbqt_gcAllocate_' + cWgt + '( new ' + cWgt + '( *( ' + cCmn + ' ) ), true ) )' + RETURN "hb_retptrGC( hbqt_gcAllocate_" + cWgt + "( new " + cWgt + "( *( " + cCmn + " ) ), true ) )" /*----------------------------------------------------------------------*/ @@ -2462,12 +2462,12 @@ FUNCTION Get_Command( cWgt, cCmn, lNew ) IF ( lNewGCtoQT ) IF lNew - cRet := 'hb_retptrGC( hbqt_gcAllocate_' + cWgt + '( new ' + cWgt + '( ' + cCmn + ' ), true ) )' + cRet := "hb_retptrGC( hbqt_gcAllocate_" + cWgt + "( new " + cWgt + "( " + cCmn + " ), true ) )" ELSE - cRet := 'hb_retptrGC( hbqt_gcAllocate_' + cWgt + '( ' + cCmn + ', false ) )' + cRet := "hb_retptrGC( hbqt_gcAllocate_" + cWgt + "( " + cCmn + ", false ) )" ENDIF ELSE - cRet := 'hb_retptrGC( hbqt_ptrTOgcpointer( new ' + cWgt + '( ' + cCmn + ' ), hbqt_gcRelease_' + cWgt +' ) )' + cRet := "hb_retptrGC( hbqt_ptrTOgcpointer( new " + cWgt + "( " + cCmn + " ), hbqt_gcRelease_" + cWgt +" ) )" ENDIF RETURN cRet diff --git a/harbour/contrib/hbqt/gtqtc/filelist.hbm b/harbour/contrib/hbqt/gtqtc/filelist.hbm new file mode 100644 index 0000000000..42dd51fd9e --- /dev/null +++ b/harbour/contrib/hbqt/gtqtc/filelist.hbm @@ -0,0 +1,6 @@ +# +# $Id$ +# + +gtqtc.cpp +gtqtc.h diff --git a/harbour/contrib/hbqt/gtqtc/gtqtc.hbm b/harbour/contrib/hbqt/gtqtc/gtqtc.hbm deleted file mode 100644 index 06fd7d3870..0000000000 --- a/harbour/contrib/hbqt/gtqtc/gtqtc.hbm +++ /dev/null @@ -1,10 +0,0 @@ -# -# $Id$ -# - -../hbqt_common.hbm - --instfile=inc:hbgtqtc.ch - -gtqtc.cpp -gtqtc.h diff --git a/harbour/contrib/hbqt/gtqtc/gtqtc.hbp b/harbour/contrib/hbqt/gtqtc/gtqtc.hbp index 6c11b0d59b..864aaa79f6 100644 --- a/harbour/contrib/hbqt/gtqtc/gtqtc.hbp +++ b/harbour/contrib/hbqt/gtqtc/gtqtc.hbp @@ -2,7 +2,10 @@ # $Id$ # -gtqtc.hbm +../hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} +filelist.hbm + +-instfile=inc:hbgtqtc.ch + +gtqtcs.hbp diff --git a/harbour/contrib/hbqt/gtqtc/gtqtcs.hbp b/harbour/contrib/hbqt/gtqtc/gtqtcs.hbp index c9c98b23a4..e6066bcdb6 100644 --- a/harbour/contrib/hbqt/gtqtc/gtqtcs.hbp +++ b/harbour/contrib/hbqt/gtqtc/gtqtcs.hbp @@ -2,10 +2,9 @@ # $Id$ # -gtqtc.hbm +../hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} +filelist.hbm -stop{!HB_QT_BUILD_STATIC|!allwin} diff --git a/harbour/contrib/hbqt/hbqscintilla/hbqscintilla.hbp b/harbour/contrib/hbqt/hbqscintilla/hbqscintilla.hbp index 9853c8ad50..dbf1571709 100644 --- a/harbour/contrib/hbqt/hbqscintilla/hbqscintilla.hbp +++ b/harbour/contrib/hbqt/hbqscintilla/hbqscintilla.hbp @@ -4,9 +4,6 @@ ../hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - -incpath=${HB_WITH_QSCINTILLA}/qt hbqt_hbqsciscintilla.h diff --git a/harbour/contrib/hbqt/hbqt.hbp b/harbour/contrib/hbqt/hbqt.hbp index 42c3af07a0..8d35e8d187 100644 --- a/harbour/contrib/hbqt/hbqt.hbp +++ b/harbour/contrib/hbqt/hbqt.hbp @@ -2,7 +2,14 @@ # $Id$ # -hbqt.hbm +hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} +filelist.hbm + +-instfile=inc:hbqt.ch + +hbqts.hbp + +hbqtcore.hbp +hbqtgui.hbp +hbqtnetwork.hbp diff --git a/harbour/contrib/hbqt/hbqt_common.hbm b/harbour/contrib/hbqt/hbqt_common.hbm index 30ac8a7627..3c80c314df 100644 --- a/harbour/contrib/hbqt/hbqt_common.hbm +++ b/harbour/contrib/hbqt/hbqt_common.hbm @@ -7,6 +7,9 @@ -hblib -inc +-o${hb_targetname} +-workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_targetname} + -w3 -es2 -stop{dos|watcom|bcc|pocc|pocc64|poccarm|msvcia64} diff --git a/harbour/contrib/hbqt/hbqtcore.hbp b/harbour/contrib/hbqt/hbqtcore.hbp index 575d3d06e3..d9cd8c55d2 100644 --- a/harbour/contrib/hbqt/hbqtcore.hbp +++ b/harbour/contrib/hbqt/hbqtcore.hbp @@ -4,7 +4,6 @@ hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - qtcore/filelist.hbm + +hbqtcores.hbp diff --git a/harbour/contrib/hbqt/hbqtcores.hbp b/harbour/contrib/hbqt/hbqtcores.hbp index 7540e579f1..9886774e0b 100644 --- a/harbour/contrib/hbqt/hbqtcores.hbp +++ b/harbour/contrib/hbqt/hbqtcores.hbp @@ -4,9 +4,6 @@ hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - qtcore/filelist.hbm -stop{!HB_QT_BUILD_STATIC|!allwin} diff --git a/harbour/contrib/hbqt/hbqtgui.hbp b/harbour/contrib/hbqt/hbqtgui.hbp index f5618ef738..c3a4ee2777 100644 --- a/harbour/contrib/hbqt/hbqtgui.hbp +++ b/harbour/contrib/hbqt/hbqtgui.hbp @@ -4,7 +4,6 @@ hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - qtgui/filelist.hbm + +hbqtguis.hbp diff --git a/harbour/contrib/hbqt/hbqtguis.hbp b/harbour/contrib/hbqt/hbqtguis.hbp index 34d243dab4..29aa6286de 100644 --- a/harbour/contrib/hbqt/hbqtguis.hbp +++ b/harbour/contrib/hbqt/hbqtguis.hbp @@ -4,9 +4,6 @@ hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - qtgui/filelist.hbm -stop{!HB_QT_BUILD_STATIC|!allwin} diff --git a/harbour/contrib/hbqt/hbqtnetwork.hbp b/harbour/contrib/hbqt/hbqtnetwork.hbp index 3516ab7fa8..9222bc483c 100644 --- a/harbour/contrib/hbqt/hbqtnetwork.hbp +++ b/harbour/contrib/hbqt/hbqtnetwork.hbp @@ -4,7 +4,6 @@ hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - qtnetwork/filelist.hbm + +hbqtnetworks.hbp diff --git a/harbour/contrib/hbqt/hbqtnetworks.hbp b/harbour/contrib/hbqt/hbqtnetworks.hbp index bf9cdd6aa7..c7a427051f 100644 --- a/harbour/contrib/hbqt/hbqtnetworks.hbp +++ b/harbour/contrib/hbqt/hbqtnetworks.hbp @@ -4,9 +4,6 @@ hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - qtnetwork/filelist.hbm -stop{!HB_QT_BUILD_STATIC|!allwin} diff --git a/harbour/contrib/hbqt/hbqts.hbp b/harbour/contrib/hbqt/hbqts.hbp index 676b9c3702..c8cf6448dd 100644 --- a/harbour/contrib/hbqt/hbqts.hbp +++ b/harbour/contrib/hbqt/hbqts.hbp @@ -2,10 +2,9 @@ # $Id$ # -hbqt.hbm +hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} +filelist.hbm -stop{!HB_QT_BUILD_STATIC|!allwin} diff --git a/harbour/contrib/hbqt/qtdesigner/hbqtdesigner.hbp b/harbour/contrib/hbqt/qtdesigner/hbqtdesigner.hbp index d9af42621e..57be89f5ab 100644 --- a/harbour/contrib/hbqt/qtdesigner/hbqtdesigner.hbp +++ b/harbour/contrib/hbqt/qtdesigner/hbqtdesigner.hbp @@ -4,7 +4,6 @@ ../hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - filelist.hbm + +hbqtdesigners.hbp diff --git a/harbour/contrib/hbqt/qtdesigner/hbqtdesigners.hbp b/harbour/contrib/hbqt/qtdesigner/hbqtdesigners.hbp index b53a0aae75..e6066bcdb6 100644 --- a/harbour/contrib/hbqt/qtdesigner/hbqtdesigners.hbp +++ b/harbour/contrib/hbqt/qtdesigner/hbqtdesigners.hbp @@ -4,11 +4,8 @@ ../hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - filelist.hbm --stop{!HB_QT_STATIC|!allwin} +-stop{!HB_QT_BUILD_STATIC|!allwin} -cflag=-DQT_NODLL diff --git a/harbour/contrib/hbqt/qtwebkit/hbqtwebkit.hbp b/harbour/contrib/hbqt/qtwebkit/hbqtwebkit.hbp index d9af42621e..1d3ded9e56 100644 --- a/harbour/contrib/hbqt/qtwebkit/hbqtwebkit.hbp +++ b/harbour/contrib/hbqt/qtwebkit/hbqtwebkit.hbp @@ -4,7 +4,6 @@ ../hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - filelist.hbm + +hbqtwebkits.hbp diff --git a/harbour/contrib/hbqt/qtwebkit/hbqtwebkits.hbp b/harbour/contrib/hbqt/qtwebkit/hbqtwebkits.hbp index b53a0aae75..e6066bcdb6 100644 --- a/harbour/contrib/hbqt/qtwebkit/hbqtwebkits.hbp +++ b/harbour/contrib/hbqt/qtwebkit/hbqtwebkits.hbp @@ -4,11 +4,8 @@ ../hbqt_common.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - filelist.hbm --stop{!HB_QT_STATIC|!allwin} +-stop{!HB_QT_BUILD_STATIC|!allwin} -cflag=-DQT_NODLL diff --git a/harbour/contrib/hbssl/hbssl.hbm b/harbour/contrib/hbssl/hbssl.hbm index f6205034cc..3ca458ed55 100644 --- a/harbour/contrib/hbssl/hbssl.hbm +++ b/harbour/contrib/hbssl/hbssl.hbm @@ -7,6 +7,9 @@ -hblib -inc +-o${hb_targetname} +-workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_targetname} + -w3 -es2 -depkeyhead=openssl:openssl/ssl.h diff --git a/harbour/contrib/hbssl/hbssl.hbp b/harbour/contrib/hbssl/hbssl.hbp index c601e9b83f..6867719d09 100644 --- a/harbour/contrib/hbssl/hbssl.hbp +++ b/harbour/contrib/hbssl/hbssl.hbp @@ -4,9 +4,6 @@ hbssl.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - -depimplibs=openssl:../out32dll/libeay32.dll -depimplibs=openssl:../out32dll/ssleay32.dll -depimplibs=openssl:../dll/libeay32.dll @@ -15,3 +12,5 @@ hbssl.hbm -depimplibs=openssl:../ssleay32.dll -iflag={bcc}-a + +hbssls.hbp diff --git a/harbour/contrib/hbssl/hbssls.hbp b/harbour/contrib/hbssl/hbssls.hbp index 6e5d681613..0e3102c3e2 100644 --- a/harbour/contrib/hbssl/hbssls.hbp +++ b/harbour/contrib/hbssl/hbssls.hbp @@ -4,9 +4,6 @@ hbssl.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - -stop{!(win|wce)} {win|wce}-cflag=-DHB_OPENSSL_STATIC diff --git a/harbour/contrib/hbtip/hbtip.hbm b/harbour/contrib/hbtip/hbtip.hbm index 0d0a16e9b7..2817d39cdf 100644 --- a/harbour/contrib/hbtip/hbtip.hbm +++ b/harbour/contrib/hbtip/hbtip.hbm @@ -5,6 +5,9 @@ -hblib -inc +-o${hb_targetname} +-workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_targetname} + -w3 -es2 -instfile=inc:tip.ch diff --git a/harbour/contrib/hbtip/hbtip.hbp b/harbour/contrib/hbtip/hbtip.hbp index c06e79dfb6..e819d738dd 100644 --- a/harbour/contrib/hbtip/hbtip.hbp +++ b/harbour/contrib/hbtip/hbtip.hbp @@ -4,5 +4,4 @@ hbtip.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} +hbtipssl.hbp diff --git a/harbour/contrib/hbtip/hbtipssl.hbp b/harbour/contrib/hbtip/hbtipssl.hbp index 49a4a9f733..23762e0a3b 100644 --- a/harbour/contrib/hbtip/hbtipssl.hbp +++ b/harbour/contrib/hbtip/hbtipssl.hbp @@ -4,9 +4,6 @@ hbtip.hbm --o${hb_name} --workdir=${hb_work}/${hb_plat}/${hb_comp}/${hb_name} - ../hbssl/hbssl.hbc -DHB_HAS_OPENSSL diff --git a/harbour/contrib/make.hbs b/harbour/contrib/make.hbs index 36d3ce4087..8003c6a089 100755 --- a/harbour/contrib/make.hbs +++ b/harbour/contrib/make.hbs @@ -5,7 +5,7 @@ /* * Harbour Project source code: - * Contrib build orchestrator script + * Package build orchestrator script * * Copyright 2010 Viktor Szakats (harbour.01 syenar.hu) * www - http://harbour-project.org @@ -42,8 +42,6 @@ with postinst.hbs logic) 7. Move some logic to hbmk2. 8. Honor paths found in --hbinfo hbctree{{}} section. - 9. pkglist should not contain information about package layout. - This should rather be somehow embedded into .hbp files. */ #pragma warninglevel=3 @@ -86,10 +84,13 @@ PROCEDURE Main( ... ) /* Load list of packages */ - s_hPackageList := LoadPkgList( s_cHome + "pkglist" ) + s_hPackageList := { => } + hb_HKeepOrder( s_hPackageList, .T. ) + + LoadPkgListFromFile( s_hPackageList, s_cHome + "pkglist" ) + LoadPkgListFromString( s_hPackageList, GetEnv( "HB_BUILD_ADDONS" ) ) /* Build */ - IF Empty( GetEnv( "HB_HOST_BIN_DIR" ) ) Standalone( ... ) ELSE @@ -110,20 +111,19 @@ PROCEDURE Main( ... ) PROCEDURE Standalone( ... ) LOCAL aParams - LOCAL aFileList - LOCAL aFile - LOCAL aSortedList + LOCAL cPWD LOCAL cBinDir - LOCAL hProject - LOCAL cDir + LOCAL cPackage + LOCAL cMyPackage LOCAL cOptions LOCAL cOptionsUser LOCAL nAction LOCAL tmp + LOCAL tmp1 LOCAL lCustom @@ -164,6 +164,23 @@ PROCEDURE Standalone( ... ) ENDIF NEXT + IF ! lCustom + cPWD := hb_pwd() + /* Find out which package are we */ + FOR EACH tmp IN s_hPackageList + tmp1 := hb_ps() + PathSepToSelf( tmp:__enumKey() ) + hb_ps() + IF tmp1 == Right( cPWD, Len( tmp1 ) ) + cMyPackage := StrTran( tmp:__enumKey(), "\", "/" ) + EXIT + ENDIF + NEXT + IF Empty( cMyPackage ) + lCustom := .T. + ELSE + OutStd( hb_StrFormat( "! Package '%1$s' %2$s...", cMyPackage, hActions[ nAction ] ) + hb_eol() ) + ENDIF + ENDIF + cBinDir := s_cRoot + "bin" + hb_ps() IF lCustom @@ -182,37 +199,20 @@ PROCEDURE Standalone( ... ) ENDIF ENDIF - aFileList := Directory( "*.hbp" ) - IF ! Empty( aFileList ) + /* Query project information and dependencies and calculate build order */ + aPairList := {} - /* Add the project in current dir */ - s_hPackageList[ "." ] := {} - FOR EACH aFile IN aFileList - AAdd( s_hPackageList[ "." ], { "cFileName" => aFile[ F_NAME ] } ) - NEXT + call_hbmk2_hbinfo( cBinDir, s_cBase + s_hPackageList[ cMyPackage ][ "cFileName" ], s_hPackageList[ cMyPackage ] ) + DeptLinesToDeptPairList( aPairList, cMyPackage, s_hPackageList[ cMyPackage ][ "aDept" ] ) - /* Query project information and dependencies and calculate build order */ - aPairList := {} + aSortedList := TopoSort( aPairList ) - FOR EACH hProject IN s_hPackageList[ "." ] - call_hbmk2_hbinfo( cBinDir, s_cBase + hProject[ "cFileName" ], hProject ) - DeptLinesToDeptPairList( aPairList, ".", hProject[ "aDept" ] ) - NEXT - - aSortedList := TopoSort( aPairList ) - - /* Build the dependencies and ourselves in in sorted order */ - FOR EACH cDir IN aSortedList DESCEND - FOR EACH hProject IN s_hPackageList[ cDir ] - IF cDir == "." .AND. hProject[ "cType" ] $ "hbhrb|hbppo" - LOOP - ENDIF - call_hbmk2( cBinDir,; - s_cBase + iif( cDir == ".", "", s_cHome + cDir + "/" ) + hProject[ "cFileName" ],; - iif( cDir == ".", cOptions + cOptionsUser, "" ), "" ) - NEXT - NEXT - ENDIF + /* Build the dependencies and ourselves in in sorted order */ + FOR EACH cPackage IN aSortedList DESCEND + call_hbmk2( cBinDir,; + s_cBase + iif( cPackage == cMyPackage, "", s_cHome + cPackage + "/" ) + s_hPackageList[ cPackage ][ "cFileName" ],; + iif( cPackage == cMyPackage, cOptions + cOptionsUser, " -inc" ), "" ) + NEXT ENDIF ErrorLevel( 0 ) @@ -234,9 +234,8 @@ PROCEDURE Standalone( ... ) PROCEDURE GNUMake( ... ) LOCAL cBinDir LOCAL hProject - LOCAL aProject LOCAL cProject - LOCAL cDir + LOCAL cPackage LOCAL cOptions @@ -248,11 +247,7 @@ PROCEDURE GNUMake( ... ) LOCAL aGNUMakeParams LOCAL nAction - LOCAL cName - LOCAL cItem - LOCAL aPairList - LOCAL lAnyAddons LOCAL aSortedList @@ -280,17 +275,6 @@ PROCEDURE GNUMake( ... ) RETURN ENDIF - /* Load list of addons. Convert it to our internal format */ - - lAnyAddons := .F. - FOR EACH cItem IN hb_ATokens( GetEnv( "HB_BUILD_ADDONS" ),, .T. ) - IF ! Empty( cItem ) - hb_FNameSplit( PathSepToSelf( cItem ), @cDir, @cName ) - s_hPackageList[ StrTran( DirDelPathSep( cDir ), "\", "/" ) ] := { "cFileName" => StrTran( cName, "\", "/" ) } - lAnyAddons := .T. - ENDIF - NEXT - /* Determine the mode of operation */ aParams := hb_AParams() @@ -351,15 +335,13 @@ PROCEDURE GNUMake( ... ) cBinDir := GetEnv( "HB_HOST_BIN_DIR" ) + hb_ps() - OutStd( "! Calculating sorting order for contrib packages..." + hb_eol() ) + OutStd( "! Calculating build order for packages..." + hb_eol() ) aPairList := {} - FOR EACH aProject IN s_hPackageList - FOR EACH hProject IN aProject - call_hbmk2_hbinfo( cBinDir, s_cBase + aProject:__enumKey() + "/" + hProject[ "cFileName" ], hProject ) - DeptLinesToDeptPairList( aPairList, aProject:__enumKey(), hProject[ "aDept" ] ) - NEXT + FOR EACH hProject IN s_hPackageList + call_hbmk2_hbinfo( cBinDir, s_cBase + hProject:__enumKey() + "/" + hProject[ "cFileName" ], hProject ) + DeptLinesToDeptPairList( aPairList, hProject:__enumKey(), hProject[ "aDept" ] ) NEXT aSortedList := TopoSort( aPairList ) @@ -385,50 +367,39 @@ PROCEDURE GNUMake( ... ) /* Start building */ - OutStd( hb_StrFormat( "! Contribs %1$s...", hActions[ nAction ] ) + hb_eol() ) + OutStd( hb_StrFormat( "! Package %1$s...", hActions[ nAction ] ) + hb_eol() ) - FOR EACH cDir IN aSortedList DESCEND + FOR EACH cPackage IN aSortedList DESCEND IF Empty( aFilter ) .OR. ; iif( lFilterNegative,; - AScan( aFilter, {| tmp | tmp == cDir } ) == 0,; - AScan( aFilter, {| tmp | tmp == cDir } ) > 0 ) + AScan( aFilter, {| tmp | tmp == cPackage } ) == 0,; + AScan( aFilter, {| tmp | tmp == cPackage } ) > 0 ) - FOR EACH hProject IN s_hPackageList[ cDir ] + cProject := s_cBase + cPackage + "/" + s_hPackageList[ cPackage ][ "cFileName" ] - IF hProject[ "cType" ] $ "hbhrb|hbppo" - LOOP - ENDIF + call_hbmk2( cBinDir, cProject, cOptions, "" ) - cProject := s_cBase + cDir + "/" + hProject[ "cFileName" ] + /* Highly experimental */ + IF s_hPackageList[ cPackage ][ "cType" ] == "hblib" .AND. ; + GetEnv( "HB_BUILD_CONTRIB_DLL" ) == "yes" .AND. ; + hb_FileExists( PathSepToSelf( FNameExtSet( cProject, ".hbc" ) ) ) - call_hbmk2( cBinDir, cProject, cOptions, "" ) - - /* Highly experimental */ - IF hProject[ "cType" ] == "hblib" .AND. ; - GetEnv( "HB_BUILD_CONTRIB_DLL" ) == "yes" .AND. ; - hb_FileExists( PathSepToSelf( FNameExtSet( cProject, ".hbc" ) ) ) - - call_hbmk2( cBinDir, cProject, cOptions, " -hbdyn -nohblib- -implib " + FNameExtSet( cProject, ".hbc" ) ) - ENDIF - NEXT + call_hbmk2( cBinDir, cProject, cOptions, " -hbdyn -nohblib- -implib " + FNameExtSet( cProject, ".hbc" ) ) + ENDIF /* Compile documentation */ IF nAction == _ACT_INC_INST .OR. ; nAction == _ACT_INC_REBUILD_INST - mk_hbd( PathSepToSelf( cDir ) ) + mk_hbd( PathSepToSelf( cPackage ) ) ENDIF ELSE - /* OutStd( hb_StrFormat( "! package '%1$s' skipped due to custom filter", cDir ) + hb_eol() ) */ + /* OutStd( hb_StrFormat( "! package '%1$s' skipped due to custom filter", cPackage ) + hb_eol() ) */ ENDIF NEXT OutStd( hb_eol() ) - IF lAnyAddons - OutStd( "! Building of contrib and addon packages finished." + hb_eol() ) - ELSE - OutStd( "! Building of contrib packages finished." + hb_eol() ) - ENDIF + OutStd( "! Building of packages finished." + hb_eol() ) ErrorLevel( 0 ) @@ -453,16 +424,14 @@ STATIC FUNCTION call_hbmk2_hbinfo( cBinDir, cProject, hProject ) hProject[ "cType" ] := "" hProject[ "aDept" ] := {} - hProject[ "lInc" ] := .F. clear_hbmk2_envvars() IF hb_processRun( PathSepToSelf( cBinDir ) + "hbmk2 --hbinfo " + StrTran( cProject, "\", "/" ),, @cStdOut ) == 0 hProject[ "cType" ] := hbmk2_hbinfo_getitem( cStdOut, "targettype" ) - hProject[ "lInc" ] := ( hbmk2_hbinfo_getitem( cStdOut, "inc" ) == "yes" ) - FOR EACH tmp IN hb_ATokens( hbmk2_hbinfo_getitem( cStdOut, "hbctree" ), Chr( 10 ) ) + FOR EACH tmp IN hb_ATokens( hbmk2_hbinfo_getitem( cStdOut, "hbctree", .T. ), Chr( 10 ) ) IF ! Empty( tmp ) hb_FNameSplit( LTrim( tmp ), @cDir, @cName ) AAdd( hProject[ "aDept" ], { "nDepth" => Len( tmp ) - Len( LTrim( tmp ) ),; @@ -476,17 +445,25 @@ STATIC FUNCTION call_hbmk2_hbinfo( cBinDir, cProject, hProject ) RETURN .F. -STATIC FUNCTION hbmk2_hbinfo_getitem( cString, cItem ) - LOCAL nPos +STATIC FUNCTION hbmk2_hbinfo_getitem( cString, cItem, lAll ) + LOCAL cRetVal := "" + LOCAL nPos := 1 + LOCAL tmp - IF ( nPos := At( cItem + "{{", cString ) ) > 0 - cString := SubStr( cString, nPos + Len( cItem + "{{" ) ) - IF ( nPos := At( "}}", cString ) ) > 0 - RETURN StrTran( Left( cString, nPos - 1 ), Chr( 13 ) ) + DO WHILE ( tmp := hb_At( cItem + "{{", cString, nPos ) ) > 0 + nPos := tmp + Len( cItem + "{{" ) + IF ( tmp := hb_At( "}}", cString, nPos ) ) > 0 + tmp := StrTran( SubStr( cString, nPos, tmp - nPos ), Chr( 13 ) ) + IF lAll != NIL .AND. lAll + cRetVal += tmp + ELSE + /* Find the last occurrence, which is the root project */ + cRetVal := tmp + ENDIF ENDIF - ENDIF + ENDDO - RETURN "" + RETURN cRetVal STATIC FUNCTION call_hbmk2( cBinDir, cProject, cOptionsPre, cOptionsPost ) LOCAL nErrorLevel @@ -588,6 +565,14 @@ STATIC FUNCTION DirGetName( cDir ) RETURN cName +STATIC FUNCTION DirAddPathSep( cDir ) + + IF ! Empty( cDir ) .AND. !( Right( cDir, 1 ) == hb_ps() ) + cDir += hb_ps() + ENDIF + + RETURN cDir + STATIC FUNCTION DirDelPathSep( cDir ) IF Empty( hb_osDriveSeparator() ) @@ -604,13 +589,10 @@ STATIC FUNCTION DirDelPathSep( cDir ) RETURN cDir STATIC FUNCTION PathSepToSelf( cFileName ) -#if defined( __PLATFORM__WINDOWS ) .OR. ; - defined( __PLATFORM__DOS ) .OR. ; - defined( __PLATFORM__OS2 ) - RETURN StrTran( cFileName, "/", "\" ) -#else - RETURN StrTran( cFileName, "\", "/" ) -#endif + RETURN StrTran( cFileName, iif( hb_ps() == "\", "/", "\" ), hb_ps() ) + +STATIC FUNCTION hb_pwd() + RETURN DirAddPathSep( hb_CurDrive() + hb_osDriveSeparator() + hb_ps() + CurDir() ) /* Convert indented list of line to tree / list of parent-child pairs */ STATIC PROCEDURE DeptLinesToDeptPairList( aPairList, cParent, aFlatTree ) @@ -693,35 +675,41 @@ STATIC FUNCTION TopoSort( aEdgeList ) RETURN aList -FUNCTION LoadPkgList( cFileName ) +PROCEDURE AddPkg( hPackageList, cFileName ) + LOCAL cDir + LOCAL cName + LOCAL cExt - LOCAL cFile := MemoRead( cFileName ) - LOCAL cLine - LOCAL aItem - LOCAL xItem + IF ! Empty( cFileName ) - LOCAL cPackageName - LOCAL hPackageList := { => } - - hb_HKeepOrder( hPackageList, .T. ) - - cFile := StrTran( cFile, Chr( 13 ) ) - - FOR EACH cLine IN hb_ATokens( cFile, Chr( 10 ) ) - IF "#" $ cLine - cLine := Left( cLine, At( "#", cLine ) - 1 ) + hb_FNameSplit( PathSepToSelf( AllTrim( cFileName ) ), @cDir, @cName, @cExt ) + IF Empty( cExt ) + cExt := ".hbp" ENDIF - IF ! Empty( cLine ) - aItem := hb_ATokens( AllTrim( cLine ) ) - IF Len( aItem ) >= 2 - cPackageName := aItem[ 1 ] - hb_ADel( aItem, 1, .T. ) - FOR EACH xItem IN aItem - xItem := { "cFileName" => FNameExtDef( StrTran( xItem, "\", "/" ), ".hbp" ) } - NEXT - hPackageList[ cPackageName ] := AClone( aItem ) - ENDIF + + hPackageList[ StrTran( DirDelPathSep( cDir ), "\", "/" ) ] := { "cFileName" => hb_FNameMerge(, cName, cExt ) } + ENDIF + + RETURN + +PROCEDURE LoadPkgListFromFile( hPackageList, cFileName ) + LOCAL cFile := StrTran( MemoRead( cFileName ), Chr( 13 ) ) + LOCAL cItem + + FOR EACH cItem IN hb_ATokens( cFile, Chr( 10 ) ) + IF "#" $ cItem + cItem := Left( cItem, At( "#", cItem ) - 1 ) ENDIF + AddPkg( hPackageList, cItem ) NEXT - RETURN hPackageList + RETURN + +PROCEDURE LoadPkgListFromString( hPackageList, cString ) + LOCAL cItem + + FOR EACH cItem IN hb_ATokens( cString,, .T. ) + AddPkg( hPackageList, cItem ) + NEXT + + RETURN diff --git a/harbour/contrib/pkglist b/harbour/contrib/pkglist index fe5ca84727..30fac7a515 100644 --- a/harbour/contrib/pkglist +++ b/harbour/contrib/pkglist @@ -2,52 +2,51 @@ # $Id$ # -gtalleg gtalleg.hbp gtallegs.hbp -gtwvg gtwvg.hbp -hbblat hbblat.hbp -hbblink hbblink.hbp -hbbz2 hbbz2.hbp # uses: bz2 (external) -hbcairo hbcairo.hbp -hbclipsm hbclipsm.hbp -hbcomm hbcomm.hbp -hbct hbct.hbp -hbcups hbcups.hbp -hbcurl hbcurl.hbp hbcurls.hbp -hbdoc2 hbdoc2.hbp -hbfbird hbfbird.hbp -hbfimage hbfimage.hbp -hbfoxpro hbfoxpro.hbp -hbfship hbfship.hbp -hbgd hbgd.hbp -hbgt hbgt.hbp -hbhpdf hbhpdf.hbp -hbide hbide.hbp -hbmemio hbmemio.hbp -hbmisc hbmisc.hbp -hbmysql hbmysql.hbp -hbmzip hbmzip.hbp # uses: minizip (external) -hbnetio hbnetio.hbp -hbnetio/utils hbnetio.hbp -hbnf hbnf.hbp -hbodbc hbodbc.hbp -hbpgsql hbpgsql.hbp -hbqt hbqt.hbp hbqts.hbp hbqtcore.hbp hbqtcores.hbp hbqtgui.hbp hbqtguis.hbp hbqtnetwork.hbp hbqtnetworks.hbp -hbsms hbsms.hbp -hbsqlit3 hbsqlit3.hbp # uses: sqlite3 (external) -hbssl hbssl.hbp hbssls.hbp -hbtip hbtip.hbp hbtipssl.hbp -hbtpathy hbtpathy.hbp -hbwin hbwin.hbp -hbxbp hbxbp.hbp -hbxpp hbxpp.hbp -hbziparc hbziparc.hbp -rddads rddads.hbp -rddbmcdx rddbmcdx.hbp -rddsql rddsql.hbp -sddfb sddfb.hbp -sddmy sddmy.hbp -sddoci sddoci.hbp -sddodbc sddodbc.hbp -sddpg sddpg.hbp -sddsqlt3 sddsqlt3.hbp # uses: sqlite3 (external) -xhb xhb.hbp +gtalleg/gtalleg.hbp +gtwvg/gtwvg.hbp +hbblat/hbblat.hbp +hbblink/hbblink.hbp +hbbz2/hbbz2.hbp # uses: bz2 (external) +hbcairo/hbcairo.hbp +hbclipsm/hbclipsm.hbp +hbcomm/hbcomm.hbp +hbct/hbct.hbp +hbcups/hbcups.hbp +hbcurl/hbcurl.hbp +hbfbird/hbfbird.hbp +hbfimage/hbfimage.hbp +hbfoxpro/hbfoxpro.hbp +hbfship/hbfship.hbp +hbgd/hbgd.hbp +hbgt/hbgt.hbp +hbhpdf/hbhpdf.hbp +hbide/hbide.hbp +hbmemio/hbmemio.hbp +hbmisc/hbmisc.hbp +hbmysql/hbmysql.hbp +hbmzip/hbmzip.hbp # uses: minizip (external) +hbnetio/hbnetio.hbp +hbnetio/utils/hbnetio.hbp +hbnf/hbnf.hbp +hbodbc/hbodbc.hbp +hbpgsql/hbpgsql.hbp +hbqt/hbqt.hbp +hbsms/hbsms.hbp +hbsqlit3/hbsqlit3.hbp # uses: sqlite3 (external) +hbssl/hbssl.hbp +hbtip/hbtip.hbp +hbtpathy/hbtpathy.hbp +hbwin/hbwin.hbp +hbxbp/hbxbp.hbp +hbxpp/hbxpp.hbp +hbziparc/hbziparc.hbp +rddads/rddads.hbp +rddbmcdx/rddbmcdx.hbp +rddsql/rddsql.hbp +sddfb/sddfb.hbp +sddmy/sddmy.hbp +sddoci/sddoci.hbp +sddodbc/sddodbc.hbp +sddpg/sddpg.hbp +sddsqlt3/sddsqlt3.hbp # uses: sqlite3 (external) +xhb/xhb.hbp diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 829c01f825..b417eb1c68 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -223,6 +223,8 @@ REQUEST hbmk_KEYW #define _HBMK_IMPLIB_EXE_POST "_exe" #define _HBMK_IMPLIB_DLL_POST "_dll" +#define _HBMK_TARGENAME_ADHOC ".adhoc." + #define _HBMK_NEST_MAX 10 #define _HBMK_HEAD_NEST_MAX 10 @@ -403,7 +405,12 @@ REQUEST hbmk_KEYW #define _HBMK_nCOMPVer 118 #define _HBMK_lDEPIMPLIB 119 /* Generate import libs configured in dependecy specification */ -#define _HBMK_MAX_ 119 +#define _HBMK_aArgs 120 +#define _HBMK_nArgTarget 121 +#define _HBMK_lPause 122 +#define _HBMK_nLevel 123 + +#define _HBMK_MAX_ 123 #define _HBMK_DEP_CTRL_MARKER ".control." /* must be an invalid path */ @@ -436,10 +443,8 @@ REQUEST HB_REGEX STATIC s_cSecToken := NIL PROCEDURE Main( ... ) - LOCAL aArgsIn := hb_AParams() - LOCAL aArgsProc := {} + LOCAL aArgsProc LOCAL nResult - LOCAL cName LOCAL tmp, tmp1 LOCAL lPause := hb_gtInfo( HB_GTI_ISGRAPHIC ) @@ -447,6 +452,7 @@ PROCEDURE Main( ... ) LOCAL aArgsTarget LOCAL nTarget LOCAL nTargetTODO + LOCAL nTargetPos LOCAL lHadTarget LOCAL lOldExact := Set( _SET_EXACT, .F. ) @@ -454,48 +460,12 @@ PROCEDURE Main( ... ) hb_FSetDevMode( hb_gtInfo( HB_GTI_OUTPUTFD ), FD_TEXT ) hb_FSetDevMode( hb_gtInfo( HB_GTI_ERRORFD ), FD_TEXT ) - /* Emulate -hbcmp, -hbcc, -hblnk switches when certain - self names are detected. - For compatibility with hbmk script aliases. */ - - IF ! Empty( aArgsIn ) - - hb_FNameSplit( hb_argv( 0 ),, @cName ) - - tmp := Lower( cName ) - - IF Left( tmp, 1 ) == "x" - tmp := SubStr( tmp, 2 ) - AAdd( aArgsProc, "-xhb" ) - ELSEIF Right( tmp, 2 ) == "10" - AAdd( aArgsProc, "-hb10" ) - ENDIF - - DO CASE - CASE Right( tmp, 5 ) == "hbcmp" .OR. ; - Left( tmp, 5 ) == "hbcmp" .OR. ; - tmp == "clipper" ; AAdd( aArgsProc, "-hbcmp" ) - CASE Right( tmp, 4 ) == "hbcc" .OR. ; - Left( tmp, 4 ) == "hbcc" ; AAdd( aArgsProc, "-hbcc" ) - CASE Right( tmp, 5 ) == "hblnk" .OR. ; - Left( tmp, 5 ) == "hblnk" ; AAdd( aArgsProc, "-hblnk" ) - CASE tmp == "rtlink" .OR. ; - tmp == "exospace" .OR. ; - tmp == "blinker" ; AAdd( aArgsProc, "-rtlink" ) - CASE Right( tmp, 5 ) == "hbexe" .OR. ; - Left( tmp, 5 ) == "hbexe" ; AAdd( aArgsProc, "-hbexe" ) - CASE Right( tmp, 5 ) == "hblib" .OR. ; - Left( tmp, 5 ) == "hblib" ; AAdd( aArgsProc, "-hblib" ) - CASE Right( tmp, 5 ) == "hbdyn" .OR. ; - Left( tmp, 5 ) == "hbdyn" ; AAdd( aArgsProc, "-hbdyn" ) - ENDCASE - ENDIF - /* Expand wildcard project specs */ - FOR EACH tmp IN aArgsIn + aArgsProc := {} + FOR EACH tmp IN hb_AParams() DO CASE - CASE !( Left( tmp, 1 ) == "-" ) .AND. ( Lower( FNameExtGet( tmp ) ) == ".hbp" .OR. Lower( FNameExtGet( tmp ) ) == ".hbi" ) + CASE !( Left( tmp, 1 ) $ "-@" ) .AND. Lower( FNameExtGet( tmp ) ) == ".hbp" FOR EACH tmp1 IN FN_Expand( tmp, .T. ) AAdd( aArgsProc, tmp1 ) NEXT @@ -508,6 +478,43 @@ PROCEDURE Main( ... ) ENDCASE NEXT + /* Emulate -hbcmp, -hbcc, -hblnk switches when certain + self names are detected. + For compatibility with hbmk script aliases. */ + + IF ! Empty( aArgsProc ) + + hb_FNameSplit( hb_argv( 0 ),, @tmp ) + + tmp := Lower( tmp ) + + IF Left( tmp, 1 ) == "x" + tmp := SubStr( tmp, 2 ) + hb_AIns( aArgsProc, 1, "-xhb", .T. ) + ELSEIF Right( tmp, 2 ) == "10" + hb_AIns( aArgsProc, 1, "-hb10", .T. ) + ENDIF + + DO CASE + CASE Right( tmp, 5 ) == "hbcmp" .OR. ; + Left( tmp, 5 ) == "hbcmp" .OR. ; + tmp == "clipper" ; hb_AIns( aArgsProc, 1, "-hbcmp", .T. ) + CASE Right( tmp, 4 ) == "hbcc" .OR. ; + Left( tmp, 4 ) == "hbcc" ; hb_AIns( aArgsProc, 1, "-hbcc", .T. ) + CASE Right( tmp, 5 ) == "hblnk" .OR. ; + Left( tmp, 5 ) == "hblnk" ; hb_AIns( aArgsProc, 1, "-hblnk", .T. ) + CASE tmp == "rtlink" .OR. ; + tmp == "exospace" .OR. ; + tmp == "blinker" ; hb_AIns( aArgsProc, 1, "-rtlink", .T. ) + CASE Right( tmp, 5 ) == "hbexe" .OR. ; + Left( tmp, 5 ) == "hbexe" ; AAdd( aArgsProc, "-hbexe" ) + CASE Right( tmp, 5 ) == "hblib" .OR. ; + Left( tmp, 5 ) == "hblib" ; AAdd( aArgsProc, "-hblib" ) + CASE Right( tmp, 5 ) == "hbdyn" .OR. ; + Left( tmp, 5 ) == "hbdyn" ; AAdd( aArgsProc, "-hbdyn" ) + ENDCASE + ENDIF + /* Handle multitarget command lines */ nTargetTODO := 1 @@ -515,25 +522,25 @@ PROCEDURE Main( ... ) aArgsTarget := {} nTarget := 0 + nTargetPos := 0 lHadTarget := .F. FOR EACH tmp IN aArgsProc DO CASE - CASE !( Left( tmp, 1 ) == "-" ) .AND. ( Lower( FNameExtGet( tmp ) ) == ".hbp" .OR. Lower( FNameExtGet( tmp ) ) == ".hbi" ) .AND. ! lHadTarget + CASE !( Left( tmp, 1 ) $ "-@" ) .AND. ; + Lower( FNameExtGet( tmp ) ) == ".hbp" .AND. ; + ! lHadTarget ++nTarget IF nTarget == nTargetTODO AAdd( aArgsTarget, tmp ) + nTargetPos := Len( aArgsTarget ) ENDIF CASE Lower( Left( tmp, Len( "-target=" ) ) ) == "-target=" ++nTarget IF nTarget == nTargetTODO AAdd( aArgsTarget, SubStr( tmp, Len( "-target=" ) + 1 ) ) + nTargetPos := Len( aArgsTarget ) ENDIF - CASE Lower( tmp ) == "-target" - ++nTarget - lHadTarget := .T. - CASE Lower( tmp ) == "-alltarget" - lHadTarget := .F. OTHERWISE IF ! lHadTarget .OR. nTarget == nTargetTODO AAdd( aArgsTarget, tmp ) @@ -547,7 +554,7 @@ PROCEDURE Main( ... ) ENDIF /* Build one target */ - nResult := hbmk2( aArgsTarget, @lPause ) + nResult := hbmk2( aArgsTarget, nTargetPos, @lPause, 1 ) /* Exit on first failure */ IF nResult != 0 @@ -634,7 +641,7 @@ STATIC PROCEDURE hbmk_COMP_Setup( cARCH, cCOMP, cBasePath ) RETURN -FUNCTION hbmk2( aArgs, /* @ */ lPause ) +FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel ) LOCAL hbmk[ _HBMK_MAX_ ] @@ -893,6 +900,11 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) hbmk[ _HBMK_hDEPTSDIR ] := { => } + hbmk[ _HBMK_aArgs ] := aArgs + hbmk[ _HBMK_nArgTarget ] := nArgTarget + hbmk[ _HBMK_lPause ] := lPause + hbmk[ _HBMK_nLevel ] := nLevel + GetUILangCDP( @hbmk[ _HBMK_cUILNG ], @hbmk[ _HBMK_cUICDP ] ) SetUILang( hbmk ) @@ -1023,6 +1035,17 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) ENDCASE NEXT + IF nLevel > _HBMK_NEST_MAX + hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Cannot nest projects deeper than %1$s levels" ), hb_ntos( _HBMK_NEST_MAX ) ) ) + RETURN 30 + ENDIF + + IF nLevel > 1 + IF ! hbmk[ _HBMK_lQuiet ] + hbmk_OutStd( hbmk, hb_StrFormat( I_( "Building sub-project: %1$s (level %2$s)" ), hbmk[ _HBMK_aArgs ][ hbmk[ _HBMK_nArgTarget ] ], hb_ntos( nLevel ) ) ) + ENDIF + ENDIF + IF ! Empty( cEnv ) IF ! hbmk[ _HBMK_lQuiet ] hbmk_OutStd( hbmk, hb_StrFormat( I_( "Processing environment options: %1$s" ), cEnv ) ) @@ -1748,34 +1771,42 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) IF ! hbmk[ _HBMK_lQuiet ] hbmk_OutStd( hbmk, hb_StrFormat( I_( "Processing local make script: %1$s" ), _HBMK_AUTOHBM_NAME ) ) ENDIF - HBM_Load( hbmk, aParams, _HBMK_AUTOHBM_NAME, 1 ) + HBM_Load( hbmk, aParams, _HBMK_AUTOHBM_NAME, 1, .F. ) /* Do not allow subprojects in automatic make file */ ENDIF /* Collect all command line parameters */ FOR EACH cParam IN aArgs - DO CASE - CASE !( Left( cParam, 1 ) == "-" ) .AND. Len( cParam ) >= 1 .AND. Left( cParam, 1 ) == "@" .AND. ; - !( Lower( FNameExtGet( cParam ) ) == ".clp" ) - cParam := SubStr( cParam, 2 ) - IF Empty( FNameExtGet( cParam ) ) - cParam := FNameExtSet( cParam, ".hbm" ) - ENDIF - IF !( Lower( FNameExtGet( cParam ) ) == ".hbm" ) .AND. lAcceptLDClipper - rtlnk_process( hbmk, MemoRead( PathSepToSelf( cParam ) ), @hbmk[ _HBMK_cPROGNAME ], @hbmk[ _HBMK_aOBJUSER ], @hbmk[ _HBMK_aLIBUSER ] ) - IF ! Empty( hbmk[ _HBMK_aOBJUSER ] ) - DEFAULT hbmk[ _HBMK_cFIRST ] TO hbmk[ _HBMK_aOBJUSER ][ 1 ] + cParam := ArchCompFilter( hbmk, cParam ) + IF ! Empty( cParam ) + DO CASE + CASE !( Left( cParam, 1 ) == "-" ) .AND. Len( cParam ) >= 1 .AND. Left( cParam, 1 ) == "@" .AND. ; + !( Lower( FNameExtGet( cParam ) ) == ".clp" ) + cParam := SubStr( cParam, 2 ) + IF Empty( FNameExtGet( cParam ) ) + cParam := FNameExtSet( cParam, ".hbm" ) ENDIF - ELSE - HBM_Load( hbmk, aParams, PathSepToSelf( cParam ), 1 ) /* Load parameters from script file */ - ENDIF - CASE !( Left( cParam, 1 ) == "-" ) .AND. ; - ( Lower( FNameExtGet( cParam ) ) == ".hbm" .OR. ; - Lower( FNameExtGet( cParam ) ) == ".hbp" .OR. ; - Lower( FNameExtGet( cParam ) ) == ".hbi" ) - HBM_Load( hbmk, aParams, PathSepToSelf( cParam ), 1 ) /* Load parameters from script file */ - OTHERWISE - AAdd( aParams, { cParam, "", 0 } ) - ENDCASE + IF !( Lower( FNameExtGet( cParam ) ) == ".hbm" ) .AND. lAcceptLDClipper + rtlnk_process( hbmk, MemoRead( PathSepToSelf( cParam ) ), @hbmk[ _HBMK_cPROGNAME ], @hbmk[ _HBMK_aOBJUSER ], @hbmk[ _HBMK_aLIBUSER ] ) + IF ! Empty( hbmk[ _HBMK_aOBJUSER ] ) + DEFAULT hbmk[ _HBMK_cFIRST ] TO hbmk[ _HBMK_aOBJUSER ][ 1 ] + ENDIF + ELSE + tmp := HBM_Load( hbmk, aParams, PathSepToSelf( cParam ), 1, .T. ) /* Load parameters from script file */ + IF tmp != 0 + RETURN tmp + ENDIF + ENDIF + CASE !( Left( cParam, 1 ) == "-" ) .AND. ; + ( Lower( FNameExtGet( cParam ) ) == ".hbm" .OR. ; + Lower( FNameExtGet( cParam ) ) == ".hbp" ) + tmp := HBM_Load( hbmk, aParams, PathSepToSelf( cParam ), 1, .T. ) /* Load parameters from script file */ + IF tmp != 0 + RETURN tmp + ENDIF + OTHERWISE + AAdd( aParams, { cParam, "", 0 } ) + ENDCASE + ENDIF NEXT /* Process automatic control files. */ @@ -1784,7 +1815,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) /* Process command line (2nd pass) */ FOR EACH aParam IN aParams - cParam := ArchCompFilter( hbmk, aParam[ _PAR_cParam ] ) + cParam := aParam[ _PAR_cParam ] cParamL := Lower( cParam ) DO CASE @@ -1946,7 +1977,12 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) CASE cParamL == "-cpp-" .OR. ; cParamL == "-nocpp" ; hbmk[ _HBMK_lCPP ] := .F. - CASE cParamL == "-run" ; hbmk[ _HBMK_lRUN ] := .T. + CASE cParamL == "-run" + + IF hbmk[ _HBMK_nLevel ] == 1 + hbmk[ _HBMK_lRUN ] := .T. + ENDIF + CASE cParamL == "-run-" .OR. ; cParamL == "-norun" ; hbmk[ _HBMK_lRUN ] := .F. CASE cParamL == "-trace" ; hbmk[ _HBMK_lTRACE ] := .T. @@ -4441,7 +4477,9 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) IF lDumpInfo - OutStd( "targettype{{" + hbmk_TARGET( hbmk ) + "}}" + hb_eol() ) + OutStd( "{{{" + hb_eol() ) + OutStd( "targetname{{" + hbmk_TARGETNAME( hbmk ) + "}}" + hb_eol() ) + OutStd( "targettype{{" + hbmk_TARGETTYPE( hbmk ) + "}}" + hb_eol() ) OutStd( "inc{{" + iif( hbmk[ _HBMK_lINC ], "yes", "no" ) + "}}" + hb_eol() ) OutStd( "hbctree{{" + hb_eol() ) @@ -4449,6 +4487,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) OutStd( Replicate( Chr( 9 ), tmp[ 2 ] ) + PathSepToForward( PathNormalize( tmp[ 1 ] ) ) + hb_eol() ) NEXT OutStd( "}}" + hb_eol() ) + OutStd( "}}}" + hb_eol() ) RETURN 0 ENDIF @@ -5734,15 +5773,8 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) /* Setup compressor for host platform */ - #if defined( __PLATFORM__UNIX ) - - cBin_Cprs := "upx" - cOpt_Cprs := "{OB}" - cOpt_CprsMin := "-1" - cOpt_CprsMax := "-9" - - #elif defined( __PLATFORM__WINDOWS ) .OR. ; - defined( __PLATFORM__DOS ) + #if defined( __PLATFORM__WINDOWS ) .OR. ; + defined( __PLATFORM__DOS ) cBin_Cprs := "upx.exe" cOpt_Cprs := "{OB}" @@ -5755,6 +5787,13 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) cOpt_Cprs += " --force-execve" ENDIF + #elif defined( __PLATFORM__UNIX ) + + cBin_Cprs := "upx" + cOpt_Cprs := "{OB}" + cOpt_CprsMin := "-1" + cOpt_CprsMax := "-9" + #else cBin_Cprs := NIL @@ -7264,8 +7303,8 @@ STATIC FUNCTION PlugIn_make_ctx( hbmk, cState ) "cCOMP" => hbmk[ _HBMK_cCOMP ] ,; "cCPU" => hbmk[ _HBMK_cCPU ] ,; "cBUILD" => hbmk[ _HBMK_cBUILD ] ,; - "cTARGETTYPE" => hbmk_TARGET( hbmk ) ,; "cTARGETNAME" => hbmk[ _HBMK_cPROGNAME ] ,; + "cTARGETTYPE" => hbmk_TARGETTYPE( hbmk ) ,; "lREBUILD" => hbmk[ _HBMK_lREBUILD ] ,; "lCLEAN" => hbmk[ _HBMK_lCLEAN ] ,; "lDEBUG" => hbmk[ _HBMK_lDEBUG ] ,; @@ -7853,13 +7892,8 @@ STATIC FUNCTION PathSepToForward( cFileName ) RETURN StrTran( cFileName, "\", "/" ) STATIC FUNCTION PathSepToSelf( cFileName, nStart ) -#if defined( __PLATFORM__WINDOWS ) .OR. ; - defined( __PLATFORM__DOS ) .OR. ; - defined( __PLATFORM__OS2 ) - RETURN iif( nStart == NIL, StrTran( cFileName, "/", "\" ), Left( cFileName, nStart - 1 ) + StrTran( SubStr( cFileName, nStart ), "/", "\" ) ) -#else - RETURN iif( nStart == NIL, StrTran( cFileName, "\", "/" ), Left( cFileName, nStart - 1 ) + StrTran( SubStr( cFileName, nStart ), "\", "/" ) ) -#endif + RETURN iif( nStart == NIL, StrTran( cFileName, iif( hb_ps() == "\", "/", "\" ), hb_ps() ),; + Left( cFileName, nStart - 1 ) + StrTran( SubStr( cFileName, nStart ), iif( hb_ps() == "\", "/", "\" ), hb_ps() ) ) STATIC FUNCTION PathSepToTarget( hbmk, cFileName, nStart ) @@ -8709,10 +8743,13 @@ STATIC FUNCTION ValueIsF( cString ) RETURN cString == "no" .OR. ; cString == "0" /* Compatibility */ -STATIC PROCEDURE HBM_Load( hbmk, aParams, cFileName, nNestingLevel ) +STATIC FUNCTION HBM_Load( hbmk, aParams, cFileName, nNestingLevel, lProcHBP ) LOCAL cFile LOCAL cLine LOCAL cParam + LOCAL aArgs + LOCAL nResult + LOCAL cHBP IF hb_FileExists( cFileName ) @@ -8728,11 +8765,11 @@ STATIC PROCEDURE HBM_Load( hbmk, aParams, cFileName, nNestingLevel ) FOR EACH cLine IN hb_ATokens( cFile, _CHR_EOL ) IF !( Left( cLine, 1 ) == "#" ) FOR EACH cParam IN hb_ATokens( cLine,, .T. ) - cParam := StrStripQuote( cParam ) + cParam := ArchCompFilter( hbmk, StrStripQuote( cParam ) ) IF ! Empty( cParam ) DO CASE CASE Lower( cParam ) == "-skip" - RETURN + RETURN 0 CASE !( Left( cParam, 1 ) == "-" ) .AND. Len( cParam ) >= 1 .AND. Left( cParam, 1 ) == "@" .AND. ; !( Lower( FNameExtGet( cParam ) ) == ".clp" ) IF nNestingLevel < _HBMK_NEST_MAX @@ -8740,19 +8777,45 @@ STATIC PROCEDURE HBM_Load( hbmk, aParams, cFileName, nNestingLevel ) IF Empty( FNameExtGet( cParam ) ) cParam := FNameExtSet( cParam, ".hbm" ) ENDIF - HBM_Load( hbmk, aParams, PathMakeAbsolute( PathSepToSelf( cParam ), cFileName ), nNestingLevel + 1 ) /* Load parameters from script file */ + /* TODO: Modify '@script.ext' (@ prefixes) inclusion to not inherit path from parent */ + nResult := HBM_Load( hbmk, aParams, PathMakeAbsolute( PathSepToSelf( cParam ), cFileName ), nNestingLevel + 1, .T. ) /* Load parameters from script file */ + IF nResult != 0 + RETURN nResult + ENDIF ELSE hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Cannot nest deeper in %1$s" ), cFileName ) ) ENDIF CASE !( Left( cParam, 1 ) == "-" ) .AND. ; - ( Lower( FNameExtGet( cParam ) ) == ".hbm" .OR. ; - Lower( FNameExtGet( cParam ) ) == ".hbp" .OR. ; - Lower( FNameExtGet( cParam ) ) == ".hbi" ) + Lower( FNameExtGet( cParam ) ) == ".hbm" IF nNestingLevel < _HBMK_NEST_MAX - HBM_Load( hbmk, aParams, PathMakeAbsolute( PathSepToSelf( cParam ), cFileName ), nNestingLevel + 1 ) /* Load parameters from script file */ + nResult := HBM_Load( hbmk, aParams, PathMakeAbsolute( PathSepToSelf( cParam ), cFileName ), nNestingLevel + 1, .T. ) /* Load parameters from script file */ + IF nResult != 0 + RETURN nResult + ENDIF ELSE hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Cannot nest deeper in %1$s" ), cFileName ) ) ENDIF + CASE !( Left( cParam, 1 ) == "-" ) .AND. ; + Lower( FNameExtGet( cParam ) ) == ".hbp" + cHBP := PathMakeAbsolute( PathSepToSelf( cParam ), cFileName ) + IF lProcHBP + IF hbmk[ _HBMK_nArgTarget ] > 0 + IF hb_FileExists( cHBP ) + aArgs := AClone( hbmk[ _HBMK_aArgs ] ) + aArgs[ hbmk[ _HBMK_nArgTarget ] ] := cHBP + nResult := hbmk2( aArgs, hbmk[ _HBMK_nArgTarget ], @hbmk[ _HBMK_lPause ], hbmk[ _HBMK_nLevel ] + 1 ) + IF nResult != 0 + RETURN nResult + ENDIF + ELSE + hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Project reference (%1$s) ignored. File not found." ), cHBP ) ) + ENDIF + ELSE + hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Project reference (%1$s) ignored. Project references require hbmk2 to be invoced with a main project." ), cHBP ) ) + ENDIF + ELSE + hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: Project reference (%1$s) ignored in automatic make file: %2$s" ), cHBP, cFileName ) ) + ENDIF OTHERWISE AAdd( aParams, { cParam, cFileName, cLine:__enumIndex() } ) ENDCASE @@ -8764,7 +8827,7 @@ STATIC PROCEDURE HBM_Load( hbmk, aParams, cFileName, nNestingLevel ) hbmk_OutErr( hbmk, hb_StrFormat( I_( "Warning: File cannot be found: %1$s" ), cFileName ) ) ENDIF - RETURN + RETURN 0 /* Filter microformat: {[!][]['&'|'|'][...]} @@ -8925,6 +8988,10 @@ STATIC FUNCTION MacroGet( hbmk, cMacro, cFileName ) cMacro := hb_pwd() ; EXIT CASE "HB_TEMPDIR" cMacro := hb_DirTemp() ; EXIT + CASE "HB_TARGETNAME" + cMacro := FNameNameGet( PathSepToSelf( hbmk_TARGETNAME( hbmk ) ) ) ; EXIT + CASE "HB_TARGETTYPE" + cMacro := hbmk_TARGETTYPE( hbmk ) ; EXIT CASE "HB_PLAT" CASE "HB_PLATFORM" CASE "HB_ARCH" /* Compatibility */ @@ -10109,7 +10176,10 @@ STATIC FUNCTION VCSID( cDir, cVCSHEAD, /* @ */ cType ) RETURN cResult -STATIC FUNCTION hbmk_TARGET( hbmk ) +STATIC FUNCTION hbmk_TARGETNAME( hbmk ) + RETURN iif( hbmk[ _HBMK_nArgTarget ] == 0, _HBMK_TARGENAME_ADHOC, PathSepToForward( hbmk[ _HBMK_aArgs ][ hbmk[ _HBMK_nArgTarget ] ] ) ) + +STATIC FUNCTION hbmk_TARGETTYPE( hbmk ) IF hbmk[ _HBMK_lCreateLib ] ; RETURN "hblib" ELSEIF hbmk[ _HBMK_lCreateDyn ] .AND. ! hbmk[ _HBMK_lDynVM ] ; RETURN "hbdyn" @@ -10187,7 +10257,7 @@ FUNCTION hbmk_KEYW( hbmk, cKeyword, cValue, cOperator ) RETURN .T. ENDIF - IF cKeyword == hbmk_TARGET( hbmk ) + IF cKeyword == hbmk_TARGETTYPE( hbmk ) RETURN .T. ENDIF @@ -10861,9 +10931,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong ) NIL,; { "Options below are available on command line only:" },; NIL,; - { "-target=
' + cTitle + '" + cTitle + "