aboutsummaryrefslogtreecommitdiff
path: root/build2/bin
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-12-07 12:06:59 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-12-07 12:06:59 +0200
commita89f1e4f4efd291beedea03c65c8185b7d0df20e (patch)
treed06b2cb81720ae0c6cc877c2c67201838a10b63a /build2/bin
parentc2da5df68610a0070575212bfee67c730ab39128 (diff)
Distinguish between "fixed" and "default" target extensions
This fixes wrong merging of, say, file{README} and file{README.MySQL} (in libmysqlclient).
Diffstat (limited to 'build2/bin')
-rw-r--r--build2/bin/target.cxx100
1 files changed, 53 insertions, 47 deletions
diff --git a/build2/bin/target.cxx b/build2/bin/target.cxx
index d9dc64b..533da43 100644
--- a/build2/bin/target.cxx
+++ b/build2/bin/target.cxx
@@ -2,6 +2,8 @@
// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
// license : MIT; see accompanying LICENSE file
+#include <build2/context.hxx>
+
#include <build2/bin/target.hxx>
using namespace std;
@@ -18,6 +20,7 @@ namespace build2
nullptr,
nullptr,
nullptr,
+ nullptr,
&target_search,
false
};
@@ -30,6 +33,7 @@ namespace build2
nullptr,
nullptr,
nullptr,
+ nullptr,
&target_search,
false
};
@@ -41,24 +45,18 @@ namespace build2
// running serial. For the members it is also safe to set the group during
// creation.
- extern const char ext_var[] = "extension"; // VC14 rejects constexpr.
-
// obj*{}, bmi*{}, libu*{} member factory.
//
template <typename M, typename G>
- static pair<target*, optional<string>>
- m_factory (const target_type&,
- dir_path dir,
- dir_path out,
- string n,
- optional<string> ext)
+ static target*
+ m_factory (const target_type&, dir_path dir, dir_path out, string n)
{
const G* g (targets.find<G> (dir, out, n));
M* m (new M (move (dir), move (out), move (n)));
m->group = g;
- return make_pair (m, move (ext));
+ return m;
}
const target_type obje::static_type
@@ -66,8 +64,9 @@ namespace build2
"obje",
&file::static_type,
&m_factory<obje, obj>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&target_search, // Note: not _file(); don't look for an existing file.
false
@@ -78,8 +77,9 @@ namespace build2
"bmie",
&file::static_type,
&m_factory<bmie, bmi>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&target_search, // Note: not _file(); don't look for an existing file.
false
@@ -90,8 +90,9 @@ namespace build2
"libue",
&libux::static_type,
&m_factory<libue, libu>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&target_search, // Note: not _file(); don't look for an existing file.
false
@@ -102,8 +103,9 @@ namespace build2
"obja",
&file::static_type,
&m_factory<obja, obj>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&target_search, // Note: not _file(); don't look for an existing file.
false
@@ -114,8 +116,9 @@ namespace build2
"bmia",
&file::static_type,
&m_factory<bmia, bmi>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&target_search, // Note: not _file(); don't look for an existing file.
false
@@ -126,8 +129,9 @@ namespace build2
"libua",
&libux::static_type,
&m_factory<libua, libu>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&target_search, // Note: not _file(); don't look for an existing file.
false
@@ -138,8 +142,9 @@ namespace build2
"objs",
&file::static_type,
&m_factory<objs, obj>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&target_search, // Note: not _file(); don't look for an existing file.
false
@@ -150,8 +155,9 @@ namespace build2
"bmis",
&file::static_type,
&m_factory<bmis, bmi>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&target_search, // Note: not _file(); don't look for an existing file.
false
@@ -162,8 +168,9 @@ namespace build2
"libus",
&libux::static_type,
&m_factory<libus, libu>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&target_search, // Note: not _file(); don't look for an existing file.
false
@@ -172,12 +179,8 @@ namespace build2
// obj{}, bmi{}, and libu{} group factory.
//
template <typename G, typename E, typename A, typename S>
- static pair<target*, optional<string>>
- g_factory (const target_type&,
- dir_path dir,
- dir_path out,
- string n,
- optional<string> ext)
+ static target*
+ g_factory (const target_type&, dir_path dir, dir_path out, string n)
{
// Casts are MT-aware (during serial load).
//
@@ -197,7 +200,7 @@ namespace build2
if (a != nullptr) a->group = g;
if (s != nullptr) s->group = g;
- return make_pair (g, move (ext));
+ return g;
}
const target_type obj::static_type
@@ -208,6 +211,7 @@ namespace build2
nullptr,
nullptr,
nullptr,
+ nullptr,
&target_search,
false
};
@@ -220,6 +224,7 @@ namespace build2
nullptr,
nullptr,
nullptr,
+ nullptr,
&target_search,
false
};
@@ -232,6 +237,7 @@ namespace build2
nullptr,
nullptr,
nullptr,
+ nullptr,
&target_search,
false
};
@@ -251,8 +257,9 @@ namespace build2
"liba",
&file::static_type,
&m_factory<liba, lib>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&file_search,
false
@@ -263,8 +270,9 @@ namespace build2
"libs",
&file::static_type,
&m_factory<libs, lib>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&file_search,
false
@@ -283,12 +291,8 @@ namespace build2
: group_view {nullptr, 0};
}
- static pair<target*, optional<string>>
- lib_factory (const target_type&,
- dir_path dir,
- dir_path out,
- string n,
- optional<string> ext)
+ static target*
+ lib_factory (const target_type&, dir_path dir, dir_path out, string n)
{
// Casts are MT-aware (during serial load).
//
@@ -304,7 +308,7 @@ namespace build2
if (a != nullptr) a->group = l;
if (s != nullptr) s->group = l;
- return make_pair (l, move (ext));
+ return l;
}
const target_type lib::static_type
@@ -315,6 +319,7 @@ namespace build2
nullptr,
nullptr,
nullptr,
+ nullptr,
&target_search,
false
};
@@ -326,8 +331,9 @@ namespace build2
"libi",
&file::static_type,
&target_factory<libi>,
- &target_extension_var<ext_var, nullptr>,
- &target_pattern_var<ext_var, nullptr>,
+ nullptr, /* fixed_extension */
+ &target_extension_var<var_extension, nullptr>,
+ &target_pattern_var<var_extension, nullptr>,
nullptr,
&file_search,
false