1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3 #pragma once
4 
5 #include "cmConfigure.h" // IWYU pragma: keep
6 
7 #include <string>
8 #include <vector>
9 
10 #include "cmArgumentParser.h"
11 
12 class cmInstallCommandArguments : public cmArgumentParser<void>
13 {
14 public:
15   cmInstallCommandArguments(std::string defaultComponent);
SetGenericArguments(cmInstallCommandArguments * args)16   void SetGenericArguments(cmInstallCommandArguments* args)
17   {
18     this->GenericArguments = args;
19   }
20 
21   // Compute destination path.and check permissions
22   bool Finalize();
23 
24   const std::string& GetDestination() const;
25   const std::string& GetComponent() const;
26   const std::string& GetNamelinkComponent() const;
27   bool GetExcludeFromAll() const;
28   const std::string& GetRename() const;
29   const std::string& GetPermissions() const;
30   const std::vector<std::string>& GetConfigurations() const;
31   bool GetOptional() const;
32   bool GetNamelinkOnly() const;
33   bool GetNamelinkSkip() const;
34   bool HasNamelinkComponent() const;
35   const std::string& GetType() const;
36 
37   static bool CheckPermissions(const std::string& onePerm, std::string& perm);
38 
39 private:
40   std::string Destination;
41   std::string Component;
42   std::string NamelinkComponent;
43   bool ExcludeFromAll = false;
44   std::string Rename;
45   std::vector<std::string> Permissions;
46   std::vector<std::string> Configurations;
47   bool Optional = false;
48   bool NamelinkOnly = false;
49   bool NamelinkSkip = false;
50   std::string Type;
51 
52   std::string DestinationString;
53   std::string PermissionsString;
54 
55   cmInstallCommandArguments* GenericArguments = nullptr;
56   static const char* PermissionsTable[];
57   static const std::string EmptyString;
58   std::string DefaultComponentName;
59   bool CheckPermissions();
60 };
61 
62 class cmInstallCommandIncludesArgument
63 {
64 public:
65   cmInstallCommandIncludesArgument();
66   void Parse(const std::vector<std::string>* args,
67              std::vector<std::string>* unconsumedArgs);
68 
69   const std::vector<std::string>& GetIncludeDirs() const;
70 
71 private:
72   std::vector<std::string> IncludeDirs;
73 };
74