* utils/hbmk2/hbmk2.prg
+ Rewritten dependency checking logic. New solution
integrates -reqheader, -inctrypath, -reqpkg options.
(Current parametrization and terminology is not final.)
The new engine supports dependency detection by package
name (via pkg-config/*-config), even multiple ones, by
key header file using custom header search paths, both
global and local. It also supports built-in detection
control as we know it from our GNU Make build system
via HBMK_WITH_* envvar (or one with customzed name)
which can have no/yes/nolocal/local/force values. This
implementation also supports optional dependencies.
* package/winuni/RELNOTES
* Updated.
* harbour.spec
* doc/dirstruc.txt
* utils/hbmk2/examples/contribf.hbc
* contrib/Makefile
- contrib/hbbtree
+ examples/hbbtree
- examples/hbbtree/Makefile
* hbbtree move to example section as told in a recent
changelog entry. This contrib has long time unfixed
file-format portability problems, plus it's really
more of a good example code than lib for end-users.
* utils/hbmk2/hbmk2.prg
+ Now uses regular expression to extract #include directives
from source files, so now it should recognize all supported
syntax variations (f.e. " # include <>"). The only
difference between real source parser is now only the lack
of comment filtering (and no preprocessor, but this latter
isn't desired for multiple reasons).
Pls review me.
* src/rtl/hbregex.c
* HB_ATX() cleanup code layout, minimalized variable scopes.
% HB_ATX() minor optimization: No need to check pcount before
calling hb_stor*() functions since it's done anyway inside
those calls.
* HB_ATX() will now default the 5th <nEnd> parameter to the
full length of the passed source string. It's slight
incompatibility though I doubt too many users would have
called this with empty 5th parameter, since the function
just didn't do anything in this case.
Pls review this, maybe I misunderstood original intent.
* src/vm/fm.c
* src/vm/set.c
* SET( _SET_HBOUTLOG, NIL ) will now reset the internal output
name to NULL, which is also the new internal default value.
* After this change the GPF handler and FM STAT dump code
will do the defaulting to "hb_out.log" filename, if the
internal _SET_HBOUTLOG value is NULL. This causes a small
incompatibility in how log file can be disabled, and at the
same time allows to implement low-level logging logic for
default case which is safer than current one, while allowing
the user (developer) to set a custom log filename and expect
regular log file append behavior.
From now on to disable logging, use: SET( _SET_HBOUTLOG )
* utils/hbmk2/hbmk2.prg
! Fixed to not do pkg detection and key header evaluation
after -stop and certain modes.
+ Added full list of std C and POSIX headers to the header
exclusion list in header dependency parser code.
Also added dos.h.
* contrib/xhb/dbgfxc.c
* Formatting.
* utils/hbmk2/hbmk2.prg
+ Will now ignore current and host directory when looking
for system headers (<>) in header dependency finder code.
+ contrib/hbmysql/hbmysql.hbp
+ contrib/sddmy/sddmy.hbp
+ contrib/sddfb/sddfb.hbp
+ contrib/sddpg/sddpg.hbp
+ contrib/hbcups/hbcups.hbp
+ contrib/hbpgsql/hbpgsql.hbp
+ contrib/rddads/rddads.hbp
+ contrib/hbfimage/hbfimage.hbp
+ contrib/hbgd/hbgd.hbp
+ contrib/sddoci/sddoci.hbp
+ contrib/hbcairo/hbcairo.hbp
+ Added new hbmk2 make files.
* contrib/hbgd/Makefile
- Deleted some information from cmoment. (now included in INSTALL)
* contrib/hbcairo/hbcairo.h
* Formatting.
* utils/hbmk2/hbmk2.prg
+ Added experimental support for filters containing string
comparisons, f.e.: '{MY_VAR='hello'}-cflag=-DMY_FLAG'
; NOTE: It's not guaranteed yet that this feature will stay.
* include/hbzlib.ch
+ Added HB_ZLIB_RES_* zlib result values.
* contrib/xhb/Makefile
- contrib/xhb/hbcomprs.c
+ contrib/xhb/hbcomprs.prg
+ contrib/xhb/tests/compress.prg
+ Rewritten xhb compatiblity compression functions in .prg.
The main reason was to avoid dependence on zlib.h on C level.
This simplifies the build layout.
! This fixes last zip error to work in MT programs.
+ Added test/demo program from xhb. Work by Giancarlo Niccolai.
; NOTE: Tested only with xhb test/demo program.
* contrib/xhb/hbcomprs.ch
+ Changed to use HB_ZLIB_* constants. So it's now only a wrapper
instead of replicating values.
* contrib/hbqt/hbqt.h
* contrib/hbqt/hbqt_hbqtableview.h
* contrib/hbqt/hbqt_hbevents.h
* contrib/hbqt/hbqt_hbdbfmodel.cpp
* contrib/hbqt/hbqt_hbqsyntaxhighlighter.cpp
* contrib/hbqt/hbqt_hbqmainwindow.h
* contrib/hbqt/hbqt_hbqtableview.cpp
* contrib/hbqt/hbqt_hbevents.cpp
* contrib/hbqt/hbqt_hbqplaintextedit.h
* contrib/hbqt/hbqt_hbdbfmodel.h
* contrib/hbqt/hbqt_destruct.cpp
* contrib/hbqt/hbqt_utils.cpp
* contrib/hbqt/hbqt_hbqsyntaxhighlighter.h
* contrib/hbqt/hbqt_hbqplaintextedit.cpp
* contrib/hbqt/hbqt_hbslots.cpp
* contrib/hbqt/qth/QVariant.qth
* contrib/hbqt/qth/QCursor.qth
* contrib/hbqt/qth/QClipboard.qth
* contrib/hbqt/qth/QApplication.qth
* contrib/hbqt/qth/QCoreApplication.qth
* contrib/hbqt/qth/QImage.qth
* contrib/hbqt/qth/QUrl.qth
* contrib/hbqt/qth/QAbstractItemModel.qth
* contrib/hbqt/qth/QImageReader.qth
* contrib/hbqt/qth/QWebHistoryItem.qth
* contrib/hbqt/qth/QFont.qth
* contrib/hbqt/qth/QFontDatabase.qth
! Fixed to use '#include <QModule/QName>' format when referring
to QT headers. This is the official way and it allows to clean
the include header paths.
! Fixed to use '#include <QtCore/qglobal>' instead of
'#include <qglobal.h>' for the same reason as above.
* contrib/hbqt/hbqt.h
+ Added '#include "QtCore/QObject"' to make hbmk2 component
detection happy. This is slight hack as I didn't want to
introduce parsing of '<>' style system headers just for the
sake of QT. Anyway it's quite humble hack without side effects.
* contrib/hbqt/detect.mk
* Changed to 'QtCore/qglobal.h' as key header name used for
detection.
! Fix to header dir autodetection path on darwin platform.
(it would have caused potential problem with QT 5.x releases)
% Simplified header path list for non-darwin platforms.
+ contrib/hbqt/hbqt_common.hbm
+ contrib/hbqt/hbqt.hbp
+ contrib/hbqt/hbqts.hbp
+ contrib/hbqt/hbqtcore.hbp
+ contrib/hbqt/hbqtcores.hbp
+ contrib/hbqt/hbqtgui.hbp
+ contrib/hbqt/hbqtguis.hbp
+ contrib/hbqt/hbqtnetwork.hbp
+ contrib/hbqt/hbqtnetworks.hbp
+ Added hbmk2 make files for HBQT libs.
Features are equivalent to the GNU Make flavour.
(only tested on Windows so far)
+ contrib/hbxbp/hbxbp.hbp
+ Added hbmk2 make file for HBXBP lib.
* contrib/hbfbird/hbfbird.hbp
* contrib/hbsms/hbsms.hbp
* Use ${hb_name} instead of ${hb_dirname}.
+ Added -w3 -es3 options.
* utils/hbmk2/hbmk2.prg
+ Set pathseps to '/' in "-reqheader=' and
'-reqpkg=' header names.
- utils/hbmk2/examples/plug_moc.prg
+ contrib/hbqt/plug_moc.prg
* Moved inside hbqt lib.
* contrib/hbqt/qtgui/*
* contrib/hbqt/qtcore/*
* Regenerated.
* utils/hbmk2/hbmk2.prg
+ Beefed up and fixed -reqpkg feature:
+ Possible to pass multiple alternate pkg names:
-reqpkg=cairo|cairo2|cairo.h
+ Possible to attach header name, in which case it
will automatically satify the -reqheader= parameter
with same header name, if it exists. Headers without
extension can be specified as 'header.'
! Fixed to use case-insensitive lookup in header list
on non-*nix systems.
+ Added -info messages regarding pkg detection.
! Fixed parsing of -l/-L/-I parameters in pkg detection
code.
* utils/hbmk2/hbmk2.prg
! Fixed silly variable initialization bug after last commit.
* contrib/hbwin/wapi_shellapi.c
! Fixed WAPI_SHELLEXECUTE() having HB_PARSTRDEF() one
position off.
* examples/rddado/tests/access1.prg
* Minor update. Still doesn't work.
* utils/hbmk2/hbmk2.prg
+ Added untested, experimental support for -reqpkg=/reqpkgs=
(.hbp/.hbc) options. F.e. '-reqpkg=libcurl' option causes
hbmk2 to query library, library path and include path
information from 'pkg-config' tool and if not found using
'*-config' script, and to automatically pass these information
to C compiler/linker. In addition, it will automatically add
a macro named HBMK2_HAS_LIBCURL to C compiler cmdline, so
that the sources get to know that this package was found.
; NOTE: Nothing is finalized, it is still a question how to
setup obligatory and optional components, current
implementation is rather a mixture, but anyway pls
feel free to test it. It's also a question how to merge
this method with the -inctrypath/-reqheader one.
Later we can consider adopting extra C flags, too,
and it can be extended to know about more package
detection methods (even platform dependent ones can
be used if they adhere to more or less the same
principle of 'pkgname->IN incpaths/libpaths/libs->OUT')
Thanks to Tamas Tevesz for sparking the idea.
* utils/hbmk2/hbmk2.prg
+ Added ${hb_filename} macro.
+ "hbexe", "hblib", "hbdyn", "hbdynvm", "hbimplib" can now
be used as filter keywords to detect target type.
* contrib/hbwin/hbolesrv.hbc
+ Will now show warning message if not used together with
-hbdynvm option.
+ Will will now be ignored if not used together with
-hbdynvm option.
; Tried to add hbolesrv.c as direct source 'sources=hbolesrv.c',
but it requires this source (+ headers) to be distributed along
the binaries, plus it didn't resolve the watcom issue, so
I dropped it.
* utils/hbmk2/examples/contribf.hbc
* contrib/Makefile
+ contrib/hbcomm
+ contrib/hbcomm/Makefile
+ contrib/hbcomm/hbcomm.hbc
+ contrib/hbcomm/hbcomm.prg
+ contrib/hbcomm/hbcomm.hbp
+ contrib/hbcomm/tests
+ contrib/hbcomm/tests/hbmk.hbm
+ contrib/hbcomm/tests/test.prg
+ Added HBCOMM compatibility library. It's based on hbct
COM functions. Not tested with real port. Also see one
TOFIX and one INCOMPATIBILITY note inside. The latter
belongs to INCHR() function which in original HBCOMM
library will do HVM corruption by overwriting string
content passed as 3rd parameter. In Harbour 3rd
parameter needs to be passed by reference.
Also added fully adapted test code from HARBOUR MINIGUI
project. Interestingly this code was using the return
value of INCHR() to get the returned buffer, which was
in sync with included HBCOMM code. Anyway, hopefully
this can be finalized based on report from real users.
; DISCLAIMER:
EXPERIMENTAL CODE. USE AT YOUR OWN RISK. NO GUARANTEES.
+ contrib/hbfbird/hbfbird.hbp
+ contrib/hbsms/hbsms.hbp
+ Added early bird experimental .hbp files for contrib
two projects.
* utils/hbmk2/hbmk2.prg
+ Added support for ${hb_dirname} macro which returns the
directory in which the script file is where the macro is
used.
! Fixed so that '-build' option doesn't require a configured
C compiler.
+ Extended hack for bcc autoconfiguration with 5.8 support,
adding an extra system header directory to the include
dir list if it exists. bcc 5.8 appears to be well installed,
so this is probably not needed for most users.
+ Documented dir casing differences between bcc 5.5 and 5.82.
This may be important for autoconfiguration hack to work with
bcc under wine using native hbmk2 build. I'm not even sure
such scenario is possible at all ;)
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
+ Added support for 'psources=' and 'pflags=' directives in
.hbc files. They serve the same purpose as cmdline '-pi='
and '-pflag=' options; passing parameters to plugins.
% Minor internal optimizations, also fixing some very rare
and light potential problems with letting to add double
parameters when passing them using different pathseps.
* include/hbapifs.h
+ Added some more HB_EXPORT flags. Pls check me.
* contrib/hbwin/hbolesrv.hbc
+ Added reference to hbwin.hbc, so that it can be used
standalone accompanied by -hbdynvm option to create
OLE servers easily: 'hbmk2 -hbdynvm hbolesrv.hbc ...'
* contrib/hbwin/hbolesrv-watcom.def
! Fixed comments to watcom format.
* utils/hbmk2/hbmk2.prg
! Fixed RTE when parsing certain rarer Windows file types
in sources= directive in .hbc files in *nix hbmk2 builds.
(could only kick in when using hbmk2 under *nix to cross
compile for Windows). Thanks Przemek for the report.
- Deleted doubly added support for .def file parsing in sources=
directive.
* include/hbapi.h
! Added HB_EXPORT to hb_memvarGet() and hb_memvarSetValue()
used by new OLE server code in hbwin when created -shared
OLE server .dlls.
+ contrib/hbwin/hbolesrv.hbc
+ Added .hbc file to help creating OLE servers.
* contrib/hbwin/tests/olesrv1.hbp
* contrib/hbwin/tests/olesrv2.hbp
* contrib/hbwin/tests/olesrv3.hbp
% Changed to use hbolesrv.hbc.
- Deleted '-static' option to also allow to build -shared
OLE servers. (I tested them OK)
* contrib/hbwin/tests/olesrv2.prg
+ Tweak to allow case-insensitive access of OLE functions.
* utils/hbmk2/hbmk2.prg
+ Added support for .def files in source= .hbc line.
* contrib/hbide/ideprojmanager.prg
! Fixed output directory issue without the need for an hbmk2 plugin.
HBIDE was changing current dir when calling hbmk2, so the detected
output filename needs to be rebased from that directory.
* contrib/hbide/ideprojmanager.prg
- contrib/hbide/idedetect.prg
+ contrib/hbide/resources/hbmk2_plugin_hbide.prg
* Moved plugin to resources directory.
- Commented plugin content.
* utils/hbmk2/hbmk2.prg
* Cleaned up path seps in plugin filenames.
* utils/hbmk2/hbmk2.prg
* '-plug=' option renamed to '-plugin='
+ Added support for 'plugins=' line in .hbc files.
% Plugins are now fully loaded just once at the beginning
of hbmk2. (as opposed to every invocation)
+ Plugins are now automatically treated as .hrb or .prg
based on _file content_. This means that any extension
can be used for plugins for both .prg and .hrb code.
When .prg or .hrb extension is used there isn't any
extra trial made on the file content, it will be load
as source or HRB respectively.
Maybe we should find a new distinctive extension for
hbmk2 plugins.
* Default extension for -plugin= option changed to .prg
(was: .hrb)
+ Showing type of input plugin in -trace mode.
('source' or 'compiled')
* config/detect.mk
! Applied fix to DragonFly patch, submitted by Tamas Tevesz.
* src/vm/runner.c
* Minor formatting.
* src/common/hbprintf.c
* include/hbsetup.h
* config/global.mk
* config/bsd/libs.mk
* config/detect.mk
+ Applied patch by Tamas Tevesz, making it possible to build
Harbour for DragonFly BSD systems.
Thanks a bunch.
* utils/hbmk2/hbmk2.prg
+ Applied above change to hbmk2 code, so now it should also
support DragonFly BSD. (pls test it)
* utils/hbmk2/hbmk2.prg
+ Added .hbi to the list of accepted projects at cmdline.
This means that hbmk2 can be run like 'hbmk2 mylib.hbp mylib.hbi'
to create the lib and also generate the implib.
* '-keyheader=' renamed to '-reqheader='
! Fixed typo causing RTE while creating implibs for targets
supporting OMF lib type.
* utils/hbmk2/hbmk2.prg
+ Added experimental feature to aid external dependency
detection. Key header files can now be specified using
'-keyheader=' option. In case such key headers are not
found when evaluating '-inctrypath' conditional header
directories. The goal is to make hbmk2 capable of
replacing GNU Make for all of our contribs. F.e.:
'clean':
{HB_HOST_BIN_DIR}/hbmk2 hbfbird/hbfbird.hbp hbsms/hbsms.hbp -o../lib/${hb_plat}/${hb_comp}/ -clean
simple make:
{HB_HOST_BIN_DIR}/hbmk2 hbfbird/hbfbird.hbp hbsms/hbsms.hbp -o../lib/${hb_plat}/${hb_comp}/
'install':
{HB_HOST_BIN_DIR}/hbmk2 hbfbird/hbfbird.hbp hbsms/hbsms.hbp -o../lib/${hb_plat}/${hb_comp}/ -instpath=${HB_LIB_INSTALL}/ -info
% Minor cleanup to some plugin API functions.
* utils/hbmk2/examples/plug_moc.prg
% Minor cleanup.
* contrib/sddoci/tests/test1.prg
+ Showing field length and decimals.
* utils/hbmk2/hbmk2.prg
+ Upped warning level for plugins to -w3.
* utils/hbmk2/examples/plug_moc.prg
+ Added -inc, -clean and -rebuild (IOW incremental)
support for moc plugin. It was tested OK in small
example.
* utils/hbmk2/examples/plug_tpl.prg
* Minor.
* utils/hbmk2/hbmk2.prg
* Moved some local variables to internal hbmk2 structure.
+ Made some more functions and variables accesible to plugns
in order to help creating smooth external calls.
+ utils/hbmk2/examples/plug_moc.prg
+ Added 'moc' plugin, which is supposed to be fully functionaly,
though I didn't test it live.
- utils/hbmk2/examples/plug_moc.prg
+ utils/hbmk2/examples/plug_tpl.prg
* Renamed first example.
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/examples/plug_moc.prg
% Further cleaned context passing, so that now even the
'state' variable is passed as part of context rather than
as separate variable, so now the only parameter the plugin
gets is the callback. This is much more flexible and future
proof this way.
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/examples/plug_moc.prg
% Refined how context is passed to plugins, and how
context is passed back to public APIs.
+ Added way to accept parameters from the cmdline and .hbp
files. This is possible via '-pflag=' and '-pi=' options.
Latter serves to pass input file, so the input file magic
logic is always applied to it. Notice that all plugins are
getting all input parameters, so it's their job to process
only what's relevant to them. plugin specific option prefixes
f.e. can be a solution for that.
+ Added API to add new input .prg, .c, .cpp and .rc files
to the build process.
+ Added better protection from tampering internal hbmk2
structures by plugins.
+ Showing error condition and location in case of an RTE occurs
in a plugin.
* utils/hbmk2/hbmk2.prg
+ utils/hbmk2/examples/plug_moc.prg
+ Added experimental plugin system. Plugins are written in .prg
or .hrb and can be passed using '-plug=<.prg|.hrb>' option
or simply by passing '.hrb' filename from cmdline or .hbp/.hbm
files. Plugin names without dir component will be searched
in local dir, hbmk2 dir then PATH.
For the details of the calling protocol and available hbmk2
API calls and variables, pls check the example and hbmk2
source code.
Plugin is called from several build stages, in case of multiple
plugins all of them are called at each stage. The plugin
receives the stage name, hbmk2 context and a hash table for
custom variables. The variables are shared between stages and
plugins. Notice that hbmk2 isn't hbrun, so there is a limited
set of the Harbour language which you can use, this also ensures
that the plugins will behave like hbmk2 itself for the most part.
Nothing is finalized.
; The example is the working replica of moc detection logic found
inside hbqt.
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.prg
+ In non-incremental mode when no workdir is manually set, hbmk2
will now create a temp subdir inside temp dir and create any
intermediate output files there. (previously it was using the
temp dir without creating a temp subdir inside).
; Please test and report leftover temp files and dirs, also test
it on *nix platforms.
* Changed 'couldn't', 'don't' style English abbrevs to
'could not', 'do not', etc.
* config/rules.mk
! Fixed to include static-only C compiler options for targets
which have no separate static/dynamic C compiler pass.
This should fix wrongly built pcre lib causing missing
exported functions in mingw Harbour .dlls.
* utils/hbmk2/hbmk2.prg
+ Changed filtering implementation for cmdline parameters.
Now filters can be placed anywhere and they work for all
parameters.
Please test, regressions may be possible.
* config/postinst.prg
! Added gpm handling logic to hbmk.cfg creation. This was
previously done in recently deleted postinst.sh function.
* utils/hbmk2/hbmk2.prg
! -hbimplib extended for bcc and msvc* to automatically recognize
and use .def file with the same name as the .dll, if present.
! -hbimplib extended for bcc to first look for any existing
OMF .lib file with the same name as the .dll.
! Refined fallback logic used in implib generation.
(moved .dll existence check to lower level)
* Refinements in pathsep usage in implib generation.
* contrib/sddfb/sddfb.hbi
* contrib/hbfbird/hbfbird.hbi
+ Using COFF libs for pocc targets.
* utils/hbmk2/hbmk2.prg
! -hbimplib extended for msvc to first look for any existing
.lib file with the same name as the .dll.
* contrib/sddfb/sddfb.hbi
* contrib/hbfbird/hbfbird.hbi
* Changed to use existing .lib for msvc compilers.
* utils/hbmk2/hbmk2.prg
! Fixed filter evaluation to not let envvar names colliding
with built-in filter keywords influence the results.
(f.e. '{watcom}' while having properly configured watcom
compiler defining WATCOM envvar and using a non-watcom
compiler for the actual hbmk2 session).
% Optimized filter evaluation.
; Thanks to Przemek for the patches.