yat/utility/OptionVersion.h

Code
Comments
Other
Rev Date Author Line
4153 09 Mar 22 peter 1 #ifndef _theplu_yat_utility_option_version_
4153 09 Mar 22 peter 2 #define _theplu_yat_utility_option_version_
4153 09 Mar 22 peter 3
4153 09 Mar 22 peter 4 // $Id$
4153 09 Mar 22 peter 5
4153 09 Mar 22 peter 6 /*
4153 09 Mar 22 peter 7   Copyright (C) 2022 Peter Johansson
4153 09 Mar 22 peter 8
4153 09 Mar 22 peter 9   This file is part of the yat library, http://dev.thep.lu.se/yat
4153 09 Mar 22 peter 10
4153 09 Mar 22 peter 11   The yat library is free software; you can redistribute it and/or
4153 09 Mar 22 peter 12   modify it under the terms of the GNU General Public License as
4153 09 Mar 22 peter 13   published by the Free Software Foundation; either version 3 of the
4153 09 Mar 22 peter 14   License, or (at your option) any later version.
4153 09 Mar 22 peter 15
4153 09 Mar 22 peter 16   The yat library is distributed in the hope that it will be useful,
4153 09 Mar 22 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
4153 09 Mar 22 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4153 09 Mar 22 peter 19   General Public License for more details.
4153 09 Mar 22 peter 20
4153 09 Mar 22 peter 21   You should have received a copy of the GNU General Public License
4153 09 Mar 22 peter 22   along with yat. If not, see <http://www.gnu.org/licenses/>.
4153 09 Mar 22 peter 23 */
4153 09 Mar 22 peter 24
4153 09 Mar 22 peter 25 #include "OptionSwitch.h"
4153 09 Mar 22 peter 26
4153 09 Mar 22 peter 27 #include <string>
4153 09 Mar 22 peter 28 #include <vector>
4153 09 Mar 22 peter 29
4153 09 Mar 22 peter 30 namespace theplu {
4153 09 Mar 22 peter 31 namespace yat {
4153 09 Mar 22 peter 32 namespace utility {
4153 09 Mar 22 peter 33
4153 09 Mar 22 peter 34   class CommandLine;
4153 09 Mar 22 peter 35   /**
4153 09 Mar 22 peter 36      \brief Class for version option
4153 09 Mar 22 peter 37
4153 09 Mar 22 peter 38      When this option is found in parsing of commandline, it displays
4153 09 Mar 22 peter 39      a version output and exits. A typical output looks like:
4153 09 Mar 22 peter 40
4153 09 Mar 22 peter 41      \verbatim
4153 09 Mar 22 peter 42      <prog> (<package>) <version>
4153 09 Mar 22 peter 43      Copyright (C) 2022 John Doe and Jane Doe
4153 09 Mar 22 peter 44      License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
4153 09 Mar 22 peter 45      This is free software: you are free to change and redistribute it.
4153 09 Mar 22 peter 46      There is NO WARRANTY, to the extent permitted by law.
4153 09 Mar 22 peter 47      \endverbatim
4153 09 Mar 22 peter 48
4153 09 Mar 22 peter 49      \since New in yat 0.20
4153 09 Mar 22 peter 50    */
4153 09 Mar 22 peter 51   class OptionVersion : public OptionSwitch
4153 09 Mar 22 peter 52   {
4153 09 Mar 22 peter 53   public:
4153 09 Mar 22 peter 54     /**
4153 09 Mar 22 peter 55        \brief Constructor
4153 09 Mar 22 peter 56
4153 09 Mar 22 peter 57        \param cmd Commandline object
4153 09 Mar 22 peter 58        \param prog name of the program
4153 09 Mar 22 peter 59        \param version string typically taken from PACKAGE_VERSION or
4153 09 Mar 22 peter 60        VERSION defined in config.h
4153 09 Mar 22 peter 61        \param copyright_year Year in 'Copyright (C) Year...'
4153 09 Mar 22 peter 62        \param authors authors
4153 09 Mar 22 peter 63        \param package if not empty, '(package) ' is added between program
4153 09 Mar 22 peter 64        name and version
4153 09 Mar 22 peter 65        \param name default "v,version" implies object is associated
4153 09 Mar 22 peter 66        with switches -v and --version
4153 09 Mar 22 peter 67        \param desc string output in help output (OptionHelp)
4153 09 Mar 22 peter 68     */
4153 09 Mar 22 peter 69     OptionVersion(CommandLine& cmd,
4153 09 Mar 22 peter 70                   const std::string& prog,
4153 09 Mar 22 peter 71                   const std::string& version,
4153 09 Mar 22 peter 72                   const std::string& copyright_year,
4182 16 Jun 22 peter 73                   const std::vector<std::string>& authors,
4153 09 Mar 22 peter 74                   const std::string& package="",
4183 30 Jun 22 peter 75                   const std::string& name="v,version",
4183 30 Jun 22 peter 76                   const std::string& desc="output version information and exit");
4153 09 Mar 22 peter 77
4153 09 Mar 22 peter 78     /**
4153 09 Mar 22 peter 79        Function to change the copyright holder. The default behaviour
4153 09 Mar 22 peter 80        is to set copyright holder from authors passed in
4153 09 Mar 22 peter 81        constructor. If the copyright holder is altered and additional
4153 09 Mar 22 peter 82        line is added at the bottom:
4153 09 Mar 22 peter 83        \verbatim
4153 09 Mar 22 peter 84
4153 09 Mar 22 peter 85        Written by <authors>
4153 09 Mar 22 peter 86        \endverbatim
4153 09 Mar 22 peter 87      */
4153 09 Mar 22 peter 88     std::string& copyright_holder(void);
4153 09 Mar 22 peter 89
4153 09 Mar 22 peter 90     /**
4153 09 Mar 22 peter 91        Change the license information from the default
4153 09 Mar 22 peter 92        \verbatim
4153 09 Mar 22 peter 93        License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
4153 09 Mar 22 peter 94        This is free software: you are free to change and redistribute it.
4153 09 Mar 22 peter 95        There is NO WARRANTY, to the extent permitted by law.
4153 09 Mar 22 peter 96        \endverbatim
4153 09 Mar 22 peter 97      */
4153 09 Mar 22 peter 98     std::string& license(void);
4153 09 Mar 22 peter 99   private:
4153 09 Mar 22 peter 100     void do_parse2(std::vector<std::string>::iterator first,
4153 09 Mar 22 peter 101                    std::vector<std::string>::iterator last);
4153 09 Mar 22 peter 102     std::string prog_;
4153 09 Mar 22 peter 103     std::string version_;
4153 09 Mar 22 peter 104     std::string copyright_year_;
4153 09 Mar 22 peter 105     std::vector<std::string> authors_;
4153 09 Mar 22 peter 106     std::string package_;
4153 09 Mar 22 peter 107     std::string copyright_holder_;
4153 09 Mar 22 peter 108     std::string license_;
4182 16 Jun 22 peter 109     void print(std::ostream& os, const std::vector<std::string>&,
4182 16 Jun 22 peter 110                size_t offset) const;
4182 16 Jun 22 peter 111     void print(std::ostream& os, const std::string&, size_t& offset) const;
4153 09 Mar 22 peter 112   };
4153 09 Mar 22 peter 113
4153 09 Mar 22 peter 114 }}} // of namespace utility, yat, and theplu
4153 09 Mar 22 peter 115
4153 09 Mar 22 peter 116 #endif