diff --git a/harbour/ChangeLog b/harbour/ChangeLog index da2d60e1a8..c0c92700ea 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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 diff --git a/harbour/INSTALL b/harbour/INSTALL index a58d171d40..7fbd8926fc 100644 --- a/harbour/INSTALL +++ b/harbour/INSTALL @@ -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= Build space separated list of additional .hbp projects. - - HB_COMPILER_VER=[] Set C compiler version. This is used with msvc - and mingw/cygwin targets currently. + - HB_COMPILER_VER=[] Set C compiler version. This is used with win/msvc, + win/mingw and cygwin/gcc targets currently. format: <15><0>[<0>] = [.] 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 diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index eeb9651acb..55b9334cbe 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -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, '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 values for each supported 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 := {;