parent
2120ce4fcd
commit
be2705deaa
|
@ -32,6 +32,7 @@
|
|||
#include "cmGetTestPropertyCommand.cxx"
|
||||
#include "cmIncludeExternalMSProjectCommand.cxx"
|
||||
#include "cmInstallCommand.cxx"
|
||||
#include "cmInstallCommandArguments.cxx"
|
||||
#include "cmInstallProgramsCommand.cxx"
|
||||
#include "cmLinkLibrariesCommand.cxx"
|
||||
#include "cmListCommand.cxx"
|
||||
|
|
|
@ -0,0 +1,189 @@
|
|||
/*=========================================================================
|
||||
|
||||
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()
|
||||
:cmCommandArgumentsHelper()
|
||||
,ArgumentGroup()
|
||||
,Destination (this, "DESTINATION" , &ArgumentGroup)
|
||||
,Component (this, "COMPONENT" , &ArgumentGroup)
|
||||
,Rename (this, "RENAME" , &ArgumentGroup)
|
||||
,Permissions (this, "PERMISSIONS" , &ArgumentGroup)
|
||||
,Configurations(this, "CONFIGURATIONS", &ArgumentGroup)
|
||||
,Optional (this, "OPTIONAL" , &ArgumentGroup)
|
||||
,GenericArguments(0)
|
||||
{
|
||||
this->Component.SetDefaultString("Unspecified");
|
||||
}
|
||||
|
||||
const std::string& cmInstallCommandArguments::GetDestination() const
|
||||
{
|
||||
if (!this->AbsDestination.empty())
|
||||
{
|
||||
return this->AbsDestination;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
this->ComputeDestination(this->Destination.GetString(),this->AbsDestination);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmInstallCommandArguments::ComputeDestination(const std::string& inDest,
|
||||
std::string& absDest)
|
||||
{
|
||||
if((inDest.size()>0) && !(cmSystemTools::FileIsFullPath(inDest.c_str())))
|
||||
{
|
||||
// Relative paths are treated with respect to the installation prefix.
|
||||
absDest = "${CMAKE_INSTALL_PREFIX}/";
|
||||
absDest += inDest;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Full paths are absolute.
|
||||
absDest = inDest;
|
||||
}
|
||||
// Format the path nicely. Note this also removes trailing slashes.
|
||||
cmSystemTools::ConvertToUnixSlashes(absDest);
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
/*=========================================================================
|
||||
|
||||
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.
|
||||
|
||||
=========================================================================*/
|
||||
|
||||
#ifndef cmInstallCommandArguments_h
|
||||
#define cmInstallCommandArguments_h
|
||||
|
||||
#include "cmStandardIncludes.h"
|
||||
#include "cmCommandArgumentsHelper.h"
|
||||
|
||||
class cmInstallCommandArguments : public cmCommandArgumentsHelper
|
||||
{
|
||||
public:
|
||||
cmInstallCommandArguments();
|
||||
void SetGenericArguments(cmInstallCommandArguments* args)
|
||||
{this->GenericArguments = args;}
|
||||
// Compute destination path.
|
||||
bool Finalize();
|
||||
cmCommandArgumentGroup ArgumentGroup;
|
||||
|
||||
const std::string& GetDestination() const;
|
||||
const std::string& GetComponent() const;
|
||||
const std::string& GetRename() const;
|
||||
const std::string& GetPermissions() const;
|
||||
const std::vector<std::string>& GetConfigurations() const;
|
||||
bool GetOptional() const;
|
||||
|
||||
// once HandleDirectoryMode() is also switched to using cmInstallCommandArguments
|
||||
// then these two functions can become non-static private member functions
|
||||
// without arguments
|
||||
static void ComputeDestination(const std::string& inDest,
|
||||
std::string& absDest);
|
||||
static bool CheckPermissions(const std::string& onePerm,
|
||||
std::string& perm);
|
||||
private:
|
||||
cmCAString Destination;
|
||||
cmCAString Component;
|
||||
cmCAString Rename;
|
||||
cmCAStringVector Permissions;
|
||||
cmCAStringVector Configurations;
|
||||
cmCAEnabler Optional;
|
||||
|
||||
std::string AbsDestination;
|
||||
std::string PermissionsString;
|
||||
|
||||
cmInstallCommandArguments* GenericArguments;
|
||||
static const char* PermissionsTable[];
|
||||
static const std::string EmptyString;
|
||||
bool CheckPermissions();
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue