Automatically detect flavor based on .cmake/.meson file extensions
This commit is contained in:
parent
8e355c01d0
commit
a2e1f8a7d9
@ -92,7 +92,7 @@ cat config.h >>EOO
|
|||||||
:
|
:
|
||||||
mkdir build;
|
mkdir build;
|
||||||
ln -s ../../bootstrap.build ../../root.build build/;
|
ln -s ../../bootstrap.build ../../root.build build/;
|
||||||
cat <<EOI >=config.h.in;
|
cat <<EOI >=config.h.cmake;
|
||||||
#define VERSION "@version@"
|
#define VERSION "@version@"
|
||||||
|
|
||||||
#cmakedefine TRUE
|
#cmakedefine TRUE
|
||||||
@ -115,10 +115,8 @@ cat <<EOI >=config.h.in;
|
|||||||
#cmakedefine zzz_TEST_DUMMY2_H
|
#cmakedefine zzz_TEST_DUMMY2_H
|
||||||
EOI
|
EOI
|
||||||
$* <<EOI &config.h &config.h.d;
|
$* <<EOI &config.h &config.h.d;
|
||||||
./: h{config}: in{config}
|
./: h{config}: in{config.h.cmake}
|
||||||
{
|
{
|
||||||
autoconf.flavor = cmake
|
|
||||||
|
|
||||||
TRUE = true
|
TRUE = true
|
||||||
FALSE = [bool] false
|
FALSE = [bool] false
|
||||||
ONE = 1
|
ONE = 1
|
||||||
|
@ -60,8 +60,6 @@ lib{build2-autoconf}: {hxx ixx txx cxx}{* -checks} {hxx cxx}{checks} \
|
|||||||
\"\"
|
\"\"
|
||||||
EOI
|
EOI
|
||||||
|
|
||||||
# @@ TODO: add \n once sed supports it.
|
|
||||||
#
|
|
||||||
cat $i | sed -n \
|
cat $i | sed -n \
|
||||||
-e 's|^// ([^ ]+) *$|},\n\n{\n"\1",\n|p' \
|
-e 's|^// ([^ ]+) *$|},\n\n{\n"\1",\n|p' \
|
||||||
-e 's|^(.*)\\$|"\1\\\\\\n"|p' \
|
-e 's|^(.*)\\$|"\1\\\\\\n"|p' \
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
#include <libbuild2/algorithm.hxx>
|
#include <libbuild2/algorithm.hxx>
|
||||||
#include <libbuild2/diagnostics.hxx>
|
#include <libbuild2/diagnostics.hxx>
|
||||||
|
|
||||||
|
#include <libbuild2/in/target.hxx>
|
||||||
|
|
||||||
#include <libbuild2/autoconf/checks.hxx>
|
#include <libbuild2/autoconf/checks.hxx>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@ -34,22 +36,44 @@ namespace build2
|
|||||||
recipe rule::
|
recipe rule::
|
||||||
apply (action a, target& t) const
|
apply (action a, target& t) const
|
||||||
{
|
{
|
||||||
|
recipe r (in::rule::apply (a, t));
|
||||||
|
|
||||||
// Determine and cache the configuration file flavor.
|
// Determine and cache the configuration file flavor.
|
||||||
//
|
//
|
||||||
flavor f (flavor::autoconf);
|
flavor f (flavor::autoconf);
|
||||||
|
|
||||||
if (const string* s = cast_null<string> (t["autoconf.flavor"]))
|
if (const string* s = cast_null<string> (t["autoconf.flavor"]))
|
||||||
{
|
{
|
||||||
if (*s == "cmake")
|
if (*s == "cmake") f = flavor::cmake;
|
||||||
f = flavor::cmake;
|
else if (*s == "meson") f = flavor::meson;
|
||||||
else if (*s == "meson")
|
|
||||||
f = flavor::meson;
|
|
||||||
else if (*s != "autoconf")
|
else if (*s != "autoconf")
|
||||||
fail << "invalid configuration file flavor '" << *s << "'";
|
fail << "invalid configuration file flavor '" << *s << "'";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If the in{} file extension is either .cmake or .meson, then
|
||||||
|
// use that as the flavor.
|
||||||
|
//
|
||||||
|
for (const target* pt: t.prerequisite_targets[a])
|
||||||
|
{
|
||||||
|
if (pt != nullptr)
|
||||||
|
{
|
||||||
|
if (const auto* it = pt->is_a<in::in> ())
|
||||||
|
{
|
||||||
|
string e (it->path ().extension ());
|
||||||
|
|
||||||
|
if (e == "cmake") f = flavor::cmake;
|
||||||
|
else if (e == "meson") f = flavor::meson;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
t.data (match_data {f});
|
t.data (match_data {f});
|
||||||
|
|
||||||
return in::rule::apply (a, t);
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rule::
|
void rule::
|
||||||
|
@ -9,7 +9,7 @@ namespace build2
|
|||||||
{
|
{
|
||||||
namespace autoconf
|
namespace autoconf
|
||||||
{
|
{
|
||||||
// Process a config.h.in file.
|
// Process a config.h.{in,cmake,meson} file.
|
||||||
//
|
//
|
||||||
// Note that to be usable as a drop-in replacement we make the default
|
// Note that to be usable as a drop-in replacement we make the default
|
||||||
// substitution symbol '@' and the mode -- lax. The user, however, is
|
// substitution symbol '@' and the mode -- lax. The user, however, is
|
||||||
|
Loading…
Reference in New Issue
Block a user