From d0be1949077f4e3da41fb490b43830d17669f66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Mon, 11 Feb 2019 13:43:40 +0100 Subject: [PATCH] 2019-02-11 13:43 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * bin/commit.hb ! fixed UTC offset formatting * contrib/hbwin/win_os.prg * updated win_osNetRegOk() for modern MS-Windows versions: - on Win7 and upper set System\CurrentControlSet\Services\LanmanServer\Parameters\DisableLeasing to disable opportunistic locks. - do not force SMB1 to disable oplocks on Win7 and upper - new MS-Win10 does not support SMB1 at all so this setting on the server with such system completely disables SMB network and forcing SMB1 on the client side blocks access to new Win10 servers. Warning! this setting is still activated on Vista so it cannot connect work with new Win10 but I do not know any other working method to disable oplocks in Windows Vista. * synced with Viktor's branch * contrib/xhb/hbserv.c ! added missing return * include/harbour.hbx * src/harbour.def * src/rtl/version.c + added new PRG functions: hb_osIsWin7(), hb_osIsWin8(), hb_osIsWin81(), hb_osIsWin10() * src/rtl/gttrm/gttrm.c + added autodetection for few other XTerm compatible terminals + respect color extension in TERM name of all XTerm compatible terminals * utils/hbmk2/hbmk2.prg + added support for -cpp=isoXX borowed from Viktor's branch * contrib/gtqtc/gtqtc.hbc * contrib/gtqtc/gtqtc.hbp * use -cpp=iso11 required for QT 5.7.0 or upper * extended QT detection and partial syncing with Viktor's branch --- ChangeLog.txt | 40 ++++++++++++++++++++++++++ bin/commit.hb | 4 +-- contrib/gtqtc/gtqtc.hbc | 23 ++++++++++----- contrib/gtqtc/gtqtc.hbp | 21 ++++++++++++-- contrib/hbwin/win_os.prg | 42 ++++++++++++++++----------- contrib/xhb/hbserv.c | 1 + include/harbour.hbx | 4 +++ src/harbour.def | 4 +++ src/rtl/gttrm/gttrm.c | 34 +++++++++++----------- src/rtl/version.c | 20 +++++++++++++ utils/hbmk2/hbmk2.prg | 62 +++++++++++++++++++++------------------- 11 files changed, 181 insertions(+), 74 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 481ded89f5..c4452c39f9 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -7,6 +7,46 @@ Entries may not always be in chronological/commit order. See license at the end of file. */ +2019-02-11 13:43 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * bin/commit.hb + ! fixed UTC offset formatting + + * contrib/hbwin/win_os.prg + * updated win_osNetRegOk() for modern MS-Windows versions: + - on Win7 and upper set + System\CurrentControlSet\Services\LanmanServer\Parameters\DisableLeasing + to disable opportunistic locks. + - do not force SMB1 to disable oplocks on Win7 and upper - new MS-Win10 + does not support SMB1 at all so this setting on the server with + such system completely disables SMB network and forcing SMB1 on the + client side blocks access to new Win10 servers. + Warning! this setting is still activated on Vista so it cannot + connect work with new Win10 but I do not know any other + working method to disable oplocks in Windows Vista. + * synced with Viktor's branch + + * contrib/xhb/hbserv.c + ! added missing return + + * include/harbour.hbx + * src/harbour.def + * src/rtl/version.c + + added new PRG functions: + hb_osIsWin7(), hb_osIsWin8(), hb_osIsWin81(), hb_osIsWin10() + + * src/rtl/gttrm/gttrm.c + + added autodetection for few other XTerm compatible terminals + + respect color extension in TERM name of all XTerm compatible + terminals + + * utils/hbmk2/hbmk2.prg + + added support for -cpp=isoXX borowed from Viktor's branch + + * contrib/gtqtc/gtqtc.hbc + * contrib/gtqtc/gtqtc.hbp + * use -cpp=iso11 required for QT 5.7.0 or upper + * extended QT detection and partial syncing with Viktor's branch + 2019-02-11 13:09 UTC+0100 Aleksander Czajczynski (hb fki.pl) * contrib/sddsqlt3/core.c ! fix DBUSEAREA() operation with SQLITE3 SDD to return empty result diff --git a/bin/commit.hb b/bin/commit.hb index 2c4bb90163..4a63d411a6 100755 --- a/bin/commit.hb +++ b/bin/commit.hb @@ -205,8 +205,8 @@ STATIC FUNCTION MakeEntry( aChanges, cMyName, cLogName, lAllowChangeLog ) LOCAL cLog := hb_StrFormat( "%1$s UTC%2$s%3$02d%4$02d %5$s", ; hb_TToC( hb_DateTime(), "YYYY-MM-DD", "HH:MM" ), ; iif( nOffset < 0, "-", "+" ), ; - Int( nOffset / 3600 ), ; - Int( ( ( nOffset / 3600 ) - Int( nOffset / 3600 ) ) * 60 ), ; + Int( Abs( nOffset ) / 3600 ), ; + Int( Abs( nOffset ) % 3600 / 60 ), ; cMyName ) + hb_eol() LOCAL cLine diff --git a/contrib/gtqtc/gtqtc.hbc b/contrib/gtqtc/gtqtc.hbc index abf732e402..f6011622ce 100644 --- a/contrib/gtqtc/gtqtc.hbc +++ b/contrib/gtqtc/gtqtc.hbc @@ -1,23 +1,32 @@ -description=Multi-Platform QT based GUI console (QTC) +description=Multi-platform QT based GUI console (QTC) gt=${_HB_DYNPREF}${hb_name}${_HB_DYNSUFF} +deppkgname=qt5:qt5 depcontrol=qt5:${HB_WITH_QT} depkeyhead=qt5:QtCore/QJsonObject depoptional=qt5:yes depincpath=qt5:/usr/local/opt/qt5/include{darwin} +depincpath=qt5:/usr/local/include/qt5{bsd} depfinish=qt5 -{!HBMK_HAS_QT5&darwin}depcontrol=qt:${HB_WITH_QT} -{!HBMK_HAS_QT5&darwin}depkeyhead=qt:QtCore/qglobal.h +{!HBMK_HAS_QT5&!darwin&!android}deppkgname=qt:QtCore +{!HBMK_HAS_QT5}deppkgname=qt:qt4 +{!HBMK_HAS_QT5}depcontrol=qt:${HB_WITH_QT} +{!HBMK_HAS_QT5}depkeyhead=qt:QtCore/qglobal.h +{!HBMK_HAS_QT5&bsd}depincpath=qt:/usr/local/include/qt4 +{!HBMK_HAS_QT5&beos}depincpath=qt:/boot/common/include {!HBMK_HAS_QT5&darwin}depincpath=qt:/Developer/qt/include {!HBMK_HAS_QT5&darwin}depincpath=qt:/Library/Frameworks {!HBMK_HAS_QT5&darwin}depincpath=qt:/usr/local/include -{!HBMK_HAS_QT5&darwin}depfinish=qt +{!HBMK_HAS_QT5}depfinish=qt -{(allwin|os2)|HB_WITH_QT}libpaths=${HB_WITH_QT}/../lib +{(allwin|os2)|HBMK_HAS_QT}libpaths=${HBMK_DIR_QT}/../lib +{(allwin|os2)|HBMK_HAS_QT5}libpaths=${HBMK_DIR_QT5}/../lib +{bsd&HBMK_HAS_QT}libpaths=/usr/local/lib/qt4 +{bsd&HBMK_HAS_QT5}libpaths=/usr/local/lib/qt5 {(allwin|os2)&!HBMK_HAS_QT5}libs=QtCore4 QtGui4 -{(allwin|os2|linux|beos|symbian)&HBMK_HAS_QT5}libs=Qt5Core Qt5Gui Qt5Widgets +{(allwin|os2|linux|bsd|beos|symbian)&HBMK_HAS_QT5}libs=Qt5Core Qt5Gui Qt5Widgets {(linux|beos|symbian)&!HBMK_HAS_QT5}libs=QtCore QtGui {!HBMK_HAS_QT5&darwin}ldflags=-F${HBMK_DIR_QT}/../lib {!HBMK_HAS_QT5&darwin}dflags=-F${HBMK_DIR_QT}/../lib @@ -25,7 +34,7 @@ depfinish=qt5 {HBMK_HAS_QT5&darwin}dflags=-F${HBMK_DIR_QT5}/../lib {darwin}frameworks=QtCore QtGui {darwin&HBMK_HAS_QT5}frameworks=QtWidgets -{(bsd|darwin)}libs=stdc++ +{bsd|darwin}libs=stdc++ cpp=yes gui=yes diff --git a/contrib/gtqtc/gtqtc.hbp b/contrib/gtqtc/gtqtc.hbp index 51cbdf69a5..a7d8262417 100644 --- a/contrib/gtqtc/gtqtc.hbp +++ b/contrib/gtqtc/gtqtc.hbp @@ -5,20 +5,32 @@ -w3 -es2 +# Tone down warnings for both QT4 and QT5 +-warn=low{allclang} + -stop{dos|watcom|bcc|pocc|pocc64|poccarm|msvcia64|pcc|(hbdyn&android)} -pic +# NOTE: You can override auto-detection of QT 'moc' tool by using HB_QTPATH and +# optionally HB_QTSUFFIX envvars. This may only be necessary on some *nix +# systems. E.g.: +# +# HB_QTPATH=/opt/qt5/bin/ +# HB_QTSUFFIX= + -plugin=hbmk2_qtgt.hb --depcontrol=qt5:${HB_WITH_QT} +-deppkgname=qt5:qt5 -depkeyhead=qt5:QtCore/QJsonObject +-depcontrol=qt5:${HB_WITH_QT} -depoptional=qt5:yes -depincpath=qt5:/usr/local/opt/qt5/include{darwin} -depincpath=qt5:/usr/local/include/qt5{bsd} -depfinish=qt5 {!HBMK_HAS_QT5&!darwin&!android}-deppkgname=qt:QtCore +{!HBMK_HAS_QT5}-deppkgname=qt:qt4 {!HBMK_HAS_QT5}-depkeyhead=qt:QtCore/qglobal.h {!HBMK_HAS_QT5}-depcontrol=qt:${HB_WITH_QT} {!HBMK_HAS_QT5&HB_BUILD_3RDEXT='no'}-depcontrol=qt:no @@ -31,7 +43,10 @@ {!HBMK_HAS_QT5&darwin}-depincpath=qt:/Library/Frameworks {!HBMK_HAS_QT5&darwin}-depincpath=qt:/usr/local/include +${hb_name}.hbx + +# Required for 5.7.0 or upper +-cpp=iso11{HBMK_HAS_QT5} + gtqtc1.cpp gtqtc.h - -${hb_name}.hbx diff --git a/contrib/hbwin/win_os.prg b/contrib/hbwin/win_os.prg index 5fc8493e35..03bf3ef36d 100644 --- a/contrib/hbwin/win_os.prg +++ b/contrib/hbwin/win_os.prg @@ -64,9 +64,8 @@ FUNCTION win_osNetRegOk( lSetIt, lDoVista ) LOCAL cKeyWks hb_default( @lSetIt, .F. ) - hb_default( @lDoVista, .T. ) - IF ! lDoVista .AND. hb_osIsWinVista() + IF ! hb_defaultValue( lDoVista, .T. ) .AND. hb_osIsWinVista() /* do nothing */ ELSEIF hb_osIsWin9x() bRetVal := win_regQuery( WIN_HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\VxD\VREDIR", "DiscardCacheOnOpen", 1, lSetIt ) @@ -85,11 +84,6 @@ FUNCTION win_osNetRegOk( lSetIt, lDoVista ) bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationDelay", 0, lSetIt ) bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationRetries", 0, lSetIt ) - IF hb_osIsWinVista() - /* If SMB2 is enabled turning off oplocks does not work, so SMB2 is required to be turned off on Server. */ - bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SMB2", 0, lSetIt ) - ENDIF - /* Workstation settings */ bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UseOpportunisticLocking", 0, lSetIt ) bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLocks", 0, lSetIt ) @@ -97,6 +91,14 @@ FUNCTION win_osNetRegOk( lSetIt, lDoVista ) bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UtilizeNtCaching", 0, lSetIt ) bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "UseLockReadUnlock", 0, lSetIt ) + IF hb_osIsWin7() + /* https://groups.google.com/forum/#!msg/harbour-users/RyjXKmlQqWw/QOYwIPS5BQAJ */ + bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "DisableLeasing", 1, lSetIt ) + ELSEIF hb_osIsWinVista() + /* If SMB2 is enabled turning off oplocks does not work, so SMB2 is required to be turned off on Server. */ + bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeySrv, "SMB2", 0, lSetIt ) + ENDIF + IF hb_osIsWinVista() bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "FileInfoCacheLifetime", 0, lSetIt ) bRetVal := bRetVal .AND. win_regQuery( WIN_HKEY_LOCAL_MACHINE, cKeyWks, "FileNotFoundCacheLifetime", 0, lSetIt ) @@ -116,15 +118,21 @@ FUNCTION win_osNetVRedirOk( /* @ */ nResult ) nResult := 0 - IF hb_osIsWin9x() - aFiles := Directory( hb_GetEnv( "WINDIR", "C:\WINDOWS" ) + "\SYSTEM\VREDIR.VXD" ) /* Check for faulty files. */ - IF ! Empty( aFiles ) - IF aFiles[ 1 ][ F_SIZE ] == 156749 .AND. aFiles[ 1 ][ F_TIME ] == "11:11:10" - nResult := 1111 - ELSEIF aFiles[ 1 ][ F_SIZE ] == 140343 .AND. aFiles[ 1 ][ F_TIME ] == "09:50:00" - nResult := 950 - ENDIF - ENDIF + /* Check for faulty files */ + IF hb_osIsWin9x() .AND. ; + ! Empty( aFiles := Directory( hb_GetEnv( "WINDIR", "C:\WINDOWS" ) + "\SYSTEM\VREDIR.VXD" ) ) + SWITCH aFiles[ 1 ][ F_SIZE ] + CASE 156749 + IF aFiles[ 1 ][ F_TIME ] == "11:11:10" + nResult := 1111 + ENDIF + EXIT + CASE 140343 + IF aFiles[ 1 ][ F_TIME ] == "09:50:00" + nResult := 950 + ENDIF + EXIT + ENDSWITCH ENDIF - RETURN Empty( nResult ) + RETURN nResult == 0 diff --git a/contrib/xhb/hbserv.c b/contrib/xhb/hbserv.c index dcf7859046..9be470afcc 100644 --- a/contrib/xhb/hbserv.c +++ b/contrib/xhb/hbserv.c @@ -981,6 +981,7 @@ HB_FUNC( HB_SIGNALDESC ) case SIGABRT: hb_retc_const( "Abort" ); + return; case SIGUSR1: hb_retc_const( "User defined" ); diff --git a/include/harbour.hbx b/include/harbour.hbx index 86bf156266..6ab691c188 100644 --- a/include/harbour.hbx +++ b/include/harbour.hbx @@ -727,7 +727,11 @@ DYNAMIC hb_osDriveSeparator DYNAMIC hb_osError DYNAMIC hb_osFileMask DYNAMIC hb_osIs64bit +DYNAMIC hb_osIsWin10 DYNAMIC hb_osIsWin2K +DYNAMIC hb_osIsWin7 +DYNAMIC hb_osIsWin8 +DYNAMIC hb_osIsWin81 DYNAMIC hb_osIsWin9x DYNAMIC hb_osIsWinCE DYNAMIC hb_osIsWinNT diff --git a/src/harbour.def b/src/harbour.def index 33896323f8..75e1ad3d08 100644 --- a/src/harbour.def +++ b/src/harbour.def @@ -912,7 +912,11 @@ HB_FUN_HB_OSDRIVESEPARATOR HB_FUN_HB_OSERROR HB_FUN_HB_OSFILEMASK HB_FUN_HB_OSIS64BIT +HB_FUN_HB_OSISWIN10 HB_FUN_HB_OSISWIN2K +HB_FUN_HB_OSISWIN7 +HB_FUN_HB_OSISWIN8 +HB_FUN_HB_OSISWIN81 HB_FUN_HB_OSISWIN9X HB_FUN_HB_OSISWINCE HB_FUN_HB_OSISWINNT diff --git a/src/rtl/gttrm/gttrm.c b/src/rtl/gttrm/gttrm.c index 894fb2233f..5594497ee6 100644 --- a/src/rtl/gttrm/gttrm.c +++ b/src/rtl/gttrm/gttrm.c @@ -3225,10 +3225,17 @@ static void hb_gt_trm_SetTerm( PHB_GTTRM pTerm ) pTerm->terminal_ext |= TERM_PUTTY; } - if( ( pTerm->terminal_ext & TERM_PUTTY ) || - strncmp( szTerm, "xterm", 5 ) == 0 || - strncmp( szTerm, "rxvt", 4 ) == 0 || - strncmp( szTerm, "screen", 6 ) == 0 ) + if( ( pTerm->terminal_ext & TERM_PUTTY ) || /* PuTTY terminal emulator */ + strncmp( szTerm, "xterm", 5 ) == 0 || /* X11 terminal emulator */ + strncmp( szTerm, "rxvt", 4 ) == 0 || /* rxvt terminal emulator */ + strncmp( szTerm, "gnome", 5 ) == 0 || /* GNOME Terminal */ + strncmp( szTerm, "vte", 3 ) == 0 || /* VTE aka GNOME Terminal */ + strncmp( szTerm, "konsole", 7 ) == 0 || /* KDE console window */ + strncmp( szTerm, "nsterm", 6 ) == 0 || /* Apple Terminal */ + strncmp( szTerm, "Apple_Terminal", 14 ) == 0 || /* Apple Terminal */ + strncmp( szTerm, "aixterm", 7 ) == 0 || /* IBM Aixterm Terminal Emulator */ + strncmp( szTerm, "tmux", 4 ) == 0 || /* tmux terminal multiplexer */ + strncmp( szTerm, "screen", 6 ) == 0 ) /* VT 100/ANSI X3.64 virtual terminal */ { pTerm->Init = hb_gt_trm_AnsiInit; pTerm->Exit = hb_gt_trm_AnsiExit; @@ -3245,19 +3252,14 @@ static void hb_gt_trm_SetTerm( PHB_GTTRM pTerm ) pTerm->terminal_type = TERM_XTERM; if( pTerm->iExtColor == HB_GTTRM_CLRNDF ) { - if( pTerm->terminal_ext & TERM_PUTTY ) + if( pTerm->terminal_ext & TERM_PUTTY || + strstr( szTerm, "+256color" ) != NULL || + strstr( szTerm, "-256color" ) != NULL ) pTerm->iExtColor = HB_GTTRM_CLR256; - else if( strncmp( szTerm, "xterm", 5 ) == 0 || - strncmp( szTerm, "rxvt", 4 ) == 0 ) - { - if( strstr( szTerm, "+256color" ) != NULL || - strstr( szTerm, "-256color" ) != NULL ) - pTerm->iExtColor = HB_GTTRM_CLR256; - else if( strstr( szTerm, "-88color" ) != NULL ) - pTerm->iExtColor = HB_GTTRM_CLRRGB; - else if( strstr( szTerm, "-16color" ) != NULL ) - pTerm->iExtColor = HB_GTTRM_CLRAIX; - } + else if( strstr( szTerm, "-88color" ) != NULL ) + pTerm->iExtColor = HB_GTTRM_CLRRGB; + else if( strstr( szTerm, "-16color" ) != NULL ) + pTerm->iExtColor = HB_GTTRM_CLRAIX; } } else if( strncmp( szTerm, "linux", 5 ) == 0 || diff --git a/src/rtl/version.c b/src/rtl/version.c index f004a8247e..21b8b47a27 100644 --- a/src/rtl/version.c +++ b/src/rtl/version.c @@ -214,6 +214,26 @@ HB_FUNC( HB_OSISWINVISTA ) hb_retl( hb_iswinvista() ); } +HB_FUNC( HB_OSISWIN7 ) +{ + hb_retl( hb_iswin7() ); +} + +HB_FUNC( HB_OSISWIN8 ) +{ + hb_retl( hb_iswin8() ); +} + +HB_FUNC( HB_OSISWIN81 ) +{ + hb_retl( hb_iswin81() ); +} + +HB_FUNC( HB_OSISWIN10 ) +{ + hb_retl( hb_iswin10() ); +} + HB_FUNC( HB_OSISWINCE ) { hb_retl( hb_iswince() ); diff --git a/utils/hbmk2/hbmk2.prg b/utils/hbmk2/hbmk2.prg index 14f6102deb..7101eab5ec 100644 --- a/utils/hbmk2/hbmk2.prg +++ b/utils/hbmk2/hbmk2.prg @@ -2756,7 +2756,7 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit #ifdef HB_LEGACY_LEVEL4 CASE cParamL == "-nocompr" ; hbmk[ _HBMK_nCOMPR ] := _COMPR_OFF ; LegacyWarning( hbmk, aParam, "-compr=no" ) #endif - CASE Left( cParamL, 6 ) == "-head=" + CASE hb_LeftEq( cParamL, "-head=" ) DO CASE CASE SubStr( cParamL, 6 + 1 ) == "off" ; hbmk[ _HBMK_nHEAD ] := _HEAD_OFF @@ -2764,9 +2764,9 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit CASE SubStr( cParamL, 6 + 1 ) == "native" ; hbmk[ _HBMK_nHEAD ] := _HEAD_NATIVE CASE SubStr( cParamL, 6 + 1 ) == "dep" ; hbmk[ _HBMK_nHEAD ] := _HEAD_DEP #ifdef HB_LEGACY_LEVEL4 - OTHERWISE ; hbmk[ _HBMK_nHEAD ] := _HEAD_FULL ; LegacyWarning( hbmk, aParam, "-head=full" ) + OTHERWISE ; hbmk[ _HBMK_nHEAD ] := _HEAD_FULL ; LegacyWarning( hbmk, aParam, "-head=full" ) #else - OTHERWISE ; InvalidOptionValue( hbmk, aParam ) + OTHERWISE ; InvalidOptionValue( hbmk, aParam ) #endif ENDCASE @@ -2776,7 +2776,7 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit CASE cParamL == "-nohead" ; hbmk[ _HBMK_nHEAD ] := _HEAD_OFF ; LegacyWarning( hbmk, aParam, "-head=off" ) #endif - CASE Left( cParamL, 5 ) == "-cpp=" + CASE hb_LeftEq( cParamL, "-cpp=" ) DO CASE CASE SubStr( cParamL, 5 + 1 ) == "def" ; hbmk[ _HBMK_lCPP ] := NIL @@ -2785,14 +2785,20 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit CASE SubStr( cParamL, 5 + 1 ) == "iso98" ; hbmk[ _HBMK_cCPP ] := "iso98" CASE SubStr( cParamL, 5 + 1 ) == "iso03" ; hbmk[ _HBMK_cCPP ] := "iso03" CASE SubStr( cParamL, 5 + 1 ) == "iso0x" ; hbmk[ _HBMK_cCPP ] := "iso0x" + CASE SubStr( cParamL, 5 + 1 ) == "iso11" ; hbmk[ _HBMK_cCPP ] := "iso11" + CASE SubStr( cParamL, 5 + 1 ) == "iso14" ; hbmk[ _HBMK_cCPP ] := "iso14" + CASE SubStr( cParamL, 5 + 1 ) == "iso17" ; hbmk[ _HBMK_cCPP ] := "iso17" + CASE SubStr( cParamL, 5 + 1 ) == "iso20" ; hbmk[ _HBMK_cCPP ] := "iso20" CASE SubStr( cParamL, 5 + 1 ) == "gnu98" ; hbmk[ _HBMK_cCPP ] := "gnu98" CASE SubStr( cParamL, 5 + 1 ) == "gnu0x" ; hbmk[ _HBMK_cCPP ] := "gnu0x" + CASE SubStr( cParamL, 5 + 1 ) == "gnu11" ; hbmk[ _HBMK_cCPP ] := "gnu11" + CASE SubStr( cParamL, 5 + 1 ) == "gnu14" ; hbmk[ _HBMK_cCPP ] := "gnu14" + CASE SubStr( cParamL, 5 + 1 ) == "gnu17" ; hbmk[ _HBMK_cCPP ] := "gnu17" + CASE SubStr( cParamL, 5 + 1 ) == "gnu20" ; hbmk[ _HBMK_cCPP ] := "gnu20" CASE SubStr( cParamL, 5 + 1 ) == "" ; hbmk[ _HBMK_cCPP ] := "" + OTHERWISE ; InvalidOptionValue( hbmk, aParam ) ENDCASE - /* dangerous? disable it */ - hbmk[ _HBMK_cCPP ] := "" - CASE Left( cParamL, 3 ) == "-c=" DO CASE @@ -2803,11 +2809,9 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit CASE SubStr( cParamL, 3 + 1 ) == "gnu99" ; hbmk[ _HBMK_cC ] := "gnu99" CASE SubStr( cParamL, 3 + 1 ) == "gnu1x" ; hbmk[ _HBMK_cC ] := "gnu1x" CASE SubStr( cParamL, 3 + 1 ) == "" ; hbmk[ _HBMK_cC ] := "" + OTHERWISE ; InvalidOptionValue( hbmk, aParam ) ENDCASE - /* dangerous? disable it */ - hbmk[ _HBMK_cC ] := "" - CASE cParamL == "-cpp" ; hbmk[ _HBMK_lCPP ] := .T. /* synonym to -cpp=yes */ CASE cParamL == "-cpp-" ; hbmk[ _HBMK_lCPP ] := .F. /* synonym to -cpp=no */ #ifdef HB_LEGACY_LEVEL4 @@ -7886,24 +7890,15 @@ STATIC PROCEDURE Set_lCreateDyn( hbmk, lValue ) STATIC FUNCTION gcc_opt_lngc_fill( hbmk ) DO CASE - CASE HBMK_ISCOMP( "gcc|gccarm|gccomf|mingw|mingw64|mingwarm|djgpp" ) + CASE HBMK_ISCOMP( "gcc|gccarm|gccomf|mingw|mingw64|mingwarm|djgpp|icc|icc64|clang|clang64" ) SWITCH hbmk[ _HBMK_cC ] - CASE "iso90" ; RETURN "-std=c89" - CASE "iso99" ; RETURN "-std=c9x" - CASE "iso1x" ; RETURN "-std=c1x" - CASE "gnu90" ; RETURN "-std=gnu89" - CASE "gnu99" ; RETURN "-std=gnu9x" - CASE "gnu1x" ; RETURN "-std=gnu1x" - ENDSWITCH - - CASE HBMK_ISCOMP( "icc|clang" ) - - SWITCH hbmk[ _HBMK_cC ] - CASE "iso90" ; RETURN "-std=c89" - CASE "iso99" ; RETURN "-std=c99" + CASE "iso90" ; RETURN "-std=c89" /* aka c89, aka ansi */ + CASE "iso99" ; RETURN "-std=c99" /* aka c9x */ + CASE "iso11" ; RETURN "-std=c11" /* aka c1x */ CASE "gnu90" ; RETURN "-std=gnu89" CASE "gnu99" ; RETURN "-std=gnu99" + CASE "gnu11" ; RETURN "-std=gnu11" ENDSWITCH ENDCASE @@ -7913,21 +7908,30 @@ STATIC FUNCTION gcc_opt_lngc_fill( hbmk ) STATIC FUNCTION gcc_opt_lngcpp_fill( hbmk ) DO CASE - CASE HBMK_ISCOMP( "gcc|gccarm|gccomf|mingw|mingw64|mingwarm|djgpp" ) + CASE HBMK_ISCOMP( "gcc|gccarm|gccomf|mingw|mingw64|mingwarm|djgpp|clang|clang64" ) SWITCH hbmk[ _HBMK_cCPP ] - CASE "iso98" ; RETURN "-std=c++98" + CASE "iso98" ; RETURN "-std=c++98" /* ~aka c++03, ~aka ansi */ CASE "iso0x" ; RETURN "-std=c++0x" + CASE "iso11" ; RETURN "-std=c++11" /* aka c++0x */ + CASE "iso14" ; RETURN "-std=c++14" /* aka c++1y */ + CASE "iso17" ; RETURN "-std=c++17" /* aka c++1z */ + CASE "iso20" ; RETURN "-std=c++20" /* aka c++2a */ CASE "gnu98" ; RETURN "-std=gnu++98" CASE "gnu0x" ; RETURN "-std=gnu++0x" + CASE "gnu11" ; RETURN "-std=gnu++11" + CASE "gnu14" ; RETURN "-std=gnu++14" + CASE "gnu17" ; RETURN "-std=gnu++17" + CASE "gnu20" ; RETURN "-std=gnu++20" ENDSWITCH - CASE HBMK_ISCOMP( "icc" ) + CASE HBMK_ISCOMP( "icc|icc64" ) SWITCH hbmk[ _HBMK_cCPP ] CASE "iso98" CASE "gnu98" ; RETURN "-std=gnu++98" CASE "iso0x" ; RETURN "-std=c++0x" + CASE "iso11" ; RETURN "-std=c++11" /* aka c++0x */ ENDSWITCH ENDCASE @@ -15835,8 +15839,8 @@ STATIC PROCEDURE ShowHelp( hbmk, lMore, lLong ) { "-optim[-]" , I_( "toggle C compiler optimizations (default: on)" ) }, ; { "-cpp[-]" , I_( "force C++/C mode" ) }, ; { "-cpp=" , I_( "select C++ mode. Allowed values are: def, yes, no" ) }, ; -/* { "-c=" , I_( "select C standard. Allowed values are: iso90, iso99, iso1x, gnu90, gnu99, gnu1x" ) }, */; -/* { "-cpp=" , I_( "select C++ mode or standard. Allowed values are: def, yes, no, iso98, iso03, iso0x, gnu98, gnu0x" ) }, */; + { "-c=" , I_( "select C standard. Allowed values are: iso90, iso99, iso11, gnu90, gnu99, gnu11" ) }, ; + { "-cpp=" , I_( "select C++ mode or standard. Allowed values are: def, yes, no, iso98, iso11, iso14, gnu98, gnu11, gnu14" ) }, ; { "-map[-]" , I_( "create (or not) a map file" ) }, ; { "-implib[-]" , I_( "create (or not) an import library (in -hbdyn/-hbexe mode). The name will have a suffix added." ) }, ; { "-implib=" , I_( "create import library (in -hbdyn/-hbexe mode) name to (default: same as output)" ) }, ;