unittests: fix library loading

This commit is contained in:
nillerusr 2023-04-07 13:25:58 +03:00
parent dcdcf6b733
commit 4f063c4053
9 changed files with 156 additions and 127 deletions

View File

@ -915,7 +915,7 @@ CBasePanel::CBasePanel() : Panel(NULL, "BaseGameUIPanel")
} }
} }
if( IsAndroid() ) // if( IsAndroid() )
{ {
AddUrlButton( this, "vgui/\x64\x69\x73\x63\x6f\x72\x64\x5f\x6c\x6f\x67\x6f", "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x64\x69\x73\x63\x6f\x72\x64\x2e\x67\x67\x2f\x68\x5a\x52\x42\x37\x57\x4d\x67\x47\x77" ); AddUrlButton( this, "vgui/\x64\x69\x73\x63\x6f\x72\x64\x5f\x6c\x6f\x67\x6f", "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x64\x69\x73\x63\x6f\x72\x64\x2e\x67\x67\x2f\x68\x5a\x52\x42\x37\x57\x4d\x67\x47\x77" );
AddUrlButton( this, "vgui/\x74\x77\x69\x74\x74\x65\x72\x5f\x6c\x6f\x67\x6f", "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x74\x77\x69\x74\x74\x65\x72\x2e\x63\x6f\x6d\x2f\x6e\x69\x6c\x6c\x65\x72\x75\x73\x72" ); AddUrlButton( this, "vgui/\x74\x77\x69\x74\x74\x65\x72\x5f\x6c\x6f\x67\x6f", "\x68\x74\x74\x70\x73\x3a\x2f\x2f\x74\x77\x69\x74\x74\x65\x72\x2e\x63\x6f\x6d\x2f\x6e\x69\x6c\x6c\x65\x72\x75\x73\x72" );
@ -1607,6 +1607,21 @@ CGameMenu *CBasePanel::RecursiveLoadGameMenu(KeyValues *datafile)
else else
menu->AddMenuItem("Console", "CONSOLE", "OpenConsole", this); menu->AddMenuItem("Console", "CONSOLE", "OpenConsole", this);
bool bFoundServerBrowser = false;
for (KeyValues *dat = datafile->GetFirstSubKey(); dat != NULL; dat = dat->GetNextKey())
{
const char *label = dat->GetString("label", "<unknown>");
const char *cmd = dat->GetString("command", NULL);
const char *name = dat->GetString("name", label);
if( cmd && Q_strcmp(cmd, "OpenServerBrowser") == 0 )
bFoundServerBrowser = true;
}
if( !bFoundServerBrowser && !ModInfo().IsSinglePlayerOnly() )
menu->AddMenuItem("AntiM*dG*yButton", "#GameUI_GameMenu_FindServers", "OpenServerBrowser", this);
// loop through all the data adding items to the menu // loop through all the data adding items to the menu
for (KeyValues *dat = datafile->GetFirstSubKey(); dat != NULL; dat = dat->GetNextKey()) for (KeyValues *dat = datafile->GetFirstSubKey(); dat != NULL; dat = dat->GetNextKey())
{ {
@ -1614,7 +1629,8 @@ CGameMenu *CBasePanel::RecursiveLoadGameMenu(KeyValues *datafile)
const char *cmd = dat->GetString("command", NULL); const char *cmd = dat->GetString("command", NULL);
const char *name = dat->GetString("name", label); const char *name = dat->GetString("name", label);
if ( cmd && !Q_stricmp( cmd, "OpenFriendsDialog" ) && bSteamCommunityFriendsVersion ) if ( cmd && (!Q_stricmp( cmd, "OpenFriendsDialog" )
|| !Q_stricmp( cmd, "engine bug" )) )
continue; continue;
menu->AddMenuItem(name, label, cmd, this, dat); menu->AddMenuItem(name, label, cmd, this, dat);

View File

@ -429,13 +429,7 @@ void CDispCollTree::AABBTree_CreateLeafs( void )
} }
} }
#if COMPILER_CLANG void NO_ASAN CDispCollTree::AABBTree_GenerateBoxes_r( int nodeIndex, Vector *pMins, Vector *pMaxs )
#define NOASAN __attribute__((no_sanitize("address")))
#else
#define NOASAN
#endif
void NOASAN CDispCollTree::AABBTree_GenerateBoxes_r( int nodeIndex, Vector *pMins, Vector *pMaxs )
{ {
// leaf // leaf
ClearBounds( *pMins, *pMaxs ); ClearBounds( *pMins, *pMaxs );
@ -467,8 +461,6 @@ void NOASAN CDispCollTree::AABBTree_GenerateBoxes_r( int nodeIndex, Vector *pMin
} }
} }
#undef NOASAN
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Purpose: // Purpose:
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View File

@ -606,6 +606,12 @@ typedef void * HINSTANCE;
#define FMTFUNCTION( a, b ) #define FMTFUNCTION( a, b )
#endif #endif
#if COMPILER_CLANG || COMPILER_GCC
#define NO_ASAN __attribute__((no_sanitize("address")))
#else
#define NO_ASAN
#endif
#if defined( _WIN32 ) #if defined( _WIN32 )
// Used for dll exporting and importing // Used for dll exporting and importing

View File

@ -123,21 +123,21 @@ union TSLIST_HEAD_ALIGN TSLHead_t
// but it could perhaps (?) lead to problems with store forwarding. I don't know 'cause I didn't // but it could perhaps (?) lead to problems with store forwarding. I don't know 'cause I didn't
// performance-test or design original code, I'm just making it work on PowerPC. // performance-test or design original code, I'm just making it work on PowerPC.
#ifdef VALVE_BIG_ENDIAN #ifdef VALVE_BIG_ENDIAN
int16 Sequence; uint16 Sequence;
int16 Depth; uint16 Depth;
#else #else
int16 Depth; uint16 Depth;
int16 Sequence; uint16 Sequence;
#endif #endif
#ifdef PLATFORM_64BITS #ifdef PLATFORM_64BITS
int32 Padding; uint32 Padding;
#endif #endif
} value; } value;
struct Value32_t struct Value32_t
{ {
TSLNodeBase_t *Next_do_not_use_me; TSLNodeBase_t *Next_do_not_use_me;
int32 DepthAndSequence; uint32 DepthAndSequence;
} value32; } value32;
#ifdef PLATFORM_64BITS #ifdef PLATFORM_64BITS
@ -254,7 +254,8 @@ public:
#endif #endif
} }
TSLNodeBase_t *Pop() // TODO(nillerusr): fix asan issue later
NO_ASAN TSLNodeBase_t *Pop()
{ {
#ifdef USE_NATIVE_SLIST #ifdef USE_NATIVE_SLIST
#ifdef _X360 #ifdef _X360

View File

@ -4,7 +4,7 @@ git submodule init && git submodule update
sudo apt-get update sudo apt-get update
sudo apt-get install -f -y gdb libopenal-dev g++-multilib gcc-multilib libpng-dev libjpeg-dev libfreetype6-dev libfontconfig1-dev libcurl4-gnutls-dev libsdl2-dev zlib1g-dev libbz2-dev libedit-dev sudo apt-get install -f -y gdb libopenal-dev g++-multilib gcc-multilib libpng-dev libjpeg-dev libfreetype6-dev libfontconfig1-dev libcurl4-gnutls-dev libsdl2-dev zlib1g-dev libbz2-dev libedit-dev
./waf configure -T release --disable-warns --tests --prefix=out/ --64bits $* && ./waf configure -T release --sanitize=address,undefined --disable-warns --tests --prefix=out/ --64bits $* &&
./waf install && ./waf install &&
cd out && cd out &&
LD_LIBRARY_PATH=bin/ ./unittest LD_LIBRARY_PATH=bin/ ./unittest

View File

@ -6,7 +6,7 @@ sudo apt-get update
sudo apt-get install -y aptitude sudo apt-get install -y aptitude
sudo aptitude install -y libopenal-dev:i386 g++-multilib gcc-multilib libpng-dev:i386 libjpeg-dev:i386 libfreetype6-dev:i386 libfontconfig1-dev:i386 libcurl4-gnutls-dev:i386 libsdl2-dev:i386 zlib1g-dev:i386 libbz2-dev:i386 libedit-dev:i386 sudo aptitude install -y libopenal-dev:i386 g++-multilib gcc-multilib libpng-dev:i386 libjpeg-dev:i386 libfreetype6-dev:i386 libfontconfig1-dev:i386 libcurl4-gnutls-dev:i386 libsdl2-dev:i386 zlib1g-dev:i386 libbz2-dev:i386 libedit-dev:i386
PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig ./waf configure -T release --disable-warns --tests --prefix=out/ $* && PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig ./waf configure -T release --sanitize=address,undefined --disable-warns --tests --prefix=out/ $* &&
./waf install && ./waf install &&
cd out && cd out &&
LD_LIBRARY_PATH=bin/ ./unittest LD_LIBRARY_PATH=bin/ ./unittest

View File

@ -292,6 +292,18 @@ bool foundLibraryWithPrefix( char *pModuleAbsolutePath, size_t AbsolutePathSize,
bFound |= stat(pModuleAbsolutePath, &statBuf) == 0; bFound |= stat(pModuleAbsolutePath, &statBuf) == 0;
} }
if( !bFound )
{
Q_snprintf(pModuleAbsolutePath, AbsolutePathSize, "%s/lib%s", pPath, str);
bFound |= stat(pModuleAbsolutePath, &statBuf) == 0;
}
if( !bFound )
{
Q_snprintf(pModuleAbsolutePath, AbsolutePathSize, "%s/%s", pPath, str);
bFound |= stat(pModuleAbsolutePath, &statBuf) == 0;
}
return bFound; return bFound;
} }

View File

@ -14,7 +14,7 @@ def configure(conf):
conf.define('TIER1TEST_EXPORTS', 1) conf.define('TIER1TEST_EXPORTS', 1)
def build(bld): def build(bld):
source = ['commandbuffertest.cpp', 'utlstringtest.cpp', 'tier1test.cpp'] source = ['commandbuffertest.cpp', 'utlstringtest.cpp', 'tier1test.cpp'] #, 'lzsstest.cpp']
includes = ['../../public', '../../public/tier0'] includes = ['../../public', '../../public/tier0']
defines = [] defines = []
libs = ['tier0', 'tier1', 'mathlib', 'unitlib'] libs = ['tier0', 'tier1', 'mathlib', 'unitlib']

214
wscript
View File

@ -165,7 +165,7 @@ def define_platform(conf):
# conf.options.GL = False # conf.options.GL = False
conf.define('DEDICATED', 1) conf.define('DEDICATED', 1)
if conf.options.GL: if conf.options.GL and not conf.options.TESTS:
conf.env.append_unique('DEFINES', [ conf.env.append_unique('DEFINES', [
'DX_TO_GL_ABSTRACTION', 'DX_TO_GL_ABSTRACTION',
'GL_GLEXT_PROTOTYPES', 'GL_GLEXT_PROTOTYPES',
@ -175,7 +175,7 @@ def define_platform(conf):
if conf.options.TOGLES: if conf.options.TOGLES:
conf.env.append_unique('DEFINES', ['TOGLES']) conf.env.append_unique('DEFINES', ['TOGLES'])
if conf.options.SDL: if conf.options.SDL and not conf.options.TESTS:
conf.env.SDL = 1 conf.env.SDL = 1
conf.define('USE_SDL', 1) conf.define('USE_SDL', 1)
@ -285,6 +285,111 @@ def options(opt):
opt.load('msvc msdev msvs') opt.load('msvc msdev msvs')
opt.load('reconfigure') opt.load('reconfigure')
def check_deps(conf):
if conf.env.DEST_OS != 'win32':
conf.check_cc(lib='dl', mandatory=False)
conf.check_cc(lib='bz2', mandatory=False)
conf.check_cc(lib='rt', mandatory=False)
if not conf.env.LIB_M: # HACK: already added in xcompile!
conf.check_cc(lib='m')
else:
# Common Win32 libraries
# Don't check them more than once, to save time
# Usually, they are always available
# but we need them in uselib
a = [
'user32',
'shell32',
'gdi32',
'advapi32',
'dbghelp',
'psapi',
'ws2_32',
'rpcrt4',
'winmm',
'wininet',
'ole32',
'shlwapi',
'imm32'
]
if conf.env.COMPILER_CC == 'msvc':
for i in a:
conf.check_lib_msvc(i)
else:
for i in a:
conf.check_cc(lib = i)
if conf.options.TESTS:
return
if conf.env.DEST_OS != 'android':
if conf.env.DEST_OS != 'win32':
if conf.options.SDL:
conf.check_cfg(package='sdl2', uselib_store='SDL2', args=['--cflags', '--libs'])
if conf.options.DEDICATED:
conf.check_cfg(package='libedit', uselib_store='EDIT', args=['--cflags', '--libs'])
else:
conf.check_pkg('freetype2', 'FT2', FT2_CHECK)
conf.check_pkg('fontconfig', 'FC', FC_CHECK)
if conf.env.DEST_OS == "darwin":
conf.env.FRAMEWORK_OPENAL = "OpenAL"
else:
conf.check_cfg(package='openal', uselib_store='OPENAL', args=['--cflags', '--libs'])
conf.check_cfg(package='libjpeg', uselib_store='JPEG', args=['--cflags', '--libs'])
conf.check_cfg(package='libpng', uselib_store='PNG', args=['--cflags', '--libs'])
conf.check_cfg(package='libcurl', uselib_store='CURL', args=['--cflags', '--libs'])
conf.check_cfg(package='zlib', uselib_store='ZLIB', args=['--cflags', '--libs'])
if conf.options.OPUS:
conf.check_cfg(package='opus', uselib_store='OPUS', args=['--cflags', '--libs'])
else:
conf.check(lib='SDL2', uselib_store='SDL2')
conf.check(lib='freetype2', uselib_store='FT2')
conf.check(lib='jpeg', uselib_store='JPEG', define_name='HAVE_JPEG')
conf.check(lib='png', uselib_store='PNG', define_name='HAVE_PNG')
conf.check(lib='curl', uselib_store='CURL', define_name='HAVE_CURL')
conf.check(lib='z', uselib_store='ZLIB', define_name='HAVE_ZLIB')
if conf.env.DEST_CPU != 'aarch64':
conf.check(lib='unwind', uselib_store='UNWIND')
conf.check(lib='crypto', uselib_store='CRYPTO')
conf.check(lib='ssl', uselib_store='SSL')
conf.check(lib='android_support', uselib_store='ANDROID_SUPPORT')
conf.check(lib='opus', uselib_store='OPUS')
if conf.env.DEST_OS == "darwin":
conf.check(lib='iconv', uselib_store='ICONV')
conf.env.FRAMEWORK_APPKIT = "AppKit"
conf.env.FRAMEWORK_IOKIT = "IOKit"
conf.env.FRAMEWORK_FOUNDATION = "Foundation"
conf.env.FRAMEWORK_COREFOUNDATION = "CoreFoundation"
conf.env.FRAMEWORK_COREGRAPHICS = "CoreGraphics"
conf.env.FRAMEWORK_OPENGL = "OpenGL"
conf.env.FRAMEWORK_CARBON = "Carbon"
conf.env.FRAMEWORK_APPLICATIONSERVICES = "ApplicationServices"
conf.env.FRAMEWORK_CORESERVICES = "CoreServices"
conf.env.FRAMEWORK_COREAUDIO = "CoreAudio"
conf.env.FRAMEWORK_AUDIOTOOLBOX = "AudioToolbox"
conf.env.FRAMEWORK_SYSTEMCONFIGURATION = "SystemConfiguration"
if conf.env.DEST_OS == 'win32':
conf.check(lib='libz', uselib_store='ZLIB', define_name='USE_ZLIB')
# conf.check(lib='nvtc', uselib_store='NVTC')
# conf.check(lib='ati_compress_mt_vc10', uselib_store='ATI_COMPRESS_MT_VC10')
conf.check(lib='SDL2', uselib_store='SDL2')
conf.check(lib='libjpeg', uselib_store='JPEG', define_name='HAVE_JPEG')
conf.check(lib='libpng', uselib_store='PNG', define_name='HAVE_PNG')
conf.check(lib='d3dx9', uselib_store='D3DX9')
conf.check(lib='d3d9', uselib_store='D3D9')
conf.check(lib='dsound', uselib_store='DSOUND')
conf.check(lib='dxguid', uselib_store='DXGUID')
if conf.options.OPUS:
conf.check(lib='opus', uselib_store='OPUS')
# conf.multicheck(*a, run_all_tests = True, mandatory = True)
def configure(conf): def configure(conf):
conf.load('fwgslib reconfigure compiler_optimizations') conf.load('fwgslib reconfigure compiler_optimizations')
@ -428,12 +533,6 @@ def configure(conf):
cxxflags += ['-std=c++11','-fpermissive'] cxxflags += ['-std=c++11','-fpermissive']
if conf.env.COMPILER_CC == 'gcc': if conf.env.COMPILER_CC == 'gcc':
# wrapfunctions = ['freopen','creat','access','__xstat','stat','lstat','fopen64','open64',
# 'opendir','__lxstat','chmod','chown','lchown','symlink','link','__lxstat64','mknod',
# 'utimes','unlink','rename','utime','__xstat64','mount','mkdir','rmdir','scandir','realpath','mkfifo']
# for func in wrapfunctions:
# linkflags += ['-Wl,--wrap='+func]
conf.define('COMPILER_GCC', 1) conf.define('COMPILER_GCC', 1)
elif conf.env.COMPILER_CC == 'msvc': elif conf.env.COMPILER_CC == 'msvc':
conf.define('COMPILER_MSVC', 1) conf.define('COMPILER_MSVC', 1)
@ -459,104 +558,7 @@ def configure(conf):
conf.env.append_unique('LINKFLAGS', linkflags) conf.env.append_unique('LINKFLAGS', linkflags)
conf.env.append_unique('INCLUDES', [os.path.abspath('common/')]) conf.env.append_unique('INCLUDES', [os.path.abspath('common/')])
if conf.env.DEST_OS != 'android': check_deps( conf )
if conf.env.DEST_OS != 'win32':
if conf.options.SDL:
conf.check_cfg(package='sdl2', uselib_store='SDL2', args=['--cflags', '--libs'])
if conf.options.DEDICATED:
conf.check_cfg(package='libedit', uselib_store='EDIT', args=['--cflags', '--libs'])
else:
conf.check_pkg('freetype2', 'FT2', FT2_CHECK)
conf.check_pkg('fontconfig', 'FC', FC_CHECK)
if conf.env.DEST_OS == "darwin":
conf.env.FRAMEWORK_OPENAL = "OpenAL"
else:
conf.check_cfg(package='openal', uselib_store='OPENAL', args=['--cflags', '--libs'])
conf.check_cfg(package='libjpeg', uselib_store='JPEG', args=['--cflags', '--libs'])
conf.check_cfg(package='libpng', uselib_store='PNG', args=['--cflags', '--libs'])
conf.check_cfg(package='libcurl', uselib_store='CURL', args=['--cflags', '--libs'])
conf.check_cfg(package='zlib', uselib_store='ZLIB', args=['--cflags', '--libs'])
if conf.options.OPUS:
conf.check_cfg(package='opus', uselib_store='OPUS', args=['--cflags', '--libs'])
else:
conf.check(lib='SDL2', uselib_store='SDL2')
conf.check(lib='freetype2', uselib_store='FT2')
conf.check(lib='jpeg', uselib_store='JPEG', define_name='HAVE_JPEG')
conf.check(lib='png', uselib_store='PNG', define_name='HAVE_PNG')
conf.check(lib='curl', uselib_store='CURL', define_name='HAVE_CURL')
conf.check(lib='z', uselib_store='ZLIB', define_name='HAVE_ZLIB')
if conf.env.DEST_CPU != 'aarch64':
conf.check(lib='unwind', uselib_store='UNWIND')
conf.check(lib='crypto', uselib_store='CRYPTO')
conf.check(lib='ssl', uselib_store='SSL')
conf.check(lib='android_support', uselib_store='ANDROID_SUPPORT')
conf.check(lib='opus', uselib_store='OPUS')
if conf.env.DEST_OS == "darwin":
conf.check(lib='iconv', uselib_store='ICONV')
conf.env.FRAMEWORK_APPKIT = "AppKit"
conf.env.FRAMEWORK_IOKIT = "IOKit"
conf.env.FRAMEWORK_FOUNDATION = "Foundation"
conf.env.FRAMEWORK_COREFOUNDATION = "CoreFoundation"
conf.env.FRAMEWORK_COREGRAPHICS = "CoreGraphics"
conf.env.FRAMEWORK_OPENGL = "OpenGL"
conf.env.FRAMEWORK_CARBON = "Carbon"
conf.env.FRAMEWORK_APPLICATIONSERVICES = "ApplicationServices"
conf.env.FRAMEWORK_CORESERVICES = "CoreServices"
conf.env.FRAMEWORK_COREAUDIO = "CoreAudio"
conf.env.FRAMEWORK_AUDIOTOOLBOX = "AudioToolbox"
conf.env.FRAMEWORK_SYSTEMCONFIGURATION = "SystemConfiguration"
if conf.env.DEST_OS != 'win32':
conf.check_cc(lib='dl', mandatory=False)
conf.check_cc(lib='bz2', mandatory=False)
conf.check_cc(lib='rt', mandatory=False)
if not conf.env.LIB_M: # HACK: already added in xcompile!
conf.check_cc(lib='m')
else:
# Common Win32 libraries
# Don't check them more than once, to save time
# Usually, they are always available
# but we need them in uselib
a = [
'user32',
'shell32',
'gdi32',
'advapi32',
'dbghelp',
'psapi',
'ws2_32',
'rpcrt4',
'winmm',
'wininet',
'ole32',
'shlwapi',
'imm32'
]
if conf.env.COMPILER_CC == 'msvc':
for i in a:
conf.check_lib_msvc(i)
else:
for i in a:
conf.check_cc(lib = i)
conf.check(lib='libz', uselib_store='ZLIB', define_name='USE_ZLIB')
# conf.check(lib='nvtc', uselib_store='NVTC')
# conf.check(lib='ati_compress_mt_vc10', uselib_store='ATI_COMPRESS_MT_VC10')
conf.check(lib='SDL2', uselib_store='SDL2')
conf.check(lib='libjpeg', uselib_store='JPEG', define_name='HAVE_JPEG')
conf.check(lib='libpng', uselib_store='PNG', define_name='HAVE_PNG')
conf.check(lib='d3dx9', uselib_store='D3DX9')
conf.check(lib='d3d9', uselib_store='D3D9')
conf.check(lib='dsound', uselib_store='DSOUND')
conf.check(lib='dxguid', uselib_store='DXGUID')
if conf.options.OPUS:
conf.check(lib='opus', uselib_store='OPUS')
# conf.multicheck(*a, run_all_tests = True, mandatory = True)
# indicate if we are packaging for Linux/BSD # indicate if we are packaging for Linux/BSD
if conf.env.DEST_OS != 'android': if conf.env.DEST_OS != 'android':