aboutsummaryrefslogtreecommitdiff
path: root/libbutl/default-options.mxx
diff options
context:
space:
mode:
Diffstat (limited to 'libbutl/default-options.mxx')
-rw-r--r--libbutl/default-options.mxx145
1 files changed, 0 insertions, 145 deletions
diff --git a/libbutl/default-options.mxx b/libbutl/default-options.mxx
deleted file mode 100644
index e9f92d3..0000000
--- a/libbutl/default-options.mxx
+++ /dev/null
@@ -1,145 +0,0 @@
-// file : libbutl/default-options.mxx -*- C++ -*-
-// license : MIT; see accompanying LICENSE file
-
-#ifndef __cpp_modules_ts
-#pragma once
-#endif
-
-#ifndef __cpp_lib_modules_ts
-#include <vector>
-
-#include <utility> // move(), forward(), make_pair()
-#include <algorithm> // reverse()
-#include <system_error>
-#endif
-
-// Other includes.
-
-#ifdef __cpp_modules_ts
-export module butl.default_options;
-#ifdef __cpp_lib_modules_ts
-import std.core;
-#endif
-import butl.path;
-import butl.optional;
-import butl.small_vector;
-
-import butl.git;
-import butl.filesystem;
-#else
-#include <libbutl/path.mxx>
-#include <libbutl/optional.mxx>
-#include <libbutl/small-vector.mxx>
-
-#include <libbutl/git.mxx>
-#include <libbutl/filesystem.mxx>
-#endif
-
-#include <libbutl/export.hxx>
-
-LIBBUTL_MODEXPORT namespace butl
-{
- // Default options files helper implementation.
- //
- struct default_options_files
- {
- small_vector<path, 2> files;
- optional<dir_path> start;
- };
-
- template <typename O>
- struct default_options_entry
- {
- path file;
- O options;
- bool remote;
- };
-
- template <typename O>
- using default_options = small_vector<default_options_entry<O>, 4>;
-
- // Search for and load (using scanner S and parsing in the U::fail mode for
- // both options and arguments) the specified list of options files in the
- // specified directories returning a vector of option class instances (O).
- // Pass each default options file path to the specified function prior to
- // load (can be used for tracing, etc). The function signature is:
- //
- // void (const path&, bool remote, bool overwrite)
- //
- // Note that the function may be called for the same file twice if it was
- // later discovered that it is in fact remote. In the second call the
- // overwrite flag will be true.
- //
- // Throw `pair<path, system_error>` on the underlying OS error with the
- // first half referring the filesystem entry the error relates to and pass
- // through exceptions thrown by the options scanner/parser.
- //
- // Search order:
- //
- // - sys_dir
- // - home_dir
- // - extra_dir (can also be handled during the start/outer traversal)
- // - start_dir and outer until home_dir or root (both excluding)
- //
- // Except for sys_dir and extra_dir, the options files are looked for in the
- // .build2/ and .build2/local/ subdirectories of each directory. For
- // sys_dir and extra_dir they are looked for in the directory itself (e.g.,
- // /etc/build2/).
- //
- // Note that the search is stopped at the directory containing a file with
- // --no-default-options.
- //
- // Also note that all the directories should be absolute and normalized.
- //
- // The presence of the .git filesystem entry causes the options files in
- // this directory and any of its subdirectories to be considered remote
- // (note that in the current implementation this is the case even for files
- // from the .build2/local/ subdirectory since the mere location is not a
- // sufficient ground to definitively conclude that the file is not remote;
- // to be sure we would need to query the VCS or some such).
- //
- // Note that the extra directory options files are never considered remote.
- //
- template <typename O, typename S, typename U, typename F>
- default_options<O>
- load_default_options (const optional<dir_path>& sys_dir,
- const optional<dir_path>& home_dir,
- const optional<dir_path>& extra_dir,
- const default_options_files&,
- F&&);
-
- // Merge the default options and the command line options.
- //
- // Note that this is the default implementation and in some cases you may
- // want to provide an options class-specific version that verifies/sanitizes
- // the default options (e.g., you may not want to allow certain options to
- // be specified in the default options files) or warns/prompts about
- // potentially dangerous options if they came from the remote options files.
- //
- template <typename O>
- O
- merge_default_options (const default_options<O>&, const O& cmd_ops);
-
- // As above but pass each default option to the specified function prior to
- // merging. The function signature is:
- //
- // void (const default_options_entry<O>&, const O& cmd_ops)
- //
- // This version can be used to verify the default options. For example, you
- // may want to disallow certain options from being specified in the default
- // options files.
- //
- template <typename O, typename F>
- O
- merge_default_options (const default_options<O>&, const O&, F&&);
-
- // Find a common start (parent) directory stopping at home or root
- // (excluding).
- //
- LIBBUTL_SYMEXPORT optional<dir_path>
- default_options_start (const optional<dir_path>& home_dir,
- const std::vector<dir_path>&);
-}
-
-#include <libbutl/default-options.ixx>
-#include <libbutl/default-options.txx>