@@ -3839,16 +3839,56 @@ def test_js_internal_deps(self):
3839
3839
},
3840
3840
});
3841
3841
''')
3842
- create_file('src.cpp ', r'''
3842
+ create_file('src.c ', r'''
3843
3843
#include <stdio.h>
3844
- extern "C" int jslibfunc();
3844
+ int jslibfunc();
3845
3845
int main() {
3846
3846
printf("c calling: %d\n", jslibfunc());
3847
3847
}
3848
3848
''')
3849
- err = self.run_process([EMXX , 'src.cpp ', '--js-library', 'lib.js'], stderr=PIPE).stderr
3849
+ err = self.run_process([EMCC , 'src.c ', '--js-library', 'lib.js'], stderr=PIPE).stderr
3850
3850
self.assertContained("warning: user library symbol 'jslibfunc' depends on internal symbol '$callRuntimeCallbacks'", err)
3851
3851
3852
+ def test_js_lib_sig_mismatch(self):
3853
+ create_file('lib.js', r'''
3854
+ mergeInto(LibraryManager.library, {
3855
+ jslibfunc__sig: 'ii',
3856
+ jslibfunc: function(x) {},
3857
+ });
3858
+
3859
+ mergeInto(LibraryManager.library, {
3860
+ jslibfunc__sig: 'dd',
3861
+ jslibfunc: function(x) {},
3862
+ });
3863
+
3864
+ ''')
3865
+ create_file('src.c', r'''
3866
+ #include <stdio.h>
3867
+ int jslibfunc();
3868
+ int main() {
3869
+ printf("c calling: %d\n", jslibfunc());
3870
+ }
3871
+ ''')
3872
+ err = self.expect_fail([EMCC, 'src.c', '--js-library', 'lib.js'])
3873
+ self.assertContained('lib.js: Signature redefinition for: jslibfunc__sig. (old=ii vs new=dd)', err)
3874
+
3875
+ def test_js_lib_invalid_deps(self):
3876
+ create_file('lib.js', r'''
3877
+ mergeInto(LibraryManager.library, {
3878
+ jslibfunc__deps: 'hello',
3879
+ jslibfunc: function(x) {},
3880
+ });
3881
+ ''')
3882
+ create_file('src.c', r'''
3883
+ #include <stdio.h>
3884
+ int jslibfunc();
3885
+ int main() {
3886
+ printf("c calling: %d\n", jslibfunc());
3887
+ }
3888
+ ''')
3889
+ err = self.expect_fail([EMCC, 'src.c', '--js-library', 'lib.js'])
3890
+ self.assertContained('lib.js: JS library directive jslibfunc__deps=hello is of type string, but it should be an array', err)
3891
+
3852
3892
def test_EMCC_BUILD_DIR(self):
3853
3893
# EMCC_BUILD_DIR env var contains the dir we were building in, when running the js compiler (e.g. when
3854
3894
# running a js library). We force the cwd to be src/ for technical reasons, so this lets you find out
0 commit comments