From 2319d01e262b705716e19474865f555f3ca81a7d Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Mon, 1 May 2017 13:50:13 +0300 Subject: Add hxx extension for headers and lib prefix for library dirs --- bpkg/utility.hxx | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 bpkg/utility.hxx (limited to 'bpkg/utility.hxx') diff --git a/bpkg/utility.hxx b/bpkg/utility.hxx new file mode 100644 index 0000000..c84b466 --- /dev/null +++ b/bpkg/utility.hxx @@ -0,0 +1,121 @@ +// file : bpkg/utility.hxx -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef BPKG_UTILITY_HXX +#define BPKG_UTILITY_HXX + +#include // make_shared() +#include // to_string() +#include // move(), forward(), declval(), make_pair() +#include // assert() +#include // make_move_iterator() + +#include + +#include // casecmp(), reverse_iterate(), etc + +#include + +#include +#include + +namespace bpkg +{ + using std::move; + using std::forward; + using std::declval; + + using std::make_pair; + using std::make_shared; + using std::make_move_iterator; + using std::to_string; + + // + // + using butl::casecmp; + using butl::reverse_iterate; + + using butl::exception_guard; + using butl::make_exception_guard; + + // Widely-used paths. + // + extern const dir_path bpkg_dir; // .bpkg/ + extern const dir_path certs_dir; // .bpkg/certs/ + + // Y/N prompt. The def argument, if specified, should be either 'y' + // or 'n'. It is used as the default answer, in case the user just + // hits enter. Issue diagnostics and throw failed if no answer could + // be extracted from STDOUT (e.g., because it was closed). + // + bool + yn_prompt (const char* prompt, char def = '\0'); + + // Filesystem. + // + bool + exists (const path&); + + bool + exists (const dir_path&); + + bool + empty (const dir_path&); + + void + mk (const dir_path&); + + void + mk_p (const dir_path&); + + void + rm (const path&); + + void + rm_r (const dir_path&, bool dir = true); + + using auto_rm = butl::auto_rmfile; + using auto_rm_r = butl::auto_rmdir; + + // Process. + // + // By default the process command line is printed for verbosity >= 2 + // (essential command lines). + // + // If fallback is specified, then this directory is searched for the + // executable as a last resort. + // + void + run (const char* args[], const dir_path& fallback = dir_path ()); + + inline void + run (cstrings& args, const dir_path& fallback = dir_path ()) + { + run (args.data (), fallback); + } + + // Directory extracted from argv[0] (i.e., this process' recall directory) + // or empty if there is none. Can be used as a search fallback. + // + extern dir_path exec_dir; + + // Run build2, mapping verbosity levels. If quiet is true, then run build2 + // quiet if our verbosity level is 1. Common vars (cvars) are set on the + // configuration scope. + // + class common_options; + + const char* + name_b (const common_options&); + + void + run_b (const common_options&, + const dir_path& configuration, + const string& buildspec, + bool quiet = false, + const strings& pvars = strings (), + const strings& cvars = strings ()); +} + +#endif // BPKG_UTILITY_HXX -- cgit v1.1