b93f0318fe
This change introduces policy CMP0008 to decide how to treat full path libraries that do not appear to be valid library file names. Such libraries worked by accident in the VS IDE and Xcode generators with CMake 2.4 and below. We support them in CMake 2.6 by introducing this policy. See policy documentation added by this change for details.
103 lines
3.5 KiB
C++
103 lines
3.5 KiB
C++
/*=========================================================================
|
|
|
|
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 cmPolicies_h
|
|
#define cmPolicies_h
|
|
|
|
#include "cmCustomCommand.h"
|
|
|
|
class cmake;
|
|
class cmMakefile;
|
|
class cmPolicy;
|
|
|
|
/** \class cmPolicies
|
|
* \brief Handles changes in CMake behavior and policies
|
|
*
|
|
* See the cmake wiki section on policies for an overview of this class's
|
|
* purpose
|
|
*/
|
|
class cmPolicies
|
|
{
|
|
public:
|
|
cmPolicies();
|
|
~cmPolicies();
|
|
|
|
enum PolicyStatus { OLD, WARN, NEW, REQUIRED_IF_USED, REQUIRED_ALWAYS };
|
|
static const char* PolicyStatusNames[];
|
|
|
|
enum PolicyID
|
|
{
|
|
CMP0000, // Policy version specification
|
|
CMP0001, // Ignore old compatibility variable
|
|
CMP0002, // Target names must be unique
|
|
CMP0003, // Linking does not include extra -L paths
|
|
CMP0004, // Libraries linked may not have leading or trailing whitespace
|
|
CMP0005, // Definition value escaping
|
|
CMP0006, // BUNDLE install rules needed for MACOSX_BUNDLE targets
|
|
CMP0007, // list command handling of empty elements
|
|
CMP0008, // Full-path libraries must be a valid library file name
|
|
|
|
// Always the last entry. Useful mostly to avoid adding a comma
|
|
// the last policy when adding a new one.
|
|
CMPCOUNT
|
|
};
|
|
|
|
///! convert a string policy ID into a number
|
|
bool GetPolicyID(const char *id, /* out */ cmPolicies::PolicyID &pid);
|
|
std::string GetPolicyIDString(cmPolicies::PolicyID pid);
|
|
|
|
///! Get the default status for a policy
|
|
cmPolicies::PolicyStatus GetPolicyStatus(cmPolicies::PolicyID id);
|
|
|
|
///! Define a Policy for CMake
|
|
void DefinePolicy(cmPolicies::PolicyID id,
|
|
const char *stringID,
|
|
const char *shortDescription,
|
|
const char *longDescription,
|
|
unsigned int majorVersionIntroduced,
|
|
unsigned int minorVersionIntroduced,
|
|
unsigned int patchVersionIntroduced,
|
|
cmPolicies::PolicyStatus status);
|
|
|
|
///! Set a policy level for this listfile
|
|
bool ApplyPolicyVersion(cmMakefile *mf, const char *version);
|
|
|
|
///! test to see if setting a policy to a specific value is valid
|
|
bool IsValidPolicyStatus(cmPolicies::PolicyID id,
|
|
cmPolicies::PolicyStatus status);
|
|
|
|
///! test to see if setting a policy to a specific value is valid, when used
|
|
bool IsValidUsedPolicyStatus(cmPolicies::PolicyID id,
|
|
cmPolicies::PolicyStatus status);
|
|
|
|
///! return a warning string for a given policy
|
|
std::string GetPolicyWarning(cmPolicies::PolicyID id);
|
|
|
|
///! return an error string for when a required policy is unspecified
|
|
std::string GetRequiredPolicyError(cmPolicies::PolicyID id);
|
|
|
|
///! Get docs for policies
|
|
void GetDocumentation(std::vector<cmDocumentationEntry>& v);
|
|
|
|
private:
|
|
// might have to make these internal for VS6 not sure yet
|
|
std::map<PolicyID,cmPolicy *> Policies;
|
|
std::map<std::string,PolicyID> PolicyStringMap;
|
|
|
|
};
|
|
|
|
#endif
|