diff --git a/harbour/ChangeLog b/harbour/ChangeLog index ace98a6733..f8bab458b6 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,17 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-03-13 15:01 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * config/global.mk + * utils/hbmk2/hbmk2.prg + + Added autodetection for Equation Solution mingw64 builds. + + * INSTALL + + Added link to Equation Solution mingw releases. + + * src/vm/itemapi.c + * Formatting. + 2010-03-13 01:53 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbxbp/xbp.ch * contrib/hbxbp/xbpgeneric.prg @@ -24,7 +35,7 @@ AppName() -> APPTYPE_PM LastAppEvent( mp1, mp2, oXbp, nThreadID ) -> nEvent NextAppEvent( mp1, mp2, oXbp ) ->nEvent - + ; Please test on real-life scenario. Forward your findings. I cannot test them extensively without real-time code. diff --git a/harbour/INSTALL b/harbour/INSTALL index 8f3b48a2df..6458a605a6 100644 --- a/harbour/INSTALL +++ b/harbour/INSTALL @@ -1276,6 +1276,7 @@ HARBOUR MinGW [win, *nix, free, open-soource] http://www.tdragon.net/recentgcc/ (unofficial, recommended) http://www.mingw.org/ (official, rarely updated, MSYS home) + http://www.equation.com/servlet/equation.cmd?fa=fortran (unofficial) MinGW x64 [win, *nix, free, open-source] http://mingw-w64.org/ http://mingw-w64.sourceforge.net/ diff --git a/harbour/config/global.mk b/harbour/config/global.mk index b4e2d252b2..968b66fa95 100644 --- a/harbour/config/global.mk +++ b/harbour/config/global.mk @@ -704,102 +704,112 @@ ifeq ($(HB_COMPILER),) $(error ! Error: DJGPP cross-builds are only possible on 32-bit Windows hosts) endif else + # tdragon DWARF-2 build HB_COMP_PATH := $(call find_in_path,gcc-dw2) ifneq ($(HB_COMP_PATH),) HB_COMPILER := mingw HB_CCPOSTFIX := -dw2 else - HB_COMP_PATH := $(call find_in_path,gcc) + # Equation Solution build (requires x86_64 host) + HB_COMP_PATH := $(call find_in_path,x86_64-pc-mingw32-gcc) ifneq ($(HB_COMP_PATH),) - HB_COMPILER := mingw + HB_COMPILER := mingw64 + HB_CPU := x86_64 else - HB_COMP_PATH := $(call find_in_path,wpp386) + HB_COMP_PATH := $(call find_in_path,gcc) ifneq ($(HB_COMP_PATH),) - HB_COMPILER := watcom - $(eval $(call detect_watcom_platform)) + HB_COMPILER := mingw else - HB_COMP_PATH := $(call find_in_path,clarm) + HB_COMP_PATH := $(call find_in_path,wpp386) ifneq ($(HB_COMP_PATH),) - HB_COMPILER_VER := 710 - HB_COMPILER := msvcarm - HB_PLATFORM := wce - HB_CPU := arm + HB_COMPILER := watcom + $(eval $(call detect_watcom_platform)) else - HB_COMP_PATH := $(call find_in_path,armasm) + HB_COMP_PATH := $(call find_in_path,clarm) ifneq ($(HB_COMP_PATH),) + HB_COMPILER_VER := 710 HB_COMPILER := msvcarm HB_PLATFORM := wce HB_CPU := arm else - HB_COMP_PATH := $(call find_in_path,idis) + HB_COMP_PATH := $(call find_in_path,armasm) ifneq ($(HB_COMP_PATH),) - HB_COMPILER := iccia64 - HB_CPU := ia64 + HB_COMPILER := msvcarm + HB_PLATFORM := wce + HB_CPU := arm else - HB_COMP_PATH := $(call find_in_path,icl) + HB_COMP_PATH := $(call find_in_path,idis) ifneq ($(HB_COMP_PATH),) - HB_COMPILER := icc + HB_COMPILER := iccia64 + HB_CPU := ia64 else - HB_COMP_PATH := $(call find_in_path,ml64) + HB_COMP_PATH := $(call find_in_path,icl) ifneq ($(HB_COMP_PATH),) - HB_COMPILER := msvc64 - HB_CPU := x86_64 + HB_COMPILER := icc else - HB_COMP_PATH := $(call find_in_path,ias) + HB_COMP_PATH := $(call find_in_path,ml64) ifneq ($(HB_COMP_PATH),) - HB_COMPILER := msvcia64 - HB_CPU := ia64 + HB_COMPILER := msvc64 + HB_CPU := x86_64 else - HB_COMP_PATH := $(call find_in_path,cl) + HB_COMP_PATH := $(call find_in_path,ias) ifneq ($(HB_COMP_PATH),) - HB_COMPILER := msvc - ifneq ($(findstring VC98,$(HB_COMP_PATH)),) - HB_COMPILER_VER := 600 - else ifneq ($(findstring 2003,$(HB_COMP_PATH)),) - HB_COMPILER_VER := 700 - else ifneq ($(findstring 8/,$(HB_COMP_PATH)),) - HB_COMPILER_VER := 800 - else ifneq ($(findstring 9.0,$(HB_COMP_PATH)),) - HB_COMPILER_VER := 900 - else ifneq ($(findstring 10.0,$(HB_COMP_PATH)),) - HB_COMPILER_VER := 1000 - endif + HB_COMPILER := msvcia64 + HB_CPU := ia64 else - HB_COMP_PATH := $(call find_in_path,bcc32) + HB_COMP_PATH := $(call find_in_path,cl) ifneq ($(HB_COMP_PATH),) - HB_COMPILER := bcc + HB_COMPILER := msvc + ifneq ($(findstring VC98,$(HB_COMP_PATH)),) + HB_COMPILER_VER := 600 + else ifneq ($(findstring 2003,$(HB_COMP_PATH)),) + HB_COMPILER_VER := 700 + else ifneq ($(findstring 8/,$(HB_COMP_PATH)),) + HB_COMPILER_VER := 800 + else ifneq ($(findstring 9.0,$(HB_COMP_PATH)),) + HB_COMPILER_VER := 900 + else ifneq ($(findstring 10.0,$(HB_COMP_PATH)),) + HB_COMPILER_VER := 1000 + endif else - HB_COMP_PATH := $(call find_in_path,pocc) + HB_COMP_PATH := $(call find_in_path,bcc32) ifneq ($(HB_COMP_PATH),) - ifneq ($(call find_in_path_raw,coredll.lib,$(LIB)),) - HB_PLATFORM := wce - HB_COMPILER := poccarm - HB_CPU := arm - else - ifneq ($(call find_in_path_raw,dbgeng.lib,$(LIB)),) - HB_COMPILER := pocc64 - HB_CPU := x86_64 - else - HB_COMPILER := pocc - endif - endif + HB_COMPILER := bcc else - HB_COMP_PATH := $(call find_in_path,xcc) + HB_COMP_PATH := $(call find_in_path,pocc) ifneq ($(HB_COMP_PATH),) - HB_COMPILER := xcc - else - HB_COMP_PATH := $(call find_in_path,i686-w64-mingw32-gcc) - ifneq ($(HB_COMP_PATH),) - HB_COMPILER := mingw64 - HB_CCPREFIX := i686-w64-mingw32- - HB_CPU := x86_64 + ifneq ($(call find_in_path_raw,coredll.lib,$(LIB)),) + HB_PLATFORM := wce + HB_COMPILER := poccarm + HB_CPU := arm else - ifeq ($(HB_HOST_CPU),x86_64) - HB_COMP_PATH := $(call find_in_path,x86_64-w64-mingw32-gcc) - ifneq ($(HB_COMP_PATH),) - HB_COMPILER := mingw64 - HB_CCPREFIX := x86_64-w64-mingw32- - HB_CPU := x86_64 + ifneq ($(call find_in_path_raw,dbgeng.lib,$(LIB)),) + HB_COMPILER := pocc64 + HB_CPU := x86_64 + else + HB_COMPILER := pocc + endif + endif + else + HB_COMP_PATH := $(call find_in_path,xcc) + ifneq ($(HB_COMP_PATH),) + HB_COMPILER := xcc + else + # mingw-w64 build + HB_COMP_PATH := $(call find_in_path,i686-w64-mingw32-gcc) + ifneq ($(HB_COMP_PATH),) + HB_COMPILER := mingw64 + HB_CCPREFIX := i686-w64-mingw32- + HB_CPU := x86_64 + else + ifeq ($(HB_HOST_CPU),x86_64) + # mingw-w64 build + HB_COMP_PATH := $(call find_in_path,x86_64-w64-mingw32-gcc) + ifneq ($(HB_COMP_PATH),) + HB_COMPILER := mingw64 + HB_CCPREFIX := x86_64-w64-mingw32- + HB_CPU := x86_64 + endif endif endif endif diff --git a/harbour/src/vm/itemapi.c b/harbour/src/vm/itemapi.c index cac9a839dc..d51e1cf073 100644 --- a/harbour/src/vm/itemapi.c +++ b/harbour/src/vm/itemapi.c @@ -2221,13 +2221,10 @@ HB_BOOL hb_itemStrBuf( char * szResult, PHB_ITEM pNumber, int iSize, int iDec ) HB_BOOL fNeg; if( iDec < 0 ) - { iDec = 0; - } + if( iDec > 0 ) - { iPos = iDot = iSize - iDec - 1; - } else { iPos = iSize; @@ -2278,9 +2275,7 @@ HB_BOOL hb_itemStrBuf( char * szResult, PHB_ITEM pNumber, int iSize, int iDec ) } if( iPos > 0 ) - { memset( szResult, ' ', iPos ); - } if( iDec > 0 && iPos >= 0 ) { @@ -2291,14 +2286,10 @@ HB_BOOL hb_itemStrBuf( char * szResult, PHB_ITEM pNumber, int iSize, int iDec ) if( iFirst < 0 ) { if( szResult[ iPos ] != '0' ) - { iFirst = iPos - 1; - } } else if( iPos - iFirst >= iPrec ) - { break; - } } } @@ -2309,13 +2300,10 @@ HB_BOOL hb_itemStrBuf( char * szResult, PHB_ITEM pNumber, int iSize, int iDec ) int iZer, iLast; if( iFirst < 0 ) - { iZer = 0; - } else - { iZer = iSize - iFirst - iPrec - ( iDec > 0 ? 1 : 0 ); - } + dFract = modf( dFract * doBase, &dDig ); iLast = ( int ) ( dDig + 0.01 ); @@ -2341,18 +2329,15 @@ HB_BOOL hb_itemStrBuf( char * szResult, PHB_ITEM pNumber, int iSize, int iDec ) if( iZer > 0 ) { if( iDec == 0 || iPos <= iDot + 1 ) - { iLast = szResult[ iPos ] >= '5' ? 1 : 0; - } + szResult[ iPos ] = '0'; --iZer; } else if( iLast > 0 ) { if( szResult[ iPos ] == '9' ) - { szResult[ iPos ] = '0'; - } else { if( szResult[ iPos ] < '0' ) /* '-' or ' ' */ @@ -2364,26 +2349,21 @@ HB_BOOL hb_itemStrBuf( char * szResult, PHB_ITEM pNumber, int iSize, int iDec ) { szResult[ iPos ]++; if( iFirst < 0 ) - { iFirst = iPos; - } } break; } } else - { break; - } } } + if( fNeg && iFirst >= 0 && iPos >= 0 ) { iPos = ( iDot > 0 && iFirst >= iDot ) ? iDot - 2 : iFirst - 1; if( iPos >= 0 ) - { szResult[ iPos ] = '-'; - } } } } diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index ec22552f6c..634abe5f26 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -1080,8 +1080,9 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) watcom also keeps a cl.exe in its binary dir. */ #if ! defined( __PLATFORM__UNIX ) aCOMPDET := { { {|| FindInPath( "cygstart" ) }, "cygwin" },; - { {|| FindInPath( "gcc-dw2" ) }, "mingw", "", "-dw2" },; - { {|| FindInPath( hbmk[ _HBMK_cCCPREFIX ] + "gcc" + hbmk[ _HBMK_cCCPOSTFIX ] ) }, "mingw" },; + { {|| FindInPath( "gcc-dw2" ) }, "mingw", "", "-dw2" },; /* tdragon DWARF-2 build */ + { {|| FindInPath( "x86_64-pc-mingw32-gcc" ) }, "mingw64" },; /* Equation Solution build */ + { {|| FindInPath( hbmk[ _HBMK_cCCPREFIX ] + "gcc" + hbmk[ _HBMK_cCCPOSTFIX ] ) }, "mingw" },; { {|| iif( ! Empty( GetEnv( "WATCOM" ) ),; FindInPath( "wpp386" ),; NIL ) }, "watcom" },; @@ -1098,8 +1099,8 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) { {|| iif( ( tmp1 := FindInPath( "icl" ) ) != NIL .AND. "itanium" $ Lower( tmp1 ), tmp1, NIL ) }, "iccia64" },; { {|| FindInPath( "icl" ) }, "icc" },; { {|| FindInPath( "xcc" ) }, "xcc" },; - { {|| FindInPath( "i686-w64-mingw32-gcc" ) }, "mingw64", "i686-w64-mingw32-" },; - { {|| FindInPath( "x86_64-w64-mingw32-gcc" ) }, "mingw64", "x86_64-w64-mingw32-" }} + { {|| FindInPath( "i686-w64-mingw32-gcc" ) }, "mingw64", "i686-w64-mingw32-" },; /* mingw-w64 build */ + { {|| FindInPath( "x86_64-w64-mingw32-gcc" ) }, "mingw64", "x86_64-w64-mingw32-" }} /* mingw-w64 build */ #endif aCOMPSUP := { "mingw", "msvc", "bcc", "watcom", "icc", "pocc", "xcc", "cygwin",; "mingw64", "msvc64", "msvcia64", "iccia64", "pocc64" }