/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include "cmConfigure.h" // IWYU pragma: keep #include <string> #include <vector> #include "cmArgumentParser.h" #include "cmArgumentParserTypes.h" class cmInstallCommandArguments : public cmArgumentParser<void> { public: cmInstallCommandArguments(std::string defaultComponent); void SetGenericArguments(cmInstallCommandArguments* args) { this->GenericArguments = args; } // Compute destination path.and check permissions bool Finalize(); const std::string& GetDestination() const; const std::string& GetComponent() const; const std::string& GetNamelinkComponent() const; bool GetExcludeFromAll() const; const std::string& GetRename() const; const std::string& GetPermissions() const; const std::vector<std::string>& GetConfigurations() const; bool GetOptional() const; bool GetNamelinkOnly() const; bool GetNamelinkSkip() const; bool HasNamelinkComponent() const; const std::string& GetType() const; const std::string& GetDefaultComponent() const; static bool CheckPermissions(const std::string& onePerm, std::string& perm); private: std::string Destination; std::string Component; std::string NamelinkComponent; bool ExcludeFromAll = false; std::string Rename; ArgumentParser::MaybeEmpty<std::vector<std::string>> Permissions; ArgumentParser::MaybeEmpty<std::vector<std::string>> Configurations; bool Optional = false; bool NamelinkOnly = false; bool NamelinkSkip = false; std::string Type; std::string DestinationString; std::string PermissionsString; cmInstallCommandArguments* GenericArguments = nullptr; static const char* PermissionsTable[]; static const std::string EmptyString; std::string DefaultComponentName; bool CheckPermissions(); }; class cmInstallCommandIncludesArgument { public: cmInstallCommandIncludesArgument(); void Parse(const std::vector<std::string>* args, std::vector<std::string>* unconsumedArgs); const std::vector<std::string>& GetIncludeDirs() const; private: std::vector<std::string> IncludeDirs; }; class cmInstallCommandFileSetArguments : public cmInstallCommandArguments { public: cmInstallCommandFileSetArguments(std::string defaultComponent); void Parse(std::vector<std::string> args, std::vector<std::string>* unconsumedArgs); const std::string& GetFileSet() const { return this->FileSet; } private: std::string FileSet; };