* src/rtl/listbox.prg
! fixed nTop not being incremented in ListBox:hitTest() for no-box dropdown
* replaced inconsistent references to ::nTop with nTop
* renamed variables to better reflect their role
* src/common/hbver.c
* indent cleanup
* src/rtl/filesys.c
* src/rtl/fssize.c
! restore dynamic calling of GetFileAttributesEx() on
Windows (significant only on very old systems)
* src/rtl/hbproces.c
! in process creating functions like hb_processRun(), *Open(),
on Android: don't use setuid( getuid() ) method for resetting
attributes as it rises "Bad system call" and the process is not
executed. This fixes building Harbour in hbmk2 stage on Android
device itself (for example using Termux) and can fix deploying
multi-process Android apps. For devices older than Android 8,
where the kernel was not hardened, please report any regresions,
if you have such multi-process deployments.
* ChangeLog.txt
% stripped spaces before EOLs
* src/compiler/harbour.y
* src/macro/macro.y
* replaced depreciated bison macro %pure-parser with %define api.pure
* src/compiler/complex.c
* src/macro/macrolex.c
* src/compiler/harbour.y
* src/macro/macro.y
* replaced depreciated bison macro %name-prefix with %define api.prefix
; Warning: now Bison 2.6 or newer is required to regenerate Harbour grammar
files. If someone wants/needs to work with older bison versions
then it's enough to restore depreciated macros, Harbour compiler
and macros lexers will work with both versions.
* src/compiler/harbour.yyc
* src/compiler/harbour.yyh
* src/macro/macro.yyc
* src/macro/macro.yyh
* regenerated with Bison 3.02 (the same as before)
* re-added HB_SYMBOL_UNUSED( yynerrs ) to pacify some compilers warnings
* contrib/xhb/hbcompat.ch
! fixed HSetAACompatibility() #xtranslate
* contrib/hbzebra/code39.c
* pacified warning, it's also fix for possible buffer overflow.
* include/hbcomp.h
* src/compiler/genc.c
* src/compiler/hbmain.c
* replaced function hb_compFunctionMarkStatic() with
hb_compFunctionSetScope()
* src/compiler/genc.c
* detect public prg functions written in C inside
#pragma BEGINDUMP / #pragma ENDDUMP and mark them as LOCAL ones
* src/vm/hvm.c
! removed my pseudo fix from 2023-01-30 15:18 UTC+0100 Przemyslaw Czerpak.
It was ugly hack which can work only with some linkers.
This modification fixes FILE() function used with C functions written
without own symbol table
* src/rdd/dbf1.c
* minor code formatting
* contrib/xhb/hbcompat.ch
! fixed HSetAACompatibility() #xtranslate
* contrib/hbzebra/code39.c
* pacified warning, it's also fix for possible buffer overflow.
* include/hbcomp.h
* src/compiler/genc.c
* src/compiler/hbmain.c
* replaced function hb_compFunctionMarkStatic() with
hb_compFunctionSetScope()
* src/compiler/genc.c
* detect public prg functions written in C inside
#pragma BEGINDUMP / #pragma ENDDUMP and mark them as LOCAL ones
* src/vm/hvm.c
! removed my pseudo fix from 2023-01-30 15:18 UTC+0100 Przemyslaw Czerpak.
It was ugly hack which can work only with some linkers.
This modification fixes FILE() function used with C functions written
without own symbol table
* src/rdd/dbf1.c
* minor code formatting
* src/common/hbver.c
! added lacking VER_BUILDNUMBER definition that is missing
in very old compiler sets/SDKs (pre Windows 2000),
noticed by DF7BE - Wilfried Brunken in #362
* README.md
* slightly updated list of supported compilers and
examples to mention MSVC for ARM64 and Clang
* ChangeLog.txt
* hb_scan -> hb_hscan in prev
* .github/workflows/windows-ci.yml
* update windows MSYS2 integration runner set of
requested packages. PGSQL, Firebird and MariaDB libs
are no longer available in the 32-bit environment
+ add clang x86_64 compiler for testing under this CI
* include/harbour.hbx
* include/hbapi.h
* src/common/hbver.c
* src/harbour.def
* src/rtl/version.c
! fixed Windows 11 detection, by vendor likings it has
NT Kernel Version stamped with 10.0, so now Build Number
is more significant as a recognition factor.
+ new C helper functions hb_winisbuild(), hb_iswin11()
+ added PRG function hb_osIsWin11()
* also try to detect new Windows Server versions
* config/win/clang.mk
* utils/hbmk2/hbmk2.prg
* ChangeLog.txt
! recursion happening in the Makefiles rendered recently
introduced compatibility option unreliable. Changed to
use separate variable: HB_USER_FIXES=--mingw-script
You don't need it, the problem shouldn't exist, but
anyway...
* config/global.mk
! detect ARM64 CPU on Windows also under non-native shell (MSYS2 sh)
* on unix also recognize aarch64 from uname
* include/hbsetup.h
* __MINGW64__ define is not x86_64 specific anymore
* config/win/clang.mk
* utils/hbmk2/hbmk2.prg
* reworked Clang on Windows detection (ARM64, x86_64, x86),
now it recognizes those flavours in PATH as distributed
by MSYS2 project and also Visual Studio 2022 Build tools.
Starting Harbour build process should be now possible
both from MSYS2 shell (with the special note to use "make"
command instead of "win-make" from sh) and regular batch
script/cmd shell.
Building on Clang distributed by MS x86_64:
PATH=<InstallPath>\BuildTools\VC\Tools\Llvm\x64\bin;%PATH%
win-make
Clang/MS ARM64:
PATH=<InstallPath>\BuildTools\VC\Tools\Llvm\ARM64\bin;%PATH%
win-make
Building on Clang x86_64 distributed by MSYS2 from cmd:
PATH=C:\msys64\clang64\bin;%PATH%
win-make
Clang/MSYS ARM64 called from cmd:
PATH=C:\msys64\clangarm64\bin;%PATH%
win-make
* src/common/hbver.c
* patched clang version string builder to skip duplicate version
number in some builds
* append processor architecture to clang compiler string
on non-Intel systems
+ config/win/msvcarm.mk
+ config/win/msvcarm64.mk
* config/global.mk
* include/hbsetup.h
* utils/hbmk2/hbmk2.prg
+ introduced support for Windows (10,11) ARM 64-bit platform
native compilers using Visual Studio 2022 Build Tools
before calling win-make, setup environment with:
<InstallPath>\BuildTools\VC\Auxiliary\Build\vcvarsarm64.bat
toolchain should be autodetected as following:
! HB_HOST_PLAT: win (arm64) HB_SHELL: nt
! HB_PLATFORM: win (arm64) (auto-detected)
! HB_COMPILER: msvcarm64 (auto-detected: C:/Program[...]/ARM64/)
to build final application with hbmk2 adding a valid Windows
Platform SDK / CRT paths to INCLUDE= and/or LIB= variable
is needed
; cross compilation from AMD64 hosts is possible:
vcvars64.bat
win-make (build Harbour for your host first)
set HB_HOST_BIN=<HarbourPath>\bin\win\msvc64
vcvarsamd64_arm64.bat
win-make
+ also added support for Windows for ARM 32-bit
before calling win-make, setup environment using:
<InstallPath>\BuildTools\VC\Auxiliary\Build\vcvarsarm.bat
or when cross compiling from ARM64 host:
<InstallPath>\BuildTools\VC\Auxiliary\Build\vcvarsarm64_arm.bat
; please test Windows CE builds if you're using compiler newer
than VC2003 for ARM for possible regressions
* contrib/hbmlzo/3rd/minilzo/lzodefs.h
! recognize ARM64 architecture on Windows to fix build error
; consider updating to upstream minilzo 2.10, issue is fixed there
* src/common/hbver.c
* changed to add processor architecture for MSVC compiler string
on non-Intel systems, as exposed by hb_compiler(), harbour /build,
finalapp.exe //build
* tests/speedtst.prg
* workaround that processor architecture can now appear
in hb_compiler(), so it's not printed by speed test twice
* contrib/xhb/xhberror.c
% cleaned code] to overload ERRORNEW() with XHB_ERRORNEW()
* src/rtl/fscopy.c
% removed unnecessary code
* src/rtl/vfile.c
! fixed typo in comment
* src/vm/dynsym.c
+ allow to use symbol items as parameter in functions:
hb_IsFunction(), __dynsGetIndex(), __dynsIsFun()
* contrib/xhb/xhberror.c
! fixed very bad bug introduced in this modification:
2023-01-31 23:19 UTC+0100 Przemyslaw Czerpak
It corrupted dynamic symbol table due to stupid mistake.
I overloaded whole function symbol instead of its address only.
Many thanks to Juan Gálvez who found the problem.
* include/hbdefs.h
! fixed INT64_MIN definition
* src/vm/dynsym.c
* minor change in function order
* src/vm/memvars.c
+ allow to use symbol items in the following functions:
__mvScope(), __mvExist(), __mvGet(), __mvGetDef(), __mvPut()
* include/hbapifs.h
* src/rtl/fscopy.c
+ added new C function:
HB_BOOL hb_fileCopyEx( const char * pszSource, const char * pszDest,
HB_SIZE nBufSize, HB_BOOL fTime,
PHB_ITEM pCallBack );
Unlike hb_fileCopy() it is never redirected to remote server and copy
operation is always done locally.
pCallBack is codeblock or function symbol, it's executed at the
beginning and then on each nBufSize bytes written and receives two
parameters: nBytesWritten, nTotalSize.
Warning: nTotalSize could be 0 when non regular files like pipes or
sockets are copied.
* src/rtl/vfile.c
+ added new PRG function:
hb_vfCopyFile( <cFileSrc>, <cFileDst>, [<nBufSize>=65536], ;
[<lTimePreserve>=.t.], [<bCallBack>] ) --> <nResult>
It's wrapper to hb_fileCopyEx() C function.
For very big files setting <nBufSize> to greater value, i.e. 16777216
may increase performance.
* contrib/gtqtc/gtqtc.hbp
! do not detect QT5 when HB_BUILD_3RDEXT=no is set
* debian/rules
* removed LD_LIBRARY_PATH setting
* src/rdd/dbcmd.c
* src/rdd/wacore.c
! moved code checking WA number from DbSelectArea() PRG function
to hb_rddSelectWorkAreaNumber() C function. It fixes few things
like:
DbSelectArea( 0 )
and also:
? ( 0 )->( select() )
* contrib/hbexpat/3rd/expat/expat.diff
* contrib/hbexpat/3rd/expat/loadlibr.c
! use HB_WINAPI_GETPROCADDRESS() instead of GetProcAddress()
in WinCE builds
* contrib/hbhpdf/3rd/libhpdf/hpdfstre.c
* contrib/hbhpdf/3rd/libhpdf/libhpdf.diff
! include <windows.h> in WinCE builds, it's necessary for GetLastError()
* src/3rd/jpeg/Makefile
! do not use getenv() in all WinCE builds
* src/common/hbver.c
* cast revision number to HB_ULONG to pacify warning
* src/vm/extrap.c
! do not compile unused in WinCE builds hb_winExceptionHandler()
* include/hbapi.h
* added HB_EXPORT attribute to hb_macroTextValue() function
* include/hbvm.h
* src/vm/hvm.c
+ added C function:
PHB_ITEM hb_vmCompileMacro( const char * szExpr, PHB_ITEM pDest );
It returns Harbour item or NULL at error (wrong macro text).
The result should be used with hb_vmEvalBlockOrMacro() and then freed
by hb_vmDestroyBlockOrMacro(). It hides low level macro representation
so we can change it in the future. Now it's still simple pointer item
without autodestructor.
* src/rdd/hsx/hsx.c
* src/rdd/workarea.c
* use hb_vmCompileMacro() instead of hb_macroCompile()
* src/vm/runner.c
* changed 6101 error message for "Unknown or unregistered symbol"
to "Unknown or unregistered function symbol".
* report above error when HRB module is loaded and its external function
is not registered or not marked as DYNAMIC by earlier registered modules
in HVM symbol table.
Warning. This modification may exploit problems in code loading HRB files
with cross references which has worked so far. In such case user should
pass to hb_hrbLoad()/hb_hrbRun() as first parameters flags containing
HB_HRB_BIND_LAZY or declare the problematic function in his main code
as dynamic, i.e.:
DYNAMIC <funcName>
* src/rdd/dbf1.c
* declare internal function hb_dbfTransCheckCounters() as static one
* src/harbour.def
! added missing exported Harbour functions
* debian/compat
* set 10 as compatibility level
* contrib/3rd/sqlite3/sqlite3.c
* contrib/3rd/sqlite3/sqlite3.diff
* do not use noinline function attribute in GCC prior 3.1
* contrib/xhb/xhberror.c
* src/rtl/gtdos/gtdos.c
! fixed format specifiers in HB_TRACE() messages
* src/common/expropt1.c
* src/rtl/langapi.c
* pass explicitly "(null)" string instead of NULL string pointer
to HB_TRACE() messages, some C compilers can autoinline functions
and generate warning detecting such situation
* src/pp/hbpp.c
* cast revision number to ( HB_ULONG ) to avoid warnings in some
compilers which do not understand %I64u format specifier
* utils/hbmk2/hbmk2.prg
* preffer HB_WITH_* settings then platform native pkg-config,
giving pkg-config precedence breaks cross and custom builds
* contrib/hbcurl/core.c
* contrib/hbcurl/hbcurl.ch
+ added HB_CURLOPT_XFERINFODATA and HB_CURLOPT_XFERINFOFUNCTION
! use CURLOPT_XFERINFO* instead of depreciated CURLOPT_PROGRESS*
to implement HB_CURLOPT_PROGRESSBLOCK
! do not use depreciated CURLOPT_RANDOM_FILE and CURLOPT_EGDSOCKET,
they serve no purpose anymore
+ added macros for new protocols
+ added HB_CURLOPT_PROTOCOLS_STR and HB_CURLOPT_REDIR_PROTOCOLS_STR
! use CURLOPT_PROTOCOLS_STR and CURLOPT_REDIR_PROTOCOLS_STR instead
of depreciated CURLOPT_PROTOCOLS and CURLOPT_REDIR_PROTOCOLS
* emulate CURLOPT_PROTOCOLS and CURLOPT_REDIR_PROTOCOLS using
CURLOPT_PROTOCOLS_STR and CURLOPT_REDIR_PROTOCOLS_STR in new curl
versions
+ added support for HB_CURLOPT_MIMEPOST
! use CURLOPT_MIMEPOST to emulate depreciated in new curl versions
CURLOPT_HTTPPOST
+ added support for HB_CURLOPT_PROXY_SERVICE_NAME
! use CURLOPT_PROXY_SERVICE_NAME to emulate depreciated in new curl
versions CURLOPT_SOCKS5_GSSAPI_SERVICE
+ added HB_CURLINFO_ACTIVESOCKET
! use CURLINFO_ACTIVESOCKET instead of depreciated CURLINFO_LASTSOCKET
+ added HB_CURLINFO_SIZE_UPLOAD_T, HB_CURLINFO_SIZE_DOWNLOAD_T,
HB_CURLINFO_SPEED_DOWNLOAD_T, HB_CURLINFO_SPEED_UPLOAD_T,
HB_CURLINFO_CONTENT_LENGTH_DOWNLOAD_T and
HB_CURLINFO_CONTENT_LENGTH_UPLOAD_T
! use CURLINFO_*_T actions instead of depreciated ones which operate
double as file offset and emulate old actions using new ones in
new curl versions
* contrib/hbssl/evp.c
! Do no use EVP_cleanup() in OpenSSL 1.1.0 and newer.
It no longer has any effect.
* contrib/hbssl/hbssl.h
* set OPENSSL_API_COMPAT to 1.2.0 to pacify OpenSSL 3.0 API.
It hides OpenSSL 3.0 warnings but we should update the code to use
new suggested API.
* contrib/hbwin/olecore.c
! invoke assign methods with DISPATCH_PROPERTYPUTREF instead of
DISPATCH_PROPERTYPUT if assigned value is OLE object. If such
functionality is not implemented by the object (some OLE
implementations do not support it and returns DISP_E_MEMBERNOTFOUND)
then call it again but in previous form with DISPATCH_PROPERTYPUT
* include/hbapirdd.h
* src/rdd/dbcmd.c
! fixed error codes set by DbSetRelations() to be Cl*pper compatible
* src/rdd/dbcmd.c
+ accept symbol items in Select() and DbSelectArea() just like in
( <alias> ) -> <exp>
* include/hbcompdf.h
* include/hbexprb.c
* src/common/funcid.c
+ added compile time optimization for Select() function without parameters
+ added compile time optimization DbSelectArea( <nNum> | <sSym> )
+ added support for hb_PIsByRef( @localVarName ) -> <lPassedByRef>
When the parameter is passed by reference Harbour verifies if it's
existing local variable and change it to its index in parameter list
so effectively it works like hb_IsByRef( @localVarName ) in xHarbour
* contrib/xhb/hbcompat.ch
+ added translations for
hb_PIsByRef( @<localVar> ) <=> hb_IsByRef( @<localVar> )
* src/harbour.def
+ added hb_socketNToHS() to exported functions
* src/rtl/hbsocket.c
+ added hb_socketNToHS() for compilation without socket support
(HB_SOCKET_OFF macro)
* contrib/hbfimage/core.c
* use FreeImage_Rotate() instead of FreeImage_RotateClassic() in new
FreeImage versions which do not support this function
* contrib/hbsqlit3/core.c
* added missing casting reported as bug in C++ mode
* contrib/hbssl/hbssl.h
* contrib/hbssl/rsa.c
* added HB_SSL_CONST_BYTE() macro to pacify unconst warnings
in old SSL versions
* src/rdd/wacore.c
* inlined macro to pacify still returning false warning
* src/3rd/Makefile
- src/3rd/tiff/
* package/harbour.spec
* README.md
- Removed third-party TIFF library. It's not clear why it was even
included, it's not C90 compatible anymore, and a major pain to maintain.
* contrib/hbct/ctwin.c
! typo in comment
* include/hbexprb.c
* include/hbexprop.h
* src/common/expropt2.c
* src/harbour.def
* moved code for reducing NOT expression to new separate function
hb_compExprReduceNot()
; added comments to mark places for possible compiletime warnings when
incompatible types are used inside in logical expressions
(.AND. / .OR. / .NOT.)
2023-11-11 18:38 UTC+0100 Phil Krylov (phil a t krylov.eu)
* include/hbwinuni.h
* src/vm/maindllp/dllpcode.c
* In `HB_WINAPI_GETPROCADDRESS[T]`, cast the return value to `void *`
to pacify further cast warnings, as the exact function signature is almost
never a `FARPROC` anyway.
* src/compiler/harbour.yyc
* src/macro/macro.yyc
* Added `HB_SYMBOL_UNUSED( yynerrs )` to pacify compiler warnings.
* src/rtl/replic.c
* Added a cast to a comparison to pacify compiler warning.
* src/vm/classes.c
! Fixed outdated format specifier in a trace message.
* include/hbclass.ch
! fixed declaration stripping when HB_CLS_NO_DECLARATIONS is defined
* src/compiler/hbmain.c
! do not generate warnings for undeclared methods when -w[12] is used.
They should be emitted only for -w3 or higher (if any in the future).
Thanks to Toninho for the information about the problem.
* include/harbour.hbx
* src/harbour.def
* src/rtl/vfile.c
+ added new PRG function:
hb_vfIsLocal( <cFileName> ) --> <lLocalFileSystem>
It returns TRUE if <cFileName> is not redirected to any Harbour File IO
driver but access local file system API.
* contrib/xhb/traceprg.prg
* merged with Victor's branch so now Harbour File IO API is used to
access log file.
* convert relative log file name to absolute file path name
% write whole log entry in single IO operation.
* contrib/xhb/hbcompat.ch
! fixed translations of xHarbour operators inside brackets,
thanks to Ron.
* contrib/xhb/xhb.hbx
* contrib/xhb/xcstr.prg
+ added support for timestamp translations
! fixed few wrong translations
! fixed serialization of hash items with cyclic references
in ValToPrg()
% optimized cyclic references detection in ValToPrg()
! generate dummy code which cannot be compiled for codeblocks serialized
by ValToPrg()
* contrib/xhb/xhb.ch
+ added SET TRACE ... command, thanks to Ron.
* contrib/xhb/xhberror.c
* do not show __ERRRT_BASE() and __ERRRT_SBASE() in error call stack.
* src/vm/classes.c
! added protection against possible GPF when manually created serialized object
data with super class symbols longer then HB_SYMBOL_NAME_LEN is deserialized
* src/vm/arrays.c
! fixed buffer allocation in AClone()/hb_HClone() with possible cyclic
references.
I created the problem on 2023-01-30 15:18 UTC+0100 and it was reported
as internal error 9024: hb_xrealloc requested to resize to zero bytes
* contrib/xhb/xhberrc.c
+ implemented Harbour version of SetUnhandledExceptionFilter() and
SetErrorMode()
* src/rtl/diskspac.c
% use GetDiskFreeSpaceEx() directly on Win64 instead of accessing it
by GetProcAddress()
* ChangeLog.txt
! typo in file name in previous commit
* include/hbapierr.h
* src/harbour.def
* src/rtl/errapi.c
+ added new C function:
void hb_errReinit( PHB_ITEM pError );
it allows to replace default error object with user custom one which
support :Init() method
* contrib/xhb/xhb.hbp
+ contrib/xhb/xhb.h
+ contrib/xhb/xhberror.prg
+ added code which extends Harbour error objects adding functionality
known from xHarbour:
oError:ProcName
oError:ProcLine
oError:ProcModule
Above instance variables are initialized automatically when error
object is created.
To enable this functionality it's enough to add to PRG code:
REQUEST xhb_ErrorNew
* contrib/xhb/xhberr.prg
* use error object :Proc*() methods if they are available
- removed PRG version of xhb_ErrorNew()
* contrib/xhb/xhbmemo.prg
* contrib/xhb/xhbtedit.prg
! use xhb_ErrorNew() instead of ErrorNew() which does not support
any parameters
* include/hbapicls.h
; typo in comment
* src/rtl/arc4.c
! include hbarc4.h instead of arc4.h which does not contain
required for dynamic libraries export attributes in function
declaration
* src/vm/classes.c
! cleaned module symbol range checking
* src/vm/arrays.c
% optimized AClone() and hb_HClone()
* src/vm/hvmall.c
% changed the order of included files to keep alive function macros
undefined in garbage.c and fm.c
* src/vm/hvm.c
! fixed hb_vmGetRealFuncSym() to work with PRG functions written in C
and registered in HVM without their own symbol table
* src/vm/dynsym.c
; comment updated
* include/harbour.hbx
! added missing hb_socketSetNoSigPipe()
* src/rdd/dbfcdx/dbfcdx1.c
* redirect all debug output to stderr
* reenabled light debug code for early detection of index corruption
* contrib/gtqtc/gtqtc.h
* contrib/gtqtc/gtqtc1.cpp
* replaced depreciated in 5.15 methods for mouse wheel events processing
by modern ones
* replaced depreciated in 5.15 methods for accessing screen geometry by
modern ones
* contrib/gtqtc/gtqtc1.cpp
+ added support for TAB key processing when other widgets are shown and
TAB is use to switch focus
* src/rtl/alert.prg
* src/rtl/hbgtcore.c
+ added support for hb_Alert() parameters passed in hash array, i.e.
hb_Alert( { "TXT" => <cMessage>, ;
"BTN" => <aButtons>, ;
[ "TIM" => <nTimeOut> ] } ) => <nButton>
* contrib/gtqtc/gtqtc.h
* contrib/gtqtc/gtqtc1.cpp
* include/hbgtinfo.ch
+ added new hb_gtInfo() action: HB_GTI_MSGBOX
It opens QMessageBox with given by user text and buttons, i.e.
hb_gtInfo( HB_GTI_MSGBOX, <cMessage>, <aButtons> ) => <nButton>
or:
hb_gtInfo( HB_GTI_MSGBOX, ;
{ "TXT" => <cMessage>, ;
"BTN" => <aButtons>, ;
[ "TIM" => <nTimeOut>, ] ;
[ "TIT" => <cTitle>, ] ;
[ "INF" => <cInfoText>, ] ;
[ "DTL" => <cDetailedText> ] } ) => <nButton>
+ added support for redirecting Alert() and hb_Alert() calls to QT GUI
QMessageBox(). This functionality can be enabled by:
hb_gtInfo( HB_GTI_MSGBOX, .t. )
and then
Alert( <cMessage>, <aButtons> )
is redirected to QT GUI QMessageBox().
* include/hbgtinfo.ch
* contrib/gtqtc/gtqtc.h
* contrib/gtqtc/gtqtc.hbc
* contrib/gtqtc/gtqtc.hbp
* contrib/gtqtc/gtqtc1.cpp
+ added new hb_gtInfo() action: HB_QT_SOUND
It allows to play sound using the low level GUI library, i.e.
hb_gtInfo( HB_QT_SOUND, <cSoundFile> )
This modification needs additional QT5 library Qt5Multimedia so I decided
to enable it conditionally by HB_QT_SOUND=yes environment variable.