// -*- C++ -*-
//
// This file was generated by CLI, a command line interface
// compiler for C++.
//

#ifndef BPKG_PKG_BUILD_OPTIONS_HXX
#define BPKG_PKG_BUILD_OPTIONS_HXX

// Begin prologue.
//
//
// End prologue.

#include <bpkg/common-options.hxx>

namespace bpkg
{
  class pkg_build_pkg_options
  {
    public:
    pkg_build_pkg_options ();

    // Return true if anything has been parsed.
    //
    bool
    parse (int& argc,
           char** argv,
           bool erase = false,
           ::bpkg::cli::unknown_mode option = ::bpkg::cli::unknown_mode::fail,
           ::bpkg::cli::unknown_mode argument = ::bpkg::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           bool erase = false,
           ::bpkg::cli::unknown_mode option = ::bpkg::cli::unknown_mode::fail,
           ::bpkg::cli::unknown_mode argument = ::bpkg::cli::unknown_mode::stop);

    bool
    parse (int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bpkg::cli::unknown_mode option = ::bpkg::cli::unknown_mode::fail,
           ::bpkg::cli::unknown_mode argument = ::bpkg::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bpkg::cli::unknown_mode option = ::bpkg::cli::unknown_mode::fail,
           ::bpkg::cli::unknown_mode argument = ::bpkg::cli::unknown_mode::stop);

    bool
    parse (::bpkg::cli::scanner&,
           ::bpkg::cli::unknown_mode option = ::bpkg::cli::unknown_mode::fail,
           ::bpkg::cli::unknown_mode argument = ::bpkg::cli::unknown_mode::stop);

    // Merge options from the specified instance appending/overriding
    // them as if they appeared after options in this instance.
    //
    void
    merge (const pkg_build_pkg_options&);

    // Option accessors and modifiers.
    //
    const bool&
    upgrade () const;

    bool&
    upgrade ();

    void
    upgrade (const bool&);

    const bool&
    patch () const;

    bool&
    patch ();

    void
    patch (const bool&);

    const bool&
    deorphan () const;

    bool&
    deorphan ();

    void
    deorphan (const bool&);

    const bool&
    immediate () const;

    bool&
    immediate ();

    void
    immediate (const bool&);

    const bool&
    recursive () const;

    bool&
    recursive ();

    void
    recursive (const bool&);

    const bool&
    upgrade_immediate () const;

    bool&
    upgrade_immediate ();

    void
    upgrade_immediate (const bool&);

    const bool&
    patch_immediate () const;

    bool&
    patch_immediate ();

    void
    patch_immediate (const bool&);

    const bool&
    deorphan_immediate () const;

    bool&
    deorphan_immediate ();

    void
    deorphan_immediate (const bool&);

    const bool&
    upgrade_recursive () const;

    bool&
    upgrade_recursive ();

    void
    upgrade_recursive (const bool&);

    const bool&
    patch_recursive () const;

    bool&
    patch_recursive ();

    void
    patch_recursive (const bool&);

    const bool&
    deorphan_recursive () const;

    bool&
    deorphan_recursive ();

    void
    deorphan_recursive (const bool&);

    const bool&
    dependency () const;

    bool&
    dependency ();

    void
    dependency (const bool&);

    const bool&
    keep_out () const;

    bool&
    keep_out ();

    void
    keep_out (const bool&);

    const bool&
    disfigure () const;

    bool&
    disfigure ();

    void
    disfigure (const bool&);

    const dir_path&
    checkout_root () const;

    dir_path&
    checkout_root ();

    void
    checkout_root (const dir_path&);

    bool
    checkout_root_specified () const;

    void
    checkout_root_specified (bool);

    const bool&
    checkout_purge () const;

    bool&
    checkout_purge ();

    void
    checkout_purge (const bool&);

    const strings&
    config_name () const;

    strings&
    config_name ();

    void
    config_name (const strings&);

    bool
    config_name_specified () const;

    void
    config_name_specified (bool);

    const vector<uint64_t>&
    config_id () const;

    vector<uint64_t>&
    config_id ();

    void
    config_id (const vector<uint64_t>&);

    bool
    config_id_specified () const;

    void
    config_id_specified (bool);

    const vector<uuid>&
    config_uuid () const;

    vector<uuid>&
    config_uuid ();

    void
    config_uuid (const vector<uuid>&);

    bool
    config_uuid_specified () const;

    void
    config_uuid_specified (bool);

    // Print usage information.
    //
    static ::bpkg::cli::usage_para
    print_usage (::std::ostream&,
                 ::bpkg::cli::usage_para = ::bpkg::cli::usage_para::none);

    // Implementation details.
    //
    protected:
    bool
    _parse (const char*, ::bpkg::cli::scanner&);

    private:
    bool
    _parse (::bpkg::cli::scanner&,
            ::bpkg::cli::unknown_mode option,
            ::bpkg::cli::unknown_mode argument);

    public:
    bool upgrade_;
    bool patch_;
    bool deorphan_;
    bool immediate_;
    bool recursive_;
    bool upgrade_immediate_;
    bool patch_immediate_;
    bool deorphan_immediate_;
    bool upgrade_recursive_;
    bool patch_recursive_;
    bool deorphan_recursive_;
    bool dependency_;
    bool keep_out_;
    bool disfigure_;
    dir_path checkout_root_;
    bool checkout_root_specified_;
    bool checkout_purge_;
    strings config_name_;
    bool config_name_specified_;
    vector<uint64_t> config_id_;
    bool config_id_specified_;
    vector<uuid> config_uuid_;
    bool config_uuid_specified_;
  };

  class pkg_build_options: public ::bpkg::common_options,
    public ::bpkg::pkg_build_pkg_options
  {
    public:
    pkg_build_options ();

    // Return true if anything has been parsed.
    //
    bool
    parse (int& argc,
           char** argv,
           bool erase = false,
           ::bpkg::cli::unknown_mode option = ::bpkg::cli::unknown_mode::fail,
           ::bpkg::cli::unknown_mode argument = ::bpkg::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           bool erase = false,
           ::bpkg::cli::unknown_mode option = ::bpkg::cli::unknown_mode::fail,
           ::bpkg::cli::unknown_mode argument = ::bpkg::cli::unknown_mode::stop);

    bool
    parse (int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bpkg::cli::unknown_mode option = ::bpkg::cli::unknown_mode::fail,
           ::bpkg::cli::unknown_mode argument = ::bpkg::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bpkg::cli::unknown_mode option = ::bpkg::cli::unknown_mode::fail,
           ::bpkg::cli::unknown_mode argument = ::bpkg::cli::unknown_mode::stop);

    bool
    parse (::bpkg::cli::scanner&,
           ::bpkg::cli::unknown_mode option = ::bpkg::cli::unknown_mode::fail,
           ::bpkg::cli::unknown_mode argument = ::bpkg::cli::unknown_mode::stop);

    // Merge options from the specified instance appending/overriding
    // them as if they appeared after options in this instance.
    //
    void
    merge (const pkg_build_options&);

    // Option accessors and modifiers.
    //
    const bool&
    yes () const;

    bool&
    yes ();

    void
    yes (const bool&);

    const string&
    for_ () const;

    string&
    for_ ();

    void
    for_ (const string&);

    bool
    for__specified () const;

    void
    for__specified (bool);

    const bool&
    keep_unused () const;

    bool&
    keep_unused ();

    void
    keep_unused (const bool&);

    const bool&
    update_dependent () const;

    bool&
    update_dependent ();

    void
    update_dependent (const bool&);

    const bool&
    leave_dependent () const;

    bool&
    leave_dependent ();

    void
    leave_dependent (const bool&);

    const bool&
    configure_only () const;

    bool&
    configure_only ();

    void
    configure_only (const bool&);

    const bool&
    print_only () const;

    bool&
    print_only ();

    void
    print_only (const bool&);

    const string&
    plan () const;

    string&
    plan ();

    void
    plan (const string&);

    bool
    plan_specified () const;

    void
    plan_specified (bool);

    const bool&
    no_fetch () const;

    bool&
    no_fetch ();

    void
    no_fetch (const bool&);

    const bool&
    fetch_shallow () const;

    bool&
    fetch_shallow ();

    void
    fetch_shallow (const bool&);

    const strings&
    mask_repository () const;

    strings&
    mask_repository ();

    void
    mask_repository (const strings&);

    bool
    mask_repository_specified () const;

    void
    mask_repository_specified (bool);

    const strings&
    mask_repository_uuid () const;

    strings&
    mask_repository_uuid ();

    void
    mask_repository_uuid (const strings&);

    bool
    mask_repository_uuid_specified () const;

    void
    mask_repository_uuid_specified (bool);

    const bool&
    no_refinement () const;

    bool&
    no_refinement ();

    void
    no_refinement (const bool&);

    const bool&
    no_move () const;

    bool&
    no_move ();

    void
    no_move (const bool&);

    const uint16_t&
    noop_exit () const;

    uint16_t&
    noop_exit ();

    void
    noop_exit (const uint16_t&);

    bool
    noop_exit_specified () const;

    void
    noop_exit_specified (bool);

    const string&
    rebuild_checksum () const;

    string&
    rebuild_checksum ();

    void
    rebuild_checksum (const string&);

    bool
    rebuild_checksum_specified () const;

    void
    rebuild_checksum_specified (bool);

    const uint16_t&
    no_private_config () const;

    uint16_t&
    no_private_config ();

    void
    no_private_config (const uint16_t&);

    bool
    no_private_config_specified () const;

    void
    no_private_config_specified (bool);

    const bool&
    sys_no_query () const;

    bool&
    sys_no_query ();

    void
    sys_no_query (const bool&);

    const bool&
    sys_install () const;

    bool&
    sys_install ();

    void
    sys_install (const bool&);

    const bool&
    sys_no_fetch () const;

    bool&
    sys_no_fetch ();

    void
    sys_no_fetch (const bool&);

    const bool&
    sys_no_stub () const;

    bool&
    sys_no_stub ();

    void
    sys_no_stub (const bool&);

    const bool&
    sys_yes () const;

    bool&
    sys_yes ();

    void
    sys_yes (const bool&);

    const string&
    sys_sudo () const;

    string&
    sys_sudo ();

    void
    sys_sudo (const string&);

    bool
    sys_sudo_specified () const;

    void
    sys_sudo_specified (bool);

    const string&
    sys_distribution () const;

    string&
    sys_distribution ();

    void
    sys_distribution (const string&);

    bool
    sys_distribution_specified () const;

    void
    sys_distribution_specified (bool);

    const string&
    sys_architecture () const;

    string&
    sys_architecture ();

    void
    sys_architecture (const string&);

    bool
    sys_architecture_specified () const;

    void
    sys_architecture_specified (bool);

    const dir_paths&
    directory () const;

    dir_paths&
    directory ();

    void
    directory (const dir_paths&);

    bool
    directory_specified () const;

    void
    directory_specified (bool);

    // Print usage information.
    //
    static ::bpkg::cli::usage_para
    print_usage (::std::ostream&,
                 ::bpkg::cli::usage_para = ::bpkg::cli::usage_para::none);

    // Implementation details.
    //
    protected:
    bool
    _parse (const char*, ::bpkg::cli::scanner&);

    private:
    bool
    _parse (::bpkg::cli::scanner&,
            ::bpkg::cli::unknown_mode option,
            ::bpkg::cli::unknown_mode argument);

    public:
    bool yes_;
    string for__;
    bool for__specified_;
    bool keep_unused_;
    bool update_dependent_;
    bool leave_dependent_;
    bool configure_only_;
    bool print_only_;
    string plan_;
    bool plan_specified_;
    bool no_fetch_;
    bool fetch_shallow_;
    strings mask_repository_;
    bool mask_repository_specified_;
    strings mask_repository_uuid_;
    bool mask_repository_uuid_specified_;
    bool no_refinement_;
    bool no_move_;
    uint16_t noop_exit_;
    bool noop_exit_specified_;
    string rebuild_checksum_;
    bool rebuild_checksum_specified_;
    uint16_t no_private_config_;
    bool no_private_config_specified_;
    bool sys_no_query_;
    bool sys_install_;
    bool sys_no_fetch_;
    bool sys_no_stub_;
    bool sys_yes_;
    string sys_sudo_;
    bool sys_sudo_specified_;
    string sys_distribution_;
    bool sys_distribution_specified_;
    string sys_architecture_;
    bool sys_architecture_specified_;
    dir_paths directory_;
    bool directory_specified_;
  };
}

// Print page usage information.
//
namespace bpkg
{
  ::bpkg::cli::usage_para
  print_bpkg_pkg_build_usage (::std::ostream&,
                              ::bpkg::cli::usage_para = ::bpkg::cli::usage_para::none);
}

#include <bpkg/pkg-build-options.ixx>

// Begin epilogue.
//
//
// End epilogue.

#endif // BPKG_PKG_BUILD_OPTIONS_HXX
