// file : bdep/new-types.hxx -*- C++ -*- // copyright : Copyright (c) 2014-2019 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file #ifndef BDEP_NEW_TYPES_HXX #define BDEP_NEW_TYPES_HXX #include namespace bdep { // We could have defined cmd_new_*_options in a separate .cli file, include // that here, and so on. Or we can abuse templates and keep everything // together. // // Note that these types are designed to accumulate sub-options from the // options specified on the command line (or in option files) multiple // times, with the last one serving as a "selector". This, in particular, // will be useful for specifying custom project creation defaults in the // configuration files. // // --type // class cmd_new_exe_options; class cmd_new_lib_options; class cmd_new_bare_options; class cmd_new_empty_options; template struct cmd_new_type_template { enum type_type {exe, lib, bare, empty} type; operator type_type () const {return type;} EXE exe_opt; LIB lib_opt; BARE bare_opt; EMPTY empty_opt; // Default is exe with no options. // cmd_new_type_template (): type (exe) {} friend ostream& operator<< (ostream& os, const cmd_new_type_template& t) { using type = cmd_new_type_template; switch (t) { case type::exe: return os << "executable"; case type::lib: return os << "library"; case type::bare: return os << "bare"; case type::empty: return os << "empty"; } return os; } }; using cmd_new_type = cmd_new_type_template<>; // --lang // class cmd_new_c_options; class cmd_new_cxx_options; template struct cmd_new_lang_template { enum lang_type {c, cxx} lang; operator lang_type () const {return lang;} C c_opt; CXX cxx_opt; // Default is C++ with no options. // cmd_new_lang_template (): lang (cxx) {} }; using cmd_new_lang = cmd_new_lang_template<>; // --vcs // class cmd_new_git_options; class cmd_new_none_options; template struct cmd_new_vcs_template { enum vcs_type {git, none} vcs; operator vcs_type () const {return vcs;} GIT git_opt; NONE none_opt; // Default is git with no options. // cmd_new_vcs_template (): vcs (git) {} }; using cmd_new_vcs = cmd_new_vcs_template<>; } #endif // BDEP_NEW_TYPES_HXX