From e3cfefbd5c41b4c07085c578aea904732d087f51 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 1 Sep 2020 18:38:27 +0300 Subject: [PATCH] client: fix build after unsuccessful merge --- cl_dll/enginecallback.h | 6 +- cl_dll/in_camera.cpp | 9 ++- cl_dll/render/gl_export.cpp | 3 +- cl_dll/render/gl_studio_init.cpp | 4 +- cl_dll/vgui_pickup.h | 4 +- cl_dll/vgui_subtitles.cpp | 4 +- cl_dll/wscript | 114 +++++++++++++++++++++++++++++-- common/cvardef.h | 6 +- game_shared/utlmemory.h | 36 +++++----- game_shared/virtualfs.h | 26 +------ game_shared/voice_status.cpp | 24 +++---- pm_shared/meshdesc.cpp | 4 +- wscript | 6 -- 13 files changed, 161 insertions(+), 85 deletions(-) diff --git a/cl_dll/enginecallback.h b/cl_dll/enginecallback.h index b56efc7..106974b 100644 --- a/cl_dll/enginecallback.h +++ b/cl_dll/enginecallback.h @@ -78,7 +78,7 @@ extern render_api_t gRenderfuncs; #define Sys_DoubleTime (*gRenderfuncs.pfnTime) // sound functions (we can't use macroses - this names is collide with standard windows methods) -inline void PlaySound( char *szSound, float vol ) { gEngfuncs.pfnPlaySoundByName( szSound, vol ); } +inline void PlaySound( const char *szSound, float vol ) { gEngfuncs.pfnPlaySoundByName( szSound, vol ); } inline void PlaySound( int iSound, float vol ) { gEngfuncs.pfnPlaySoundByIndex( iSound, vol ); } // render api callbacks @@ -155,7 +155,7 @@ inline void PlaySound( int iSound, float vol ) { gEngfuncs.pfnPlaySoundByIndex( #define IMAGE_EXISTS( path ) ( FILE_EXISTS( va( "%s.tga", path )) || FILE_EXISTS( va( "%s.dds", path ))) -extern void ALERT( ALERT_TYPE level, char *szFmt, ... ); +extern void ALERT( ALERT_TYPE level, const char *szFmt, ... ); inline bool FILE_EXISTS( const char *filename ) { @@ -171,4 +171,4 @@ inline bool FILE_EXISTS( const char *filename ) #define FILE_CRC32 (*gRenderfuncs.pfnFileBufferCRC32) #define GET_MAX_CLIENTS (*gEngfuncs.GetMaxClients) -#endif//ENGINECALLBACK_H \ No newline at end of file +#endif//ENGINECALLBACK_H diff --git a/cl_dll/in_camera.cpp b/cl_dll/in_camera.cpp index 2478d71..e6cdc93 100644 --- a/cl_dll/in_camera.cpp +++ b/cl_dll/in_camera.cpp @@ -4,7 +4,6 @@ // // $NoKeywords: $ //============================================================================= -#if 0 // TODO: import hlsdk-xash3d input #include "hud.h" @@ -17,7 +16,9 @@ #include "camera.h" #include "in_defs.h" #include "gl_local.h" +#if XASH_WIN32 #include "windows.h" +#endif float CL_KeyState (kbutton_t *key); @@ -90,6 +91,10 @@ void CAM_ToFirstPerson(void); void CAM_StartDistance(void); void CAM_EndDistance(void); +#if !XASH_WIN32 +void SetCursorPos( int x, int y ) { } +void GetCursorPos( POINT *p ) { gEngfuncs.GetMousePosition( (int *)&p->x, (int *)&p->y ); } +#endif //-------------------------------------------------- Local Functions @@ -621,5 +626,3 @@ void DLLEXPORT CL_CameraOffset( float *ofs ) { VectorCopy( cam_ofs, ofs ); } - -#endif diff --git a/cl_dll/render/gl_export.cpp b/cl_dll/render/gl_export.cpp index e1b1470..ee314c4 100644 --- a/cl_dll/render/gl_export.cpp +++ b/cl_dll/render/gl_export.cpp @@ -13,7 +13,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ -#define APIENTRY_LINKAGE +#define EXTERN +#include "gl_export.h" #include "hud.h" #include "cl_util.h" #include "gl_local.h" diff --git a/cl_dll/render/gl_studio_init.cpp b/cl_dll/render/gl_studio_init.cpp index 7923e6e..83bbd3e 100644 --- a/cl_dll/render/gl_studio_init.cpp +++ b/cl_dll/render/gl_studio_init.cpp @@ -1216,7 +1216,7 @@ void CStudioModelRenderer :: SetupSubmodelVerts( const mstudiomodel_t *pSubModel smooth_tbn = true; // first create trifan array from studiomodel mesh - while( count = *( ptricmds++ )) + while(( count = *( ptricmds++ ))) { bool strip = ( count < 0 ) ? false : true; int vertexState = 0; @@ -2162,4 +2162,4 @@ void CStudioModelRenderer :: ProcessUserData( model_t *mod, qboolean create, con } DestroyMeshCache(); } -} \ No newline at end of file +} diff --git a/cl_dll/vgui_pickup.h b/cl_dll/vgui_pickup.h index 266b778..2e218ae 100644 --- a/cl_dll/vgui_pickup.h +++ b/cl_dll/vgui_pickup.h @@ -8,8 +8,8 @@ using namespace vgui; #include "vgui_shadowtext.h" #include "VGUI_TextImage.h" +#include "getfont.h" -Font* FontFromMessage(char* &ptext); void CheckPanel(); @@ -128,4 +128,4 @@ protected: byte r2, g2, b2, a2; // end (hold) color }; -#endif // _VGUIPICKMSG_H \ No newline at end of file +#endif // _VGUIPICKMSG_H diff --git a/cl_dll/vgui_subtitles.cpp b/cl_dll/vgui_subtitles.cpp index 328439a..5d711da 100644 --- a/cl_dll/vgui_subtitles.cpp +++ b/cl_dll/vgui_subtitles.cpp @@ -20,7 +20,7 @@ cvar_t *scroll_speed; cvar_t *fade_speed; -Font* FontFromMessage(char* &ptext) +Font* FontFromMessage(const char* ptext) { char fontname[64] = "Default Text"; if (ptext != NULL && ptext[0] != 0) @@ -321,4 +321,4 @@ void CSubtitle::paintBackground() lasttime = curtime; // Panel::paintBackground(); -} \ No newline at end of file +} diff --git a/cl_dll/wscript b/cl_dll/wscript index e0c388d..7485539 100644 --- a/cl_dll/wscript +++ b/cl_dll/wscript @@ -5,11 +5,96 @@ from waflib import Utils import os +VGUI_SUPPORTED_OS = ['win32', 'darwin', 'linux'] + def options(opt): - # stub + grp = opt.add_option_group('VGUI options') + grp.add_option('--vgui', action = 'store', dest = 'VGUI_DEV', default='utils/vgui', + help = 'path to vgui-dev repo [default: %default]') + + grp.add_option('--disable-vgui', action = 'store_true', dest = 'NO_VGUI', default = False, + help = 'disable vgui_support [default: %default]') + + grp.add_option('--skip-vgui-sanity-check', action = 'store_false', dest = 'VGUI_SANITY_CHECK', default=False, + help = 'skip checking VGUI sanity [default: %default]' ) return def configure(conf): + conf.env.NO_VGUI = conf.options.NO_VGUI + if conf.options.NO_VGUI: + return + + conf.start_msg('Does this architecture support VGUI?') + + if conf.env.DEST_CPU != 'x86' and not (conf.env.DEST_CPU == 'x86_64' and not conf.options.ALLOW64): + conf.end_msg('no') + Logs.warn('vgui is not supported on this CPU: ' + str(conf.env.DEST_CPU)) + conf.env.NO_VGUI = True + return + else: + conf.end_msg('yes') + + conf.start_msg('Does this OS support VGUI?') + if conf.env.DEST_OS not in VGUI_SUPPORTED_OS: + conf.end_msg('no') + Logs.warn('vgui is not supported on this OS: ' + str(conf.env.DEST_OS)) + conf.env.NO_VGUI = True + return + else: + conf.end_msg('yes') + + conf.start_msg('Does this toolchain able to link VGUI?') + if conf.env.DEST_OS == 'win32' and conf.env.COMPILER_CXX == 'g++': + conf.end_msg('no') + # we have ABI incompatibility ONLY on MinGW + Logs.warn('vgui_support can\'t be built with MinGW') + conf.env.NO_VGUI = True + return + else: + conf.end_msg('yes') + + if conf.env.NO_VGUI: + return + + if conf.options.VGUI_DEV: + conf.start_msg('Configuring VGUI by provided path') + conf.env.VGUI_DEV = conf.options.VGUI_DEV + else: + conf.start_msg('Configuring VGUI by default path') + conf.env.VGUI_DEV = 'vgui-dev' + + if conf.env.DEST_OS == 'win32': + conf.env.LIB_VGUI = ['vgui'] + conf.env.LIBPATH_VGUI = [os.path.abspath(os.path.join(conf.env.VGUI_DEV, 'lib/win32_vc6/'))] + else: + libpath = os.path.abspath(os.path.join(conf.env.VGUI_DEV, 'lib')) + if conf.env.DEST_OS == 'linux': + conf.env.LIB_VGUI = [':vgui.so'] + conf.env.LIBPATH_VGUI = [libpath] + elif conf.env.DEST_OS == 'darwin': + conf.env.LDFLAGS_VGUI = [os.path.join(libpath, 'vgui.dylib')] + else: + conf.fatal('vgui is not supported on this OS: ' + conf.env.DEST_OS) + conf.env.INCLUDES_VGUI = [os.path.abspath(os.path.join(conf.env.VGUI_DEV, 'include'))] + + conf.env.HAVE_VGUI = 1 + conf.end_msg('yes: {0}, {1}, {2}'.format(conf.env.LIB_VGUI, conf.env.LIBPATH_VGUI, conf.env.INCLUDES_VGUI)) + + if conf.env.HAVE_VGUI and conf.options.VGUI_SANITY_CHECK: + try: + conf.check_cxx( + fragment=''' + #include + int main( int argc, char **argv ) + { + return 0; + }''', + msg = 'Checking for library VGUI sanity', + use = 'VGUI', + execute = False) + except conf.errors.ConfigurationError: + conf.fatal("Can't compile simple program. Check your path to vgui-dev repository.") + if conf.env.DEST_OS != 'win32': conf.check_cc(lib='dl') else: @@ -21,26 +106,43 @@ def build(bld): '*.cpp' ]) source += bld.path.parent.ant_glob([ - 'game_shared/*.cpp', + 'game_shared/bone_setup.cpp', + 'game_shared/common.cpp', + 'game_shared/ikcontext.cpp', + 'game_shared/jigglebones.cpp', + 'game_shared/material.cpp', + 'game_shared/mathlib.cpp', + 'game_shared/matrix.cpp', + 'game_shared/procbones.cpp', + 'game_shared/stringlib.cpp', + 'game_shared/virtualfs.cpp', + 'game_shared/vgui_checkbutton2.cpp', + 'game_shared/vgui_grid.cpp', + 'game_shared/vgui_helpers.cpp', + 'game_shared/vgui_listbox.cpp', + 'game_shared/vgui_loadtga.cpp', + 'game_shared/vgui_scrollbar2.cpp', + 'game_shared/vgui_slider2.cpp', + 'game_shared/voice_banmgr.cpp', + 'game_shared/voice_status.cpp', + 'game_shared/voice_vgui_tweakdlg.cpp', 'pm_shared/*.cpp' ]) includes = [ '.', - 'hl/', 'render/', '../dlls', '../common', '../engine', '../pm_shared', '../game_shared', - '../public', - '../utils/vgui/include' + '../public' ] defines = ['CLIENT_DLL'] - libs = [] + libs = ['VGUI'] if bld.env.DEST_OS != 'win32': libs += ['DL'] else: diff --git a/common/cvardef.h b/common/cvardef.h index d963619..a8352bb 100644 --- a/common/cvardef.h +++ b/common/cvardef.h @@ -35,11 +35,11 @@ typedef struct cvar_s { - char *name; - char *string; + const char *name; + const char *string; int flags; float value; struct cvar_s *next; } cvar_t; -#endif//CVARDEF_H \ No newline at end of file +#endif//CVARDEF_H diff --git a/game_shared/utlmemory.h b/game_shared/utlmemory.h index f8f300a..744796f 100644 --- a/game_shared/utlmemory.h +++ b/game_shared/utlmemory.h @@ -198,9 +198,9 @@ public: void Grow( int nCount = 1 ) { - if ( IsExternallyAllocated() ) + if ( this->IsExternallyAllocated() ) { - ConvertToGrowableMemory( m_nMallocGrowSize ); + this->ConvertToGrowableMemory( m_nMallocGrowSize ); } BaseClass::Grow( nCount ); } @@ -210,10 +210,10 @@ public: if ( CUtlMemory::m_nAllocationCount >= num ) return; - if ( IsExternallyAllocated() ) + if ( this->IsExternallyAllocated() ) { // Can't grow a buffer whose memory was externally allocated - ConvertToGrowableMemory( m_nMallocGrowSize ); + this->ConvertToGrowableMemory( m_nMallocGrowSize ); } BaseClass::EnsureCapacity( num ); @@ -302,7 +302,7 @@ template< class T, class I > CUtlMemory::CUtlMemory( int nGrowSize, int nInitAllocationCount ) : m_pMemory(0), m_nAllocationCount( nInitAllocationCount ), m_nGrowSize( nGrowSize ) { - ValidateGrowSize(); + this->ValidateGrowSize(); assert( nGrowSize >= 0 ); if (m_nAllocationCount) { @@ -339,7 +339,7 @@ void CUtlMemory::Init( int nGrowSize /*= 0*/, int nInitSize /*= 0*/ ) m_nGrowSize = nGrowSize; m_nAllocationCount = nInitSize; - ValidateGrowSize(); + this->ValidateGrowSize(); assert( nGrowSize >= 0 ); if (m_nAllocationCount) { @@ -365,7 +365,7 @@ void CUtlMemory::Swap( CUtlMemory &mem ) template< class T, class I > void CUtlMemory::ConvertToGrowableMemory( int nGrowSize ) { - if ( !IsExternallyAllocated() ) + if ( !this->IsExternallyAllocated() ) return; m_nGrowSize = nGrowSize; @@ -481,10 +481,10 @@ bool CUtlMemory::IsReadOnly() const template< class T, class I > void CUtlMemory::SetGrowSize( int nSize ) { - assert( !IsExternallyAllocated() ); + assert( !this->IsExternallyAllocated() ); assert( nSize >= 0 ); m_nGrowSize = nSize; - ValidateGrowSize(); + this->ValidateGrowSize(); } @@ -569,7 +569,7 @@ void CUtlMemory::Grow( int num ) { assert( num > 0 ); - if ( IsExternallyAllocated() ) + if ( this->IsExternallyAllocated() ) { // Can't grow a buffer whose memory was externally allocated assert(0); @@ -626,7 +626,7 @@ inline void CUtlMemory::EnsureCapacity( int num ) if (m_nAllocationCount >= num) return; - if ( IsExternallyAllocated() ) + if ( this->IsExternallyAllocated() ) { // Can't grow a buffer whose memory was externally allocated assert(0); @@ -652,7 +652,7 @@ inline void CUtlMemory::EnsureCapacity( int num ) template< class T, class I > void CUtlMemory::Purge() { - if ( !IsExternallyAllocated() ) + if ( !this->IsExternallyAllocated() ) { if (m_pMemory) { @@ -682,7 +682,7 @@ void CUtlMemory::Purge( int numElements ) return; } - if ( IsExternallyAllocated() ) + if ( this->IsExternallyAllocated() ) { // Can't shrink a buffer whose memory was externally allocated, fail silently like purge return; @@ -763,7 +763,7 @@ CUtlMemoryAligned::CUtlMemoryAligned( int nGrowSize, int nInitAll CUtlMemory::m_pMemory = 0; CUtlMemory::m_nAllocationCount = nInitAllocationCount; CUtlMemory::m_nGrowSize = nGrowSize; - ValidateGrowSize(); + this->ValidateGrowSize(); // Alignment must be a power of two COMPILE_TIME_ASSERT( (nAlignment & (nAlignment-1)) == 0 ); @@ -839,7 +839,7 @@ void CUtlMemoryAligned::Grow( int num ) { assert( num > 0 ); - if ( IsExternallyAllocated() ) + if ( this->IsExternallyAllocated() ) { // Can't grow a buffer whose memory was externally allocated assert(0); @@ -874,7 +874,7 @@ inline void CUtlMemoryAligned::EnsureCapacity( int num ) if ( CUtlMemory::m_nAllocationCount >= num ) return; - if ( IsExternallyAllocated() ) + if ( this->IsExternallyAllocated() ) { // Can't grow a buffer whose memory was externally allocated assert(0); @@ -900,7 +900,7 @@ inline void CUtlMemoryAligned::EnsureCapacity( int num ) template< class T, int nAlignment > void CUtlMemoryAligned::Purge() { - if ( !IsExternallyAllocated() ) + if ( !this->IsExternallyAllocated() ) { if ( CUtlMemory::m_pMemory ) { @@ -911,4 +911,4 @@ void CUtlMemoryAligned::Purge() } } -#endif // UTLMEMORY_H \ No newline at end of file +#endif // UTLMEMORY_H diff --git a/game_shared/virtualfs.h b/game_shared/virtualfs.h index 5b6331f..286875c 100644 --- a/game_shared/virtualfs.h +++ b/game_shared/virtualfs.h @@ -169,30 +169,6 @@ _forceinline size_t CVirtualFS :: IPrint( const char *message ) return Insert( message, Q_strlen( message )); } -size_t CVirtualFS :: Printf( const char *fmt, ... ) -{ - size_t result; - va_list args; - - va_start( args, fmt ); - result = VPrintf( fmt, args ); - va_end( args ); - - return result; -} - -size_t CVirtualFS :: IPrintf( const char *fmt, ... ) -{ - size_t result; - va_list args; - - va_start( args, fmt ); - result = IVPrintf( fmt, args ); - va_end( args ); - - return result; -} - _forceinline size_t CVirtualFS :: VPrintf( const char *fmt, va_list ap ) { size_t buff_size = FS_MSG_BLOCK; @@ -299,4 +275,4 @@ _forceinline int CVirtualFS :: Seek( size_t offset, int whence ) return 0; } -#endif//VIRTUALFS_H \ No newline at end of file +#endif//VIRTUALFS_H diff --git a/game_shared/voice_status.cpp b/game_shared/voice_status.cpp index 4d1d7fa..8dbd16a 100644 --- a/game_shared/voice_status.cpp +++ b/game_shared/voice_status.cpp @@ -222,7 +222,7 @@ int CVoiceStatus::Init( pLabel->m_pBackground = new Label(""); - if(pLabel->m_pLabel = new Label("")) + if((pLabel->m_pLabel = new Label(""))) { pLabel->m_pLabel->setVisible( true ); pLabel->m_pLabel->setFont( Scheme::sf_primary2 ); @@ -231,7 +231,7 @@ int CVoiceStatus::Init( pLabel->m_pLabel->setParent( pLabel->m_pBackground ); } - if( pLabel->m_pIcon = new ImagePanel( NULL ) ) + if(( pLabel->m_pIcon = new ImagePanel( NULL ) )) { pLabel->m_pIcon->setVisible( true ); pLabel->m_pIcon->setParent( pLabel->m_pBackground ); @@ -265,12 +265,12 @@ int CVoiceStatus::VidInit() FreeBitmaps(); - if( m_pLocalBitmap = vgui_LoadTGA("gfx/vgui/icntlk_pl.tga") ) + if(( m_pLocalBitmap = vgui_LoadTGA("gfx/vgui/icntlk_pl.tga") )) { m_pLocalBitmap->setColor(Color(255,255,255,135)); } - if( m_pAckBitmap = vgui_LoadTGA("gfx/vgui/icntlk_sv.tga") ) + if(( m_pAckBitmap = vgui_LoadTGA("gfx/vgui/icntlk_sv.tga") )) { m_pAckBitmap->setColor(Color(255,255,255,135)); // Give just a tiny bit of translucency so software draws correctly. } @@ -279,25 +279,25 @@ int CVoiceStatus::VidInit() m_pLocalLabel->setVisible( false ); - if( m_pSpeakerLabelIcon = vgui_LoadTGANoInvertAlpha("gfx/vgui/speaker4.tga" ) ) + if(( m_pSpeakerLabelIcon = vgui_LoadTGANoInvertAlpha("gfx/vgui/speaker4.tga" ) )) m_pSpeakerLabelIcon->setColor( Color(255,255,255,1) ); // Give just a tiny bit of translucency so software draws correctly. - if (m_pScoreboardNeverSpoken = vgui_LoadTGANoInvertAlpha("gfx/vgui/640_speaker1.tga")) + if ((m_pScoreboardNeverSpoken = vgui_LoadTGANoInvertAlpha("gfx/vgui/640_speaker1.tga"))) m_pScoreboardNeverSpoken->setColor(Color(255,255,255,1)); // Give just a tiny bit of translucency so software draws correctly. - if(m_pScoreboardNotSpeaking = vgui_LoadTGANoInvertAlpha("gfx/vgui/640_speaker2.tga")) + if((m_pScoreboardNotSpeaking = vgui_LoadTGANoInvertAlpha("gfx/vgui/640_speaker2.tga"))) m_pScoreboardNotSpeaking->setColor(Color(255,255,255,1)); // Give just a tiny bit of translucency so software draws correctly. - if(m_pScoreboardSpeaking = vgui_LoadTGANoInvertAlpha("gfx/vgui/640_speaker3.tga")) + if((m_pScoreboardSpeaking = vgui_LoadTGANoInvertAlpha("gfx/vgui/640_speaker3.tga"))) m_pScoreboardSpeaking->setColor(Color(255,255,255,1)); // Give just a tiny bit of translucency so software draws correctly. - if(m_pScoreboardSpeaking2 = vgui_LoadTGANoInvertAlpha("gfx/vgui/640_speaker4.tga")) + if((m_pScoreboardSpeaking2 = vgui_LoadTGANoInvertAlpha("gfx/vgui/640_speaker4.tga"))) m_pScoreboardSpeaking2->setColor(Color(255,255,255,1)); // Give just a tiny bit of translucency so software draws correctly. - if(m_pScoreboardSquelch = vgui_LoadTGA("gfx/vgui/icntlk_squelch.tga")) + if((m_pScoreboardSquelch = vgui_LoadTGA("gfx/vgui/icntlk_squelch.tga"))) m_pScoreboardSquelch->setColor(Color(255,255,255,1)); // Give just a tiny bit of translucency so software draws correctly. - if(m_pScoreboardBanned = vgui_LoadTGA("gfx/vgui/640_voiceblocked.tga")) + if((m_pScoreboardBanned = vgui_LoadTGA("gfx/vgui/640_voiceblocked.tga"))) m_pScoreboardBanned->setColor(Color(255,255,255,1)); // Give just a tiny bit of translucency so software draws correctly. // Figure out the voice head model height. @@ -441,7 +441,7 @@ void CVoiceStatus::UpdateSpeakerStatus(int entindex, qboolean bTalking) // If we don't have a label for this guy yet, then create one. if(!pLabel) { - if(pLabel = GetFreeVoiceLabel()) + if((pLabel = GetFreeVoiceLabel())) { // Get the name from the engine. hud_player_info_t info; diff --git a/pm_shared/meshdesc.cpp b/pm_shared/meshdesc.cpp index 313addd..c6d46ae 100644 --- a/pm_shared/meshdesc.cpp +++ b/pm_shared/meshdesc.cpp @@ -1003,7 +1003,7 @@ bool CMeshDesc :: StudioConstructMesh( void ) float t = 1.0f / (float)ptexture[pskinref[pmesh->skinref]].height; int flags = ptexture[pskinref[pmesh->skinref]].flags; - while( i = *( ptricmds++ )) + while(( i = *( ptricmds++ ))) { int vertexState = 0; bool tri_strip; @@ -1243,4 +1243,4 @@ void CMeshDesc :: FreeMeshBuild( void ) m_srcPlaneHash = NULL; m_srcPlanePool = NULL; m_srcFacets = NULL; -} \ No newline at end of file +} diff --git a/wscript b/wscript index a697b2a..25f1dd7 100644 --- a/wscript +++ b/wscript @@ -179,12 +179,6 @@ def configure(conf): '-Werror=bool-compare', '-Werror=bool-operation', '-Wstrict-aliasing', - '-Wno-attributes', - '-Wno-missing-pragmas', - '-Wno-overloaded-virtual', - '-Wno-unknown-pragmas', - '-Wno-write-strings', - '-std=gnu++98' ] c_compiler_optional_flags = [