From 6be9c7746f92aa721782a4d0eaff5f901fc528cd Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 13 Mar 2018 10:34:57 +0200 Subject: Setup command line infrastructure for new command --- bdep/new-types.hxx | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 bdep/new-types.hxx (limited to 'bdep/new-types.hxx') diff --git a/bdep/new-types.hxx b/bdep/new-types.hxx new file mode 100644 index 0000000..2612f62 --- /dev/null +++ b/bdep/new-types.hxx @@ -0,0 +1,70 @@ +// file : bdep/new-types.hxx -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef BDEP_NEW_TYPES_HXX +#define BDEP_NEW_TYPES_HXX + +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. + + // --type + // + class cmd_new_exe_options; + class cmd_new_lib_options; + class cmd_new_bare_options; + + template + struct cmd_new_type_template + { + enum type_type {exe, lib, bare} type; + + operator type_type () const {return type;} + + union + { + EXE exe_opt; + LIB lib_opt; + BARE bare_opt; + }; + + // Default is bare with no options. + // + cmd_new_type_template (): type (bare) {bare_opt = BARE ();} + }; + + 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;} + + union + { + C c_opt; + CXX cxx_opt; + }; + + // Default is C++ with no options. + // + cmd_new_lang_template (): lang (cxx) {cxx_opt = CXX ();} + }; + + using cmd_new_lang = cmd_new_lang_template<>; +} + +#endif // BDEP_NEW_TYPES_HXX -- cgit v1.1