aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/config/utility.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'libbuild2/config/utility.cxx')
-rw-r--r--libbuild2/config/utility.cxx180
1 files changed, 7 insertions, 173 deletions
diff --git a/libbuild2/config/utility.cxx b/libbuild2/config/utility.cxx
index a39d3e0..b9fc513 100644
--- a/libbuild2/config/utility.cxx
+++ b/libbuild2/config/utility.cxx
@@ -3,17 +3,17 @@
#include <libbuild2/config/utility.hxx>
-#include <libbuild2/file.hxx>
-#include <libbuild2/context.hxx>
-#include <libbuild2/filesystem.hxx>
-#include <libbuild2/diagnostics.hxx>
-
-#include <libbuild2/config/module.hxx>
-
using namespace std;
namespace build2
{
+ void (*config_save_variable) (scope&, const variable&, uint64_t);
+ void (*config_save_module) (scope&, const char*, int);
+ const string& (*config_preprocess_create) (context&,
+ values&,
+ vector_view<opspec>&,
+ bool,
+ const location&);
namespace config
{
pair<lookup, bool>
@@ -126,171 +126,5 @@ namespace build2
else
return false;
}
-
- void
- save_variable (scope& rs, const variable& var, uint64_t flags)
- {
- if (module* m = rs.find_module<module> (module::name))
- m->save_variable (var, flags);
- }
-
- void
- save_module (scope& rs, const char* name, int prio)
- {
- if (module* m = rs.find_module<module> (module::name))
- m->save_module (name, prio);
- }
-
- void
- create_project (const dir_path& d,
- const build2::optional<dir_path>& amal,
- const strings& bmod,
- const string& rpre,
- const strings& rmod,
- const string& rpos,
- bool config,
- bool buildfile,
- const char* who,
- uint16_t verbosity)
- {
- string hdr ("# Generated by " + string (who) + ". Edit if you know"
- " what you are doing.\n"
- "#");
-
- // If the directory exists, verify it's empty. Otherwise, create it.
- //
- if (exists (d))
- {
- if (!empty (d))
- fail << "directory " << d << " exists and is not empty";
- }
- else
- mkdir_p (d, verbosity);
-
- // Create the build/ subdirectory.
- //
- // Note that for now we use the standard build file/directory scheme.
- //
- mkdir (d / std_build_dir, verbosity);
-
- // Write build/bootstrap.build.
- //
- {
- path f (d / std_bootstrap_file);
-
- if (verb >= verbosity)
- text << (verb >= 2 ? "cat >" : "save ") << f;
-
- try
- {
- ofdstream ofs (f);
-
- ofs << hdr << endl
- << "project =" << endl;
-
- if (amal)
- {
- ofs << "amalgamation =";
-
- if (!amal->empty ())
- {
- ofs << ' ';
- to_stream (ofs, *amal, true /* representation */);
- }
-
- ofs << endl;
- }
-
- ofs << endl;
-
- if (config)
- ofs << "using config" << endl;
-
- for (const string& m: bmod)
- {
- if (!config || m != "config")
- ofs << "using " << m << endl;
- }
-
- ofs.close ();
- }
- catch (const io_error& e)
- {
- fail << "unable to write to " << f << ": " << e;
- }
- }
-
- // Write build/root.build.
- //
- {
- path f (d / std_root_file);
-
- if (verb >= verbosity)
- text << (verb >= 2 ? "cat >" : "save ") << f;
-
- try
- {
- ofdstream ofs (f);
-
- ofs << hdr << endl;
-
- if (!rpre.empty ())
- ofs << rpre << endl
- << endl;
-
- for (const string& cm: rmod)
- {
- // If the module name start with '?', then use optional load.
- //
- bool opt (cm.front () == '?');
- string m (cm, opt ? 1 : 0);
-
- // Append .config unless the module name ends with '.', in which
- // case strip it.
- //
- if (m.back () == '.')
- m.pop_back ();
- else
- m += ".config";
-
- ofs << "using" << (opt ? "?" : "") << " " << m << endl;
- }
-
- if (!rpos.empty ())
- ofs << endl
- << rpre << endl;
-
- ofs.close ();
- }
- catch (const io_error& e)
- {
- fail << "unable to write to " << f << ": " << e;
- }
- }
-
- // Write root buildfile.
- //
- if (buildfile)
- {
- path f (d / std_buildfile_file);
-
- if (verb >= verbosity)
- text << (verb >= 2 ? "cat >" : "save ") << f;
-
- try
- {
- ofdstream ofs (f);
-
- ofs << hdr << endl
- << "./: {*/ -build/}" << endl;
-
- ofs.close ();
- }
- catch (const io_error& e)
- {
- fail << "unable to write to " << f << ": " << e;
- }
- }
- }
}
}