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

#ifndef LIBBUILD2_BUILD_SCRIPT_BUILTIN_OPTIONS_HXX
#define LIBBUILD2_BUILD_SCRIPT_BUILTIN_OPTIONS_HXX

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

#include <libbuild2/common-options.hxx>

namespace build2
{
  namespace build
  {
    namespace script
    {
      class depdb_dyndep_options
      {
        public:
        depdb_dyndep_options ();

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

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

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

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

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

        // Option accessors and modifiers.
        //
        const path&
        file () const;

        path&
        file ();

        void
        file (const path&);

        bool
        file_specified () const;

        void
        file_specified (bool);

        const string&
        format () const;

        string&
        format ();

        void
        format (const string&);

        bool
        format_specified () const;

        void
        format_specified (bool);

        const string&
        what () const;

        string&
        what ();

        void
        what (const string&);

        bool
        what_specified () const;

        void
        what_specified (bool);

        const dir_paths&
        include_path () const;

        dir_paths&
        include_path ();

        void
        include_path (const dir_paths&);

        bool
        include_path_specified () const;

        void
        include_path_specified (bool);

        const string&
        default_type () const;

        string&
        default_type ();

        void
        default_type (const string&);

        bool
        default_type_specified () const;

        void
        default_type_specified (bool);

        const bool&
        adhoc () const;

        bool&
        adhoc ();

        void
        adhoc (const bool&);

        const dir_path&
        cwd () const;

        dir_path&
        cwd ();

        void
        cwd (const dir_path&);

        bool
        cwd_specified () const;

        void
        cwd_specified (bool);

        const bool&
        drop_cycles () const;

        bool&
        drop_cycles ();

        void
        drop_cycles (const bool&);

        const string&
        target_what () const;

        string&
        target_what ();

        void
        target_what (const string&);

        bool
        target_what_specified () const;

        void
        target_what_specified (bool);

        const string&
        target_default_type () const;

        string&
        target_default_type ();

        void
        target_default_type (const string&);

        bool
        target_default_type_specified () const;

        void
        target_default_type_specified (bool);

        const map<string, string>&
        target_extension_type () const;

        map<string, string>&
        target_extension_type ();

        void
        target_extension_type (const map<string, string>&);

        bool
        target_extension_type_specified () const;

        void
        target_extension_type_specified (bool);

        const dir_path&
        target_cwd () const;

        dir_path&
        target_cwd ();

        void
        target_cwd (const dir_path&);

        bool
        target_cwd_specified () const;

        void
        target_cwd_specified (bool);

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

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

        public:
        path file_;
        bool file_specified_;
        string format_;
        bool format_specified_;
        string what_;
        bool what_specified_;
        dir_paths include_path_;
        bool include_path_specified_;
        string default_type_;
        bool default_type_specified_;
        bool adhoc_;
        dir_path cwd_;
        bool cwd_specified_;
        bool drop_cycles_;
        string target_what_;
        bool target_what_specified_;
        string target_default_type_;
        bool target_default_type_specified_;
        map<string, string> target_extension_type_;
        bool target_extension_type_specified_;
        dir_path target_cwd_;
        bool target_cwd_specified_;
      };
    }
  }
}

#include <libbuild2/build/script/builtin-options.ixx>

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

#endif // LIBBUILD2_BUILD_SCRIPT_BUILTIN_OPTIONS_HXX
