mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-04 12:49:36 -06:00
Teach cmGeneratorTarget to extract .appxmanifest sources separately. Teach cmVisualStudio10TargetGenerator to write them with the AppxManifest tool in .vcxproj files. This will allow us to detect whether the project provides an application manfiest explicitly.
160 lines
5.9 KiB
C++
160 lines
5.9 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2012 Kitware, Inc., Insight Software Consortium
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
#ifndef cmGeneratorTarget_h
|
|
#define cmGeneratorTarget_h
|
|
|
|
#include "cmStandardIncludes.h"
|
|
|
|
class cmCustomCommand;
|
|
class cmGlobalGenerator;
|
|
class cmLocalGenerator;
|
|
class cmMakefile;
|
|
class cmSourceFile;
|
|
class cmTarget;
|
|
|
|
class cmGeneratorTarget
|
|
{
|
|
public:
|
|
cmGeneratorTarget(cmTarget*);
|
|
|
|
int GetType() const;
|
|
std::string GetName() const;
|
|
const char *GetProperty(const std::string& prop) const;
|
|
bool GetPropertyAsBool(const std::string& prop) const;
|
|
void GetSourceFiles(std::vector<cmSourceFile*>& files,
|
|
const std::string& config) const;
|
|
|
|
void GetObjectSources(std::vector<cmSourceFile const*> &,
|
|
const std::string& config) const;
|
|
const std::string& GetObjectName(cmSourceFile const* file);
|
|
|
|
bool HasExplicitObjectName(cmSourceFile const* file) const;
|
|
void AddExplicitObjectName(cmSourceFile const* sf);
|
|
|
|
void GetResxSources(std::vector<cmSourceFile const*>&,
|
|
const std::string& config) const;
|
|
void GetIDLSources(std::vector<cmSourceFile const*>&,
|
|
const std::string& config) const;
|
|
void GetExternalObjects(std::vector<cmSourceFile const*>&,
|
|
const std::string& config) const;
|
|
void GetHeaderSources(std::vector<cmSourceFile const*>&,
|
|
const std::string& config) const;
|
|
void GetExtraSources(std::vector<cmSourceFile const*>&,
|
|
const std::string& config) const;
|
|
void GetCustomCommands(std::vector<cmSourceFile const*>&,
|
|
const std::string& config) const;
|
|
void GetExpectedResxHeaders(std::set<std::string>&,
|
|
const std::string& config) const;
|
|
void GetAppManifest(std::vector<cmSourceFile const*>&,
|
|
const std::string& config) const;
|
|
|
|
void ComputeObjectMapping();
|
|
|
|
cmTarget* Target;
|
|
cmMakefile* Makefile;
|
|
cmLocalGenerator* LocalGenerator;
|
|
cmGlobalGenerator const* GlobalGenerator;
|
|
|
|
std::string GetModuleDefinitionFile(const std::string& config) const;
|
|
|
|
/** Full path with trailing slash to the top-level directory
|
|
holding object files for this target. Includes the build
|
|
time config name placeholder if needed for the generator. */
|
|
std::string ObjectDirectory;
|
|
|
|
void UseObjectLibraries(std::vector<std::string>& objs,
|
|
const std::string& config) const;
|
|
|
|
void GetAppleArchs(const std::string& config,
|
|
std::vector<std::string>& archVec) const;
|
|
|
|
/** Return the rule variable used to create this type of target. */
|
|
std::string GetCreateRuleVariable(std::string const& lang,
|
|
std::string const& config) const;
|
|
|
|
/** Get the include directories for this target. */
|
|
std::vector<std::string> GetIncludeDirectories(
|
|
const std::string& config) const;
|
|
|
|
bool IsSystemIncludeDirectory(const std::string& dir,
|
|
const std::string& config) const;
|
|
|
|
/** Add the target output files to the global generator manifest. */
|
|
void GenerateTargetManifest(const std::string& config) const;
|
|
|
|
/**
|
|
* Trace through the source files in this target and add al source files
|
|
* that they depend on, used by all generators
|
|
*/
|
|
void TraceDependencies();
|
|
|
|
/** Get sources that must be built before the given source. */
|
|
std::vector<cmSourceFile*> const*
|
|
GetSourceDepends(cmSourceFile const* sf) const;
|
|
|
|
/**
|
|
* Flags for a given source file as used in this target. Typically assigned
|
|
* via SET_TARGET_PROPERTIES when the property is a list of source files.
|
|
*/
|
|
enum SourceFileType
|
|
{
|
|
SourceFileTypeNormal,
|
|
SourceFileTypePrivateHeader, // is in "PRIVATE_HEADER" target property
|
|
SourceFileTypePublicHeader, // is in "PUBLIC_HEADER" target property
|
|
SourceFileTypeResource, // is in "RESOURCE" target property *or*
|
|
// has MACOSX_PACKAGE_LOCATION=="Resources"
|
|
SourceFileTypeMacContent // has MACOSX_PACKAGE_LOCATION!="Resources"
|
|
};
|
|
struct SourceFileFlags
|
|
{
|
|
SourceFileFlags(): Type(SourceFileTypeNormal), MacFolder(0) {}
|
|
SourceFileFlags(SourceFileFlags const& r):
|
|
Type(r.Type), MacFolder(r.MacFolder) {}
|
|
SourceFileType Type;
|
|
const char* MacFolder; // location inside Mac content folders
|
|
};
|
|
|
|
struct SourceFileFlags
|
|
GetTargetSourceFileFlags(const cmSourceFile* sf) const;
|
|
|
|
struct ResxData {
|
|
mutable std::set<std::string> ExpectedResxHeaders;
|
|
mutable std::vector<cmSourceFile const*> ResxSources;
|
|
};
|
|
private:
|
|
friend class cmTargetTraceDependencies;
|
|
struct SourceEntry { std::vector<cmSourceFile*> Depends; };
|
|
typedef std::map<cmSourceFile const*, SourceEntry> SourceEntriesType;
|
|
SourceEntriesType SourceEntries;
|
|
|
|
mutable std::map<cmSourceFile const*, std::string> Objects;
|
|
std::set<cmSourceFile const*> ExplicitObjectName;
|
|
mutable std::map<std::string, std::vector<std::string> > SystemIncludesCache;
|
|
|
|
void ConstructSourceFileFlags() const;
|
|
mutable bool SourceFileFlagsConstructed;
|
|
mutable std::map<cmSourceFile const*, SourceFileFlags> SourceFlagsMap;
|
|
|
|
cmGeneratorTarget(cmGeneratorTarget const&);
|
|
void operator=(cmGeneratorTarget const&);
|
|
};
|
|
|
|
struct cmStrictTargetComparison {
|
|
bool operator()(cmTarget const* t1, cmTarget const* t2) const;
|
|
};
|
|
|
|
typedef std::map<cmTarget const*,
|
|
cmGeneratorTarget*,
|
|
cmStrictTargetComparison> cmGeneratorTargetsType;
|
|
|
|
#endif
|