aboutsummaryrefslogtreecommitdiff
path: root/bpkg/diagnostics
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2017-05-01 13:50:13 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2017-05-01 15:02:14 +0300
commit2319d01e262b705716e19474865f555f3ca81a7d (patch)
tree15ffb5b3f998a2cc0def729d2f1f76f578d8d139 /bpkg/diagnostics
parent5fb0df6f63e02c141e8a0e5ad4543dea525df3fc (diff)
Add hxx extension for headers and lib prefix for library dirs
Diffstat (limited to 'bpkg/diagnostics')
-rw-r--r--bpkg/diagnostics240
1 files changed, 0 insertions, 240 deletions
diff --git a/bpkg/diagnostics b/bpkg/diagnostics
deleted file mode 100644
index a1a785f..0000000
--- a/bpkg/diagnostics
+++ /dev/null
@@ -1,240 +0,0 @@
-// file : bpkg/diagnostics -*- C++ -*-
-// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#ifndef BPKG_DIAGNOSTICS
-#define BPKG_DIAGNOSTICS
-
-#include <odb/tracer.hxx>
-
-#include <butl/diagnostics>
-
-#include <bpkg/types>
-#include <bpkg/utility>
-
-namespace bpkg
-{
- using butl::diag_record;
-
- // Throw this exception to terminate the process. The handler should
- // assume that the diagnostics has already been issued.
- //
- class failed: public std::exception {};
-
- // Print process commmand line. If the number of elements is specified
- // (or the second version is used), then it will print the piped multi-
- // process command line, if present. In this case, the expected format
- // is as follows:
- //
- // name1 arg arg ... nullptr
- // name2 arg arg ... nullptr
- // ...
- // nameN arg arg ... nullptr nullptr
- //
- void
- print_process (diag_record&, const char* const args[], size_t n = 0);
-
- void
- print_process (const char* const args[], size_t n = 0);
-
- inline void
- print_process (diag_record& dr, const cstrings& args)
- {
- print_process (dr, args.data (), args.size ());
- }
-
- inline void
- print_process (const cstrings& args)
- {
- print_process (args.data (), args.size ());
- }
-
- // Verbosity level. Update documentation for --verbose if changing.
- //
- // 0 - disabled
- // 1 - high-level information messages
- // 2 - essential underlying commands that are being executed
- // 3 - all underlying commands that are being executed
- // 4 - information that could be helpful to the user
- // 5 - information that could be helpful to the developer
- // 6 - even more detailed information
- //
- // While uint8 is more than enough, use uint16 for the ease of printing.
- //
- extern uint16_t verb;
-
- template <typename F> inline void l1 (const F& f) {if (verb >= 1) f ();}
- template <typename F> inline void l2 (const F& f) {if (verb >= 2) f ();}
- template <typename F> inline void l3 (const F& f) {if (verb >= 3) f ();}
- template <typename F> inline void l4 (const F& f) {if (verb >= 4) f ();}
- template <typename F> inline void l5 (const F& f) {if (verb >= 5) f ();}
- template <typename F> inline void l6 (const F& f) {if (verb >= 6) f ();}
-
- // Diagnostic facility, base infrastructure.
- //
- using butl::diag_stream;
- using butl::diag_epilogue;
-
- // Diagnostic facility, project specifics.
- //
- struct simple_prologue_base
- {
- explicit
- simple_prologue_base (const char* type, const char* name)
- : type_ (type), name_ (name) {}
-
- void
- operator() (const diag_record& r) const;
-
- private:
- const char* type_;
- const char* name_;
- };
-
- class location
- {
- public:
- location () {}
- location (string f, uint64_t l, uint64_t c)
- : file (move (f)), line (l), column (c) {}
-
- string file;
- uint64_t line;
- uint64_t column;
- };
-
- struct location_prologue_base
- {
- location_prologue_base (const char* type,
- const char* name,
- const location& l)
- : type_ (type), name_ (name), loc_ (l) {}
-
- void
- operator() (const diag_record& r) const;
-
- private:
- const char* type_;
- const char* name_;
- const location loc_;
- };
-
- struct basic_mark_base
- {
- using simple_prologue = butl::diag_prologue<simple_prologue_base>;
- using location_prologue = butl::diag_prologue<location_prologue_base>;
-
- explicit
- basic_mark_base (const char* type,
- const char* name = nullptr,
- const void* data = nullptr,
- diag_epilogue* epilogue = nullptr)
- : type_ (type), name_ (name), data_ (data), epilogue_ (epilogue) {}
-
- simple_prologue
- operator() () const
- {
- return simple_prologue (epilogue_, type_, name_);
- }
-
- location_prologue
- operator() (const location& l) const
- {
- return location_prologue (epilogue_, type_, name_, l);
- }
-
- template <typename L>
- location_prologue
- operator() (const L& l) const
- {
- return location_prologue (
- epilogue_, type_, name_, get_location (l, data_));
- }
-
- template <typename F, typename L, typename C>
- location_prologue
- operator() (F&& f, L&& l, C&& c) const
- {
- return location_prologue (
- epilogue_,
- type_,
- name_,
- location (forward<F> (f), forward<L> (l), forward<C> (c)));
- }
-
- protected:
- const char* type_;
- const char* name_;
- const void* data_;
- diag_epilogue* const epilogue_;
- };
- using basic_mark = butl::diag_mark<basic_mark_base>;
-
- extern const basic_mark error;
- extern const basic_mark warn;
- extern const basic_mark info;
- extern const basic_mark text;
-
- // trace
- //
- // Also implement the ODB tracer interface so that we can use it to trace
- // database statement execution.
- //
- struct trace_mark_base: basic_mark_base, odb::tracer
- {
- explicit
- trace_mark_base (const char* name, const void* data = nullptr)
- : basic_mark_base ("trace", name, data) {}
-
- // odb::tracer interface.
- //
- virtual void
- prepare (odb::connection&, const odb::statement&);
-
- virtual void
- execute (odb::connection&, const char* statement);
-
- virtual void
- deallocate (odb::connection&, const odb::statement&);
- };
- using trace_mark = butl::diag_mark<trace_mark_base>;
- using tracer = trace_mark;
-
- // fail
- //
- struct fail_mark_base: basic_mark_base
- {
- explicit
- fail_mark_base (const char* type,
- const void* data = nullptr)
- : basic_mark_base (type,
- nullptr,
- data,
- [](const diag_record& r)
- {
- r.flush ();
- throw failed ();
- }) {}
- };
-
- using fail_mark = butl::diag_mark<fail_mark_base>;
-
- struct fail_end_base
- {
- [[noreturn]] void
- operator() (const diag_record& r) const
- {
- // If we just throw then the record's destructor will see an active
- // exception and will not flush the record.
- //
- r.flush ();
- throw failed ();
- }
- };
- using fail_end = butl::diag_noreturn_end<fail_end_base>;
-
- extern const fail_mark fail;
- extern const fail_end endf;
-}
-
-#endif // BPKG_DIAGNOSTICS