ocaml/ocamltest/builtin_actions.ml

268 lines
7.2 KiB
OCaml

(**************************************************************************)
(* *)
(* OCaml *)
(* *)
(* Sebastien Hinderer, projet Gallium, INRIA Paris *)
(* *)
(* Copyright 2016 Institut National de Recherche en Informatique et *)
(* en Automatique. *)
(* *)
(* All rights reserved. This file is distributed under the terms of *)
(* the GNU Lesser General Public License version 2.1, with the *)
(* special exception on linking described in the file LICENSE. *)
(* *)
(**************************************************************************)
(* Definition of a few built-in actions *)
open Ocamltest_stdlib
open Actions
let reason_with_fallback env fallback =
match Environments.lookup Builtin_variables.reason env with
| None -> fallback
| Some reason -> reason
let pass = make
"pass"
(fun _log env ->
let reason = reason_with_fallback env "the pass action always succeeds" in
let result = Result.pass_with_reason reason in
(result, env))
let skip = make
"skip"
(fun _log env ->
let reason = reason_with_fallback env "the skip action always skips" in
let result = Result.skip_with_reason reason in
(result, env))
let fail = make
"fail"
(fun _log env ->
let reason = reason_with_fallback env "the fail action always fails" in
let result = Result.fail_with_reason reason in
(result, env))
let cd = make
"cd"
(fun _log env ->
let cwd = Environments.safe_lookup Builtin_variables.cwd env in
begin
try
Sys.chdir cwd; (Result.pass, env)
with _ ->
let reason = "Could not chidir to \"" ^ cwd ^ "\"" in
let result = Result.fail_with_reason reason in
(result, env)
end)
let dumpenv = make
"dumpenv"
(fun log env ->
Environments.dump log env; (Result.pass, env))
let hasinstrumentedruntime = make
"hasinstrumentedruntime"
(Actions_helpers.pass_or_skip (Ocamltest_config.has_instrumented_runtime)
"instrumented runtime available"
"instrumented runtime not available")
let hasunix = make
"hasunix"
(Actions_helpers.pass_or_skip (Ocamltest_config.libunix <> None)
"unix library available"
"unix library not available")
let libunix = make
"libunix"
(Actions_helpers.pass_or_skip (Ocamltest_config.libunix = Some true)
"libunix available"
"libunix not available")
let libwin32unix = make
"libwin32unix"
(Actions_helpers.pass_or_skip (Ocamltest_config.libunix = Some false)
"libwin32unix available"
"libwin32unix not available")
let hassysthreads = make
"hassysthreads"
(Actions_helpers.pass_or_skip Ocamltest_config.systhreads
"systhreads library available"
"systhreads library not available")
let hasstr = make
"hasstr"
(Actions_helpers.pass_or_skip Ocamltest_config.str
"str library available"
"str library not available")
let windows_OS = "Windows_NT"
let get_OS () = Sys.safe_getenv "OS"
let windows = make
"windows"
(Actions_helpers.pass_or_skip (get_OS () = windows_OS)
"running on Windows"
"not running on Windows")
let not_windows = make
"not-windows"
(Actions_helpers.pass_or_skip (get_OS () <> windows_OS)
"not running on Windows"
"running on Windows")
let is_bsd_system s =
match s with
| "bsd_elf" | "netbsd" | "freebsd" | "openbsd" -> true
| _ -> false
let bsd = make
"bsd"
(Actions_helpers.pass_or_skip (is_bsd_system Ocamltest_config.system)
"on a BSD system"
"not on a BSD system")
let not_bsd = make
"not-bsd"
(Actions_helpers.pass_or_skip (not (is_bsd_system Ocamltest_config.system))
"not on a BSD system"
"on a BSD system")
let macos_system = "macosx"
let macos = make
"macos"
(Actions_helpers.pass_or_skip (Ocamltest_config.system = macos_system)
"on a MacOS system"
"not on a MacOS system")
let arch32 = make
"arch32"
(Actions_helpers.pass_or_skip (Sys.word_size = 32)
"32-bit architecture"
"non-32-bit architecture")
let arch64 = make
"arch64"
(Actions_helpers.pass_or_skip (Sys.word_size = 64)
"64-bit architecture"
"non-64-bit architecture")
let arch_arm = make
"arch_arm"
(Actions_helpers.pass_or_skip (String.equal Ocamltest_config.arch "arm")
"Target is ARM architecture"
"Target is not ARM architecture")
let arch_arm64 = make
"arch_arm64"
(Actions_helpers.pass_or_skip (String.equal Ocamltest_config.arch "arm64")
"Target is ARM64 architecture"
"Target is not ARM64 architecture")
let arch_amd64 = make
"arch_amd64"
(Actions_helpers.pass_or_skip (String.equal Ocamltest_config.arch "amd64")
"Target is AMD64 architecture"
"Target is not AMD64 architecture")
let arch_i386 = make
"arch_i386"
(Actions_helpers.pass_or_skip (String.equal Ocamltest_config.arch "i386")
"Target is i386 architecture"
"Target is not i386 architecture")
let arch_power = make
"arch_power"
(Actions_helpers.pass_or_skip (String.equal Ocamltest_config.arch "power")
"Target is POWER architecture"
"Target is not POWER architecture")
let function_sections = make
"function_sections"
(Actions_helpers.pass_or_skip (Ocamltest_config.function_sections)
"Target supports function sections"
"Target does not support function sections")
let naked_pointers = make
"naked_pointers"
(Actions_helpers.pass_or_skip (Ocamltest_config.naked_pointers)
"Runtime system supports naked pointers"
"Runtime system does not support naked pointers")
let has_symlink = make
"has_symlink"
(Actions_helpers.pass_or_skip (Unix.has_symlink () )
"symlinks available"
"symlinks not available")
let setup_build_env = make
"setup-build-env"
(Actions_helpers.setup_build_env true [])
let setup_simple_build_env = make
"setup-simple-build-env"
(Actions_helpers.setup_simple_build_env true [])
let run = make
"run"
Actions_helpers.run_program
let script = make
"script"
Actions_helpers.run_script
let check_program_output = make
"check-program-output"
(Actions_helpers.check_output "program"
Builtin_variables.output
Builtin_variables.reference)
let initialize_test_exit_status_variables _log env =
Environments.add_bindings
[
Builtin_variables.test_pass, "0";
Builtin_variables.test_fail, "1";
Builtin_variables.test_skip, "125";
] env
let _ =
Environments.register_initializer Environments.Post
"test_exit_status_variables" initialize_test_exit_status_variables;
List.iter register
[
pass;
skip;
fail;
cd;
dumpenv;
hasinstrumentedruntime;
hasunix;
hassysthreads;
hasstr;
libunix;
libwin32unix;
windows;
not_windows;
bsd;
not_bsd;
macos;
arch32;
arch64;
has_symlink;
setup_build_env;
run;
script;
check_program_output;
arch_arm;
arch_arm64;
arch_amd64;
arch_i386;
arch_power;
function_sections;
naked_pointers
]