2007-08-24 00:14:18 +04:00
|
|
|
/*=========================================================================
|
|
|
|
|
|
|
|
Program: CMake - Cross-Platform Makefile Generator
|
|
|
|
Module: $RCSfile$
|
|
|
|
Language: C++
|
|
|
|
Date: $Date$
|
|
|
|
Version: $Revision$
|
|
|
|
|
|
|
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
|
|
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
|
|
|
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
|
|
PURPOSE. See the above copyright notices for more information.
|
|
|
|
|
|
|
|
=========================================================================*/
|
|
|
|
#include "cmInstallCommandArguments.h"
|
|
|
|
#include "cmSystemTools.h"
|
|
|
|
|
|
|
|
// Table of valid permissions.
|
|
|
|
const char* cmInstallCommandArguments::PermissionsTable[] =
|
|
|
|
{
|
|
|
|
"OWNER_READ", "OWNER_WRITE", "OWNER_EXECUTE",
|
|
|
|
"GROUP_READ", "GROUP_WRITE", "GROUP_EXECUTE",
|
|
|
|
"WORLD_READ", "WORLD_WRITE", "WORLD_EXECUTE",
|
|
|
|
"SETUID", "SETGID", 0
|
|
|
|
};
|
|
|
|
|
|
|
|
const std::string cmInstallCommandArguments::EmptyString;
|
|
|
|
|
|
|
|
cmInstallCommandArguments::cmInstallCommandArguments()
|
2007-08-24 22:27:18 +04:00
|
|
|
:Parser()
|
2007-08-24 00:14:18 +04:00
|
|
|
,ArgumentGroup()
|
2007-08-24 22:27:18 +04:00
|
|
|
,Destination (&Parser, "DESTINATION" , &ArgumentGroup)
|
|
|
|
,Component (&Parser, "COMPONENT" , &ArgumentGroup)
|
|
|
|
,Rename (&Parser, "RENAME" , &ArgumentGroup)
|
|
|
|
,Permissions (&Parser, "PERMISSIONS" , &ArgumentGroup)
|
|
|
|
,Configurations(&Parser, "CONFIGURATIONS", &ArgumentGroup)
|
|
|
|
,Optional (&Parser, "OPTIONAL" , &ArgumentGroup)
|
2008-02-05 01:03:48 +03:00
|
|
|
,NamelinkOnly (&Parser, "NAMELINK_ONLY" , &ArgumentGroup)
|
|
|
|
,NamelinkSkip (&Parser, "NAMELINK_SKIP" , &ArgumentGroup)
|
2007-08-24 00:14:18 +04:00
|
|
|
,GenericArguments(0)
|
|
|
|
{
|
|
|
|
this->Component.SetDefaultString("Unspecified");
|
|
|
|
}
|
|
|
|
|
|
|
|
const std::string& cmInstallCommandArguments::GetDestination() const
|
|
|
|
{
|
2008-01-28 16:38:36 +03:00
|
|
|
if (!this->DestinationString.empty())
|
2007-08-24 00:14:18 +04:00
|
|
|
{
|
2008-01-28 16:38:36 +03:00
|
|
|
return this->DestinationString;
|
2007-08-24 00:14:18 +04:00
|
|
|
}
|
|
|
|
if (this->GenericArguments!=0)
|
|
|
|
{
|
|
|
|
return this->GenericArguments->GetDestination();
|
|
|
|
}
|
|
|
|
return this->EmptyString;
|
|
|
|
}
|
|
|
|
|
|
|
|
const std::string& cmInstallCommandArguments::GetComponent() const
|
|
|
|
{
|
|
|
|
if (!this->Component.GetString().empty())
|
|
|
|
{
|
|
|
|
return this->Component.GetString();
|
|
|
|
}
|
|
|
|
if (this->GenericArguments!=0)
|
|
|
|
{
|
|
|
|
return this->GenericArguments->GetComponent();
|
|
|
|
}
|
|
|
|
return this->EmptyString;
|
|
|
|
}
|
|
|
|
|
|
|
|
const std::string& cmInstallCommandArguments::GetRename() const
|
|
|
|
{
|
|
|
|
if (!this->Rename.GetString().empty())
|
|
|
|
{
|
|
|
|
return this->Rename.GetString();
|
|
|
|
}
|
|
|
|
if (this->GenericArguments!=0)
|
|
|
|
{
|
|
|
|
return this->GenericArguments->GetRename();
|
|
|
|
}
|
|
|
|
return this->EmptyString;
|
|
|
|
}
|
|
|
|
|
|
|
|
const std::string& cmInstallCommandArguments::GetPermissions() const
|
|
|
|
{
|
|
|
|
if (!this->PermissionsString.empty())
|
|
|
|
{
|
|
|
|
return this->PermissionsString;
|
|
|
|
}
|
|
|
|
if (this->GenericArguments!=0)
|
|
|
|
{
|
|
|
|
return this->GenericArguments->GetPermissions();
|
|
|
|
}
|
|
|
|
return this->EmptyString;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool cmInstallCommandArguments::GetOptional() const
|
|
|
|
{
|
|
|
|
if (this->Optional.IsEnabled())
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if (this->GenericArguments!=0)
|
|
|
|
{
|
|
|
|
return this->GenericArguments->GetOptional();
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2008-02-05 01:03:48 +03:00
|
|
|
bool cmInstallCommandArguments::GetNamelinkOnly() const
|
|
|
|
{
|
|
|
|
if (this->NamelinkOnly.IsEnabled())
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if (this->GenericArguments!=0)
|
|
|
|
{
|
|
|
|
return this->GenericArguments->GetNamelinkOnly();
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool cmInstallCommandArguments::GetNamelinkSkip() const
|
|
|
|
{
|
|
|
|
if (this->NamelinkSkip.IsEnabled())
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if (this->GenericArguments!=0)
|
|
|
|
{
|
|
|
|
return this->GenericArguments->GetNamelinkSkip();
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2007-08-24 00:14:18 +04:00
|
|
|
const std::vector<std::string>&
|
|
|
|
cmInstallCommandArguments::GetConfigurations() const
|
|
|
|
{
|
|
|
|
if (!this->Configurations.GetVector().empty())
|
|
|
|
{
|
|
|
|
return this->Configurations.GetVector();
|
|
|
|
}
|
|
|
|
if (this->GenericArguments!=0)
|
|
|
|
{
|
|
|
|
return this->GenericArguments->GetConfigurations();
|
|
|
|
}
|
|
|
|
return this->Configurations.GetVector();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool cmInstallCommandArguments::Finalize()
|
|
|
|
{
|
|
|
|
if (!this->CheckPermissions())
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2008-01-28 16:38:36 +03:00
|
|
|
this->DestinationString = this->Destination.GetString();
|
|
|
|
cmSystemTools::ConvertToUnixSlashes(this->DestinationString);
|
2007-08-24 00:14:18 +04:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2007-08-24 22:27:18 +04:00
|
|
|
void cmInstallCommandArguments::Parse(const std::vector<std::string>* args,
|
|
|
|
std::vector<std::string>* unconsumedArgs)
|
|
|
|
{
|
|
|
|
this->Parser.Parse(args, unconsumedArgs);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-24 00:14:18 +04:00
|
|
|
bool cmInstallCommandArguments::CheckPermissions()
|
|
|
|
{
|
|
|
|
this->PermissionsString = "";
|
|
|
|
for(std::vector<std::string>::const_iterator
|
|
|
|
permIt = this->Permissions.GetVector().begin();
|
|
|
|
permIt != this->Permissions.GetVector().end();
|
|
|
|
++permIt)
|
|
|
|
{
|
|
|
|
if (!this->CheckPermissions(*permIt, this->PermissionsString))
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool cmInstallCommandArguments::CheckPermissions(
|
|
|
|
const std::string& onePermission, std::string& permissions)
|
|
|
|
{
|
|
|
|
// Check the permission against the table.
|
|
|
|
for(const char** valid = cmInstallCommandArguments::PermissionsTable;
|
|
|
|
*valid; ++valid)
|
|
|
|
{
|
|
|
|
if(onePermission == *valid)
|
|
|
|
{
|
|
|
|
// This is a valid permission.
|
|
|
|
permissions += " ";
|
|
|
|
permissions += onePermission;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// This is not a valid permission.
|
|
|
|
return false;
|
|
|
|
}
|