diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2020-04-28 08:48:53 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2020-05-27 15:47:28 +0200 |
commit | b808c255b6a9ddba085bf5646e7d20ec344f2e2d (patch) | |
tree | 32730291f7e6de8ef0a227905520dd66fb4ec0f3 /libbuild2/script/run.hxx | |
parent | 3552356a87402727e663131994fa87f48b3cd4fb (diff) |
Initial support for ad hoc recipes (still work in progress)
Diffstat (limited to 'libbuild2/script/run.hxx')
-rw-r--r-- | libbuild2/script/run.hxx | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/libbuild2/script/run.hxx b/libbuild2/script/run.hxx new file mode 100644 index 0000000..477dd88 --- /dev/null +++ b/libbuild2/script/run.hxx @@ -0,0 +1,75 @@ +// file : libbuild2/script/run.hxx -*- C++ -*- +// license : MIT; see accompanying LICENSE file + +#ifndef LIBBUILD2_SCRIPT_RUN_HXX +#define LIBBUILD2_SCRIPT_RUN_HXX + +#include <libbuild2/types.hxx> +#include <libbuild2/utility.hxx> + +#include <libbuild2/script/script.hxx> + +namespace build2 +{ + namespace script + { + // An exception that can be thrown by an expression running function to + // exit the script (for example, as a result of executing the exit builtin + // by the below run*() functions). The status indicates whether the + // execution should be considered to have succeeded or failed. + // + struct exit + { + bool status; + + explicit + exit (bool s): status (s) {} + }; + + // Helpers. + // + + // Command expression running functions. + // + // Index is the 1-base index of this command line in the command list. + // If it is 0 then it means there is only one command. This information + // can be used, for example, to derive file names. + // + // Location is the start position of this command line in the script. It + // can be used in diagnostics. + // + void + run (environment&, const command_expr&, size_t index, const location&); + + bool + run_if (environment&, const command_expr&, size_t, const location&); + + // Perform the registered special file cleanups in the direct order and + // then the regular cleanups in the reverse order. + // + void + clean (environment&, const location&); + + // Print first 10 directory sub-entries to the diag record. The directory + // must exist. Is normally used while issuing diagnostics on non-empty + // directory removal failure. + // + void + print_dir (diag_record&, const dir_path&, const location&); + + // Return the quoted path representation with the preserved trailing + // directory separator. The path is relative if the verbosity level is + // less than 3. + // + string + diag_path (const path&); + + // Same as above, but prepends the path with a name, if present. The path + // must be not NULL. + // + string + diag_path (const dir_name_view&); + } +} + +#endif // LIBBUILD2_SCRIPT_RUN_HXX |