diff options
Diffstat (limited to 'libbuild2/test/common.hxx')
-rw-r--r-- | libbuild2/test/common.hxx | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/libbuild2/test/common.hxx b/libbuild2/test/common.hxx index 01628fd..958b541 100644 --- a/libbuild2/test/common.hxx +++ b/libbuild2/test/common.hxx @@ -20,11 +20,16 @@ namespace build2 { const variable& config_test; const variable& config_test_output; + const variable& config_test_timeout; + const variable& config_test_runner; const variable& var_test; const variable& test_options; const variable& test_arguments; + const variable& test_runner_path; + const variable& test_runner_options; + const variable& test_stdin; const variable& test_stdout; const variable& test_roundtrip; @@ -40,11 +45,34 @@ namespace build2 output_before before = output_before::warn; output_after after = output_after::clean; + // The config.test.timeout values. + // + optional<duration> operation_timeout; + optional<duration> test_timeout; + + // The test.runner.{path,options} values extracted from the + // config.test.runner value, if any. + // + const process_path* runner_path = nullptr; + const strings* runner_options = nullptr; + // The config.test query interface. // const names* test_ = nullptr; // The config.test value if any. scope* root_ = nullptr; // The root scope for target resolution. + // Store it as the underlying representation and use the release-consume + // ordering (see mtime_target for the reasoning). + // + mutable atomic<timestamp::rep> operation_deadline_ { + timestamp_unknown_rep}; + + // Return the test operation deadline, calculating it on the first call + // as an offset from now by the operation timeout. + // + optional<timestamp> + operation_deadline () const; + // Return true if the specified alias target should pass-through to its // prerequisites. // @@ -65,6 +93,27 @@ namespace build2 explicit common (common_data&& d): common_data (move (d)) {} }; + + // Helpers. + // + + // Return the nearest of the target-enclosing root scopes test operation + // deadlines. + // + optional<timestamp> + operation_deadline (const target&); + + // Return the lesser of the target-enclosing root scopes test timeouts. + // + optional<duration> + test_timeout (const target&); + + // Convert the test timeouts in the target-enclosing root scopes into + // deadlines and return the nearest between them and the operation + // deadlines in the enclosing root scopes. + // + optional<timestamp> + test_deadline (const target&); } } |