* source/vm/maindllh.c
* source/vm/Makefile
+ Added support for os2 .dll. Please review.
* config/os2/watcom.mk
+ Added os2 .dll generation for watcom.
Now it generates OK.
* source/Makefile
* config/lib.mk
+ Added support for os2 and some level of *nix support.
* INSTALL
* Minor update to a few option description.
* utils/hbmk2/hbmk2.prg
+ Added preliminary/experimental/untested OS/2 -shared (.dll)
support for watcom targets.
* source/dynlib/mt/Makefile
* source/dynlib/Makefile
+ Added 'install' logic for dynamic lib implibs.
* config/global.mk
+ Added useful GNU Make link.
! Added HB_HOST_CPU "detection" for os2 and dos to avoid
situation where cross-build is detected due to different
to HB_CPU value. (HB_CPU autodetection for os2 dos was
added yesterday). It's quite theoretical, as os2 dos
has CPU type set to constant 'x86'.
+ Added IMP_DIR value. This hold where to store implibs
for dynamic libs. Empty if platform don't need implibs
(huge relief BTW). For *nix this value is set empty, for
non-*nix it's set to LIB_DIR.
+ Added initialization for DYN_PREF (to empty).
* config/dyn.mk
+ Added handling of IMP_DIR, IMP_FILE.
! Dyn lib build rule guarded with HB_BUILD_DLL and DY_RULE
checks.
* config/globsh.mk
+ Added dirbase and clean rules for implibs.
! Fixed using OS version of dirs in $(wildcard) for nt
clean rules for OBJ_DIR and PKG_DIR.
* config/wce/mingwarm.mk
* config/wce/poccarm.mk
* config/wce/msvcarm.mk
* config/win/xcc.mk
* config/win/mingw.mk
* config/win/pocc.mk
* config/win/bcc.mk
* config/win/watcom.mk
* config/win/icc.mk
* config/win/cygwin.mk
* config/win/msvc.mk
+ Dynamic lib rules extended to generate implib in IMP_DIR.
This goes smoothly with all compiler except bcc, which requires
a copy and a delete to move the implib to lib dir. 'move'
doesn't work (says 'command not found' or equivalent and
requires '$(COMSPEC) /C' with GNU Make + nt shell), so I
didn't use it finally. Anyhow bcc implib is small.
* config/globsh.mk
- Deleted $(MV) variable with move command.
(problematic under nt shells)
- config/dj-mv.exe
* config/readme.txt
- Deleted DJGPP mv tool.
; NOTE: dynamic library handling seems to be about feature complete.
* harbour/contrib/hbwin/axcore.c
* do not pass event number as 1-st parameter to user handlers
taken from array indexed by event numbers - it's not necessary
to repeat it.
* updated RT error handlers
* harbour/config/global.mk
* extended MS-DOS detection
* source/pp/Makefile
- Deleted just added global.mk. It's not needed.
* config/globsh.mk
+ Added $(MV) variable with move command.
+ Added $(LN) variable with *nix link command.
! Fixed $(RM) in os2 shell rules to use os2-rm.exe
instead of shell provided del. Latter show errors
if filename doesn't exist, and we're now using
clean rules copied from dos shell, which doesn't
make extra existance checks. Well, to put it
shortly I've synced $(RM) with dos shell solution.
+ config/dj-mv.exe
* config/readme.txt
+ Added DJGPP mv tool.
* bin/hb-func.sh
! Fixed typo in syslib lone in a recent commit.
* source/pp/Makefile
! Deleted double clean rules for hbpp executable + .tds file.
Since BIN_FILE is set, it will be done in central clean rules
anyway.
This solves the recently shown up error message on 'clean'
when using certain shells (nt). It was cleaned twice and for
some reason this created a problem after switching central
rules to use $(wildcard) instead of 'if exist'. Probably
rules are merged, then evaluated at once, thus leaving
two delete commands, since when the file existed when
this evaluation took place.
* config/globsh.mk
! Restored backslashes for GNU rm command for os2 shell.
It turns out rm needs backslashes in filenames (on contrary
to mkdir which needs forward slashes.) Not terribly consistent.
BTW they came from same packages.
Thanks to Maurilio Longo for the information.
* source/pp/Makefile
! Readded empty line after pptable rule.
I couldn't find the reason why this was needed, anyhow
without it the dynamic hbpp obj deletion didn't work.
Which GNU Make syntax rules am I forgetting? Any hints?
; TOFIX: Another issue has shown its ugly head, here clean
in hbpp shows error message from 'del' command on
nt shell deleting the .exe (and .tds), despite the
file is there and we're doing wildcard check too.
Ideas are welcome. This worked a few days ago.
* source/pp/Makefile
! Readded empty line after pptable rule.
I couldn't find the reason why this was needed, anyhow
without it the dynamic hbpp obj deletion didn't work.
Which GNU Make syntax rules am I forgetting? Any hints?
; TOFIX: Another issue has shown its ugly head, here clean
in hbpp shows error message from 'del' command on
nt shell deleting the .exe (and .tds), despite the
file is there and we're doing wildcard check too.
Ideas are welcome. This worked a few days ago.
* config/globsh.mk
% Replaced 'if not exist' nt and os2 shell cmds with $(wildcard).
% Using plain (non OS converted) variables in $(wildcard) calls
in dos clean rules.
% Deleted 'if not exist' os2 shell cmds from dirbase rules.
Since we're using GNU tools this isn't necessary, errors will
not be shown if the dir already exists. This makes these rules
similar to dos ones.
! Fixed to not use OS converted parameters with $(RDP) calls with
os2 shell. I can't test, but last information from OS/2 users
was that OS/2 GNU Tools expect *nix style path seps.
* Synced os2 shell clean rules with DOS ones, except using
*nix style parameters in GNU cmds.
* config/instsh.mk
% Replaced 'if not exist' nt and os2 shell cmds with $(wildcard).
In nt I've added a trick to make it work with dirs containing
spaces.
; After these changes no more 'if [not] exist' shell specific
commands are used in Harbour GNU Make system.
; TOFIX: Except sh shell. Probably the rules there can be synced now
with other shells and special bash logic dropped.
* source/dynlib/Makefile
* source/Makefile
+ Moved dynamic lib generation initialization logic to source
root Makefile. This ensures that all subdirs are built before
creating the dynamic libraries.
* config/globsh.mk
+ Added rules to delete .def files.
* config/global.mk
* INSTALL
+ Added HB_DYN_INSTALL envvar. This will tell where to copy
Harbour dynamic libraries. By default it's set to HB_LIB_INSTALL
for *nix targets and HB_BIN_INSTALL for non-*nix targets.
* bin/postinst.bat
- bin/hb-mkdyn.bat
- Deleted batch script to create .dlls. Now done from GNU Make
system. This means it work on all shells we support, not just
nt ones.
; TOFIX: Delete win-based gcc family support from hb-mkdyn.sh,
now it's redundant.
* config/os2/gcc.mk
% Using $(wildcard) instead of echo trick to delete target lib.
Please test. I don't have access to OS/2.
; 'if exist' and 'if not exist' are now only used from
globsh.mk nt and os2 shell sections.
; TOFIX: $(COMSPEC) still in OS/2 section. Test results would be
welcome without it.
* config/win/bcc.mk
* config/win/watcom.mk
+ Added new .dll build rules.
; TODO: Solve handling of generated implib.
; TODO: Add dynlib generation logic for *nix targets.
; TODO: Delete postinst script if the new method turns out to
work alright.
* config/win/cygwin.mk
* config/win/icc.mk
* config/win/xcc.mk
* config/win/pocc.mk
* config/wce/mingwarm.mk
* config/wce/poccarm.mk
* config/wce/msvcarm.mk
+ Implemented .dll creation for rest of win/wce compilers:
icc uses the same logic as msvc.
pocc/poccarm/msvcarm/xcc uses the same logic as msvc
except /subsystem option.
mingwarm/cygwin uses the same logic as mingw.
; I didn't test wce ones yet.
* config/win/msvc.mk
% Using $(wildcard) instead of echo trick to delete __lib__.tmp.
* config/win/mingw.mk
* config/win/msvc.mk
* Moved HB_USER_DFLAGS in cmdline.
* config/win/watcom.mk
* config/dos/watcom.mk
* config/linux/watcom.mk
* config/os2/watcom.mk
+ Added 'OP quiet' option to wlink command.
* source/pp/Makefile
! Using OBJ_DYN_POSTFIX instead of hardwired value.
* source/vm/mainwin.c
* source/vm/mainstd.c
! Typo in prev commit regarding watcom/dynlib hack.
* source/rtl/gtwvt/gtwvt.c
! Fix for msvcarm build, where WS_OVERLAPPEDWINDOW macro
is reported missing.
* harbour/bin/hb-func.sh
! do not strip system libraries in windows shared linking - unused
ones are not attached to harbour*.dll
* harbour/contrib/hbwin/hbwinole.h
* harbour/contrib/hbwin/olecore.c
+ added support to pass strings with embedded chr(0) characters
+ added new public C function:
IDispatch* hb_oleItemGet( PHB_ITEM pItem );
it extracts IDispatch* pointer from Harbour OLE pointer item.
+ added new public C function:
void hb_oleVariantUpdate( VARIANT* pVariant, PHB_ITEM pItem );
it updates pVariant structure using values from given pointer item
(used to update parameter passed by reference to activex event handler)
% optimized some code
* harbour/contrib/hbwin/hbwinole.h
* harbour/contrib/hbwin/axcore.c
+ added new public C function:
BOOL hb_oleAxInit( void );
+ added new public C function:
PHB_ITEM hb_oleAxControlNew( PHB_ITEM pItem, HWND hWnd );
It's C function with the same functionality as __AXGETCONTROL()
! allocate ISink structure using hb_xgrab() not hb_gcAlloc()
! initialize ISink reference counter to 0
! fixed Release() method to free all allocated resources when
reference counter reach 0
* return new Active-X control as Harbour OLE item pointer.
Warning !!! hb_parptr() and hb_itemGetPtr() do not return valid
pointer for controls created by hb_oleAxControlNew()/__AXGETCONTROL()
Use hb_oleItemGet() and hb_oleParam() to extract pointer to IDispatch
Please update existing code which used __AXGETCONTROL() pointers
at C level.
- removed not longer used hb_sink_destructor
! removed WIN_AXRELEASEOBJECT() - this function breaks reference counters
used by OLE object which needs strict updating to avoid memory leaks
(not freed OLE object) or GPF traps (accessing freed object)
+ extended Invoke() method to update OLE parameters passed by reference.
+ accept as event handler hash arrays indexed by event numbers and
values with codeblocks or function pointers. Similar functionality
exists in HWGUI when it's compiled with __USEHASHEVENTS macro and
it's much better then passing two arrays.
% optimized some code
Please test above Active-X modifications. I'm not MS-Windows user so
they have to be verified by real MS-Windows developers.
They should fix problems with memory leaks (OLE objects where never
freed) or GPF traps in C code which tired to strictly manage reference
counters.
To C programmers: if you increase reference counter to activex control
(AddRef()) then you have to release it (Release()) or activex control
will never be freed even after clearing all .prg references. It's
released only when last reference owner calls Release() method so now
valid code can keep references to IDispatch at C level without any
problem but it also means that this code can exploit problems in
existing wrong code.
* source/dynlib/Makefile
* source/Makefile
* config/rules.mk
* config/dyn.mk
+ Respect HB_BUILD_DLL=no setting.
* Don't try to create .dll if there were no compiler local rules set.
* source/pp/Makefile
* bin/hb-mkdyn.bat
+ Deleting hbpp dynamic built object to not interfere with
harbour dll creation when picking up the objects with wildcard.
* Changed .dll creation script to not filter out above object
explicitly, it's not needed anymore.
* source/vm/mainwin.c
* source/vm/mainstd.c
* bin/hb-mkdyn.bat
+ Added hack to exclude any content when creating dynamic build
objects for win/watcom. Any content here breaks .dll creation
on this target.
* Changed .dll creation script to not filter out above objects
explicitly, it's not needed anymore.
* config/global.mk
% Changed CPU detection to use $(filter)
+ Added CPU detection based on wce compilers.
+ Showing detected host and target CPU architecture in log
(if it could be detected - this is currently only implemented
for non-*nix targets)
- Deleted host binary extension display in verbose mode.
- Deleted now unused HB_BUILD_VERBOSE option.
* config/global.mk
+ Added HB_DYN_VER variable to hold the version number used in Harbour
dynamic libary name.
* config/bsd/global.mk
* config/darwin/global.mk
* config/hpux/global.mk
* config/linux/global.mk
* config/os2/global.mk
* config/sunos/global.mk
* config/wce/global.mk
* config/win/global.mk
+ Added DYN_EXT variables for each platform.
* source/Makefile
* config/rules.mk
+ config/dyn.mk
+ source/dynlib
+ source/dynlib/mt
+ source/dynlib/mt/Makefile
+ source/dynlib/Makefile
* config/win/msvc.mk
+ Added experimental .dll building feature to the GNU Make system.
It's only implemented for MSVC yet.
The goal is to replace shell specific (postinst) solutions.
* utils/hbmk2/hbmk2.prg
+ Added darwin/icc support. Untested yet.
* source/vm/maindllp.c
! Fixed typo in prev commit.
* contrib/hbxbp/xbpbrowse.prg
! More synchronized horizontal navigation with respect to frozen columns - mouse clicks.
! Focus maintained on main grid view if mouse is clicked on other parts
of the browser and scrollbars.
/* Your input about artifacts is appreciated */
* utils/hbmk2/hbmk2.prg
* Improvement in msvc/wce support to support multiple WinCE
CPUs.
! Fixed to add '/manifest:no' only for 8.00 or upper msvcarm
compilers.
* config/wce/msvcarm.mk
* Minor improvements.
+ Added preliminary support for MIPS/SH/x86 WinCE build settings.
* source/vm/maindllp.c
+ Added MIPS and SH .dll names.
* include/hbsetup.h
* source/common/hbver.c
* HB_CPU_SUPERH -> HB_CPU_SH
* config/global.mk
+ Added Windows XP (or upper) detection. This will be shown
with an '(xp)' mark in log. Please test, I don't have NT/2000
systems.
* config/win/bcc.mk
% For XP and upper now the default logic (so far only active
with sh shells) is enabled which is more efficient and
generates shorter log. Old one only kept to make Windows
NT/2000 bcc users happy, this is the only win compiler which
has such special support.
* INSTALL
* Minor.
* config/common/watcom.mk
* sh AR rule made the default.
% Now nt shell uses the default AR rule (instead of dos one)
with watcom.
% Deleted no longer necessary FILE = %f vs %ff hack.
Now this rule is only active for os2 shells never nt.
* external/libhpdf/Makefile
* contrib/hbhpdf/Makefile
! Fixed to skip them when using dos hosts (due to long filenames
in libhpdf lib sources/headers)
* external/libhpdf/Makefile
+ Enabled for watcom/dos and watcom/linux targets.
* config/common/watcom.mk
* config/rules.mk
+ Added CC_FLAGS variable similar to HB_FLAGS to aid
moving flags to envvars and to reduce redundancy in rules.
* The CC_RULE hack was a little bit modified accordingly
for c-mode non-linux watcom. We're now a bit closer to
be able to drop CC_RULE override.
! Adapted above change for watcom where now all (non-user)
flags are moved to envvar when using dos shells.
* contrib/hbwin/hbwin.hbc
! Added missing CellCore lib for wce.
I've preserved casing because cegcc has it like that and
I wanted to avoid any potential casing problems on *nix
cross build. I you know it this is unnecessary pls tell.
+ examples/gfspell
+ examples/gfspell/spell.ng
+ examples/gfspell/spellc.c
+ examples/gfspell/gfspell.hbp
+ examples/gfspell/spell.prg
+ examples/gfspell/gfspell.hbc
+ examples/gfspell/spell.ch
+ examples/gfspell/words.dbf
+ examples/gfspell/readme.txt
+ Added Grumpfish Speller library port for Harbour.
With kind permission of author Joseph D. Booth.
Many thanks to Les Hughes for contributing this port
to Harbour.
+ Some modifications, added hbmk2 make files, did a few
other cleanup.
; TOFIX: 'const' fixes revealed a few HVM corruption
problems in original source. These have yet to be
fixed.
* config/dos/watcom.mk
* config/common/watcom.mk
* config/win/watcom.mk
* config/linux/watcom.mk
* config/os2/watcom.mk
! Fix to prev. (missed to deleted platform specific rules from nt/dos ones)
* Moved LDLIBS formation back to platform spefific watcom.mk files.
(the only reason is SYSLIBS present only on win)
* config/common/watcom.mk
+ Readded dos/nt shell specific logic. (they were the same so
far in Harbour, but maybe it'd be now possible to create real
optimize out dos specific hacks for nt shells - unless there
is a chance to break the 8192 bytes nt cmdline length limit.)
* ChangeLog
+ Marked pending items in prev entry.
* config/dos/watcom.mk
* config/win/watcom.mk
* config/linux/watcom.mk
* config/os2/watcom.mk
% Deleted watcom doc links. It's enough to have them in common file.
* utils/hbmk2/hbmk2.prg
* config/global.mk
! Fixed to -undef:__PLATFORM__UNIX even for Windows host platforms.
This is required because Cygwin builds have this envvar set.
I'm not sure that setting __PLATFORM__UNIX for Cygwin is right
behavior though.
* config/dos/watcom.mk
* config/win/watcom.mk
* config/linux/watcom.mk
* config/os2/watcom.mk
+ config/common/watcom.mk
% Moved common watcom compiler specific make logic to one file.
I've choosen OS/2 rules in this global makefile, as they will
work on all platforms, albeit in the known slighly hacky way.
It's easy to reintroduce shell specific rules for more advanced
shells. There was one common rule set for nt/dos shells, plus
a very clean one for sh. I may do this in a next commit.
After this change it's possible to create all possible watcom
cross-builds. Pls shout if I missed something or the concept
seems to have some potential flaws.
; QUESTION: Does 'wlib' support '-p=64' option on Linux watcom builds?
; NOTE: Still most of the not yet merged logic could be merged,
since there is only a few minor difference between them.
; TODO: Add shell optimized watcom rules for nt/dos/sh shells.
; TODO: Try to do a similar stunt for gcc.mk files.
* source/pp/ppcore.c
* #ifdef -> #if defined()
* config/global.mk
! Fixed dos autodetection to not be overridden by explicit
HB_ARCHITECTURE value since it prevent dos hosted cross
build creation.
! Fixed *nix -> win/wce autodetection to not kick in on os2/dos
platforms.
* INSTALL
+ Updated cross-build matrix to not show some dos/os2 builds
fully untested. They should now work in a generic sence.
; TOFIX: watcom rules should be synced across platforms to use
shell specific tricks according to HB_SHELL excpect
assuming it being the host native one.
F.e. watcom/dos -> os2 builds will end with:
Bad command or filename - "@..\..\..\..\..\config\dj-echo".
watcom/dos -> linux builds will choke because of too long cmdlines.
* config/dos/watcom.mk
* DOS shell specific hacks protected by HB_SHELL guard.
* Merged together DOS shell specific hacks.
* config/win/watcom.mk
* config/linux/watcom.mk
* config/os2/watcom.mk
+ Added DOS shell specific hacks, so that cross-builds to these
targets on DOS hosts work.
* config/global.mk
* INSTALL
* bin/hb-mkdyn.sh
* bin/hb-mkdyn.bat
+ Added HB_USER_DFLAGS to add custom linker flags to .dll link command.
(just like in hbmk2)
- In hb-mkdyn.sh HB_USER_LDFLAGS deleted, now HB_USER_DFLAGS replaced it.
(HB_USER_LDFLAGS was missing from darwin link cmd)
* bin/hb-mkdyn.bat
! HB_DLLLIBS -> HB_DLLIBS
* config/global.mk
+ Added HB_DLLIBS to list of misc custom settings.
* INSTALL
+ Revision of OPTIONS AVAILABLE WHEN BUILDING HARBOUR section.
! Typo.
* harbour/config/bsd/gcc.mk
* harbour/config/darwin/gcc.mk
* harbour/config/hpux/gcc.mk
* harbour/config/dos/djgpp.mk
* harbour/config/win/mingw.mk
* harbour/config/linux/gcc.mk
* harbour/config/linux/icc.mk
* harbour/config/linux/sunpro.mk
* harbour/config/os2/gcc.mk
* harbour/config/sunos/gcc.mk
* harbour/config/sunos/sunpro.mk
! replaced wrongly used 'findstring' functions with 'filter' functions.
Now findstring is used only in places where we are looking for
substrings not whole words.
* harbour/source/rdd/wacore.c
! fixed typo in comment (by Phil Krylov borrowed from xHarbour)
* harbour/ChangeLog
! fixed my typo in Latin translation of Phil Krylov family
name - sorry Phil.
* utils/hbmk2/hbmk2.prg
* config/wce/msvcarm.mk
! Fixes to cmdline macros, now many warnings are gone.
* utils/hbmk2/hbmk2.prg
+ Added ceshell, oleaut32 syslibs to default wce liblist.
(to be more in sync with win)
* contrib/hbwin/hbwin.hbc
! Added sms syslib for wce.
* config/global.mk
+ Don't attempt to install includes and docs if HB_INSTALL_PREFIX
is set to source tree root. (to suppress 'cannot copy file to itself'
warnings)