mte/unikernel/duniverse/dune_/test/blackbox-tests/test-cases/melange/flags.t

142 lines
3.3 KiB
Perl
Raw Normal View History

2025-11-11 02:07:51 +01:00
Test flags and compile_flags fields on melange.emit stanza
$ cat > dune-project <<EOF
> (lang dune 3.8)
> (using melange 0.1)
> EOF
Using flags field in melange.emit stanzas is not supported
$ cat > dune <<EOF
> (melange.emit
> (target output)
> (emit_stdlib false)
> (modules main)
> (flags -w -14-26))
> EOF
$ dune build @mel
File "dune", line 5, characters 2-7:
5 | (flags -w -14-26))
^^^^^
Error: Unknown field "flags"
[1]
Adds a module that contains unused var (warning 26) and illegal backlash (warning 14)
$ cat > main.ml <<EOF
> let t = "\e\n" in
> print_endline "hello"
> EOF
$ cat > dune <<EOF
> (melange.emit
> (target output)
> (emit_stdlib false)
> (modules main)
> (alias mel))
> EOF
Trying to build triggers both warnings
$ dune build @mel
File "main.ml", line 1, characters 9-11:
1 | let t = "\e\n" in
^^
Error (warning 14 [illegal-backslash]): illegal backslash escape in string.
Hint: Single backslashes \ are reserved for escape sequences
(\n, \r, ...). Did you check the list of OCaml escape sequences?
To get a backslash character, escape it with a second backslash: \\.
File "main.ml", line 1, characters 4-5:
1 | let t = "\e\n" in
^
Error (warning 26 [unused-var]): unused variable t.
[1]
Let's ignore them using compile_flags
$ cat > dune <<EOF
> (melange.emit
> (target output)
> (modules main)
> (emit_stdlib false)
> (alias mel)
> (compile_flags -w -14-26))
> EOF
$ dune build @mel
$ node _build/default/output/main.js
hello
Can also pass flags from the env stanza. Let's go back to failing state:
$ cat > dune <<EOF
> (melange.emit
> (target output)
> (emit_stdlib false)
> (modules main)
> (alias mel))
> EOF
$ dune build @mel
File "main.ml", line 1, characters 9-11:
1 | let t = "\e\n" in
^^
Error (warning 14 [illegal-backslash]): illegal backslash escape in string.
Hint: Single backslashes \ are reserved for escape sequences
(\n, \r, ...). Did you check the list of OCaml escape sequences?
To get a backslash character, escape it with a second backslash: \\.
File "main.ml", line 1, characters 4-5:
1 | let t = "\e\n" in
^
Error (warning 26 [unused-var]): unused variable t.
[1]
Adding env stanza with both warnings silenced allows the build to pass successfully
$ cat > dune <<EOF
> (env
> (_
> (melange.compile_flags -w -14-26)))
> (melange.emit
> (alias mel)
> (target output)
> (emit_stdlib false)
> (modules main))
> EOF
$ dune build @mel
$ node _build/default/output/main.js
hello
Warning 102 (Melange only) is available if explicitly set
$ cat > main.ml <<EOF
> let compare a b = compare a b
> EOF
$ cat > dune <<EOF
> (melange.emit
> (target output)
> (modules main)
> (emit_stdlib false)
> (compile_flags -w +a-70))
> EOF
$ dune build output/main.js
File "main.ml", line 1, characters 18-29:
1 | let compare a b = compare a b
^^^^^^^^^^^
Warning 102 [polymorphic-comparison-introduced]: Polymorphic comparison introduced (maybe unsafe)
But it is disabled by default
$ cat > dune <<EOF
> (melange.emit
> (target output)
> (emit_stdlib false)
> (modules main))
> EOF
$ dune build output/main.js