| 1 | import os |
| 2 | |
| 3 | const gettid_compat_vexe = @VEXE |
| 4 | const gettid_compat_tests_dir = os.dir(@FILE) |
| 5 | const gettid_compat_v3_dir = os.dir(gettid_compat_tests_dir) |
| 6 | const gettid_compat_vlib_dir = os.dir(gettid_compat_v3_dir) |
| 7 | const gettid_compat_v3_src = os.join_path(gettid_compat_v3_dir, 'v3.v') |
| 8 | |
| 9 | fn gettid_compat_build_v3() string { |
| 10 | v3_bin := os.join_path(os.temp_dir(), 'v3_gettid_compat_test_${os.getpid()}') |
| 11 | os.rm(v3_bin) or {} |
| 12 | build := |
| 13 | os.execute('${gettid_compat_vexe} -gc none -path "${gettid_compat_vlib_dir}|@vlib|@vmodules" -o ${v3_bin} ${gettid_compat_v3_src}') |
| 14 | assert build.exit_code == 0, build.output |
| 15 | return v3_bin |
| 16 | } |
| 17 | |
| 18 | fn test_v_gettid_uses_declared_libc_compat_helper() { |
| 19 | $if !linux { |
| 20 | return |
| 21 | } |
| 22 | v3_bin := gettid_compat_build_v3() |
| 23 | src := os.join_path(os.temp_dir(), 'v3_gettid_compat_${os.getpid()}.v') |
| 24 | bin := os.join_path(os.temp_dir(), 'v3_gettid_compat_${os.getpid()}') |
| 25 | os.write_file(src, 'module main |
| 26 | |
| 27 | #flag -Werror=implicit-function-declaration |
| 28 | |
| 29 | fn main() { |
| 30 | println(v_gettid().str()) |
| 31 | } |
| 32 | ') or { |
| 33 | panic(err) |
| 34 | } |
| 35 | os.rm(bin) or {} |
| 36 | os.rm(bin + '.c') or {} |
| 37 | compile := os.execute('${v3_bin} ${src} -b c -o ${bin}') |
| 38 | assert compile.exit_code == 0, compile.output |
| 39 | assert !compile.output.contains('implicit declaration'), compile.output |
| 40 | generated := os.read_file(bin + '.c') or { panic(err) } |
| 41 | assert generated.contains('static inline u32 v3_gettid(void)'), generated |
| 42 | assert generated.contains('syscall(SYS_gettid)'), generated |
| 43 | assert !generated.contains(' gettid('), generated |
| 44 | run := os.execute(bin) |
| 45 | assert run.exit_code == 0, run.output |
| 46 | assert run.output.trim_space().len > 0, run.output |
| 47 | } |
| 48 | |