diff --git a/bin/main.ml b/bin/main.ml index 5435ebb1..0165e2c9 100644 --- a/bin/main.ml +++ b/bin/main.ml @@ -148,8 +148,41 @@ let build_targets ~name = $ Arg.(non_empty & pos_all string [] name_)) , Term.info name ~doc ~man:help_secs) +let runtest = + let doc = "run tests" in + let name_ = Arg.info [] ~docv:"DIR" in + let go common dirs = + set_common common; + Future.Scheduler.go ~log:(create_log ()) + (Main.setup () >>= fun (bs, _, ctx) -> + let dirs = + match dirs with + | [] -> [Path.root] + | _ -> List.map dirs ~f:Path.(relative root) + in + let targets = + List.map dirs ~f:(fun dir -> + let dir = + if Path.is_in_build_dir dir then + dir + else + Path.append ctx.build_dir dir + in + Alias.file (Alias.runtest ~dir)) + in + Build_system.do_build_exn bs targets) in + ( Term.(const go + $ common + $ Arg.(value & pos_all string [] name_)) + , Term.info "runtest" ~doc ~man:help_secs) + let all = - [ internal; build_package; external_lib_deps; build_targets ~name:"build" ] + [ internal + ; build_package + ; external_lib_deps + ; build_targets ~name:"build" + ; runtest + ] let () = try diff --git a/src/build.ml b/src/build.ml index 331ae4bd..cc3e7e73 100644 --- a/src/build.ml +++ b/src/build.ml @@ -185,4 +185,6 @@ let copy ~src ~dst = create_file ~target:dst (fun () -> copy_file ~src:(Path.to_string src) ~dst:(Path.to_string dst)) -let touch path = return "" >>> echo path +let touch target = + create_file ~target (fun _ -> + close_out (open_out_bin (Path.to_string target)))