From 319d515799b4c7fa219bf9a93c474b29573aef04 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 23 Jul 2010 11:08:33 +0000 Subject: [PATCH] 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. --- harbour/ChangeLog | 125 +- harbour/config/postinst.hbs | 8 +- harbour/config/win/cygwin.mk | 9 + harbour/contrib/gtalleg/gtalleg.hbm | 3 + harbour/contrib/gtalleg/gtalleg.hbp | 3 +- harbour/contrib/gtalleg/gtallegs.hbp | 3 - harbour/contrib/hbcurl/hbcurl.hbm | 3 + harbour/contrib/hbcurl/hbcurl.hbp | 5 +- harbour/contrib/hbcurl/hbcurls.hbp | 3 - .../contrib/hbqt/{hbqt.hbm => filelist.hbm} | 10 - harbour/contrib/hbqt/generator/hbqtgen.prg | 1004 ++++++++--------- harbour/contrib/hbqt/gtqtc/filelist.hbm | 6 + harbour/contrib/hbqt/gtqtc/gtqtc.hbm | 10 - harbour/contrib/hbqt/gtqtc/gtqtc.hbp | 9 +- harbour/contrib/hbqt/gtqtc/gtqtcs.hbp | 5 +- .../hbqt/hbqscintilla/hbqscintilla.hbp | 3 - harbour/contrib/hbqt/hbqt.hbp | 13 +- harbour/contrib/hbqt/hbqt_common.hbm | 3 + harbour/contrib/hbqt/hbqtcore.hbp | 5 +- harbour/contrib/hbqt/hbqtcores.hbp | 3 - harbour/contrib/hbqt/hbqtgui.hbp | 5 +- harbour/contrib/hbqt/hbqtguis.hbp | 3 - harbour/contrib/hbqt/hbqtnetwork.hbp | 5 +- harbour/contrib/hbqt/hbqtnetworks.hbp | 3 - harbour/contrib/hbqt/hbqts.hbp | 5 +- .../contrib/hbqt/qtdesigner/hbqtdesigner.hbp | 5 +- .../contrib/hbqt/qtdesigner/hbqtdesigners.hbp | 5 +- harbour/contrib/hbqt/qtwebkit/hbqtwebkit.hbp | 5 +- harbour/contrib/hbqt/qtwebkit/hbqtwebkits.hbp | 5 +- harbour/contrib/hbssl/hbssl.hbm | 3 + harbour/contrib/hbssl/hbssl.hbp | 5 +- harbour/contrib/hbssl/hbssls.hbp | 3 - harbour/contrib/hbtip/hbtip.hbm | 3 + harbour/contrib/hbtip/hbtip.hbp | 3 +- harbour/contrib/hbtip/hbtipssl.hbp | 3 - harbour/contrib/make.hbs | 250 ++-- harbour/contrib/pkglist | 97 +- harbour/utils/hbmk2/hbmk2.prg | 286 +++-- harbour/utils/hbrun/hbrun.prg | 5 +- 39 files changed, 1041 insertions(+), 891 deletions(-) rename harbour/contrib/hbqt/{hbqt.hbm => filelist.hbm} (62%) create mode 100644 harbour/contrib/hbqt/gtqtc/filelist.hbm delete mode 100644 harbour/contrib/hbqt/gtqtc/gtqtc.hbm 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 + "