2009-08-14 15:35 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)

* bin/hb-mkdyn.bat
    ! Fixed gcc family (mingw) .dll generation. New tricks
      had to be employed to workaround 8K cmdline limits.

  * contrib/hbwin/win_misc.c
    * Implemented recent WinCE fix by Przemek for another
      CreateProcess() call.

  * utils/hbmk2/hbmk2.prg
    * Cleaned system lib list for wce platform.
      wininet, commdlg, commctrl libs moved from base to extra
      system lib list. These libs aren't needed by Harbour code
      code. [ No change in functionality, just synced with rest
      of Harbour. ]
      I didn't test yet, but seeing the content of this lib,
      it's not needed for Harbour core code.

  * config/wce/global.cf
  * bin/hb-mkdyn.bat
    % Deleted wininet wce system lib from liblist.

  * config/wce/poccarm.cf
    % Deleted winsock wce system lib from poccarm liblist.
      ws2 should be enough. (I didn't retest the platform yet)

  * config/wce/msvcarm.cf
  * config/wce/global.cf
  * config/wce/mingwarm.cf
  * config/wce/poccarm.cf
  * config/win/watcom.cf
  * config/win/icc.cf
  * config/win/cygwin.cf
  * config/win/global.cf
  * config/win/msvc.cf
  * config/win/xcc.cf
  * config/win/mingw.cf
  * config/win/pocc.cf
  * config/win/bcc.cf
    % Moved system lib list definition to <arch>/global.cf files
      for wce/win platforms.
      This will ensure that compilers for the same platform will
      always use the same system libs too.
      Added reasoning in comment for each extra win system lib.
    % Deleted the same meaningless comment line from all files.

  * config/global.cf
    + Showing $(SHELL) variable content.
    + Added experimental support for explicitly changing $(SHELL)
      variable for nt and dos shells. This should solve the
      problem when mingw32-make is picking up sh.exe as shell if
      cygwin or msys is in the PATH (or the user may also have
      sh.exe laying around).

  * INSTALL
    % Deleted SHLVL hack from wce/mingwarm build config example.
      Not needed anymore.
    % Deleted "sh.exe mustn't be in the path" sentences.
      Not needed anymore, now it can be in the PATH.

  * make_gnu.bat
    + Readded calling sh for cygwin. (sorry I needed this personally
      to keep the same interface for all cases on Windows, but I'll
      think about this further, also to better cover mingw+msys case.
      So this is rather temporary.)
This commit is contained in:
Viktor Szakats
2009-08-14 14:09:25 +00:00
parent 62e358dbf8
commit 30ade9b7e2
20 changed files with 139 additions and 57 deletions

View File

@@ -17,6 +17,72 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-08-14 15:35 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* bin/hb-mkdyn.bat
! Fixed gcc family (mingw) .dll generation. New tricks
had to be employed to workaround 8K cmdline limits.
* contrib/hbwin/win_misc.c
* Implemented recent WinCE fix by Przemek for another
CreateProcess() call.
* utils/hbmk2/hbmk2.prg
* Cleaned system lib list for wce platform.
wininet, commdlg, commctrl libs moved from base to extra
system lib list. These libs aren't needed by Harbour code
code. [ No change in functionality, just synced with rest
of Harbour. ]
I didn't test yet, but seeing the content of this lib,
it's not needed for Harbour core code.
* config/wce/global.cf
* bin/hb-mkdyn.bat
% Deleted wininet wce system lib from liblist.
* config/wce/poccarm.cf
% Deleted winsock wce system lib from poccarm liblist.
ws2 should be enough. (I didn't retest the platform yet)
* config/wce/msvcarm.cf
* config/wce/global.cf
* config/wce/mingwarm.cf
* config/wce/poccarm.cf
* config/win/watcom.cf
* config/win/icc.cf
* config/win/cygwin.cf
* config/win/global.cf
* config/win/msvc.cf
* config/win/xcc.cf
* config/win/mingw.cf
* config/win/pocc.cf
* config/win/bcc.cf
% Moved system lib list definition to <arch>/global.cf files
for wce/win platforms.
This will ensure that compilers for the same platform will
always use the same system libs too.
Added reasoning in comment for each extra win system lib.
% Deleted the same meaningless comment line from all files.
* config/global.cf
+ Showing $(SHELL) variable content.
+ Added experimental support for explicitly changing $(SHELL)
variable for nt and dos shells. This should solve the
problem when mingw32-make is picking up sh.exe as shell if
cygwin or msys is in the PATH (or the user may also have
sh.exe laying around).
* INSTALL
% Deleted SHLVL hack from wce/mingwarm build config example.
Not needed anymore.
% Deleted "sh.exe mustn't be in the path" sentences.
Not needed anymore, now it can be in the PATH.
* make_gnu.bat
+ Readded calling sh for cygwin. (sorry I needed this personally
to keep the same interface for all cases on Windows, but I'll
think about this further, also to better cover mingw+msys case.
So this is rather temporary.)
2009-08-14 15:52 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/hbwin/olecore.c
+ added support for decoding VT_DECIMAL variants

View File

@@ -72,7 +72,6 @@ HOW TO BUILD AND INSTALL HARBOUR FROM SOURCE
only. For a peace of mind, avoid using spaces, quotes
in the name. You can leave it empty, in this case the
results will be created under the current directory tree.
- With mingw, sh.exe (part of MSYS) mustn't be in the PATH.
- You can also use Linux hosts to create Windows builds.
See script: make_gnu_xmingw.sh
- You can also use Linux hosts to create Windows CE builds.
@@ -367,7 +366,7 @@ EXAMPLES
call make_gnu.bat %1 %2 > log.txt 2>&1
---
--- MinGW GCC (make sure MSYS (sh.exe) isn't in the PATH)
--- MinGW GCC
set PATH=C:\mingw\bin;%PATH%
rem
set HB_COMPILER=mingw
@@ -395,7 +394,6 @@ EXAMPLES
---
--- MinGW GCC for WinCE/ARM (requires native x86 Harbour binaries + Cygwin)
set SHLVL=0
set PATH=C:\mingwce\opt\mingw32ce\bin;C:\cygwin\bin;%PATH%
rem
set HB_BIN_COMPILE=C:\hb-mingw\bin

View File

@@ -108,7 +108,7 @@ if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_icc" set _BIN_LINK=xilink
if "%HB_ARCHITECTURE%_%HB_COMPILER%" == "win_iccia64" set _BIN_LINK=xilink
if "%HB_ARCHITECTURE%" == "win" set _SYSLIBS=user32.lib ws2_32.lib advapi32.lib gdi32.lib
if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=wininet.lib ws2.lib
if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=ws2.lib
echo ! Making %_DST_NAME_ST%.dll... && %_BIN_LINK% /nologo /dll /subsystem:console /out:"%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" @"%_LIST_ST%" %_SYSLIBS% %HB_DLLLIBS%
echo ! Making %_DST_NAME_MT%.dll... && %_BIN_LINK% /nologo /dll /subsystem:console /out:"%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" @"%_LIST_MT%" %_SYSLIBS% %HB_DLLLIBS%
@@ -130,23 +130,27 @@ echo.> "%_LIST_MT%"
call :MAKE_LISTS
setlocal enabledelayedexpansion
set _HBOST=
for /f %%f in ("%_LIST_ST%") do set _HBOST=!_HBOST! %%f
set _HBOMT=
for /f %%f in ("%_LIST_MT%") do set _HBOMT=!_HBOMT! %%f
rem Can't do this with HB_OBJ_PREF/POST because cmd processor
rem gets confused about the closing paranthesis. [vszakats]
echo.> "%_LIST_ST%_"
for /f %%f in (%_LIST_ST%) do echo INPUT( %%f )>> "%_LIST_ST%_"
echo.> "%_LIST_MT%_"
for /f %%f in (%_LIST_MT%) do echo INPUT( %%f )>> "%_LIST_MT%_"
del "%_LIST_ST%"
del "%_LIST_MT%"
if "%HB_ARCHITECTURE%" == "win" set _SYSLIBS=-luser32 -lws2_32 -ladvapi32 -lgdi32
if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=-lwininet -lws2
if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=-lws2
echo ! Making %_DST_NAME_ST%.dll... && %HB_CCPREFIX%gcc -shared -o "%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" %_HBOST% %HB_USER_LDFLAGS% %_SYSLIBS% %HB_DLLLIBS% -Wl,--output-def,"%HB_BIN_INSTALL%\%_DST_NAME_ST%.def"
echo ! Making %_DST_NAME_MT%.dll... && %HB_CCPREFIX%gcc -shared -o "%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" %_HBOMT% %HB_USER_LDFLAGS% %_SYSLIBS% %HB_DLLLIBS% -Wl,--output-def,"%HB_BIN_INSTALL%\%_DST_NAME_MT%.def"
echo ! Making %_DST_NAME_ST%.dll... && %HB_CCPREFIX%gcc -shared -o "%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" "%_LIST_ST%_" %HB_USER_LDFLAGS% %_SYSLIBS% %HB_DLLLIBS% -Wl,--output-def,"%HB_BIN_INSTALL%\%_DST_NAME_ST%.def"
echo ! Making %_DST_NAME_MT%.dll... && %HB_CCPREFIX%gcc -shared -o "%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" "%_LIST_MT%_" %HB_USER_LDFLAGS% %_SYSLIBS% %HB_DLLLIBS% -Wl,--output-def,"%HB_BIN_INSTALL%\%_DST_NAME_MT%.def"
rem ,--out-implib,"%HB_LIB_INSTALL%\lib%_DST_NAME_ST%.a"
rem ,--out-implib,"%HB_LIB_INSTALL%\lib%_DST_NAME_MT%.a"
del "%_LIST_ST%"
del "%_LIST_MT%"
del "%_LIST_ST%_"
del "%_LIST_MT%_"
goto END
@@ -201,7 +205,7 @@ echo.> "%_LIST_MT%"
call :MAKE_LISTS
if "%HB_ARCHITECTURE%" == "win" set _SYSLIBS=user32.lib ws2_32.lib advapi32.lib gdi32.lib
if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=wininet.lib ws2.lib
if "%HB_ARCHITECTURE%" == "wce" set _SYSLIBS=ws2.lib
echo ! Making %_DST_NAME_ST%.dll... && polink /nologo /dll /out:"%HB_BIN_INSTALL%\%_DST_NAME_ST%.dll" @%_LIST_ST% %_SYSLIBS% %HB_DLLLIBS%
echo ! Making %_DST_NAME_MT%.dll... && polink /nologo /dll /out:"%HB_BIN_INSTALL%\%_DST_NAME_MT%.dll" @%_LIST_MT% %_SYSLIBS% %HB_DLLLIBS%

View File

@@ -222,7 +222,7 @@ ifeq ($(HB_CONFIG_SHOWN),)
# Macros:
# -DHB_PCRE_REGEX, -DHB_POSIX_REGEX, -DHB_EXT_ZLIB, -DHB_HAS_GPM
$(info ! MAKE: $(MAKE) $(MAKE_VERSION) $(HB_MAKECMDGOALS))
$(info ! MAKE: $(MAKE) $(MAKE_VERSION) $(HB_MAKECMDGOALS) $(SHELL))
ifneq ($(HB_USER_PRGFLAGS),)
$(info ! HB_USER_PRGFLAGS: $(HB_USER_PRGFLAGS))
endif
@@ -309,6 +309,7 @@ else
COMSPEC := command.com
endif
endif
SHELL := $(COMSPEC)
ifneq ($(findstring COMMAND,$(COMSPEC)),)
HB_SHELL := dos
else

View File

@@ -8,5 +8,7 @@ BIN_EXT := .exe
HB_GT_LIBS += gtwvt gtgui
SYSLIBS := ws2
# Favor size for CE builds.
HB_GCMODE := 0

View File

@@ -38,9 +38,8 @@ LD := $(HB_CCPREFIX)$(HB_CMP)
LD_OUT := -o
LIBPATHS := -L$(LIB_DIR)
LDLIBS := $(foreach lib,$(LIBS),-l$(lib))
LDLIBS := $(foreach lib,$(LIBS) $(SYSLIBS),-l$(lib))
LDLIBS += -lwininet -lws2
LDFLAGS += $(LIBPATHS)
AR := $(HB_CCPREFIX)ar

View File

@@ -53,8 +53,7 @@ endif
LD_OUT := -Fe
LIBPATHS := /libpath:$(LIB_DIR)
# Add all libraries specified in LIBS.
LDLIBS := $(foreach lib,$(LIBS),$(lib)$(LIB_EXT))
LDLIBS := $(foreach lib,$(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
LDFLAGS += /nologo /link
LDFLAGS += /subsystem:windowsce,4.20 /machine:arm /armpadcode /stack:65536,4096 /nodefaultlib:"oldnames.lib"

View File

@@ -42,10 +42,10 @@ endif
LD := polink.exe
LD_OUT := /out:
SYSLIBS += coredll corelibc
LIBPATHS := -LIBPATH:$(LIB_DIR)
# Add all libraries specified in LIBS.
LDLIBS := $(foreach lib,$(LIBS),$(lib)$(LIB_EXT))
LDLIBS += coredll.lib corelibc.lib winsock.lib ws2.lib
LDLIBS := $(foreach lib,$(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
LDFLAGS += /subsystem:windows
LDFLAGS += $(LIBPATHS)

View File

@@ -39,11 +39,11 @@ endif
LD := bcc32.exe
LD_OUT := -e
# Add all libraries specified in LIBS.
LIBPATHS := -L$(LIB_DIR)
# It's probably not necessary in native Windows but I need it
# for my Linux box because -L<path> seems to not work with WINE
LDLIBS := $(foreach lib,$(LIBS),$(LIB_DIR)/$(lib)$(LIB_EXT))
LDLIBS := $(foreach lib,$(SYSLIBS),$(lib)$(LIB_EXT))
LDFLAGS += $(LIBPATHS)

View File

@@ -36,13 +36,8 @@ endif
LD := $(HB_CMP)
LD_OUT := -o
# Add all libraries specified in LIBS.
LIBPATHS := -L$(LIB_DIR)
LDLIBS := $(foreach lib,$(LIBS),-l$(lib))
# This library is needed for CharToOemBuff() and OemToCharBuff() support.
LDLIBS += -luser32 -lgdi32 -lws2_32
LDLIBS := $(foreach lib,$(LIBS) $(SYSLIBS),-l$(lib))
LDFLAGS += $(LIBPATHS)

View File

@@ -7,3 +7,10 @@ all : first
BIN_EXT := .exe
HB_GT_LIBS += gtwvt gtgui gtwin
# kernel32: needed by some compilers (pocc/watcom)
# user32: *Clipboard*(), MessageBox(), CharToOemBuff(), OemToCharBuff(), GetKeyState(), GetKeyboardState(), SetKeyboardState()
# ws2_32: hbsocket
# advapi32: GetUserName()
# gdi32: gtwvt
SYSLIBS := kernel32 user32 ws2_32 advapi32 gdi32

View File

@@ -43,10 +43,8 @@ endif
LD := icl.exe
LD_OUT := -Fe
# Add all libraries specified in LIBS.
LIBPATHS := /libpath:$(LIB_DIR)
LDLIBS := $(foreach lib,$(LIBS),$(lib)$(LIB_EXT))
LDLIBS += user32.lib ws2_32.lib advapi32.lib gdi32.lib
LDLIBS := $(foreach lib,$(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
LDFLAGS += /link $(LIBPATHS)

View File

@@ -40,7 +40,7 @@ LD := $(HB_CCPREFIX)$(HB_CMP)
LD_OUT := -o
LIBPATHS := -L$(LIB_DIR)
LDLIBS := $(foreach lib,$(LIBS),-l$(lib))
LDLIBS := $(foreach lib,$(LIBS) $(SYSLIBS),-l$(lib))
# Add the standard C main() entry
ifeq ($(HB_MAIN),std)
@@ -49,8 +49,6 @@ ifeq ($(HB_MAIN),std)
endif
endif
LDLIBS += -luser32 -lgdi32 -lws2_32
LDFLAGS += $(LIBPATHS)
AR := $(HB_CCPREFIX)ar

View File

@@ -54,10 +54,8 @@ endif
LD := link.exe
LD_OUT := /out:
# Add all libraries specified in LIBS.
LIBPATHS := /libpath:$(LIB_DIR)
LDLIBS := $(foreach lib,$(LIBS),$(lib)$(LIB_EXT))
LDLIBS += user32.lib ws2_32.lib advapi32.lib gdi32.lib
LDLIBS := $(foreach lib,$(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
LDFLAGS += /nologo $(LIBPATHS)

View File

@@ -39,10 +39,8 @@ endif
LD := polink.exe
LD_OUT := /out:
# Add all libraries specified in LIBS.
LIBPATHS := -LIBPATH:$(LIB_DIR)
LDLIBS := $(foreach lib,$(LIBS),$(lib)$(LIB_EXT))
LDLIBS += kernel32.lib user32.lib ws2_32.lib advapi32.lib gdi32.lib
LIBPATHS := /libpath:$(LIB_DIR)
LDLIBS := $(foreach lib,$(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
LDFLAGS += /subsystem:console
LDFLAGS += $(LIBPATHS)

View File

@@ -85,7 +85,6 @@ define link_exe_file
@echo $(LDFLAGS) NAME $(BIN_DIR)/$@ > __link__.tmp
$(foreach file,$(^F),$(link_file))
$(foreach lib,$(LDLIBS),$(link_lib))
@echo LIB ws2_32.lib >> __link__.tmp
-$(LD) @__link__.tmp
endef
@@ -96,6 +95,7 @@ endif
LDFLAGS += SYS nt
LDLIBS := $(foreach lib,$(LIBS),$(LIB_DIR)/$(lib))
LDLIBS += $(foreach lib,$(SYSLIBS),$(lib))
LD_RULE = $(link_exe_file) $(HB_USER_LDFLAGS)

View File

@@ -33,10 +33,8 @@ endif
LD := xlink.exe
LD_OUT := /out:
# Add all libraries specified in LIBS.
LIBPATHS := -LIBPATH:$(LIB_DIR)
LDLIBS := $(foreach lib,$(LIBS),$(lib)$(LIB_EXT))
LDLIBS += kernel32.lib user32.lib ws2_32.lib advapi32.lib gdi32.lib
LIBPATHS := /libpath:$(LIB_DIR)
LDLIBS := $(foreach lib,$(LIBS) $(SYSLIBS),$(lib)$(LIB_EXT))
LDFLAGS += $(LIBPATHS)

View File

@@ -74,12 +74,14 @@ HB_FUNC( WIN_RUNDETACHED )
LPTSTR lpCommandName = HB_ISCHAR( 1 ) ? HB_TCHAR_CONVTO( hb_parc( 1 ) ) : NULL;
LPTSTR lpCommandLine = HB_ISCHAR( 2 ) ? HB_TCHAR_CONVTO( hb_parc( 2 ) ) : NULL;
#if ! defined( HB_OS_WIN_CE )
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
#endif
if( CreateProcess(
( LPCTSTR ) lpCommandName, /* Command name */
@@ -87,23 +89,31 @@ HB_FUNC( WIN_RUNDETACHED )
NULL, /* Process handle not inheritable */
NULL, /* Thread handle not inheritable */
FALSE, /* Set handle inheritance to FALSE */
#if defined( HB_OS_WIN_CE )
CREATE_NEW_CONSOLE, /* Creation flags */
#else
#if ! defined( HB_OS_WIN_CE )
hb_parl( 4 ) ? CREATE_NO_WINDOW : CREATE_NEW_CONSOLE, /* Creation flags */
#else
CREATE_NEW_CONSOLE, /* Creation flags */
#endif
NULL, /* Use parent's environment block */
NULL, /* Use parent's starting directory */
#if ! defined( HB_OS_WIN_CE )
&si, /* Pointer to STARTUPINFO structure */
&pi ) /* Pointer to PROCESS_INFORMATION structure */
#else
NULL, /* Pointer to STARTUPINFO structure */
NULL ) /* Pointer to PROCESS_INFORMATION structure */
#endif
)
{
hb_stornl( pi.dwProcessId, 3 );
hb_retl( TRUE );
#if ! defined( HB_OS_WIN_CE )
hb_stornl( pi.dwProcessId, 3 );
/* Close process and thread handles. */
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
#endif
}
else
{

View File

@@ -28,7 +28,18 @@ if not exist config\dj-make.exe set _HB_MAKE=make.exe
rem ---------------------------------------------------------------
rem Start the GNU Make system
%_HB_MAKE% %HB_USER_MAKEFLAGS% %1 %2 %3 %4 %5 %6 %7 %8 %9
if errorlevel 1 echo Harbour GNU Make returned: %ERRORLEVEL%
if "%HB_COMPILER%" == "cygwin" goto MAKE_CYGWIN
%_HB_MAKE% %HB_USER_MAKEFLAGS% %1 %2 %3 %4 %5 %6 %7 %8 %9
if errorlevel 1 echo Harbour GNU Make returned: %ERRORLEVEL%
goto MAKE_DONE
:MAKE_CYGWIN
sh %~dp0make_gnu.sh %HB_USER_MAKEFLAGS% %1 %2 %3 %4 %5 %6 %7 %8 %9
if errorlevel 1 echo Harbour GNU Make returned: %ERRORLEVEL%
goto MAKE_DONE
:MAKE_DONE
set _HB_MAKE=

View File

@@ -917,7 +917,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cDynLibExt := ".dll"
cBinExt := ".exe"
cOptPrefix := "-/"
/* NOTE: Some targets (pocc and watcom) need kernel32 explicitly. */
/* NOTE: Some targets (watcom, pocc/xcc) need kernel32 explicitly. */
l_aLIBSYSCORE := { "kernel32", "user32", "gdi32", "advapi32", "ws2_32" }
l_aLIBSYSMISC := { "winspool", "comctl32", "comdlg32", "shell32", "ole32", "oleaut32", "uuid", "mpr", "winmm", "mapi32", "imm32", "msimg32" }
CASE hbmk[ _HBMK_cARCH ] == "wce"
@@ -933,8 +933,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 )
cDynLibExt := ".dll"
cBinExt := ".exe"
cOptPrefix := "-/"
l_aLIBSYSCORE := { "wininet", "ws2", "commdlg", "commctrl" }
l_aLIBSYSMISC := { "uuid", "ole32" }
l_aLIBSYSCORE := { "ws2" }
l_aLIBSYSMISC := { "uuid", "ole32", "wininet", "commdlg", "commctrl" }
OTHERWISE
hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Architecture value unknown: %1$s" ), hbmk[ _HBMK_cARCH ] ) )
RETURN 1