diff --git a/ChangeLog.txt b/ChangeLog.txt index a372b2bbe6..3f5a99ab25 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -7,6 +7,22 @@ Entries may not always be in chronological/commit order. See license at the end of file. */ +2025-12-11 00:15 UTC+0100 Aleksander Czajczynski (hb fki.pl) + * src/vm/macro.c + * workaround MinGW/GCC 15+ excessive diagnostics in hb_macroTextSymbol() + to fix strict mode in CI, manifested with either of those messages: + error: 'memcpy' specified bound 4294967295 exceeds maximum object size + 2147483647 [-Werror=stringop-overflow=] + error: 'memcpy' accessing 4294967295 bytes at offsets 4 and 0 overlaps + 6442450943 bytes at offset -2147483648 [-Werror=restrict] + + * utils/hbmk2/hbmk2.prg + * applied bcc64 fixes from hbmk2.prg posted by Carlos Vargas on + harbour-devel (reformatted): + https://groups.google.com/g/harbour-devel/c/vic0m-VVZ8k + + ; bcc64 support is not tested and purely based on contributions + 2025-12-10 22:37 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * README.md * package/harbour.spec diff --git a/src/vm/macro.c b/src/vm/macro.c index 137de4c739..031c4b9571 100644 --- a/src/vm/macro.c +++ b/src/vm/macro.c @@ -745,9 +745,17 @@ char * hb_macroTextSymbol( const char * szString, HB_SIZE nLength, HB_BOOL * pfN { if( szResult == szString ) { +#if defined( HB_OS_WIN ) && defined( HB_GCC_HAS_DIAG ) && ( HB_GCC_VER >= 1500 ) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wstringop-overflow" +# pragma GCC diagnostic ignored "-Wrestrict" +#endif szResult = ( char * ) memcpy( hb_xgrab( nLength + 1 ), szString, nLength ); szResult[ nLength ] = '\0'; +#if defined( HB_OS_WIN ) && defined( HB_GCC_HAS_DIAG ) && ( HB_GCC_VER >= 1500 ) +# pragma GCC diagnostic push +#endif } szResult[ nLen ] = c - ( 'a' - 'A' ); } diff --git a/utils/hbmk2/hbmk2.prg b/utils/hbmk2/hbmk2.prg index ed7e3dbed6..4ccfc3e5f1 100644 --- a/utils/hbmk2/hbmk2.prg +++ b/utils/hbmk2/hbmk2.prg @@ -5181,16 +5181,12 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit cBin_CompC := "bcc32.exe" ENDIF cBin_CompCPP := cBin_CompC - cOpt_CompC := "-c -q -CP437" + cOpt_CompC := "-c -q" + iif( hbmk[ _HBMK_cCOMP ] == "bcc64", "", " -CP437" ) IF hbmk[ _HBMK_lOPTIM ] - IF hbmk[ _HBMK_cCOMP ] == "bcc64" - cOpt_CompC += " -d -O2 -OS -Ov -Oc" - ELSE - cOpt_CompC += " -d -O2 -OS -Ov -Oc -Oi -6" - ENDIF + cOpt_CompC += " -d -O2" + iif( hbmk[ _HBMK_cCOMP ] == "bcc64", "", " -OS -Ov -Oc -Oi -6" ) ENDIF IF hbmk[ _HBMK_cCOMP ] == "bcc64" - cLibBCC_CRTL := "cw64mt.lib" + cLibBCC_CRTL := "cw64mt.a" ELSE cLibBCC_CRTL := "cw32mt.lib" ENDIF @@ -5203,7 +5199,7 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit AAdd( hbmk[ _HBMK_aOPTC ], "-tWM" ) ELSE IF hbmk[ _HBMK_cCOMP ] == "bcc64" - cLibBCC_CRTL := "cw64.lib" + cLibBCC_CRTL := "cw64.a" ELSE cLibBCC_CRTL := "cw32.lib" ENDIF @@ -5211,13 +5207,21 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit ELSE AAdd( hbmk[ _HBMK_aOPTC ], "-tWM" ) ENDIF - SWITCH hbmk[ _HBMK_nWARN ] - CASE _WARN_MAX ; AAdd( hbmk[ _HBMK_aOPTC ], "-w -Q" ) ; EXIT - CASE _WARN_YES ; AAdd( hbmk[ _HBMK_aOPTC ], "-w -Q -w-sig" ) ; EXIT - // The following line differs from the line in config/win/bcc.mk because Make needs to build core, and hbmk2 needs to build contrib - CASE _WARN_LOW ; AAdd( hbmk[ _HBMK_aOPTC ], "-w-sig -w-aus -w-ccc -w-csu -w-ovf -w-par -w-rch -w-spa -w-sus -w-pia" ) ; EXIT - CASE _WARN_NO ; AAdd( hbmk[ _HBMK_aOPTC ], "-w-" ) ; EXIT - ENDSWITCH + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + SWITCH hbmk[ _HBMK_nWARN ] + CASE _WARN_MAX + CASE _WARN_YES ; AAdd( hbmk[ _HBMK_aOPTC ], "-w -Q" ) ; EXIT + CASE _WARN_NO ; AAdd( hbmk[ _HBMK_aOPTC ], "-w-" ) ; EXIT + ENDSWITCH + ELSE + SWITCH hbmk[ _HBMK_nWARN ] + CASE _WARN_MAX ; AAdd( hbmk[ _HBMK_aOPTC ], "-w -Q" ) ; EXIT + CASE _WARN_YES ; AAdd( hbmk[ _HBMK_aOPTC ], "-w -Q -w-sig" ) ; EXIT + // The following line differs from the line in config/win/bcc.mk because Make needs to build core, and hbmk2 needs to build contrib + CASE _WARN_LOW ; AAdd( hbmk[ _HBMK_aOPTC ], "-w-sig -w-aus -w-ccc -w-csu -w-ovf -w-par -w-rch -w-spa -w-sus -w-pia" ) ; EXIT + CASE _WARN_NO ; AAdd( hbmk[ _HBMK_aOPTC ], "-w-" ) ; EXIT + ENDSWITCH + ENDIF cOpt_CompC += " {FC} {LC}" cBin_Res := "brcc32.exe" cOpt_Res := "{FR} {IR} -fo{OS}" @@ -5229,15 +5233,16 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit ENDIF cBin_Dyn := cBin_Link IF hbmk[ _HBMK_cCOMP ] == "bcc64" - cOpt_Link := "-Gn -Tpe -L{DL} {FL} " + iif( hbmk[ _HBMK_lGUI ], "c0w64.obj", "c0x64.obj" ) + " {LO}, {OE}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import64.lib, {IM}, {LS}{SCRIPT}" - cOpt_Dyn := "-Gn -Tpd -L{DL} {FD} " + "c0d64.obj" + " {LO}, {OD}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import64.lib, {IM}, {LS}{SCRIPT}" + cOpt_Link := "-Gn -Tpe -L{DL} {FL} " + iif( hbmk[ _HBMK_lGUI ], "c0w64.o", "c0x64.o" ) + " {LO}, {OE}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import64.a, {IM}, {LS}{SCRIPT}" + cOpt_Dyn := "-Gn -Tpd -L{DL} {FD} " + "c0d64.o" + " {LO}, {OD}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import64.a, {IM}, {LS}{SCRIPT}" ELSE cOpt_Link := "-Gn -Tpe -L{DL} {FL} " + iif( hbmk[ _HBMK_lGUI ], "c0w32.obj", "c0x32.obj" ) + " {LO}, {OE}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import32.lib, {IM}, {LS}{SCRIPT}" cOpt_Dyn := "-Gn -Tpd -L{DL} {FD} " + "c0d32.obj" + " {LO}, {OD}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import32.lib, {IM}, {LS}{SCRIPT}" ENDIF IF hbmk[ _HBMK_cCOMP ] == "bcc" - /* TODO: Add support for bcc64/mkexp */ bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command_bcc( hbmk, "implib.exe -c {FI} {OL} {ID}", cSourceDLL, cTargetLib, cFlags ) } + ELSEIF hbmk[ _HBMK_cCOMP ] == "bcc64" + bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command_bcc( hbmk, "mkexp.exe {FI} {OL} {ID}", cSourceDLL, cTargetLib, cFlags ) } ENDIF cLibPathPrefix := "" cLibPathSep := ";" @@ -5269,7 +5274,11 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit ENDIF ENDIF IF ! Empty( hbmk[ _HBMK_cWorkDir ] ) - AAdd( hbmk[ _HBMK_aOPTC ], "-n" + FNameEscape( hbmk[ _HBMK_cWorkDir ], hbmk[ _HBMK_nCmd_Esc ], hbmk[ _HBMK_nCmd_FNF ] ) ) + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + AAdd( hbmk[ _HBMK_aOPTC ], "-output-dir " + FNameEscape( hbmk[ _HBMK_cWorkDir ], hbmk[ _HBMK_nCmd_Esc ], hbmk[ _HBMK_nCmd_FNF ] ) ) + ELSE + AAdd( hbmk[ _HBMK_aOPTC ], "-n" + FNameEscape( hbmk[ _HBMK_cWorkDir ], hbmk[ _HBMK_nCmd_Esc ], hbmk[ _HBMK_nCmd_FNF ] ) ) + ENDIF ELSE IF lStopAfterCComp .AND. ! hbmk[ _HBMK_lCreateLib ] .AND. ! hbmk[ _HBMK_lCreateDyn ] IF ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) + Len( hbmk[ _HBMK_aCPP ] ) ) == 1 @@ -5415,7 +5424,7 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit SWITCH hbmk[ _HBMK_cCOMP ] CASE "msvc" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:x86" ) ; EXIT CASE "msvc64" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:x64" ) ; EXIT - CASE "msvcarm" ; AAdd( hbmk[ _HBMK_aOPTI ], IIF( hbmk[ _HBMK_cPLAT ] == "wce", "-machine:xarm", "-machine:arm" ) ) ; EXIT + CASE "msvcarm" ; AAdd( hbmk[ _HBMK_aOPTI ], iif( hbmk[ _HBMK_cPLAT ] == "wce", "-machine:xarm", "-machine:arm" ) ) ; EXIT CASE "msvcarm64"; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:arm64" ) ; EXIT CASE "msvcia64" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:ia64" ) ; EXIT CASE "icc" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:x86" ) ; EXIT