
The file generated by install(EXPORT) computes _IMPORT_PREFIX in a way that assumes a normalized path. If the DESTINATION contains any ../ components, the computed _IMPORT_PREFIX would be wrong. Force the DESTINATION path to be normalized, subject to the new CMP0176 policy. Also normalize all other DESTINATION paths for consistency, except for INCLUDES DESTINATION, which is not strictly a destination but rather a search path to add. Fixes: #26252
95 lines
2.6 KiB
C++
95 lines
2.6 KiB
C++
/* 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 cmMakefile;
|
|
|
|
class cmInstallCommandArguments : public cmArgumentParser<void>
|
|
{
|
|
public:
|
|
cmInstallCommandArguments(std::string defaultComponent,
|
|
cmMakefile& makefile);
|
|
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,
|
|
cmMakefile& makefile);
|
|
|
|
void Parse(std::vector<std::string> args,
|
|
std::vector<std::string>* unconsumedArgs);
|
|
|
|
const std::string& GetFileSet() const { return this->FileSet; }
|
|
|
|
private:
|
|
std::string FileSet;
|
|
};
|