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
This commit is contained in:
Aleksander Czajczynski
2025-12-11 01:15:52 +01:00
parent efde19ca13
commit f9212001b4
3 changed files with 53 additions and 20 deletions

View File

@@ -7,6 +7,22 @@
Entries may not always be in chronological/commit order. Entries may not always be in chronological/commit order.
See license at the end of file. */ 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) 2025-12-10 22:37 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* README.md * README.md
* package/harbour.spec * package/harbour.spec

View File

@@ -745,9 +745,17 @@ char * hb_macroTextSymbol( const char * szString, HB_SIZE nLength, HB_BOOL * pfN
{ {
if( szResult == szString ) 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 ), szResult = ( char * ) memcpy( hb_xgrab( nLength + 1 ),
szString, nLength ); szString, nLength );
szResult[ nLength ] = '\0'; 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' ); szResult[ nLen ] = c - ( 'a' - 'A' );
} }

View File

@@ -5181,16 +5181,12 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
cBin_CompC := "bcc32.exe" cBin_CompC := "bcc32.exe"
ENDIF ENDIF
cBin_CompCPP := cBin_CompC 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_lOPTIM ]
IF hbmk[ _HBMK_cCOMP ] == "bcc64" cOpt_CompC += " -d -O2" + iif( hbmk[ _HBMK_cCOMP ] == "bcc64", "", " -OS -Ov -Oc -Oi -6" )
cOpt_CompC += " -d -O2 -OS -Ov -Oc"
ELSE
cOpt_CompC += " -d -O2 -OS -Ov -Oc -Oi -6"
ENDIF
ENDIF ENDIF
IF hbmk[ _HBMK_cCOMP ] == "bcc64" IF hbmk[ _HBMK_cCOMP ] == "bcc64"
cLibBCC_CRTL := "cw64mt.lib" cLibBCC_CRTL := "cw64mt.a"
ELSE ELSE
cLibBCC_CRTL := "cw32mt.lib" cLibBCC_CRTL := "cw32mt.lib"
ENDIF ENDIF
@@ -5203,7 +5199,7 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
AAdd( hbmk[ _HBMK_aOPTC ], "-tWM" ) AAdd( hbmk[ _HBMK_aOPTC ], "-tWM" )
ELSE ELSE
IF hbmk[ _HBMK_cCOMP ] == "bcc64" IF hbmk[ _HBMK_cCOMP ] == "bcc64"
cLibBCC_CRTL := "cw64.lib" cLibBCC_CRTL := "cw64.a"
ELSE ELSE
cLibBCC_CRTL := "cw32.lib" cLibBCC_CRTL := "cw32.lib"
ENDIF ENDIF
@@ -5211,13 +5207,21 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
ELSE ELSE
AAdd( hbmk[ _HBMK_aOPTC ], "-tWM" ) AAdd( hbmk[ _HBMK_aOPTC ], "-tWM" )
ENDIF ENDIF
SWITCH hbmk[ _HBMK_nWARN ] IF hbmk[ _HBMK_cCOMP ] == "bcc64"
CASE _WARN_MAX ; AAdd( hbmk[ _HBMK_aOPTC ], "-w -Q" ) ; EXIT SWITCH hbmk[ _HBMK_nWARN ]
CASE _WARN_YES ; AAdd( hbmk[ _HBMK_aOPTC ], "-w -Q -w-sig" ) ; EXIT CASE _WARN_MAX
// 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_YES ; AAdd( hbmk[ _HBMK_aOPTC ], "-w -Q" ) ; EXIT
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
CASE _WARN_NO ; AAdd( hbmk[ _HBMK_aOPTC ], "-w-" ) ; EXIT ENDSWITCH
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}" cOpt_CompC += " {FC} {LC}"
cBin_Res := "brcc32.exe" cBin_Res := "brcc32.exe"
cOpt_Res := "{FR} {IR} -fo{OS}" cOpt_Res := "{FR} {IR} -fo{OS}"
@@ -5229,15 +5233,16 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
ENDIF ENDIF
cBin_Dyn := cBin_Link cBin_Dyn := cBin_Link
IF hbmk[ _HBMK_cCOMP ] == "bcc64" 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_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.obj" + " {LO}, {OD}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import64.lib, {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 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_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}" 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 ENDIF
IF hbmk[ _HBMK_cCOMP ] == "bcc" 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 ) } 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 ENDIF
cLibPathPrefix := "" cLibPathPrefix := ""
cLibPathSep := ";" cLibPathSep := ";"
@@ -5269,7 +5274,11 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
ENDIF ENDIF
ENDIF ENDIF
IF ! Empty( hbmk[ _HBMK_cWorkDir ] ) 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 ELSE
IF lStopAfterCComp .AND. ! hbmk[ _HBMK_lCreateLib ] .AND. ! hbmk[ _HBMK_lCreateDyn ] IF lStopAfterCComp .AND. ! hbmk[ _HBMK_lCreateLib ] .AND. ! hbmk[ _HBMK_lCreateDyn ]
IF ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) + Len( hbmk[ _HBMK_aCPP ] ) ) == 1 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 ] SWITCH hbmk[ _HBMK_cCOMP ]
CASE "msvc" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:x86" ) ; EXIT CASE "msvc" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:x86" ) ; EXIT
CASE "msvc64" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:x64" ) ; 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 "msvcarm64"; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:arm64" ) ; EXIT
CASE "msvcia64" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:ia64" ) ; EXIT CASE "msvcia64" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:ia64" ) ; EXIT
CASE "icc" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:x86" ) ; EXIT CASE "icc" ; AAdd( hbmk[ _HBMK_aOPTI ], "-machine:x86" ) ; EXIT