@@ -3102,7 +3102,7 @@ def test_dlfcn_missing(self):
31023102 if self .js_engines == [config .V8_ENGINE ]:
31033103 expected = "error: Could not load dynamic lib: libfoo.so\n Error: Error reading file"
31043104 else :
3105- expected = "error: Could not load dynamic lib: libfoo.so\n Error: ENOENT: no such file or directory, open 'libfoo.so' "
3105+ expected = "error: Could not load dynamic lib: libfoo.so\n Error: ENOENT: no such file or directory"
31063106 self .do_run (src , expected )
31073107
31083108 @needs_dylink
@@ -4071,6 +4071,7 @@ def dylink_test(self, main, side, expected=None, header=None, force_c=False,
40714071
40724072 def dylink_testf (self , main , side = None , expected = None , force_c = False , main_emcc_args = None ,
40734073 main_module = 2 ,
4074+ so_dir = '' ,
40744075 so_name = 'liblib.so' ,
40754076 need_reverse = True , ** kwargs ):
40764077 main_emcc_args = main_emcc_args or []
@@ -4094,13 +4095,13 @@ def dylink_testf(self, main, side=None, expected=None, force_c=False, main_emcc_
40944095 self .run_process ([EMCC ] + side + self .get_emcc_args () + ['-o' , out_file ])
40954096 else :
40964097 out_file = self .build (side , js_outfile = (side_suffix == 'js' ))
4097- shutil .move (out_file , so_name )
4098+ shutil .move (out_file , os . path . join ( so_dir , so_name ) )
40984099
40994100 # main settings
41004101 self .set_setting ('MAIN_MODULE' , main_module )
41014102 self .clear_setting ('SIDE_MODULE' )
41024103 self .emcc_args += main_emcc_args
4103- self .emcc_args .append (so_name )
4104+ self .emcc_args .append (os . path . join ( so_dir , so_name ) )
41044105
41054106 if force_c :
41064107 self .emcc_args .append ('-nostdlib++' )
@@ -4120,7 +4121,7 @@ def dylink_testf(self, main, side=None, expected=None, force_c=False, main_emcc_
41204121 # Test the reverse as well. There we flip the role of the side module and main module.
41214122 # - We add --no-entry since the side module doesn't have a `main`
41224123 self .dylink_testf (side , main , expected , force_c , main_emcc_args + ['--no-entry' ],
4123- need_reverse = False , ** kwargs )
4124+ main_module , so_dir , so_name , need_reverse = False , ** kwargs )
41244125
41254126 def do_basic_dylink_test (self , ** kwargs ):
41264127 self .dylink_test (r'''
@@ -4177,6 +4178,22 @@ def test_dylink_safe_heap(self):
41774178 self .set_setting ('SAFE_HEAP' )
41784179 self .do_basic_dylink_test ()
41794180
4181+ @needs_dylink
4182+ def test_dylink_locate_file (self ):
4183+ so_dir = 'so_dir'
4184+ so_name = 'liblib.so'
4185+ os .mkdir (so_dir )
4186+ create_file ('pre.js' , '''
4187+ Module['locateFile'] = function(f) {
4188+ if (f === '%s') {
4189+ return '%s/' + f;
4190+ } else {
4191+ return f;
4192+ }
4193+ };
4194+ ''' % (so_name , so_dir ))
4195+ self .do_basic_dylink_test (so_dir = so_dir , so_name = so_name , main_emcc_args = ['--pre-js' , 'pre.js' ])
4196+
41804197 @needs_dylink
41814198 def test_dylink_function_pointer_equality (self ):
41824199 self .dylink_test (r'''
0 commit comments