aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-10-19 17:50:40 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-11-04 09:26:33 +0200
commite84fd4aeeb15cd5894193dc403afc60e0dd7f321 (patch)
treee74f31d273e1e5e54b358ab66d1c7e6fb577afaf
parenta17e517e079c33bcb4d6dea94f6c441a5eb2e33a (diff)
Factor global initialization into init() analogous to reset()
-rw-r--r--build2/b.cxx18
-rw-r--r--build2/utility6
-rw-r--r--build2/utility.cxx19
3 files changed, 29 insertions, 14 deletions
diff --git a/build2/b.cxx b/build2/b.cxx
index d16a406..d800605 100644
--- a/build2/b.cxx
+++ b/build2/b.cxx
@@ -2,7 +2,6 @@
// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
// license : MIT; see accompanying LICENSE file
-#include <time.h> // tzset()
#include <string.h> // strerror()
#include <stdlib.h> // getenv() _putenv()(_WIN32)
@@ -160,11 +159,11 @@ main (int argc, char* argv[])
fail << e;
}
- // Diagnostics verbosity.
+ // Global initializations.
//
- verb = ops.verbose_specified ()
- ? ops.verbose ()
- : ops.V () ? 3 : ops.v () ? 2 : ops.q () ? 0 : 1;
+ init (ops.verbose_specified ()
+ ? ops.verbose ()
+ : ops.V () ? 3 : ops.v () ? 2 : ops.q () ? 0 : 1);
// Version.
//
@@ -205,10 +204,6 @@ main (int argc, char* argv[])
}
}
- // Initialize time conversion data that is used by localtime_r().
- //
- tzset ();
-
// Register builtin modules.
//
{
@@ -248,11 +243,6 @@ main (int argc, char* argv[])
bm["cli"] = mf {nullptr, &cli::init};
}
- // Figure out work and home directories.
- //
- work = dir_path::current ();
- home = dir_path::home ();
-
if (verb >= 5)
{
const char* p (getenv ("PATH"));
diff --git a/build2/utility b/build2/utility
index 2625d51..1499def 100644
--- a/build2/utility
+++ b/build2/utility
@@ -469,6 +469,12 @@ namespace build2
const std::string&
find (const std::string& s) {return *emplace (s).first;}
};
+
+ // Initialize build2 global state (verbosity, home/work dirrectories, etc).
+ // Should be called early in main() once.
+ //
+ void
+ init (uint16_t verbosity);
}
#include <build2/utility.ixx>
diff --git a/build2/utility.cxx b/build2/utility.cxx
index 43a5370..0e97020 100644
--- a/build2/utility.cxx
+++ b/build2/utility.cxx
@@ -4,6 +4,8 @@
#include <build2/utility>
+#include <time.h> // tzset()
+
#include <cstring> // strlen(), str[n]cmp()
#include <cstdlib> // strtol()
#include <iostream> // cerr
@@ -498,4 +500,21 @@ namespace build2
}
bool exception_unwinding_dtor = false;
+
+ void
+ init (uint16_t v)
+ {
+ // Diagnostics verbosity.
+ //
+ verb = v;
+
+ // Initialize time conversion data that is used by localtime_r().
+ //
+ tzset ();
+
+ // Figure out work and home directories.
+ //
+ work = dir_path::current ();
+ home = dir_path::home ();
+ }
}