aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/test/target.cxx
blob: 2707a8991d79d39216bbe19f49739a9fea2f3d21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// file      : libbuild2/test/target.cxx -*- C++ -*-
// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
// license   : MIT; see accompanying LICENSE file

#include <libbuild2/test/target.hxx>

using namespace std;
using namespace butl;

namespace build2
{
  namespace test
  {
    static const char*
    testscript_target_extension (const target_key& tk, const scope*)
    {
      // If the name is special 'testscript', then there is no extension,
      // otherwise it is .testscript.
      //
      return *tk.name == "testscript" ? "" : "testscript";
    }

    static bool
    testscript_target_pattern (const target_type&,
                               const scope&,
                               string& v,
                               optional<string>& e,
                               const location& l,
                               bool r)
    {
      if (r)
      {
        assert (e);
        e = nullopt;
      }
      else
      {
        e = target::split_name (v, l);

        if (!e && v != "testscript")
        {
          e = "testscript";
          return true;
        }
      }

      return false;
    }

    const target_type testscript::static_type
    {
      "testscript",
      &file::static_type,
      &target_factory<testscript>,
      &testscript_target_extension,
      nullptr,  /* default_extension */
      &testscript_target_pattern,
      nullptr,
      &file_search,
      false
    };
  }
}