2010-10-29 14:00 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)

* utils/hbmk2/hbmk2.prg
    + Platform/compiler checks made robust and don't
      give match anymore for 'win' when checking it against
      'darwin' or 'cygwin'.

  * utils/hbmk2/hbmk2.prg
  * INSTALL
    * Updated to reflect that cygwin is now distinct platform.
      (TODO: examples)
This commit is contained in:
Viktor Szakats
2010-10-29 12:01:35 +00:00
parent df3b848bf6
commit b39443ed81
3 changed files with 107 additions and 87 deletions

View File

@@ -16,6 +16,17 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-10-29 14:00 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.prg
+ Platform/compiler checks made robust and don't
give match anymore for 'win' when checking it against
'darwin' or 'cygwin'.
* utils/hbmk2/hbmk2.prg
* INSTALL
* Updated to reflect that cygwin is now distinct platform.
(TODO: examples)
2010-10-29 10:22 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* include/hb_io.h
* include/hbthread.h

View File

@@ -558,6 +558,10 @@ HARBOUR
-------
gcc - GNU C
cygwin
------
gcc - GNU C
sunos
-----
gcc - GNU C
@@ -580,7 +584,6 @@ HARBOUR
pocc - Pelles C 4.5 and above
pocc64 - Pelles C x86-64 5.0 and above
xcc - Pelles C for xhb
cygwin - Cygwin GNU C
wce
---
@@ -692,8 +695,8 @@ HARBOUR
libraries. Build all if left empty (default).
- HB_BUILD_ADDONS=<l> Build space separated <l> list of additional .hbp
projects.
- HB_COMPILER_VER=[<ver>] Set C compiler version. This is used with msvc
and mingw/cygwin targets currently.
- HB_COMPILER_VER=[<ver>] Set C compiler version. This is used with win/msvc,
win/mingw and cygwin/gcc targets currently.
<ver> format:
<15><0>[<0>] = <major><minor>[.<revision>]
Default: filled by compiler autodetection or empty
@@ -1319,7 +1322,6 @@ HARBOUR
plat plat/comp cpu
- ------ ------------- ----------------------------------------------------
win -> win/bcc x86
win -> win/cygwin x86
win -> win/gcc x86
win -> win/global x86
win -> win/icc x86
@@ -1348,6 +1350,7 @@ HARBOUR
x win -> vxworks/gcc (CPU cross-builds possible: x86, arm, mips, ppc)
x win -> vxworks/diab (CPU cross-builds possible: x86, arm, mips, ppc, sparc)
x win -> symbian/gcc arm
x win -> cygwin/gcc x86
dos -> dos/djgpp x86
dos -> dos/watcom x86
x dos -> win/watcom x86

View File

@@ -483,6 +483,11 @@ REQUEST hbmk_KEYW
#define _ERRLEV_DEEPPROJNESTING 30
#define _ERRLEV_STOP 50
#define HBMK_IS_IN( str, list ) ( "|" + str + "|" $ "|" + list + "|" )
#define HBMK_ISPLAT( list ) HBMK_IS_IN( hbmk[ _HBMK_cPLAT ], list )
#define HBMK_ISCOMP( list ) HBMK_IS_IN( hbmk[ _HBMK_cCOMP ], list )
#define hb_DirCreate( d ) MakeDir( d )
#define hb_DirDelete( d ) DirRemove( d )
@@ -1254,7 +1259,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
cBin_CompPRG := "harbour" + l_cHBPOSTFIX
DO CASE
CASE hbmk[ _HBMK_cPLAT ] $ "bsd|hpux|sunos|beos|qnx|vxworks|symbian|linux" .OR. hbmk[ _HBMK_cPLAT ] == "darwin" /* Separated to avoid match with 'win' */
CASE HBMK_ISPLAT( "darwin|bsd|hpux|sunos|beos|qnx|vxworks|symbian|linux" )
DO CASE
CASE hbmk[ _HBMK_cPLAT ] == "linux"
aCOMPSUP := { "gcc", "clang", "icc", "watcom", "sunpro", "open64" }
@@ -1473,7 +1478,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
aCOMPDET_EMBED := {}
IF hbmk[ _HBMK_cPLAT ] $ "win|wce|dos|os2|linux"
IF HBMK_ISPLAT( "win|wce|dos|os2|linux" )
#if defined( __PLATFORM__WINDOWS )
@@ -1553,8 +1558,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
IF Empty( hbmk[ _HBMK_cCOMP ] ) .OR. hbmk[ _HBMK_cCOMP ] == "bld"
IF Len( aCOMPSUP ) == 1
hbmk[ _HBMK_cCOMP ] := aCOMPSUP[ 1 ]
ELSEIF hbmk[ _HBMK_cPLAT ] $ "bsd|hpux|sunos|beos|qnx|vxworks|linux" .OR. ;
hbmk[ _HBMK_cPLAT ] == "darwin" .OR. ;
ELSEIF HBMK_ISPLAT( "darwin|bsd|hpux|sunos|beos|qnx|vxworks|linux" ) .OR. ;
hbmk[ _HBMK_cCOMP ] == "bld"
hbmk[ _HBMK_cCOMP ] := hb_Version( HB_VERSION_BUILD_COMP )
IF AScan( aCOMPSUP, { |tmp | tmp == hbmk[ _HBMK_cCOMP ] } ) == 0
@@ -1727,7 +1731,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
hbmk[ _HBMK_nCOMPVer ] := 46
ENDCASE
CASE ( hbmk[ _HBMK_cPLAT ] == "win" .AND. hbmk[ _HBMK_cCOMP ] $ "msvc|msvc64|msvcia64|icc|iccia64" ) .OR. ;
CASE ( hbmk[ _HBMK_cPLAT ] == "win" .AND. HBMK_ISCOMP( "msvc|msvc64|msvcia64|icc|iccia64" ) ) .OR. ;
( hbmk[ _HBMK_cPLAT ] == "wce" .AND. hbmk[ _HBMK_cCOMP ] == "msvcarm" ) /* NOTE: Cross-platform: wce/ARM on win/x86 */
/* Compatibility with Harbour GNU Make system */
@@ -1781,7 +1785,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
IF l_cHB_INSTALL_DYN == NIL
IF hbmk[ _HBMK_cPLAT ] $ "win|wce|os2|dos"
IF HBMK_ISPLAT( "win|wce|os2|dos" )
l_cHB_INSTALL_DYN := l_cHB_INSTALL_BIN
ELSE
l_cHB_INSTALL_DYN := l_cHB_INSTALL_LIB
@@ -1825,7 +1829,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
/* Build with shared libs by default, if we're installed to default system locations. */
IF lSysLoc .AND. ( hbmk[ _HBMK_cPLAT ] $ "bsd|hpux|sunos|beos|qnx|vxworks|linux" .OR. hbmk[ _HBMK_cPLAT ] == "darwin" )
IF lSysLoc .AND. HBMK_ISPLAT( "darwin|bsd|hpux|sunos|beos|qnx|vxworks|linux" )
hbmk[ _HBMK_lSHARED ] := .T.
hbmk[ _HBMK_lSTATICFULL ] := .F.
ELSE
@@ -2676,8 +2680,8 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
CASE FNameExtGet( cParamL ) == ".res"
IF hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm" .OR. ;
( hbmk[ _HBMK_cPLAT ] == "os2" .AND. hbmk[ _HBMK_cCOMP ] $ "gcc|gccomf" )
IF HBMK_ISCOMP( "mingw|mingw64|mingwarm" ) .OR. ;
( hbmk[ _HBMK_cPLAT ] == "os2" .AND. HBMK_ISCOMP( "gcc|gccomf" ) )
/* For MinGW/EMX GCC family add .res files as source input, as they
will need to be converted to coff format with windres (just
like plain .rc files) before feeding them to gcc. */
@@ -2900,7 +2904,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
DEFAULT hbmk[ _HBMK_lSHAREDDIST ] TO lSysLoc
IF hbmk[ _HBMK_lSHAREDDIST ] .OR. !( hbmk[ _HBMK_cCOMP ] $ "gcc|clang|open64" )
IF hbmk[ _HBMK_lSHAREDDIST ] .OR. ! HBMK_ISCOMP( "gcc|clang|open64" )
cPrefix := ""
ELSE
/* Only supported by gcc, clang, open64 compilers. */
@@ -2914,7 +2918,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
#endif
DO CASE
CASE hbmk[ _HBMK_cPLAT ] $ "bsd|linux|hpux|beos|qnx|vxworks|sunos" .OR. hbmk[ _HBMK_cPLAT ] == "darwin" /* Separated to avoid match with 'win' */
CASE HBMK_ISPLAT( "darwin|bsd|linux|hpux|beos|qnx|vxworks|sunos" )
IF Empty( cPrefix )
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], "harbourmt" + cPostfix,;
"harbour" + cPostfix ) }
@@ -2922,7 +2926,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], cPrefix + hbmk[ _HBMK_cDynLibPrefix ] + "harbourmt" + cPostfix + hbmk[ _HBMK_cDynLibExt ],;
cPrefix + hbmk[ _HBMK_cDynLibPrefix ] + "harbour" + cPostfix + hbmk[ _HBMK_cDynLibExt ] ) }
ENDIF
CASE hbmk[ _HBMK_cPLAT ] $ "os2|win|wce"
CASE HBMK_ISPLAT( "os2|win|wce" )
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], hbmk[ _HBMK_cDynLibPrefix ] + "harbourmt",;
hbmk[ _HBMK_cDynLibPrefix ] + "harbour" ) }
OTHERWISE
@@ -3041,7 +3045,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
OTHERWISE
cBin_Lib := hbmk[ _HBMK_cCCPREFIX ] + "ar"
ENDCASE
IF hbmk[ _HBMK_cPLAT ] $ "hpux|sunos"
IF HBMK_ISPLAT( "hpux|sunos" )
cOpt_Lib := "{FA} rc {OL} {LO}"
ELSE
cOpt_Lib := "{FA} rcs {OL} {LO}"
@@ -3099,14 +3103,14 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
lCHD_Comp := .T.
cOpt_CompC += " {LC}"
ELSE
IF hbmk[ _HBMK_cPLAT ] $ "linux|bsd" .AND. hbmk[ _HBMK_cCOMP ] == "clang"
IF HBMK_ISPLAT( "linux|bsd" ) .AND. hbmk[ _HBMK_cCOMP ] == "clang"
/* NOTE: It's also accepted by darwin/clang */
cOpt_CompC += " {IC} -o{OO}"
ELSE
cOpt_CompC += " {IC} -o {OO}"
ENDIF
ENDIF
IF hbmk[ _HBMK_cCOMP ] $ "icc|gcc"
IF HBMK_ISCOMP( "icc|gcc" )
AAdd( hbmk[ _HBMK_aOPTC ], "-pipe" )
ENDIF
ELSE
@@ -3162,7 +3166,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
ENDIF
IF hbmk[ _HBMK_lSTRIP ]
IF hbmk[ _HBMK_lCreateLib ] .OR. hbmk[ _HBMK_cPLAT ] $ "darwin|sunos"
IF hbmk[ _HBMK_lCreateLib ] .OR. HBMK_ISPLAT( "darwin|sunos" )
DO CASE
CASE hbmk[ _HBMK_cPLAT ] == "vxworks"
cBin_Post := "strip" + hbmk[ _HBMK_cCCPOSTFIX ]
@@ -3183,14 +3187,14 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
IF lStopAfterCComp
IF ! hbmk[ _HBMK_lCreateLib ] .AND. ! hbmk[ _HBMK_lCreateDyn ] .AND. ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) + Len( hbmk[ _HBMK_aCPP ] ) ) == 1
IF hbmk[ _HBMK_cPLAT ] $ "darwin|sunos"
IF HBMK_ISPLAT( "darwin|sunos" )
AAdd( hbmk[ _HBMK_aOPTC ], "-o {OO}" )
ELSE
AAdd( hbmk[ _HBMK_aOPTC ], "-o{OO}" )
ENDIF
ENDIF
ELSE
IF hbmk[ _HBMK_cPLAT ] $ "darwin|sunos"
IF HBMK_ISPLAT( "darwin|sunos" )
AAdd( hbmk[ _HBMK_aOPTL ], "-o {OE}" )
ELSE
AAdd( hbmk[ _HBMK_aOPTL ], "-o{OE}" )
@@ -3198,7 +3202,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
IF hbmk[ _HBMK_lCreateDyn ] .AND. !( hbmk[ _HBMK_cPLAT ] == "darwin" )
IF hbmk[ _HBMK_cPLAT ] $ "hpux|sunos"
IF HBMK_ISPLAT( "hpux|sunos" )
AAdd( hbmk[ _HBMK_aOPTC ], "-fPIC" )
ELSE
AAdd( hbmk[ _HBMK_aOPTC ], "-fpic" )
@@ -3217,7 +3221,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
/* Add system libraries */
IF ! hbmk[ _HBMK_lSHARED ]
IF !( hbmk[ _HBMK_cPLAT ] $ "beos|vxworks" )
IF ! HBMK_ISPLAT( "beos|vxworks" )
AAdd( l_aLIBSYS, "m" )
IF hbmk[ _HBMK_lMT ]
IF !( hbmk[ _HBMK_cPLAT ] == "qnx" )
@@ -3256,7 +3260,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
IF IsGTRequested( hbmk, "gtcrs" )
/* TOFIX: Sometimes 'ncur194' is needed. */
AAdd( l_aLIBSYS, iif( hbmk[ _HBMK_cPLAT ] $ "sunos|bsd", "curses", "ncurses" ) )
AAdd( l_aLIBSYS, iif( HBMK_ISPLAT( "sunos|bsd" ), "curses", "ncurses" ) )
ENDIF
IF IsGTRequested( hbmk, "gtsln" )
IF hbmk[ _HBMK_cPLAT ] == "bsd" .AND. ;
@@ -3314,7 +3318,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
cOpt_CompC := "-c"
IF hbmk[ _HBMK_lOPTIM ]
cOpt_CompC += " -O3"
IF hbmk[ _HBMK_cCOMP ] $ "gcc|mingw"
IF HBMK_ISCOMP( "gcc|mingw" )
cOpt_CompC += " -march=i586 -mtune=pentiumpro"
ENDIF
IF ! hbmk[ _HBMK_lDEBUG ] .AND. !( hbmk[ _HBMK_cCOMP ] == "mingw64" )
@@ -3377,7 +3381,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--out-implib,{OI}" )
AAdd( hbmk[ _HBMK_aOPTD ], "-Wl,--out-implib,{OI}" )
ENDIF
IF l_lLIBGROUPING .AND. hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm"
IF l_lLIBGROUPING .AND. HBMK_ISCOMP( "mingw|mingw64|mingwarm" )
AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" )
AAdd( hbmk[ _HBMK_aOPTD ], "-Wl,--start-group {LL} {LB} -Wl,--end-group" )
ELSE
@@ -3432,7 +3436,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
ENDIF
IF hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm"
IF HBMK_ISCOMP( "mingw|mingw64|mingwarm" )
cBin_Res := hbmk[ _HBMK_cCCPREFIX ] + "windres" + hbmk[ _HBMK_cCCEXT ]
cResExt := ".reso"
cOpt_Res := "{FR} {IR} -O coff -o {OS}"
@@ -3441,7 +3445,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
ENDIF
CASE hbmk[ _HBMK_cPLAT ] == "os2" .AND. hbmk[ _HBMK_cCOMP ] $ "gcc|gccomf"
CASE hbmk[ _HBMK_cPLAT ] == "os2" .AND. HBMK_ISCOMP( "gcc|gccomf" )
hbmk[ _HBMK_nCmd_FNF ] := _FNF_BCKSLASH
IF hbmk[ _HBMK_lDEBUG ]
AAdd( hbmk[ _HBMK_aOPTC ], "-g" )
@@ -3667,9 +3671,9 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
cOpt_CompC := ""
IF hbmk[ _HBMK_lOPTIM ]
DO CASE
CASE hbmk[ _HBMK_cPLAT ] == "linux" ; cOpt_CompC += " -6r -fp6"
CASE hbmk[ _HBMK_cPLAT ] == "win" ; cOpt_CompC += " -6s -fp6"
CASE hbmk[ _HBMK_cPLAT ] $ "dos|os2" ; cOpt_CompC += " -5r -fp5"
CASE hbmk[ _HBMK_cPLAT ] == "linux" ; cOpt_CompC += " -6r -fp6"
CASE hbmk[ _HBMK_cPLAT ] == "win" ; cOpt_CompC += " -6s -fp6"
CASE HBMK_ISPLAT( "dos|os2" ) ; cOpt_CompC += " -5r -fp5"
ENDCASE
cOpt_CompC += " -onaehtr -s -ei -zp4 -zt0"
IF hbmk[ _HBMK_lCPP ] != NIL .AND. hbmk[ _HBMK_lCPP ]
@@ -3726,7 +3730,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
CASE hbmk[ _HBMK_cPLAT ] == "win" ; cOpt_Dyn := "OP quiet SYS nt_dll {FD} {IM} NAME {OD} {LO} {DL} {LL} {LB} {LS}{SCRIPT}"
CASE hbmk[ _HBMK_cPLAT ] == "os2" ; cOpt_Dyn := "OP quiet SYS os2v2_dll {FD} {IM} NAME {OD} {LO} {DL} {LL} {LB} {LS}{SCRIPT}"
ENDCASE
IF hbmk[ _HBMK_cPLAT ] $ "win|os2" .AND. ! Empty( hbmk[ _HBMK_aDEF ] )
IF HBMK_ISPLAT( "win|os2" ) .AND. ! Empty( hbmk[ _HBMK_aDEF ] )
/* TODO: Watcom wlink requires a non-standard internal layout for .def files.
We will need a converter and implement on-the-fly conversion
to a temp file and pass that via {IM}. */
@@ -3738,13 +3742,13 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
cBin_Lib := "wlib" + hbmk[ _HBMK_cCCEXT ]
cOpt_Lib := "-q {FA} {OL} {LO}{SCRIPT}"
IF hbmk[ _HBMK_cPLAT ] $ "win|os2"
IF HBMK_ISPLAT( "win|os2" )
bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command_watcom( hbmk, cBin_Lib + " -q -o={OL} {ID}", cSourceDLL, cTargetLib, cFlags ) }
ENDIF
cLibLibExt := cLibExt
cImpLibExt := cLibLibExt
cLibObjPrefix := "-+ "
IF hbmk[ _HBMK_lMT ] .AND. hbmk[ _HBMK_cPLAT ] $ "win|os2"
IF hbmk[ _HBMK_lMT ] .AND. HBMK_ISPLAT( "win|os2" )
AAdd( hbmk[ _HBMK_aOPTC ], "-bm" )
ENDIF
IF hbmk[ _HBMK_cPLAT ] == "win"
@@ -3768,11 +3772,11 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
AAdd( hbmk[ _HBMK_aOPTL ], "OP map" )
AAdd( hbmk[ _HBMK_aOPTD ], "OP map" )
ENDIF
IF hbmk[ _HBMK_lIMPLIB ] .AND. hbmk[ _HBMK_cPLAT ] $ "win|os2" /* dos? */
IF hbmk[ _HBMK_lIMPLIB ] .AND. HBMK_ISPLAT( "win|os2" ) /* dos? */
AAdd( hbmk[ _HBMK_aOPTL ], "OP implib={OI}" )
AAdd( hbmk[ _HBMK_aOPTD ], "OP implib={OI}" )
ENDIF
IF hbmk[ _HBMK_cPLAT ] $ "win|os2|dos"
IF HBMK_ISPLAT( "win|os2|dos" )
AAdd( hbmk[ _HBMK_aOPTA ], "-p=64" )
ENDIF
DO CASE
@@ -3798,7 +3802,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
l_aLIBSHARED := { iif( hbmk[ _HBMK_lMT ], hbmk[ _HBMK_cDynLibPrefix ] + "harbourmt" + cDL_Version + hbmk[ _HBMK_cDynLibExt ],;
hbmk[ _HBMK_cDynLibPrefix ] + "harbour" + cDL_Version + hbmk[ _HBMK_cDynLibExt ] ) }
ENDCASE
IF hbmk[ _HBMK_cPLAT ] $ "win|os2"
IF HBMK_ISPLAT( "win|os2" )
cBin_Res := "wrc" + hbmk[ _HBMK_cCCEXT ]
cResExt := ".res"
cOpt_Res := "-q -r {FR} -zm {IR} -fo={OS}"
@@ -3910,7 +3914,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
l_aLIBSHAREDPOST := { "hbmainstd", "hbmainwin" }
l_aLIBSYS := ArrayAJoin( { l_aLIBSYS, l_aLIBSYSCORE, l_aLIBSYSMISC } )
CASE ( hbmk[ _HBMK_cPLAT ] == "win" .AND. hbmk[ _HBMK_cCOMP ] $ "msvc|msvc64|msvcia64|icc|iccia64" ) .OR. ;
CASE ( hbmk[ _HBMK_cPLAT ] == "win" .AND. HBMK_ISCOMP( "msvc|msvc64|msvcia64|icc|iccia64" ) ) .OR. ;
( hbmk[ _HBMK_cPLAT ] == "wce" .AND. hbmk[ _HBMK_cCOMP ] == "msvcarm" ) /* NOTE: Cross-platform: wce/ARM on win/x86 */
hbmk[ _HBMK_nCmd_FNF ] := _FNF_BCKSLASH
@@ -3951,7 +3955,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
cObjExt := ".obj"
cLibLibExt := cLibExt
cImpLibExt := cLibLibExt
IF hbmk[ _HBMK_cCOMP ] $ "icc|iccia64"
IF HBMK_ISCOMP( "icc|iccia64" )
cBin_Lib := "xilib.exe"
cBin_CompC := "icl.exe"
cBin_Link := "xilink.exe"
@@ -3994,7 +3998,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
ENDIF
ENDIF
IF hbmk[ _HBMK_cCOMP ] $ "icc|iccia64"
IF HBMK_ISCOMP( "icc|iccia64" )
SWITCH hbmk[ _HBMK_nWARN ]
CASE _WARN_MAX ; AAdd( hbmk[ _HBMK_aOPTC ], "-W4" ) ; EXIT
CASE _WARN_YES ; AAdd( hbmk[ _HBMK_aOPTC ], "-W3" ) ; EXIT /* -W4 is deadly on icc */
@@ -4077,7 +4081,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
"harbour" + cDL_Version_Alter + hbmk_DYNSUFFIX( hbmk ) + cLibExt ) }
l_aLIBSHAREDPOST := { "hbmainstd", "hbmainwin" }
IF !( hbmk[ _HBMK_cCOMP ] $ "icc|iccia64" )
IF ! HBMK_ISCOMP( "icc|iccia64" )
cBin_Res := "rc.exe"
cOpt_Res := "{FR} -fo {OS} {IR}"
IF hbmk[ _HBMK_nCOMPVer ] >= 1600
@@ -4506,7 +4510,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
with the same name. */
l_cIMPLIBNAME := cName + _HBMK_IMPLIB_DLL_POST
ENDIF
IF hbmk[ _HBMK_lIMPLIB ] .AND. hbmk[ _HBMK_cPLAT ] $ "win|os2|dos"
IF hbmk[ _HBMK_lIMPLIB ] .AND. HBMK_ISPLAT( "win|os2|dos" )
l_cLIBSELF := l_cIMPLIBNAME
ENDIF
l_cIMPLIBNAME := hb_FNameMerge( l_cIMPLIBDIR, cLibLibPrefix + l_cIMPLIBNAME, cImpLibExt )
@@ -4839,7 +4843,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
/* Do entry function detection on platform required and supported */
IF ! hbmk[ _HBMK_lDONTEXEC ] .AND. ! lStopAfterCComp .AND. l_cMAIN == NIL
tmp := iif( Lower( FNameExtGet( hbmk[ _HBMK_cFIRST ] ) ) $ ".prg|.hbs|.clp" .OR. Empty( FNameExtGet( hbmk[ _HBMK_cFIRST ] ) ), FNameDirExtSet( hbmk[ _HBMK_cFIRST ], hbmk[ _HBMK_cWorkDir ], ".c" ), hbmk[ _HBMK_cFIRST ] )
tmp := iif( HBMK_IS_IN( Lower( FNameExtGet( hbmk[ _HBMK_cFIRST ] ) ), ".prg|.hbs|.clp" ) .OR. Empty( FNameExtGet( hbmk[ _HBMK_cFIRST ] ) ), FNameDirExtSet( hbmk[ _HBMK_cFIRST ], hbmk[ _HBMK_cWorkDir ], ".c" ), hbmk[ _HBMK_cFIRST ] )
IF ! Empty( tmp := getFirstFunc( hbmk, tmp ) )
l_cMAIN := tmp
ENDIF
@@ -4863,16 +4867,16 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
/* NOTE: This has to be kept synced with Harbour HB_IMPORT values. */
DO CASE
CASE ! hbmk[ _HBMK_lSHARED ] .OR. ;
!( hbmk[ _HBMK_cPLAT ] $ "win|wce" ) .OR. ;
hbmk[ _HBMK_cCOMP ] $ "msvc|msvc64|msvcia64|icc|iccia64"
! HBMK_ISPLAT( "win|wce" ) .OR. ;
HBMK_ISCOMP( "msvc|msvc64|msvcia64|icc|iccia64" )
/* NOTE: MSVC gives the warning:
"LNK4217: locally defined symbol ... imported in function ..."
if using 'dllimport'. [vszakats] */
tmp := ""
CASE hbmk[ _HBMK_cCOMP ] $ "gcc|mingw|mingw64|mingwarm|cygwin"
CASE HBMK_ISCOMP( "gcc|mingw|mingw64|mingwarm|cygwin" )
tmp := "__attribute__ (( dllimport ))"
CASE hbmk[ _HBMK_cCOMP ] $ "bcc|watcom"
CASE HBMK_ISCOMP( "bcc|watcom" )
tmp := "__declspec( dllimport )"
OTHERWISE
tmp := "_declspec( dllimport )"
@@ -5250,7 +5254,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
ENDIF
IF hbmk[ _HBMK_cPLAT ] $ "win|wce|os2" .AND. ;
IF HBMK_ISPLAT( "win|wce|os2" ) .AND. ;
! Empty( hbmk[ _HBMK_aICON ] )
l_cRESSTUB := DirAddPathSep( hbmk[ _HBMK_cWorkDir ] ) + "_hbmkaut.rc"
@@ -5923,7 +5927,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
/* For win/bcc and os2/gcc the implib is not created at this point yet,
so there will be a copy failure in case the implib generation
fails at the post-processing phase. */
IF hbmk[ _HBMK_lIMPLIB ] .AND. hbmk[ _HBMK_cPLAT ] $ "win|os2|dos" .AND. ;
IF hbmk[ _HBMK_lIMPLIB ] .AND. HBMK_ISPLAT( "win|os2|dos" ) .AND. ;
l_lIMPLIBToProcess
hb_AIns( hbmk[ _HBMK_aINSTFILE ], 1, { "implib", l_cIMPLIBNAME }, .T. )
ENDIF
@@ -5937,7 +5941,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
IF hbmk[ _HBMK_lCLEAN ]
FErase( hbmk[ _HBMK_cPROGNAME ] )
IF hbmk[ _HBMK_lIMPLIB ] .AND. hbmk[ _HBMK_cPLAT ] $ "win|os2|dos" .AND. l_cIMPLIBNAME != NIL
IF hbmk[ _HBMK_lIMPLIB ] .AND. HBMK_ISPLAT( "win|os2|dos" ) .AND. l_cIMPLIBNAME != NIL
FErase( l_cIMPLIBNAME )
ENDIF
IF hbmk[ _HBMK_lMAP ]
@@ -6541,7 +6545,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, tTimeParent, lCMode, cBin_Com
cExt := Lower( FNameExtGet( cFileName ) )
/* Filter out non-source format inputs for MinGW / windres */
IF hbmk[ _HBMK_cCOMP ] $ "gcc|mingw|mingw64|mingwarm|cygwin" .AND. hbmk[ _HBMK_cPLAT ] $ "win|wce" .AND. cExt == ".res"
IF HBMK_ISCOMP( "gcc|mingw|mingw64|mingwarm|cygwin" ) .AND. HBMK_ISPLAT( "win|wce" ) .AND. cExt == ".res"
RETURN .F.
ENDIF
@@ -6599,7 +6603,7 @@ STATIC FUNCTION FindNewerHeaders( hbmk, cFileName, tTimeParent, lCMode, cBin_Com
ENDIF
NEXT
ELSEIF lCMode .AND. hbmk[ _HBMK_nHEAD ] == _HEAD_NATIVE .AND. hbmk[ _HBMK_cCOMP ] $ "gcc|mingw|mingw64|mingwarm|cygwin|djgpp|gccomf|clang|open64"
ELSEIF lCMode .AND. hbmk[ _HBMK_nHEAD ] == _HEAD_NATIVE .AND. HBMK_ISCOMP( "gcc|mingw|mingw64|mingwarm|cygwin|djgpp|gccomf|clang|open64" )
IF hbmk[ _HBMK_lDEBUGINC ]
hbmk_OutStd( hbmk, hb_StrFormat( "debuginc: Calling C/C++ compiler to detect dependencies of %1$s", cFileName ) )
@@ -7160,7 +7164,7 @@ STATIC FUNCTION dep_evaluate( hbmk )
specified. This assumes that on these platforms dependencies can never
be found on locations known in advance and specified in make
files. [vszakats] */
IF hbmk[ _HBMK_cPLAT ] $ "win|wce|os2|dos" .AND. ;
IF HBMK_ISPLAT( "win|wce|os2|dos" ) .AND. ;
Empty( dep[ _HBMKDEP_cControl ] ) .AND. ;
Empty( dep[ _HBMKDEP_aINCPATHLOCAL ] )
AAdd( aWRN, dep[ _HBMKDEP_cName ] )
@@ -7422,12 +7426,12 @@ STATIC FUNCTION FindLib( hbmk, cLib, aLIBPATH, cLibPrefix, cLibExt )
LOCAL tmp
/* Check libs in their full paths */
IF hbmk[ _HBMK_cCOMP ] $ "msvc|msvc64|msvcarm|bcc|pocc|pocc64|poccarm|watcom"
IF HBMK_ISCOMP( "msvc|msvc64|msvcarm|bcc|pocc|pocc64|poccarm|watcom" )
IF ! Empty( FNameDirGet( cLib ) )
IF hb_FileExists( cLib := FNameExtSet( cLib, cLibExt ) )
RETURN cLib
ENDIF
IF hbmk[ _HBMK_cCOMP ] $ "pocc|pocc64|poccarm"
IF HBMK_ISCOMP( "pocc|pocc64|poccarm" )
IF hb_FileExists( cLib := FNameExtSet( cLib, ".a" ) )
RETURN cLib
ENDIF
@@ -7437,7 +7441,7 @@ STATIC FUNCTION FindLib( hbmk, cLib, aLIBPATH, cLibPrefix, cLibExt )
ENDIF
/* Check in current dir */
IF hbmk[ _HBMK_cCOMP ] $ "msvc|msvc64|msvcarm|bcc|pocc|pocc64|poccarm|watcom"
IF HBMK_ISCOMP( "msvc|msvc64|msvcarm|bcc|pocc|pocc64|poccarm|watcom" )
IF ! Empty( tmp := LibExists( hbmk, "", cLib, cLibPrefix, cLibExt ) )
RETURN tmp
ENDIF
@@ -7454,7 +7458,7 @@ STATIC FUNCTION FindLib( hbmk, cLib, aLIBPATH, cLibPrefix, cLibExt )
#if 0
/* Check in certain other compiler specific locations. */
IF hbmk[ _HBMK_cCOMP ] $ "msvc|msvc64|msvcarm"
IF HBMK_ISCOMP( "msvc|msvc64|msvcarm" )
FOR EACH cDir IN hb_ATokens( GetEnv( "LIB" ), hb_osPathListSeparator(), .T., .T. )
IF ! Empty( cDir )
IF ! Empty( tmp := LibExists( hbmk, cDir, cLib, cLibPrefix, cLibExt ) )
@@ -7473,7 +7477,7 @@ STATIC FUNCTION LibExists( hbmk, cDir, cLib, cLibPrefix, cLibExt )
cDir := DirAddPathSep( PathSepToSelf( cDir ) )
DO CASE
CASE hbmk[ _HBMK_cCOMP ] $ "gcc|mingw|mingw64|mingwarm|cygwin" .AND. hbmk[ _HBMK_cPLAT ] $ "win|wce"
CASE HBMK_ISCOMP( "gcc|mingw|mingw64|mingwarm|cygwin" ) .AND. HBMK_ISPLAT( "win|wce" )
/* NOTE: ld/gcc option -dll-search-prefix isn't taken into account here,
So, '<prefix>xxx.dll' format libs won't be found by hbmk2. */
DO CASE
@@ -7484,12 +7488,12 @@ STATIC FUNCTION LibExists( hbmk, cDir, cLib, cLibPrefix, cLibExt )
CASE hb_FileExists( tmp := cDir + "lib" + FNameExtSet( cLib, ".dll" ) ) ; RETURN tmp
CASE hb_FileExists( tmp := cDir + FNameExtSet( cLib, ".dll" ) ) ; RETURN tmp
ENDCASE
CASE hbmk[ _HBMK_cCOMP ] == "gcc" .AND. hbmk[ _HBMK_cPLAT ] $ "linux|sunos"
CASE hbmk[ _HBMK_cCOMP ] == "gcc" .AND. HBMK_ISPLAT( "linux|sunos" )
DO CASE
CASE hb_FileExists( tmp := cDir + "lib" + FNameExtSet( cLib, ".so" ) ) ; RETURN tmp
CASE hb_FileExists( tmp := cDir + "lib" + FNameExtSet( cLib, ".a" ) ) ; RETURN tmp
ENDCASE
CASE hbmk[ _HBMK_cCOMP ] $ "pocc|pocc64|poccarm"
CASE HBMK_ISCOMP( "pocc|pocc64|poccarm" )
DO CASE
CASE hb_FileExists( tmp := cDir + FNameExtSet( cLib, cLibExt ) ) ; RETURN tmp
CASE hb_FileExists( tmp := cDir + FNameExtSet( cLib, ".a" ) ) ; RETURN tmp
@@ -8065,7 +8069,7 @@ STATIC FUNCTION ListCookLib( hbmk, aLIB, aLIBA, array, cPrefix, cExtNew )
LOCAL cLibNameCooked
LOCAL cName, cExt
IF hbmk[ _HBMK_cCOMP ] $ "gcc|mingw|mingw64|mingwarm|djgpp|cygwin|gccomf|clang|open64"
IF HBMK_ISCOMP( "gcc|mingw|mingw64|mingwarm|djgpp|cygwin|gccomf|clang|open64" )
FOR EACH cLibName IN array
hb_FNameSplit( cLibName, @cDir )
IF Empty( cDir )
@@ -8353,7 +8357,7 @@ STATIC FUNCTION PathSepToTarget( hbmk, cFileName, nStart )
nStart := 1
ENDIF
IF hbmk[ _HBMK_cPLAT ] $ "win|wce|dos|os2" .AND. !( hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm|cygwin" )
IF HBMK_ISPLAT( "win|wce|dos|os2" ) .AND. ! HBMK_ISCOMP( "mingw|mingw64|mingwarm|cygwin" )
RETURN Left( cFileName, nStart - 1 ) + StrTran( SubStr( cFileName, nStart ), "/", "\" )
ENDIF
@@ -8731,7 +8735,7 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel )
AAddNew( hbmk[ _HBMK_aDEF ], tmp )
NEXT
CASE FNameExtGet( cItemL ) == ".res"
IF hbmk[ _HBMK_cCOMP ] $ "mingw|mingw64|mingwarm"
IF HBMK_ISCOMP( "mingw|mingw64|mingwarm" )
/* For MinGW family add .res files as source input, as they
will need to be converted to coff format with windres (just
like plain .rc files) before feeding them to gcc. */
@@ -9558,7 +9562,7 @@ STATIC FUNCTION getFirstFunc( hbmk, cFile )
LOCAL cFuncList, cExecNM, cFuncName, cExt, cLine, n, c
cFuncName := ""
IF hbmk[ _HBMK_cCOMP ] $ "gcc|mingw|mingw64|mingwarm|cygwin|gccomf"
IF HBMK_ISCOMP( "gcc|mingw|mingw64|mingwarm|cygwin|gccomf" )
hb_FNameSplit( cFile,,, @cExt )
IF cExt == ".c"
FOR EACH cLine IN hb_ATokens( StrTran( hb_MemoRead( cFile ), Chr( 13 ), Chr( 10 ) ), Chr( 10 ) )
@@ -9718,10 +9722,10 @@ STATIC PROCEDURE PlatformPRGFlags( hbmk, aOPTPRG )
recommended to use these macros in .prg code.
[vszakats] */
DO CASE
CASE hbmk[ _HBMK_cPLAT ] $ "dos|os2"
CASE HBMK_ISPLAT( "dos|os2" )
AAdd( aDf, "__LITTLE_ENDIAN__" )
AAdd( aDf, "__ARCH32BIT__" )
CASE hbmk[ _HBMK_cPLAT ] $ "wce|win"
CASE HBMK_ISPLAT( "wce|win" )
AAdd( aDf, "__LITTLE_ENDIAN__" ) /* Windows is currently little-endian on all supported CPUs. */
IF hbmk[ _HBMK_cCOMP ] == "mingw64" .OR. ;
hbmk[ _HBMK_cCOMP ] == "msvc64" .OR. ;
@@ -10669,11 +10673,11 @@ STATIC FUNCTION hbmk_TARGETTYPE( hbmk )
STATIC FUNCTION hbmk_CPU( hbmk )
DO CASE
CASE hbmk[ _HBMK_cPLAT ] $ "dos|os2" .OR. ;
hbmk[ _HBMK_cCOMP ] $ "mingw|cygwin|msvc|pocc|watcom|bcc|xcc" .OR. ;
CASE HBMK_ISPLAT( "dos|os2" ) .OR. ;
HBMK_ISCOMP( "mingw|cygwin|msvc|pocc|watcom|bcc|xcc" ) .OR. ;
( hbmk[ _HBMK_cPLAT ] == "win" .AND. hbmk[ _HBMK_cCOMP ] == "icc" )
RETURN "x86"
CASE hbmk[ _HBMK_cCOMP ] $ "gcc|icc|clang|sunpro|diab|pcc"
CASE HBMK_ISCOMP( "gcc|icc|clang|sunpro|diab|pcc" )
/* TOFIX: This isn't necessarily correct, since these inherit the
default CPU architecture from OS default, by and large,
and targets can be overridden using user options. */
@@ -10737,13 +10741,13 @@ FUNCTION hbmk_KEYW( hbmk, cKeyword, cValue, cOperator )
CASE "static" ; RETURN ! hbmk[ _HBMK_lSHARED ]
CASE "unicode" ; RETURN hbmk[ _HBMK_lUNICODE ]
CASE "ascii" ; RETURN ! hbmk[ _HBMK_lUNICODE ]
CASE "unix" ; RETURN "|" + hbmk[ _HBMK_cPLAT ] + "|" $ "|bsd|hpux|sunos|beos|qnx|vxworks|symbian|linux|darwin|"
CASE "allwin" ; RETURN "|" + hbmk[ _HBMK_cPLAT ] + "|" $ "|win|wce|"
CASE "allgcc" ; RETURN "|" + hbmk[ _HBMK_cCOMP ] + "|" $ "|gcc|mingw|mingw64|mingwarm|cygwin|djgpp|gccomf|clang|open64|"
CASE "allmingw" ; RETURN "|" + hbmk[ _HBMK_cCOMP ] + "|" $ "|mingw|mingw64|mingwarm|"
CASE "allmsvc" ; RETURN "|" + hbmk[ _HBMK_cCOMP ] + "|" $ "|msvc|msvc64|msvcia64|msvcarm|"
CASE "allpocc" ; RETURN "|" + hbmk[ _HBMK_cCOMP ] + "|" $ "|pocc|pocc64|poccarm|"
CASE "allicc" ; RETURN "|" + hbmk[ _HBMK_cCOMP ] + "|" $ "|icc|iccia64|"
CASE "unix" ; RETURN HBMK_ISPLAT( "bsd|hpux|sunos|beos|qnx|vxworks|symbian|linux|darwin" )
CASE "allwin" ; RETURN HBMK_ISPLAT( "win|wce" )
CASE "allgcc" ; RETURN HBMK_ISCOMP( "gcc|mingw|mingw64|mingwarm|cygwin|djgpp|gccomf|clang|open64" )
CASE "allmingw" ; RETURN HBMK_ISCOMP( "mingw|mingw64|mingwarm" )
CASE "allmsvc" ; RETURN HBMK_ISCOMP( "msvc|msvc64|msvcia64|msvcarm" )
CASE "allpocc" ; RETURN HBMK_ISCOMP( "pocc|pocc64|poccarm" )
CASE "allicc" ; RETURN HBMK_ISCOMP( "icc|iccia64" )
CASE "xhb" ; RETURN _HBMODE_IS_XHB( hbmk[ _HBMK_nHBMODE ] )
CASE "hb10" ; RETURN hbmk[ _HBMK_nHBMODE ] == _HBMODE_HB10
CASE "hb20" ; RETURN hbmk[ _HBMK_nHBMODE ] == _HBMODE_HB20
@@ -10757,15 +10761,16 @@ FUNCTION hbmk_KEYW( hbmk, cKeyword, cValue, cOperator )
RETURN .T.
ENDIF
IF ! ( "|" + cKeyword + "|" $ "|win|wce|dos|os2" + ;
"|bsd|hpux|sunos|beos|qnx|vxworks|symbian|linux|darwin" + ;
"|msvc|msvc64|msvcia64|msvcarm" + ;
"|pocc|pocc64|poccarm|xcc" + ;
"|mingw|mingw64|mingwarm|cygwin|bcc|watcom" + ;
"|gcc|gccomf|djgpp" + ;
"|hblib|hbdyn|hbdynvm|hbimplib|hbexe" + ;
"|icc|iccia64|clang|open64|sunpro|diab|pcc" + ;
"|x86|x86_64|ia64|arm|mips|sh" )
IF ! HBMK_IS_IN( cKeyword, "|win|wce|dos|os2" + ;
"|bsd|hpux|sunos|beos|qnx|vxworks|symbian|linux|darwin|cygwin" + ;
"|msvc|msvc64|msvcia64|msvcarm" + ;
"|pocc|pocc64|poccarm|xcc" + ;
"|mingw|mingw64|mingwarm|cygwin|bcc|watcom" + ;
"|gcc|gccomf|djgpp" + ;
"|hblib|hbdyn|hbdynvm|hbimplib|hbexe" + ;
"|icc|iccia64|clang|open64|sunpro|diab|pcc" + ;
"|x86|x86_64|ia64|arm|mips|sh" )
tmp := MacroGet( hbmk, cKeyWord, "" )
IF cValue != NIL
SWITCH cOperator
@@ -11322,7 +11327,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong )
I_( "Supported <comp> values for each supported <plat> value:" ),;
" - linux : gcc, clang, icc, watcom, sunpro, open64",;
" - darwin : gcc, clang, icc",;
" - win : mingw, msvc, bcc, watcom, icc, pocc, cygwin, xcc,",;
" - win : mingw, msvc, bcc, watcom, icc, pocc, xcc,",;
" - mingw64, msvc64, msvcia64, iccia64, pocc64",;
" - wce : mingwarm, mingw, msvcarm, poccarm",;
" - os2 : gcc, gccomf, watcom",;
@@ -11333,6 +11338,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong )
" - qnx : gcc",;
" - vxworks : gcc, diab",;
" - symbian : gcc",;
" - cygwin : gcc",;
" - sunos : gcc, sunpro" }
LOCAL aOpt_Basic := {;