aboutsummaryrefslogtreecommitdiff
path: root/build2/test/target.cxx
blob: 0bda8274a49f4529bdf78b80131279b272540f20 (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
// file      : build2/test/target.cxx -*- C++ -*-
// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
// license   : MIT; see accompanying LICENSE file

#include <build2/test/target.hxx>

using namespace std;
using namespace butl;

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

    static bool
    testscript_target_pattern (const target_type&,
                               const scope&,
                               string& v,
                               bool r)
    {
      size_t p (path::traits::find_extension (v));

      if (r)
      {
        assert (p != string::npos);
        v.resize (p);
      }
      else if (p == string::npos && v != "testscript")
      {
        v += ".test";
        return true;
      }

      return false;
    }

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