From dee6c9aa96e21267010176d46226cf73a67c0967 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Tue, 3 Jul 2018 00:27:39 +0700 Subject: [PATCH 1/4] Disable fallback in dune files Signed-off-by: Rudi Grinberg --- src/jbuild.ml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/jbuild.ml b/src/jbuild.ml index 7b460de3..e6e6c150 100644 --- a/src/jbuild.ml +++ b/src/jbuild.ml @@ -1130,6 +1130,10 @@ module Rule = struct field "locks" (list String_with_vars.t) ~default:[] >>= fun locks -> map_validate (field_b "fallback" >>= fun fallback -> + (if fallback then + Syntax.renamed_in Stanza.syntax (1, 0) ~to_:"(mode fallback)" + else + return ()) >>= fun () -> field_o "mode" Mode.t >>= fun mode -> return (fallback, mode)) ~f:(function From aee019577be0a32685d784de2f4da148e5540cb2 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Tue, 3 Jul 2018 13:54:42 +0700 Subject: [PATCH 2/4] Change fallback check to use ?check param Signed-off-by: Rudi Grinberg --- src/jbuild.ml | 8 +++----- src/stdune/sexp.ml | 5 +++-- src/stdune/sexp.mli | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/jbuild.ml b/src/jbuild.ml index e6e6c150..9a2c780d 100644 --- a/src/jbuild.ml +++ b/src/jbuild.ml @@ -1129,11 +1129,9 @@ module Rule = struct field "deps" (list Dep_conf.t) ~default:[] >>= fun deps -> field "locks" (list String_with_vars.t) ~default:[] >>= fun locks -> map_validate - (field_b "fallback" >>= fun fallback -> - (if fallback then - Syntax.renamed_in Stanza.syntax (1, 0) ~to_:"(mode fallback)" - else - return ()) >>= fun () -> + (field_b + ~check:(Syntax.renamed_in Stanza.syntax (1, 0) ~to_:"(mode fallback)") + "fallback" >>= fun fallback -> field_o "mode" Mode.t >>= fun mode -> return (fallback, mode)) ~f:(function diff --git a/src/stdune/sexp.ml b/src/stdune/sexp.ml index 4ef365ff..e98d1886 100644 --- a/src/stdune/sexp.ml +++ b/src/stdune/sexp.ml @@ -481,9 +481,10 @@ module Of_sexp = struct | None -> (None, add_known name state) - let field_b name = + let field_b ?check name = field name ~default:false - (eos >>= function + (Option.value check ~default:(return ()) >>= fun () -> + eos >>= function | true -> return true | _ -> bool) diff --git a/src/stdune/sexp.mli b/src/stdune/sexp.mli index f1f62e3b..6c147db1 100644 --- a/src/stdune/sexp.mli +++ b/src/stdune/sexp.mli @@ -216,7 +216,7 @@ module Of_sexp : sig -> 'a t -> 'a option fields_parser - val field_b : string -> bool fields_parser + val field_b : ?check:(unit t) -> string -> bool fields_parser (** A field that can appear multiple times *) val multi_field From 8b5e1a9a1324edc216aef6927a4adc2ecc59544f Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Tue, 3 Jul 2018 13:54:54 +0700 Subject: [PATCH 3/4] Add tests for fallback Signed-off-by: Rudi Grinberg --- test/blackbox-tests/dune.inc | 10 ++++++++++ .../test-cases/fallback-dune/dune1/dune | 4 ++++ .../test-cases/fallback-dune/dune2/dune | 4 ++++ .../test-cases/fallback-dune/jbuild/jbuild | 5 +++++ .../test-cases/fallback-dune/run.t | 20 +++++++++++++++++++ 5 files changed, 43 insertions(+) create mode 100644 test/blackbox-tests/test-cases/fallback-dune/dune1/dune create mode 100644 test/blackbox-tests/test-cases/fallback-dune/dune2/dune create mode 100644 test/blackbox-tests/test-cases/fallback-dune/jbuild/jbuild create mode 100644 test/blackbox-tests/test-cases/fallback-dune/run.t diff --git a/test/blackbox-tests/dune.inc b/test/blackbox-tests/dune.inc index 28390f9e..efcea69d 100644 --- a/test/blackbox-tests/dune.inc +++ b/test/blackbox-tests/dune.inc @@ -128,6 +128,14 @@ test-cases/exec-cmd (progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected))))) +(alias + (name fallback-dune) + (deps (package dune) (source_tree test-cases/fallback-dune)) + (action + (chdir + test-cases/fallback-dune + (progn (run %{exe:cram.exe} -test run.t) (diff? run.t run.t.corrected))))) + (alias (name findlib) (deps (package dune) (source_tree test-cases/findlib)) @@ -606,6 +614,7 @@ (alias env) (alias exclude-missing-module) (alias exec-cmd) + (alias fallback-dune) (alias findlib) (alias findlib-error) (alias force-test) @@ -678,6 +687,7 @@ (alias env) (alias exclude-missing-module) (alias exec-cmd) + (alias fallback-dune) (alias findlib) (alias findlib-error) (alias force-test) diff --git a/test/blackbox-tests/test-cases/fallback-dune/dune1/dune b/test/blackbox-tests/test-cases/fallback-dune/dune1/dune new file mode 100644 index 00000000..020ea118 --- /dev/null +++ b/test/blackbox-tests/test-cases/fallback-dune/dune1/dune @@ -0,0 +1,4 @@ +(rule + (fallback) + (targets) + (action (with-stdout-to foo.txt (echo "testing")))) \ No newline at end of file diff --git a/test/blackbox-tests/test-cases/fallback-dune/dune2/dune b/test/blackbox-tests/test-cases/fallback-dune/dune2/dune new file mode 100644 index 00000000..fdf0a419 --- /dev/null +++ b/test/blackbox-tests/test-cases/fallback-dune/dune2/dune @@ -0,0 +1,4 @@ +(rule + (fallback false) + (targets) + (action (with-stdout-to foo.txt (echo "testing")))) \ No newline at end of file diff --git a/test/blackbox-tests/test-cases/fallback-dune/jbuild/jbuild b/test/blackbox-tests/test-cases/fallback-dune/jbuild/jbuild new file mode 100644 index 00000000..9792612a --- /dev/null +++ b/test/blackbox-tests/test-cases/fallback-dune/jbuild/jbuild @@ -0,0 +1,5 @@ + +(rule + ((fallback) + (targets (foo.txt)) + (action (with-stdout-to foo.txt (echo "testing"))))) diff --git a/test/blackbox-tests/test-cases/fallback-dune/run.t b/test/blackbox-tests/test-cases/fallback-dune/run.t new file mode 100644 index 00000000..27b03976 --- /dev/null +++ b/test/blackbox-tests/test-cases/fallback-dune/run.t @@ -0,0 +1,20 @@ +fallback isn't allowed in dune + + $ dune build --root dune1 + Info: creating file dune-project with this contents: (lang dune 1.0) + File "dune", line 2, characters 1-11: + Error: 'fallback' was renamed to '(mode fallback)' in 1.0 of the dune language + [1] + +2nd fallback form isn't allowed either + + $ dune build --root dune2 + Info: creating file dune-project with this contents: (lang dune 1.0) + File "dune", line 2, characters 1-17: + Error: 'fallback' was renamed to '(mode fallback)' in 1.0 of the dune language + [1] + +But it is allowed in jbuilder + + $ jbuilder build --root jbuild + Entering directory 'jbuild' From 8e09749f12382d793721d513a47c24008ecbbf8d Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Tue, 3 Jul 2018 16:11:29 +0700 Subject: [PATCH 4/4] Add missing words to syntax error message Signed-off-by: Rudi Grinberg --- src/syntax.ml | 2 +- test/blackbox-tests/test-cases/fallback-dune/run.t | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/syntax.ml b/src/syntax.ml index dae362fa..8a95138c 100644 --- a/src/syntax.ml +++ b/src/syntax.ml @@ -124,7 +124,7 @@ let renamed_in t ver ~to_ = else begin desc () >>= fun (loc, what) -> Loc.fail loc - "%s was renamed to '%s' in %s of %s" what to_ + "%s was renamed to '%s' in the %s version of %s" what to_ (Version.to_string ver) t.desc end diff --git a/test/blackbox-tests/test-cases/fallback-dune/run.t b/test/blackbox-tests/test-cases/fallback-dune/run.t index 27b03976..d2580573 100644 --- a/test/blackbox-tests/test-cases/fallback-dune/run.t +++ b/test/blackbox-tests/test-cases/fallback-dune/run.t @@ -3,7 +3,7 @@ fallback isn't allowed in dune $ dune build --root dune1 Info: creating file dune-project with this contents: (lang dune 1.0) File "dune", line 2, characters 1-11: - Error: 'fallback' was renamed to '(mode fallback)' in 1.0 of the dune language + Error: 'fallback' was renamed to '(mode fallback)' in the 1.0 version of the dune language [1] 2nd fallback form isn't allowed either @@ -11,7 +11,7 @@ fallback isn't allowed in dune $ dune build --root dune2 Info: creating file dune-project with this contents: (lang dune 1.0) File "dune", line 2, characters 1-17: - Error: 'fallback' was renamed to '(mode fallback)' in 1.0 of the dune language + Error: 'fallback' was renamed to '(mode fallback)' in the 1.0 version of the dune language [1] But it is allowed in jbuilder