* harbour/contrib/hbwin/hbwinole.h
* harbour/contrib/hbwin/olecore.c
+ implemented WIN_OLEAUTO class overloading
* harbour/contrib/hbwin/legacy.prg
- removed "[]" overloading. It's in the core object now.
* src/rtl/hbjson.c
! fixed long long printf format
* harbour/src/rtl/hbzlib.c
+ added new PRG function:
HB_GZCOMPRESSBOUND( <cData> | <nDataLen> ) -> <nMaxCompressLen>
! fixed compilation with ZLIB versions earlier then 1.2.0 broken by
missing deflateBound() function which I used recently.
* harbour/src/rtl/hbzlib.c
! added our own version of compressBound() function for
ZLIB versions 1.2.0 and earlier. It makes HB_ZCOMPRESSBOUND()
working and fixes code like:
<cResult> := HB_ZCOMPRESS( <cData> )
+ added new PRG function:
HB_GZCOMPRESS( <cData>, [<nDstBufLen>|<@cBuffer>], ;
[<@nResult>], [<nLevel>] )
=> <cCompressedData> or NIL on Error
It works like HB_ZCOMPRESS() but uses GZIP instead of ZLIB
encapsulation for compressed data.
+ added support for GZIP compressed strings to HB_ZUNCOMPRESS() and
HB_ZUNCOMPRESSLEN() functions so they can be used with data compressed
by HB_GZCOMPRESS() function or read from .gz files.
* harbour/src/rdd/dbfcdx/dbfcdx1.c
! save and restore index tag during reindexing when one of tags
with smaller number then the current one is moved to the end of
tag list - Clipper compatibility problem reported by Maurilio.
; Please remember that in Harbour DBFCDX during reindexing adds
new tag at the end of tag list removing the old one. It's CL53
DBFCDX and COMIX compatible behavior but it's different then
CL52 DBFCDX and SIXCDX.
* harbour/src/rdd/dbfnsx/dbfnsx1.c
* harbour/src/rdd/dbfntx/dbfntx1.c
! update tag numbers after reindexing
* harbour/src/rtl/filesys.c
* unified hb_fsSeek[Large]() return value when seek operation cannot
be executed for given file handle. Now it's 0 for all platforms.
* harbour/include/hbapicls.h
* harbour/src/vm/classes.c
+ added new public C function
PHB_SYMB hb_clsFuncSym( HB_USHORT uiClass )
It returns class function symbol or NULL.
* harbour/ChangeLog
* harbour/config/os2/gccomf.mk
* harbour/include/hbpcode.h
* harbour/include/hbdebug.ch
* harbour/include/hbmath.ch
* harbour/include/hbgfx.ch
* harbour/src/vm/classes.c
* harbour/utils/hbmk2/hbmk2.prg
* removed dummy trailing spaces at EOLs
+ harbour/src/rtl/hbjson.c
+ added JavaScript Object Notation (JSON) encoder, decoder functions
; C level functions:
char * hb_jsonEncode( PHB_ITEM pValue, HB_SIZE * pnLen );
pValue - value to encode;
pnLen - if pnLen is not NULL, length of returned buffer is
stored to *pnLen;
returns pointer to encoded JSON buffer. buffer must be fried
by the caller.
HB_SIZE hb_jsonDecode( const char * szSource, PHB_ITEM pValue );
szSource - JSON source;
pValue - item to store decoded value. Item value is
undetermined in case of error;
returns number of bytes decoded from the buffer. This allows
to use the remaining part of the buffer for some other
purposes. Returns 0 on error.
Harbour level functions:
hb_jsonDecode( cJSON, @xValue ) --> nLengthDecoded
hb_jsonEncode( xValue ) --> cJSON
Note:
- Harbour types unsupported by JSON (date, timestamp, etc.) are
encoded as null values;
- strings are encoded in UTF-8;
- JSON encode functions are safe for recursive arrays and hashes.
Recursive part of array or hash will be stored as null. JSON
encoder still allows to use same structure in the leaves, in
this case content will be duplicate.
I.e.:
xI := {1, NIL}
xI[2] := xI
? hb_jsonEncode( xI ) // [1,null]
but:
xI := {1, .T.}
xI := {2, xI, xI}
? hb_jsonEncode( xI ) // [2,[1,true],[1,true]]
* harbour/config/c.mk
* harbour/config/rules.mk
* use .sx file extension instead of .S to avoid problems with
non case sensitive filesystems
* harbour/src/rtl/fstemp.c
! fixed DOS version of hb_fsTempDir() - tmpnam() may return pure
file name without path i.e. in OpenWartcom builds
* accept optionally TEMP, TMP and TMPDIR environment variables in
DOS and OS2 build looking for directory with temporary files
* src/compiler/hbcomp.c
! Revisiting non-*nix stdout/stderr usage in compiler.
From now on the Clipper (and old MS-DOS/Windows tool)
compatible behavior is only maintained for MS-DOS Harbour
builds, for the rest error messages are output to stderr,
regular msgs are output to stdout.
* harbour/include/hbatomic.h
* added two new build time macros which can be used to control
using GCC atomic builtin functions changing the default settings.
HB_USE_GCCATOMIC_OFF - disable using atomic builtins
HB_USE_GCCATOMIC - force using atomic builtins
- harbour/src/pp/hbpp.1
+ harbour/examples/pp/pp.1
! moved man files for old harbour preprocessor to correct place
+ harbour/src/pp/hbpp.1
+ added new man file for current hbpp
* harbour/include/hbpp.h
* harbour/src/pp/ppcore.c
+ added new result marker <@> which creates token significant for PP but
invisible for compiler.
This extenssion allows to resolve problem with circular rules in very
easy way, i.e.
#command function <!name!>( [@]<!par1!> [:= <val1>] ;
[, [@]<!parN!> [:= <valN>]] ) => ;
function <name>( <par1> [, <parN> ] ) <@>
* include/hbcomp.h
* src/macro/macro.yyc
* src/macro/macro.y
* src/macro/macrolex.c
* src/compiler/hbmain.c
* src/compiler/complex.c
* src/compiler/harbour.yyc
* src/compiler/harbour.y
* Changed prefix used for bison generated function prefix
(hb_comp -> hb_comp_yy, hb_macro -> hb_macro_yy)
; Pls review.
This avoids collision between hb_macroError/hb_macroerror
for obsolete tools like bcc implib which uses case-insensitive
symbol lookup by default)
* package/winuni/mpkg_win_uni_extra_copy.bat
+ Added trick to generate special implib for core .dlls so
that now bcc can use the regular Harbour one and doesn't
need the special '-bcc' postfixed version to be shipped.
An ugly trick for an obsolete compiler.
(release process now requires bcc implib tool because of this)
* utils/hbmk2/hbmk2.prg
+ Added -c option to implib calls. This fixes implib generation
for certain .dlls, like OpenSSL.
* harbour/include/hbpp.h
! typo in comment
* harbour/src/pp/ppcore.c
! fixed to not include file by #pragma __*streaminclude <file> | ...
used inside code disabled by #if* condition, i.e.
#if 0
#pragma __streaminclude "file.unknown" | ? %s
#endif
! fixed memory leak and unclosed file handle when too long file was
included by #pragma __*streaminclude <file> | ...
! fixed line numbering in code using
#pragma __*streaminclude <file> | ...
! fixed possible wrong preprocessing or even GPF in code using
#pragma __*streaminclude <file> | ...
indirectly (i.e. by some other PP directives) or more then once
in single line (i.e. using ';' as directive separator)
* harbour/src/vm/classes.c
+ extended error messages in __CLSINSTSUPER() function to show the name
of super class which cannot be created
* harbour/src/rtl/tclass.prg
* force RTE for superclasses defined using function declared as DYNAMIC
It should help in locating the problem in wrongly linked code, i.e.
without some superclasses.
* harbour/src/rtl/empty.c
* modified EMPTY() function behavior so now for symbols
created for functions declared as DYNAMIC it does not
return .T. but .F. for functions which are registered
in HVM.
As side effect above modifications should fix some code
in RTL and contrib which used !EMPTY() for DYNAMIC function
symbols.
* contrib/make.hbs
+ Generalized the way dynamic lib dependencies are found
to make it work on *nix systems, too.
* include/harbour.hbx
+ src/rtl/libnamec.c
* src/rtl/libname.prg
* src/rtl/Makefile
+ Added HB_LIBEXT() and HB_LIBPREFIX() functions.
* utils/hbmk2/hbmk2.prg
+ Added "platform", "compiler", "cpu", "buildname", "dynsuffix"
to --hbinfo returned data.
* INSTALL
+ Documented HB_BUILD_CONTRIB_DYN setting. The default is
'no', and if set to 'yes', the build system will create
dynamic lib versions of the contribs.
* src/Makefile
* utils/hbformat/Makefile
* utils/hbi18n/Makefile
* utils/hbtest/Makefile
* config/global.mk
* config/dos/watcom.mk
* config/dos/djgpp.mk
* config/dyn.mk
* config/rules.mk
* INSTALL
* Renamed HB_BUILD_DLL to HB_BUILD_DYN.
* ChangeLog
* include/harbour.hbx
* src/rtl/Makefile
+ src/rtl/libname.prg
+ tests/libname.prg
+ Added HB_LIBNAME( <cDynLibName>[, <cDynLibDir> ] ) -> <cOSDynLibName>
Serves to convert a raw dynlib name, f.e. "hbct" to OS specific
notation, by adding platform specific extension, lib name prefix and
optional directory
* utils/hbmk2/hbmk2.prg
! Fixed dynlib prefix for symbian
* harbour/include/hbcomp.h
! fixed description of HB_VS_CBLOCAL_VAR macro
* harbour/src/compiler/hbmain.c
! fixed wrongly generated E0047 compile time error for
codeblocks with early evaluated macros accessing local
parameters. It should fix problem reported by Itamar.
* harbour/src/vm/hvm.c
* modified one #if condition to pacify ICC warning
reported by Andi
* config/global.mk
! Fixed setting LD_LIBRARY_PATH under pre-3.81 GNU Makes.
+ Will now set HB_SYSLOC=yes when creating .tgz packages which
are meant to be installed to system locations. (didn't test
this one)
+ Will now set HB_INSTALL_DOC to /share/doc/harbour on *nix systems.
! Fixed to set HB_INSTALL_MAN to /share/man (instead of /man) on
*nix systems.
; Please test/review these.
* config/postinst.hbs
+ Create directory for "root documents". They are now stored
in /share/doc/harbour for *nix.
! Fixed to store proper directory in ld.so.conf.d setting by
removing HB_INSTALL_PKG_TOP from the beginning of full dynlib
path.
* debian/rules
* package/harbour.spec
* package/harbour-win.spec.in
* package/harbour-wce.spec.in
! Use HB_INSTALL_PKG_TOP to denote the root of package dir structure.
; TODO: Change the name to HB_INSTALL_PKG_ROOT
; TODO: Optimize variable usage.
; TOFIX: Use HB_INSTALL_DYN instead HB_INSTALL_LIB in context of
dynamic libs in postinst.hbs and package scripts.
* package/harbour.spec
! Fixed to honor HB_BUILD_NAME in local LD_LIBRARY_PATH setting.
(is it needed?)
* INSTALL
- Deleted note about GNU Make 3.81.90
3.82 is out and the bug was fixed.
! Updated mpkg_src.sh location.
* contrib/make.hbs
* Do not create dynlib, .hbd, .hbx if the main build process
returned with non-zero errorlevel.
* utils/hbmk2/hbmk2.prg
+ Return errorlevel when -stop is used in project.
+ Use manifest constants for errorlevels.
* config/hbextern.hbs
* Local function renamed.
* contrib/xhb/xhb.hbx
* contrib/hbxpp/hbxpp.hbx
* Regenerated.
* src/vm/pvaluehb.c
! Typo in comment.
* contrib/hbqt/utils/hbqtgen.prg
+ Will now generate hbqt*_extern.ch with REQUEST for all
classed contained in given lib.
+ contrib/hbqt/qtgui/g/hbqtgui_extern.ch
+ contrib/hbqt/qtwebkit/g/hbqtwebkit_extern.ch
+ contrib/hbqt/qtcore/g/hbqtcore_extern.ch
+ contrib/hbqt/qtnetwork/g/hbqtnetwork_extern.ch
+ contrib/hbqt/qscintilla/g/hbqscintilla_extern.ch
+ contrib/hbqt/qtdesigner/g/hbqtdesigner_extern.ch
* contrib/hbqt/qtgui/hbqtgui.hbp
* contrib/hbqt/qtwebkit/hbqtwebkit.hbp
* contrib/hbqt/qtcore/hbqtcore.hbp
* contrib/hbqt/qtnetwork/hbqtnetwork.hbp
* contrib/hbqt/qscintilla/hbqscintilla.hbp
* contrib/hbqt/qtdesigner/hbqtdesigner.hbp
+ Added hbqt*_extern.ch files.
+ contrib/hbxbp/hbxbp_extern.ch
* contrib/hbxbp/hbxbp.hbp
+ Added REQUEST list for hbxbp.
* contrib/hbide/idemisc.prg
- Deleted usrrdd hack not mentioned in ChangeLog.
+ Changed to use new hbqt*_extern.ch and hbxbp_extern.ch files
instead of rolling a private list of external lib functions.
* src/rdd/usrrdd/usrrdd.c
+ Readded old mistyped function name guarded with HB_LEGACY_LEVEL3.
WARNING: Change UR_SUPER_WRITEBHEADER() to UR_SUPER_WRITEDBHEADER()
in your code.
* include/hbapidbg.h
+ Added HB_EXPORT to the complete hb_dbg*() API set.
This should fix -shared -b builds on win/wce when
using non-mingw compiler.
* src/vm/hvm.c
* Formatting.
* harbour/src/rdd/dbcmd53.c
* removed one redundant casting
* harbour/package/mpkg_rpm.sh
! move source code archive to RPM directory structure to
not leave it after creating RPMs
* harbour/package/mpkg_src.sh
! fixed to work correctly after moving from root directory
- harbour/package/harbour-win.spec
+ harbour/package/harbour-win.spec.in
* harbour/package/mpkg_rpm_win.sh
- harbour/package/harbour-wce.spec
+ harbour/package/harbour-wce.spec.in
* harbour/package/mpkg_rpm_wce.sh
! renamed cross build .spec files to fix -ta option
To keep this functionality working only one file in tar archive
can have .spec extension
* contrib/make.hbs
% Code consolidation.
! Fixed recent regression, whereas now again the root project's
.hbc file will be added to the make process in HB_BUILD_CONTRIB_DYN
mode.
+ Changed the way filter is processed, now dependent packages will
always be built, so there is no need to manually pick all the
dependencies too.
* Internal terminology cleanup.
+ Will now also rebuild the _dependencies_ in HB_BUILD_CONTRIB_DYN mode.
- Deleted forcing English language for hbmk2 output.
; Regressions are possible
; NOTE: This dynamic stuff is a real can of worms. Virtually infinite
combinations of dynamic vs static libs may be supported, plus
there is ST vs MT issue, where we must decide about this at
dynlib build time, and f.e. what happens when trying to load
two .dlls one with was linked against MT Harbour and the other
against ST? It's a combinatorical explosion.
* src/vm/vmmt/Makefile
! Fixed missing procaddr.c causing unresolved externals when creating
MT mode dynlibs.
* config/global.mk
! Attempt to fix LD_LIBRARY_PATH problem, adding dynamic lib build
dir to this envvar while doing the build, pls test it, I didn't.
+ contrib/hbplist
- contrib/pkglist
* Renamed.
* contrib/hbct/ctwin.h
! Added missing HB_EXPORT.
* contrib/xhb/xhb.hbp
* contrib/hbgd/hbgd.hbp
! Added missing project references also to .hbp files.
* utils/hbmk2/hbmk2.prg
! Fixed regression with mingw -hbdyn after adding new stub which
stole the show by explicitly exporting one symbol which (due
to autoexport function in mingw) prevented regular symbols to
be exported. This fix will remove the exception so far applied
to mingw/cygwin compilers where HB_DYNLIB was not used with these,
now it's used equally on all compilers/platforms. For this to
be effective, it should be noted that HB_EXPORT must be used
in all public declarations, even in contrib.
! Fix (?) to not include MAIN proc force code when building with
hbmaindllp.
* contrib/xhb/thtm.prg
% Changed hbct LTOC to simple iif()
; TOFIX: xhb makes reference to (deprecated) hb_symEval symbol:
Info: resolving _hb_symEval by linking to __imp__hb_symEval (auto-import)
* contrib/rddsql/hbrddsql.h
! Added HB_EXTERN_BEGIN/END
! Added HB_EXPORT
! Added extern
* contrib/sddoci/sddoci.hbp
! Restored some flags present in old Makefile to make it
work with mingw and bcc.
* contrib/hbqt/generator/hbqtgen.prg
* contrib/hbqt/hbqt.h
! Fixed to add HB_EXPORT to public declarations.
; TOFIX: hbqt still doesn't link in hbdyn mode.
* contrib/hbqt/hbqt_garbage.h
* contrib/hbqt/doc/en/*.txt
* Regenerated.
* contrib/hbqt/hbqt.hbc
! Fixed to not include QtUiTools in -hbdyn mode. It creates duplicate
symbols at link. Maybe this is not the right fix, go figure.
(HB_STATIC_QT mode still has to be checked)
; TODO: Add ${__HB_DYN__} to all .hbc files.
* include/hbextern.ch
* src/rdd/usrrdd/usrrdd.c
! Fixed typo in function name: WRITEBHEADER() -> WRITEDBHEADER()
Eagle-eye spotted by Marcos Gambeta.
* contrib/make.hbs
! Fixed to include dependent .hbc files instead of referencing
own .hbc file in HB_BUILD_CONTRIB_DYN mode. It was not good
solution as it was referencing itself that way.
+ Will now request dynamic version of dependencies when building
HB_BUILD_CONTRIB_DYN dynlibs. This is required otherwise f.e.
hbxbp lib will contain a static copy of hbqt libs, which is not
very good.
! Fixed to not attempt to build dynamic version of referenced
projects in HB_BUILD_CONTRIB_DYN mode.
* contrib/hbct/hbct.hbc
* contrib/hbqt/hbqt.hbc
* contrib/rddsql/rddsql.hbc
* contrib/hbtip/hbtipssl.hbc
* contrib/hbtip/hbtip.hbc
* contrib/hbwin/hbwin.hbc
* contrib/hbssl/hbssl.hbc
+ Experimental move to support linking dynamic version of the
dependencies when building dynamic lib in HB_BUILD_CONTRIB_DYN
mode. This is starting to get insanely ugly (thanks Microsoft)
so I'll with it some more and probably leave it.
; I hope I didn't miss any contribs which can also be a dependency
(probably I did)
* contrib/pkglist
* contrib/hbtip/hbtip.hbp
* hbtipssl made a separate project instead of being a sub-project
of hbtip. hbtipssl has different dependencies, so this move
was needed for libdyn support.
* INSTALL
* tdragon mingw marked as non-recommended. They due to
incompatible with previous release tool naming, our make
systems cannot currently support it. (it needs CCPOSTFIX
for windres tool when using the dwarf-2 installation)
* src/rdd/usrrdd/usrrdd.c
! Fixed to prev since new warnings appeared after the change.
Please review this. The stack API in some places expects
'int' while other calls use HB_ISIZ. In this case a value
is formed from ( hb_stackTopOffset() - hb_stackBaseOffset() ),
both HB_ISIZ, which is then passed to hb_stackItemFromBase(),
which expects an int.
What is the best way to correct this?
* src/rdd/usrrdd/usrrdd.c
! Fixed new msvc64 HB_ISIZ vs HB_LONG warnings popped after
finishing variable cleanup in stack API.
* src/rdd/dbcmd53.c
! Silenced one remaining warning (with a cast) in hbrdd lib.
* harbour/src/rdd/workarea.c
* harbour/src/rdd/wacore.c
* harbour/src/rdd/dbcmd.c
* harbour/src/rdd/dbf1.c
* harbour/src/rdd/dbcmd53.c
* harbour/src/rdd/usrrdd/usrrdd.c
* harbour/src/rdd/wafunc.c
* harbour/src/rdd/hbsix/sxcompr.c
* casting and type modifications to eliminate possible lost data
warnings
* include/hbsocket.h
* src/rtl/hbsocket.c
! Fixed type in C level function name.
* src/rtl/hbdoc.prg
! Fixed to always use CRLF as EOL in internal doc data.
* contrib/hbtip/utils.c
! HB_BASE64() marked as HB_LEGACY_LEVEL3.
+ Added TIP_CRLF()
* contrib/hbtip/smtpcli.prg
* contrib/hbtip/client.prg
* contrib/hbtip/ftpcli.prg
* contrib/hbtip/mail.prg
* Using TIP_CRLF() instead of HB_INETCRLF().
* config/postinst.hbs
+ More meaningful message when doing 'make install' without
HB_INSTALL_PREFIX being set.
* contrib/hbpost.hbm
+ Added extra protection to not try to install anything when
using 'install' without target dir being specified.
* INSTALL
* Updated to reflect the optional nature of make 'install'
option.
* Updated to reflect change in HB_INSTALL_PREFIX.
* {hb_top} HB_INSTALL_PREFIX macro not documented anymore.
* harbour/src/compiler/gencc.c
! fixed wrongly used HB_ISIZ instead of HB_LONG
* harbour/package/harbour.spec
! fixed /etc/ld.so.conf.d detection
% minor improvement
; TOFIX:
* /etc/ld.so.conf.d/harbour.conf in final RPM contains
wrong path due to missing HB_INSTALL_PREFIX
* soft links to harbour shared libraries for systems
without /etc/ld.so.conf.d are missing
* soft links with short shared libraries names are missing
and current long names do not confirm standard Linux
shared library naming convention:
<name>.so[.<maj>[.<min>[.<rel>]]]
hbmk2 also uses short names so it does not work correctly
with binaries installed from the RPMs
* src/rtl/hbsocket.c
! hb_socketBind((): Deleted hb_socketSetReuseAddr() call,
which caused that the same addr:port could be opened multiple
times on Windows (tested on 7) systems, causing uncertain behavior.
This is documented MS (mis?)feature.
* contrib/hbqt/tests/wvtqt.hbp
* contrib/hbxbp/tests/wvtqt.hbp
! Added missing SVN header.
% Cleanup.
* INSTALL
* contrib/hbpost.hbm
* config/global.mk
* Changed HB_BUILD_IMPLIB to HB_INSTALL_IMPLIB to reflect
new meaning after recent changes. With new build system
the implibs are always created in lib working dir, and
this setting only controls whether to copy it to final
install directory. The default is still 'no'. Setting it
to yes is only recommended if the installation will be
used in local environment (3rd party .dlls) only. IOW
never set this to yes when creating a build for other
users (f.e. for distribution).
INCOMPATIBLE if you used this setting, pls change it now.
* INSTALL
+ Documented HB_STATIC_* options.
* contrib/make.hbs
* Updated TODO list.
* src/debug/debugger.prg
* src/rtl/dirscan.prg
* tests/wcecon.prg
* contrib/xhb/traceprg.prg
* contrib/hbqt/tests/wvtqt.hbp
* contrib/hbqt/generator2/hbqtgen2.prg
* contrib/hbxbp/tests/demoxbp.prg
* contrib/hbxbp/tests/dialogqt.prg
* contrib/hbxbp/tests/wvtqt.hbp
* contrib/hbhpdf/tests/harupdf.prg
* contrib/gtwvg/tests/wvgtbrowser.prg
* contrib/gtwvg/tests/wvgwvtclasses.prg
* contrib/hbtip/tests/dbtohtml.prg
* contrib/hbtip/mail.prg
* contrib/hbide/idemisc.prg
* contrib/hbide/ideactions.prg
* contrib/hbide/idetools.prg
* contrib/hbide/idesources.prg
* contrib/hbide/hbide.prg
* examples/uhttpd2/umain.prg
* examples/hbvpdf/tests/pdf_demo.prg
* examples/httpsrv/uhttpd.prg
* examples/httpsrv/cgifunc.prg
* examples/httpsrv/modules/tableservletdb.prg
* examples/httpsrv/session.prg
* HB_OSPATHSEPARATOR() -> HB_PS()
% Delete temp vars along the way.
* utils/hbmk2/hbmk2.prg
+ Generalized internals for support for older Harbour and
xhb versions.
+ Added -hb20 option. (thanks for asking for it so nicely ;)