diff --git a/test/jslib/test_jslib_custom_settings.out b/test/jslib/test_jslib_custom_settings.out deleted file mode 100644 index d00491fd7e5bb..0000000000000 --- a/test/jslib/test_jslib_custom_settings.out +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/test/test_jslib.py b/test/test_jslib.py index 0c46710abc217..e4677f2a4a946 100644 --- a/test/test_jslib.py +++ b/test/test_jslib.py @@ -354,7 +354,10 @@ def test_jslib_legacy(self): # See https://github.com/emscripten-core/emscripten/issues/10580. def test_jslib_custom_settings(self): self.cflags += ['--js-library', test_file('jslib/test_jslib_custom_settings.js'), '-jsDCUSTOM_JS_OPTION=1'] - self.do_run_in_out_file_test('jslib/test_jslib_custom_settings.c') + self.do_runf('jslib/test_jslib_custom_settings.c', '1\n') + + # verify that the settings can be specified more than once, and that the last one wins. + self.do_runf('jslib/test_jslib_custom_settings.c', '2\n', cflags=['-jsDCUSTOM_JS_OPTION=2']) self.assert_fail([EMCC, '-jsDWASM=0'], 'cannot change built-in settings values with a -jsD directive') diff --git a/tools/cmdline.py b/tools/cmdline.py index d708a09f5c5a7..dd025f0d0f9ba 100644 --- a/tools/cmdline.py +++ b/tools/cmdline.py @@ -216,6 +216,7 @@ def parse_args(newargs): # noqa: C901, PLR0912, PLR0915 """ should_exit = False skip = False + user_js_defines = set() LEGACY_ARGS = {'--js-opts', '--llvm-opts', '--llvm-lto', '--memory-init-file'} LEGACY_FLAGS = {'--separate-asm', '--jcache', '--proxy-to-worker', '--default-obj-ext', '--embind-emit-tsd', '--remove-duplicates', '--no-heap-copy'} @@ -575,8 +576,9 @@ def consume_arg_file(): key, value = key.split('=') else: value = '1' - if key in settings.keys(): + if key in settings.keys() and key not in user_js_defines: exit_with_error(f'{arg}: cannot change built-in settings values with a -jsD directive. Pass -s{key}={value} instead!') + user_js_defines.add(key) # Apply user -jsD settings settings[key] = value newargs[i] = ''