diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2020-06-05 06:36:30 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2020-06-05 06:36:30 +0200 |
commit | 9ec2bdd87659438b4aa021a10c4a4977ef77118e (patch) | |
tree | 12580b4d0b82bce80047b067c3bb221b49be7449 /libbuild2/buildspec.hxx | |
parent | d280946474568925016359be742b59fd6c000c52 (diff) |
Add ability to specify ad hoc recipe actions
We are reusing the buildspec syntax for that.
Diffstat (limited to 'libbuild2/buildspec.hxx')
-rw-r--r-- | libbuild2/buildspec.hxx | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/libbuild2/buildspec.hxx b/libbuild2/buildspec.hxx new file mode 100644 index 0000000..b181d15 --- /dev/null +++ b/libbuild2/buildspec.hxx @@ -0,0 +1,70 @@ +// file : libbuild2/buildspec.hxx -*- C++ -*- +// license : MIT; see accompanying LICENSE file + +#ifndef LIBBUILD2_BUILDSPEC_HXX +#define LIBBUILD2_BUILDSPEC_HXX + +#include <libbuild2/types.hxx> +#include <libbuild2/forward.hxx> +#include <libbuild2/utility.hxx> + +#include <libbuild2/variable.hxx> + +#include <libbuild2/export.hxx> + +namespace build2 +{ + struct targetspec + { + using name_type = build2::name; + + explicit + targetspec (name_type n): name (move (n)) {} + targetspec (dir_path sb, name_type n) + : src_base (move (sb)), name (move (n)) {} + + dir_path src_base; + name_type name; + + // The rest is calculated and cached. + // + scope* root_scope = nullptr; + dir_path out_base; + path buildfile; // Empty if implied. + bool forwarded = false; + }; + + struct opspec: small_vector<targetspec, 1> + { + opspec () = default; + opspec (string n): name (move (n)) {} + + string name; + values params; + }; + + struct metaopspec: small_vector<opspec, 1> + { + metaopspec () = default; + metaopspec (string n): name (move (n)) {} + + string name; + values params; + }; + + using buildspec = small_vector<metaopspec, 1>; + + LIBBUILD2_SYMEXPORT ostream& + operator<< (ostream&, const targetspec&); + + LIBBUILD2_SYMEXPORT ostream& + operator<< (ostream&, const opspec&); + + LIBBUILD2_SYMEXPORT ostream& + operator<< (ostream&, const metaopspec&); + + LIBBUILD2_SYMEXPORT ostream& + operator<< (ostream&, const buildspec&); +} + +#endif // LIBBUILD2_BUILDSPEC_HXX |