unittests: add underscore prefix tests
Tests the two new detection methods for the underscore prefix
against what is detected in the binary. Contrary to the in-the-wild
failures, we can trust the binary here as we do not get any additional
flags that influence the binary contents in this test environment.
@@ -1546,6 +1546,43 @@ class AllPlatformTests(BasePlatformTests):
self.build()
self.run_tests()
+ def get_convincing_fake_env_and_cc(self) -> None:
+ '''
+ Return a fake env and C compiler with the fake env
+ machine info properly detected using that compiler.
+ '''
+ env = get_fake_env('', self.builddir, self.prefix)
+ cc = detect_c_compiler(env, MachineChoice.HOST)
+ # Detect machine info
+ env.machines.host = mesonbuild.environment.detect_machine_info({'c':cc})
+ return (env, cc)
+
+ def test_underscore_prefix_detection_list(self) -> None:
+ '''
+ Test the underscore detection hardcoded lookup list
+ against what was detected in the binary.
+ '''
+ env, cc = self.get_convincing_fake_env_and_cc()
+ expected_uscore = cc._symbols_have_underscore_prefix_searchbin(env)
+ list_uscore = cc._symbols_have_underscore_prefix_list(env)
+ if list_uscore is not None:
+ self.assertEqual(list_uscore, expected_uscore)
+ else:
+ raise SkipTest('No match in underscore prefix list for this platform.')
+
+ def test_underscore_prefix_detection_define(self) -> None:
+ '''
+ Test the underscore detection based on compiler-defined preprocessor macro
+ against what was detected in the binary.
+ '''
+ env, cc = self.get_convincing_fake_env_and_cc()
+ expected_uscore = cc._symbols_have_underscore_prefix_searchbin(env)
+ define_uscore = cc._symbols_have_underscore_prefix_define(env)
+ if define_uscore is not None:
+ self.assertEqual(define_uscore, expected_uscore)
+ else:
+ raise SkipTest('Did not find the underscore prefix define __USER_LABEL_PREFIX__')
+
@skipIfNoPkgconfig
def test_pkgconfig_static(self):
'''
