Merge branch 'master' into sublime-text-2-generator

This commit is contained in:
Morné Chamberlain 2012-11-24 20:23:55 +02:00
commit b3ae61f833
128 changed files with 1544 additions and 991 deletions

View File

@ -585,6 +585,29 @@ option(CMAKE_STRICT
"Perform strict testing to record property and variable access. Can be used to report any undefined properties or variables" OFF) "Perform strict testing to record property and variable access. Can be used to report any undefined properties or variables" OFF)
mark_as_advanced(CMAKE_STRICT) mark_as_advanced(CMAKE_STRICT)
if(NOT CMake_VERSION_IS_RELEASE)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" AND
NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS 4.2)
set(C_FLAGS_LIST -Wcast-align -Werror-implicit-function-declaration -Wchar-subscripts
-Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security
-Wmissing-format-attribute -fno-common
)
set(CXX_FLAGS_LIST -Wnon-virtual-dtor -Wcast-align -Wchar-subscripts -Wall -W
-Wshadow -Wpointer-arith -Wformat-security
)
foreach(FLAG_LANG C CXX)
foreach(FLAG ${${FLAG_LANG}_FLAGS_LIST})
if(NOT " ${CMAKE_${FLAG_LANG}_FLAGS} " MATCHES " ${FLAG} ")
set(CMAKE_${FLAG_LANG}_FLAGS "${CMAKE_${FLAG_LANG}_FLAGS} ${FLAG}")
endif()
endforeach()
endforeach()
unset(C_FLAGS_LIST)
unset(CXX_FLAGS_LIST)
endif()
endif()
# build the remaining subdirectories # build the remaining subdirectories
add_subdirectory(Source) add_subdirectory(Source)

View File

@ -402,6 +402,79 @@ endif()
endfunction() endfunction()
function(_ep_write_gitupdate_script script_filename git_EXECUTABLE git_tag git_repository work_dir)
file(WRITE ${script_filename}
"if(\"${git_tag}\" STREQUAL \"\")
message(FATAL_ERROR \"Tag for git checkout should not be empty.\")
endif()
execute_process(
COMMAND \"${git_EXECUTABLE}\" rev-list --max-count=1 HEAD
WORKING_DIRECTORY \"${work_dir}\"
RESULT_VARIABLE error_code
OUTPUT_VARIABLE head_sha
)
if(error_code)
message(FATAL_ERROR \"Failed to get the hash for HEAD\")
endif()
execute_process(
COMMAND \"${git_EXECUTABLE}\" show-ref ${git_tag}
WORKING_DIRECTORY \"${work_dir}\"
OUTPUT_VARIABLE show_ref_output
)
# If a remote ref is asked for, which can possibly move around,
# we must always do a fetch and checkout.
if(\"\${show_ref_output}\" MATCHES \"remotes\")
set(is_remote_ref 1)
else()
set(is_remote_ref 0)
endif()
# This will fail if the tag does not exist (it probably has not been fetched
# yet).
execute_process(
COMMAND \"${git_EXECUTABLE}\" rev-list --max-count=1 ${git_tag}
WORKING_DIRECTORY \"${work_dir}\"
RESULT_VARIABLE error_code
OUTPUT_VARIABLE tag_sha
)
# Is the hash checkout out that we want?
if(error_code OR is_remote_ref OR NOT (\"\${tag_sha}\" STREQUAL \"\${head_sha}\"))
execute_process(
COMMAND \"${git_EXECUTABLE}\" fetch
WORKING_DIRECTORY \"${work_dir}\"
RESULT_VARIABLE error_code
)
if(error_code)
message(FATAL_ERROR \"Failed to fetch repository '${git_repository}'\")
endif()
execute_process(
COMMAND \"${git_EXECUTABLE}\" checkout ${git_tag}
WORKING_DIRECTORY \"${work_dir}\"
RESULT_VARIABLE error_code
)
if(error_code)
message(FATAL_ERROR \"Failed to checkout tag: '${git_tag}'\")
endif()
execute_process(
COMMAND \"${git_EXECUTABLE}\" submodule update --recursive
WORKING_DIRECTORY \"${work_dir}/${src_name}\"
RESULT_VARIABLE error_code
)
if(error_code)
message(FATAL_ERROR \"Failed to update submodules in: '${work_dir}/${src_name}'\")
endif()
endif()
"
)
endfunction(_ep_write_gitupdate_script)
function(_ep_write_downloadfile_script script_filename remote local timeout hash tls_verify tls_cainfo) function(_ep_write_downloadfile_script script_filename remote local timeout hash tls_verify tls_cainfo)
if(timeout) if(timeout)
set(timeout_args TIMEOUT ${timeout}) set(timeout_args TIMEOUT ${timeout})
@ -1354,7 +1427,7 @@ endfunction()
function(_ep_add_update_command name) function(_ep_add_update_command name)
ExternalProject_Get_Property(${name} source_dir) ExternalProject_Get_Property(${name} source_dir tmp_dir)
get_property(cmd_set TARGET ${name} PROPERTY _EP_UPDATE_COMMAND SET) get_property(cmd_set TARGET ${name} PROPERTY _EP_UPDATE_COMMAND SET)
get_property(cmd TARGET ${name} PROPERTY _EP_UPDATE_COMMAND) get_property(cmd TARGET ${name} PROPERTY _EP_UPDATE_COMMAND)
@ -1406,15 +1479,15 @@ function(_ep_add_update_command name)
message(FATAL_ERROR "error: could not find git for fetch of ${name}") message(FATAL_ERROR "error: could not find git for fetch of ${name}")
endif() endif()
set(work_dir ${source_dir}) set(work_dir ${source_dir})
set(comment "Performing update step (git fetch) for '${name}'") set(comment "Performing update step for '${name}'")
get_property(git_tag TARGET ${name} PROPERTY _EP_GIT_TAG) get_property(git_tag TARGET ${name} PROPERTY _EP_GIT_TAG)
if(NOT git_tag) if(NOT git_tag)
set(git_tag "master") set(git_tag "master")
endif() endif()
set(cmd ${GIT_EXECUTABLE} fetch _ep_write_gitupdate_script(${tmp_dir}/${name}-gitupdate.cmake
COMMAND ${GIT_EXECUTABLE} checkout ${git_tag} ${GIT_EXECUTABLE} ${git_tag} ${git_repository} ${work_dir}
COMMAND ${GIT_EXECUTABLE} submodule update --recursive
) )
set(cmd ${CMAKE_COMMAND} -P ${tmp_dir}/${name}-gitupdate.cmake)
set(always 1) set(always 1)
elseif(hg_repository) elseif(hg_repository)
if(NOT HG_EXECUTABLE) if(NOT HG_EXECUTABLE)

View File

@ -221,7 +221,7 @@ function(SQUISH_V4_ADD_TEST testName)
get_target_property(testAUTLocation ${_SQUISH_AUT} LOCATION) get_target_property(testAUTLocation ${_SQUISH_AUT} LOCATION)
get_filename_component(testAUTDir ${testAUTLocation} PATH) get_filename_component(testAUTDir ${testAUTLocation} PATH)
get_target_property(testAUTName ${_SQUISH_AUT} OUTPUT_NAME) get_filename_component(testAUTName ${testAUTLocation} NAME)
get_filename_component(absTestSuite "${_SQUISH_SUITE}" ABSOLUTE) get_filename_component(absTestSuite "${_SQUISH_SUITE}" ABSOLUTE)
if(NOT EXISTS "${absTestSuite}") if(NOT EXISTS "${absTestSuite}")

View File

@ -263,6 +263,23 @@ set(CMAKE_SYSTEM_FRAMEWORK_PATH
/Network/Library/Frameworks /Network/Library/Frameworks
/System/Library/Frameworks) /System/Library/Frameworks)
# Warn about known system mis-configuration case.
if(CMAKE_OSX_SYSROOT)
get_property(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE)
if(NOT _IN_TC AND
NOT IS_SYMLINK "${CMAKE_OSX_SYSROOT}/Library/Frameworks"
AND IS_SYMLINK "${CMAKE_OSX_SYSROOT}/Library/Frameworks/Frameworks")
message(WARNING "The SDK Library/Frameworks path\n"
" ${CMAKE_OSX_SYSROOT}/Library/Frameworks\n"
"is not set up correctly on this system. "
"This is known to occur when installing Xcode 3.2.6:\n"
" http://bugs.python.org/issue14018\n"
"The problem may cause build errors that report missing system frameworks. "
"Fix your SDK symlinks to resolve this issue and avoid this warning."
)
endif()
endif()
# default to searching for application bundles first # default to searching for application bundles first
if(NOT DEFINED CMAKE_FIND_APPBUNDLE) if(NOT DEFINED CMAKE_FIND_APPBUNDLE)
set(CMAKE_FIND_APPBUNDLE FIRST) set(CMAKE_FIND_APPBUNDLE FIRST)

View File

@ -154,6 +154,11 @@ else()
set(_FLAGS_CXX " /GR /GX") set(_FLAGS_CXX " /GR /GX")
set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib") set(CMAKE_C_STANDARD_LIBRARIES_INIT "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib")
endif() endif()
if(MSVC_VERSION LESS 1310)
set(_FLAGS_C " /Zm1000${_FLAGS_C}")
set(_FLAGS_CXX " /Zm1000${_FLAGS_CXX}")
endif()
endif() endif()
set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}") set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
@ -233,7 +238,7 @@ macro(__windows_compiler_msvc lang)
set(CMAKE_${lang}_LINK_EXECUTABLE set(CMAKE_${lang}_LINK_EXECUTABLE
"${_CMAKE_VS_LINK_EXE}<CMAKE_${lang}_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> /Fe<TARGET> /Fd<TARGET_PDB> <OBJECTS> /link /implib:<TARGET_IMPLIB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}") "${_CMAKE_VS_LINK_EXE}<CMAKE_${lang}_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> /Fe<TARGET> /Fd<TARGET_PDB> <OBJECTS> /link /implib:<TARGET_IMPLIB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
set(CMAKE_${lang}_FLAGS_INIT "${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_${lang}} /D_WINDOWS /W3 /Zm1000${_FLAGS_${lang}}") set(CMAKE_${lang}_FLAGS_INIT "${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_${lang}} /D_WINDOWS /W3${_FLAGS_${lang}}")
set(CMAKE_${lang}_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od ${_RTC1}") set(CMAKE_${lang}_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od ${_RTC1}")
set(CMAKE_${lang}_FLAGS_RELEASE_INIT "/MD /O2 /Ob2 /D NDEBUG") set(CMAKE_${lang}_FLAGS_RELEASE_INIT "/MD /O2 /Ob2 /D NDEBUG")
set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /Ob1 /D NDEBUG") set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "/MD /Zi /O2 /Ob1 /D NDEBUG")

View File

@ -203,6 +203,7 @@ set(SRCS
cmGeneratorTarget.h cmGeneratorTarget.h
cmGlobalGenerator.cxx cmGlobalGenerator.cxx
cmGlobalGenerator.h cmGlobalGenerator.h
cmGlobalGeneratorFactory.h
cmGlobalUnixMakefileGenerator3.cxx cmGlobalUnixMakefileGenerator3.cxx
cmGlobalUnixMakefileGenerator3.h cmGlobalUnixMakefileGenerator3.h
cmGraphAdjacencyList.h cmGraphAdjacencyList.h
@ -332,12 +333,6 @@ if (WIN32)
cmGlobalVisualStudio8Generator.h cmGlobalVisualStudio8Generator.h
cmGlobalVisualStudio9Generator.cxx cmGlobalVisualStudio9Generator.cxx
cmGlobalVisualStudio9Generator.h cmGlobalVisualStudio9Generator.h
cmGlobalVisualStudio8Win64Generator.cxx
cmGlobalVisualStudio8Win64Generator.h
cmGlobalVisualStudio9Win64Generator.cxx
cmGlobalVisualStudio9Win64Generator.h
cmGlobalVisualStudio9IA64Generator.cxx
cmGlobalVisualStudio9IA64Generator.h
cmVisualStudioGeneratorOptions.h cmVisualStudioGeneratorOptions.h
cmVisualStudioGeneratorOptions.cxx cmVisualStudioGeneratorOptions.cxx
cmVisualStudio10TargetGenerator.h cmVisualStudio10TargetGenerator.h
@ -346,16 +341,8 @@ if (WIN32)
cmLocalVisualStudio10Generator.h cmLocalVisualStudio10Generator.h
cmGlobalVisualStudio10Generator.h cmGlobalVisualStudio10Generator.h
cmGlobalVisualStudio10Generator.cxx cmGlobalVisualStudio10Generator.cxx
cmGlobalVisualStudio10Win64Generator.h
cmGlobalVisualStudio10Win64Generator.cxx
cmGlobalVisualStudio10IA64Generator.h
cmGlobalVisualStudio10IA64Generator.cxx
cmGlobalVisualStudio11Generator.h cmGlobalVisualStudio11Generator.h
cmGlobalVisualStudio11Generator.cxx cmGlobalVisualStudio11Generator.cxx
cmGlobalVisualStudio11Win64Generator.h
cmGlobalVisualStudio11Win64Generator.cxx
cmGlobalVisualStudio11ARMGenerator.h
cmGlobalVisualStudio11ARMGenerator.cxx
cmGlobalVisualStudioGenerator.cxx cmGlobalVisualStudioGenerator.cxx
cmGlobalVisualStudioGenerator.h cmGlobalVisualStudioGenerator.h
cmGlobalWatcomWMakeGenerator.cxx cmGlobalWatcomWMakeGenerator.cxx

View File

@ -2,5 +2,5 @@
set(CMake_VERSION_MAJOR 2) set(CMake_VERSION_MAJOR 2)
set(CMake_VERSION_MINOR 8) set(CMake_VERSION_MINOR 8)
set(CMake_VERSION_PATCH 10) set(CMake_VERSION_PATCH 10)
set(CMake_VERSION_TWEAK 20121111) set(CMake_VERSION_TWEAK 20121124)
#set(CMake_VERSION_RC 1) #set(CMake_VERSION_RC 1)

View File

@ -97,7 +97,6 @@ int cmCPackGenerator::PrepareNames()
} }
tempDirectory += this->GetOption("CPACK_GENERATOR"); tempDirectory += this->GetOption("CPACK_GENERATOR");
std::string topDirectory = tempDirectory; std::string topDirectory = tempDirectory;
this->GetOption("CPACK_PACKAGE_FILE_NAME");
const char* pfname = this->GetOption("CPACK_PACKAGE_FILE_NAME"); const char* pfname = this->GetOption("CPACK_PACKAGE_FILE_NAME");
if(!pfname) if(!pfname)
{ {
@ -208,7 +207,7 @@ int cmCPackGenerator::InstallProject()
{ {
cmCPackLogger(cmCPackLog::LOG_ERROR, cmCPackLogger(cmCPackLog::LOG_ERROR,
"Problem creating temporary directory: " "Problem creating temporary directory: "
<< (tempInstallDirectory ? tempInstallDirectory : "(NULL}") << (tempInstallDirectory ? tempInstallDirectory : "(NULL)")
<< std::endl); << std::endl);
return 0; return 0;
} }

View File

@ -175,7 +175,7 @@ bool cmCursesStringWidget::HandleInput(int& key, cmCursesMainForm* fm,
} }
else if ( key == ctrl('d') ||key == KEY_DC ) else if ( key == ctrl('d') ||key == KEY_DC )
{ {
if ( form->curcol > 0 ) if ( form->curcol >= 0 )
{ {
form_driver(form, REQ_DEL_CHAR); form_driver(form, REQ_DEL_CHAR);
} }

View File

@ -277,6 +277,10 @@ cmComputeLinkInformation
this->UseImportLibrary = this->UseImportLibrary =
this->Makefile->GetDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX")?true:false; this->Makefile->GetDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX")?true:false;
// Check whether we should skip dependencies on shared library files.
this->LinkDependsNoShared =
this->Target->GetPropertyAsBool("LINK_DEPENDS_NO_SHARED");
// On platforms without import libraries there may be a special flag // On platforms without import libraries there may be a special flag
// to use when creating a plugin (module) that obtains symbols from // to use when creating a plugin (module) that obtains symbols from
// the program that will load it. // the program that will load it.
@ -650,7 +654,11 @@ void cmComputeLinkInformation::AddItem(std::string const& item, cmTarget* tgt)
// Pass the full path to the target file. // Pass the full path to the target file.
std::string lib = tgt->GetFullPath(config, implib, true); std::string lib = tgt->GetFullPath(config, implib, true);
if(!this->LinkDependsNoShared ||
tgt->GetType() != cmTarget::SHARED_LIBRARY)
{
this->Depends.push_back(lib); this->Depends.push_back(lib);
}
this->AddTargetItem(lib, tgt); this->AddTargetItem(lib, tgt);
this->AddLibraryRuntimeInfo(lib, tgt); this->AddLibraryRuntimeInfo(lib, tgt);

View File

@ -82,6 +82,7 @@ private:
// Configuration information. // Configuration information.
const char* Config; const char* Config;
const char* LinkLanguage; const char* LinkLanguage;
bool LinkDependsNoShared;
// Modes for dealing with dependent shared libraries. // Modes for dealing with dependent shared libraries.
enum SharedDepMode enum SharedDepMode

View File

@ -68,6 +68,9 @@ public:
"If <output> names an existing directory the input file is placed " "If <output> names an existing directory the input file is placed "
"in that directory with its original name. " "in that directory with its original name. "
"\n" "\n"
"If the <input> file is modified the build system will re-run CMake "
"to re-configure the file and generate the build system again."
"\n"
"This command replaces any variables in the input file referenced as " "This command replaces any variables in the input file referenced as "
"${VAR} or @VAR@ with their values as determined by CMake. If a " "${VAR} or @VAR@ with their values as determined by CMake. If a "
"variable is not defined, it will be replaced with nothing. " "variable is not defined, it will be replaced with nothing. "
@ -76,13 +79,18 @@ public:
"will be C-style escaped. " "will be C-style escaped. "
"The file will be configured with the current values of CMake " "The file will be configured with the current values of CMake "
"variables. If @ONLY is specified, only variables " "variables. If @ONLY is specified, only variables "
"of the form @VAR@ will be replaces and ${VAR} will be ignored. " "of the form @VAR@ will be replaced and ${VAR} will be ignored. "
"This is useful for configuring scripts that use ${VAR}. " "This is useful for configuring scripts that use ${VAR}."
"Any occurrences of #cmakedefine VAR will be replaced with " "\n"
"either #define VAR or /* #undef VAR */ depending on " "Input file lines of the form \"#cmakedefine VAR ...\" "
"the setting of VAR in CMake. Any occurrences of #cmakedefine01 VAR " "will be replaced with either \"#define VAR ...\" or "
"will be replaced with either #define VAR 1 or #define VAR 0 " "\"/* #undef VAR */\" depending on whether VAR is set in CMake to "
"depending on whether VAR evaluates to TRUE or FALSE in CMake.\n" "any value not considered a false constant by the if() command. "
"(Content of \"...\", if any, is processed as above.) "
"Input file lines of the form \"#cmakedefine01 VAR\" "
"will be replaced with either \"#define VAR 1\" or "
"\"#define VAR 0\" similarly."
"\n"
"With NEWLINE_STYLE the line ending could be adjusted: \n" "With NEWLINE_STYLE the line ending could be adjusted: \n"
" 'UNIX' or 'LF' for \\n, 'DOS', 'WIN32' or 'CRLF' for \\r\\n.\n" " 'UNIX' or 'LF' for \\n, 'DOS', 'WIN32' or 'CRLF' for \\r\\n.\n"
"COPYONLY must not be used with NEWLINE_STYLE.\n"; "COPYONLY must not be used with NEWLINE_STYLE.\n";

View File

@ -1230,6 +1230,15 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
false, false,
"Variables that Control the Build"); "Variables that Control the Build");
cm->DefineProperty
("CMAKE_LINK_DEPENDS_NO_SHARED", cmProperty::VARIABLE,
"Whether to skip link dependencies on shared library files.",
"This variable initializes the LINK_DEPENDS_NO_SHARED "
"property on targets when they are created. "
"See that target property for additional information.",
false,
"Variables that Control the Build");
cm->DefineProperty cm->DefineProperty
("CMAKE_AUTOMOC", cmProperty::VARIABLE, ("CMAKE_AUTOMOC", cmProperty::VARIABLE,
"Whether to handle moc automatically for Qt targets.", "Whether to handle moc automatically for Qt targets.",

View File

@ -89,7 +89,8 @@ public:
" [TIMEOUT timeout] [STATUS status] [LOG log] [SHOW_PROGRESS])\n" " [TIMEOUT timeout] [STATUS status] [LOG log] [SHOW_PROGRESS])\n"
"WRITE will write a message into a file called 'filename'. It " "WRITE will write a message into a file called 'filename'. It "
"overwrites the file if it already exists, and creates the file " "overwrites the file if it already exists, and creates the file "
"if it does not exist.\n" "if it does not exist. (If the file is a build input, use "
"configure_file to update the file only when its content changes.)\n"
"APPEND will write a message into a file same as WRITE, except " "APPEND will write a message into a file same as WRITE, except "
"it will append it to the end of the file\n" "it will append it to the end of the file\n"
"READ will read the content of a file and store it into the " "READ will read the content of a file and store it into the "

View File

@ -90,7 +90,9 @@ public:
"will have the actual values of the arguments passed in. This " "will have the actual values of the arguments passed in. This "
"facilitates creating functions with optional arguments. Additionally " "facilitates creating functions with optional arguments. Additionally "
"ARGV holds the list of all arguments given to the function and ARGN " "ARGV holds the list of all arguments given to the function and ARGN "
"holds the list of argument past the last expected argument." "holds the list of arguments past the last expected argument."
"\n"
"A function opens a new scope: see set(var PARENT_SCOPE) for details."
"\n" "\n"
"See the cmake_policy() command documentation for the behavior of " "See the cmake_policy() command documentation for the behavior of "
"policies inside functions." "policies inside functions."

View File

@ -55,9 +55,9 @@ cmLocalGenerator *cmGlobalBorlandMakefileGenerator::CreateLocalGenerator()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalBorlandMakefileGenerator void cmGlobalBorlandMakefileGenerator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalBorlandMakefileGenerator::GetActualName();
entry.Brief = "Generates Borland makefiles."; entry.Brief = "Generates Borland makefiles.";
entry.Full = ""; entry.Full = "";
} }

View File

@ -23,8 +23,9 @@ class cmGlobalBorlandMakefileGenerator : public cmGlobalNMakeMakefileGenerator
{ {
public: public:
cmGlobalBorlandMakefileGenerator(); cmGlobalBorlandMakefileGenerator();
static cmGlobalGenerator* New() static cmGlobalGeneratorFactory* NewFactory() {
{ return new cmGlobalBorlandMakefileGenerator; } return new cmGlobalGeneratorSimpleFactory
<cmGlobalBorlandMakefileGenerator>(); }
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
@ -32,7 +33,7 @@ public:
static const char* GetActualName() {return "Borland Makefiles";} static const char* GetActualName() {return "Borland Makefiles";}
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();

View File

@ -828,6 +828,7 @@ void cmGlobalGenerator::Configure()
this->LocalGenerators.clear(); this->LocalGenerators.clear();
this->TargetDependencies.clear(); this->TargetDependencies.clear();
this->TotalTargets.clear(); this->TotalTargets.clear();
this->ImportedTargets.clear();
this->LocalGeneratorToTargetMap.clear(); this->LocalGeneratorToTargetMap.clear();
this->ProjectMap.clear(); this->ProjectMap.clear();
this->RuleHashes.clear(); this->RuleHashes.clear();
@ -1555,14 +1556,6 @@ void cmGlobalGenerator::SetConfiguredFilesPath(cmGlobalGenerator* gen)
} }
} }
//----------------------------------------------------------------------------
void cmGlobalGenerator::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "";
entry.Full = "";
}
bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root, bool cmGlobalGenerator::IsExcluded(cmLocalGenerator* root,
cmLocalGenerator* gen) cmLocalGenerator* gen)
{ {

View File

@ -49,9 +49,6 @@ public:
///! Get the name for this generator ///! Get the name for this generator
virtual const char *GetName() const { return "Generic"; }; virtual const char *GetName() const { return "Generic"; };
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
/** /**
* Create LocalGenerators and process the CMakeLists files. This does not * Create LocalGenerators and process the CMakeLists files. This does not
* actually produce any makefiles, DSPs, etc. * actually produce any makefiles, DSPs, etc.

View File

@ -0,0 +1,59 @@
/*============================================================================
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 cmGlobalGeneratorFactory_h
#define cmGlobalGeneratorFactory_h
#include "cmStandardIncludes.h"
class cmGlobalGenerator;
struct cmDocumentationEntry;
/** \class cmGlobalGeneratorFactory
* \brief Responable for creating cmGlobalGenerator instances
*
* Subclasses of this class generate instances of cmGlobalGenerator.
*/
class cmGlobalGeneratorFactory
{
public:
virtual ~cmGlobalGeneratorFactory() {}
/** Create a GlobalGenerator */
virtual cmGlobalGenerator* CreateGlobalGenerator(const char* n) const = 0;
/** Get the documentation entry for this factory */
virtual void GetDocumentation(cmDocumentationEntry& entry) const = 0;
/** Get the names of the current registered generators */
virtual void GetGenerators(std::vector<std::string>& names) const = 0;
};
template<class T>
class cmGlobalGeneratorSimpleFactory : public cmGlobalGeneratorFactory
{
public:
/** Create a GlobalGenerator */
virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const {
if (strcmp(name, T::GetActualName())) return 0;
return new T; }
/** Get the documentation entry for this factory */
virtual void GetDocumentation(cmDocumentationEntry& entry) const {
T::GetDocumentation(entry); }
/** Get the names of the current registered generators */
virtual void GetGenerators(std::vector<std::string>& names) const {
names.push_back(T::GetActualName()); }
};
#endif

View File

@ -61,9 +61,9 @@ cmLocalGenerator *cmGlobalJOMMakefileGenerator::CreateLocalGenerator()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalJOMMakefileGenerator void cmGlobalJOMMakefileGenerator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalJOMMakefileGenerator::GetActualName();
entry.Brief = "Generates JOM makefiles."; entry.Brief = "Generates JOM makefiles.";
entry.Full = ""; entry.Full = "";
} }

View File

@ -23,8 +23,9 @@ class cmGlobalJOMMakefileGenerator : public cmGlobalUnixMakefileGenerator3
{ {
public: public:
cmGlobalJOMMakefileGenerator(); cmGlobalJOMMakefileGenerator();
static cmGlobalGenerator* New() { static cmGlobalGeneratorFactory* NewFactory() {
return new cmGlobalJOMMakefileGenerator; } return new cmGlobalGeneratorSimpleFactory
<cmGlobalJOMMakefileGenerator>(); }
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
return cmGlobalJOMMakefileGenerator::GetActualName();} return cmGlobalJOMMakefileGenerator::GetActualName();}
@ -33,7 +34,7 @@ public:
static const char* GetActualName() {return "NMake Makefiles JOM";} static const char* GetActualName() {return "NMake Makefiles JOM";}
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();

View File

@ -106,9 +106,9 @@ cmLocalGenerator *cmGlobalMSYSMakefileGenerator::CreateLocalGenerator()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalMSYSMakefileGenerator void cmGlobalMSYSMakefileGenerator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalMSYSMakefileGenerator::GetActualName();
entry.Brief = "Generates MSYS makefiles."; entry.Brief = "Generates MSYS makefiles.";
entry.Full = "The makefiles use /bin/sh as the shell. " entry.Full = "The makefiles use /bin/sh as the shell. "
"They require msys to be installed on the machine."; "They require msys to be installed on the machine.";

View File

@ -23,8 +23,9 @@ class cmGlobalMSYSMakefileGenerator : public cmGlobalUnixMakefileGenerator3
{ {
public: public:
cmGlobalMSYSMakefileGenerator(); cmGlobalMSYSMakefileGenerator();
static cmGlobalGenerator* New() { static cmGlobalGeneratorFactory* NewFactory() {
return new cmGlobalMSYSMakefileGenerator; } return new cmGlobalGeneratorSimpleFactory
<cmGlobalMSYSMakefileGenerator>(); }
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
@ -32,7 +33,7 @@ public:
static const char* GetActualName() {return "MSYS Makefiles";} static const char* GetActualName() {return "MSYS Makefiles";}
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();

View File

@ -71,9 +71,9 @@ cmLocalGenerator *cmGlobalMinGWMakefileGenerator::CreateLocalGenerator()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalMinGWMakefileGenerator void cmGlobalMinGWMakefileGenerator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalMinGWMakefileGenerator::GetActualName();
entry.Brief = "Generates a make file for use with mingw32-make."; entry.Brief = "Generates a make file for use with mingw32-make.";
entry.Full = "The makefiles generated use cmd.exe as the shell. " entry.Full = "The makefiles generated use cmd.exe as the shell. "
"They do not require msys or a unix shell."; "They do not require msys or a unix shell.";

View File

@ -23,15 +23,16 @@ class cmGlobalMinGWMakefileGenerator : public cmGlobalUnixMakefileGenerator3
{ {
public: public:
cmGlobalMinGWMakefileGenerator(); cmGlobalMinGWMakefileGenerator();
static cmGlobalGenerator* New() { static cmGlobalGeneratorFactory* NewFactory() {
return new cmGlobalMinGWMakefileGenerator; } return new cmGlobalGeneratorSimpleFactory
<cmGlobalMinGWMakefileGenerator>(); }
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
return cmGlobalMinGWMakefileGenerator::GetActualName();} return cmGlobalMinGWMakefileGenerator::GetActualName();}
static const char* GetActualName() {return "MinGW Makefiles";} static const char* GetActualName() {return "MinGW Makefiles";}
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();

View File

@ -61,9 +61,9 @@ cmLocalGenerator *cmGlobalNMakeMakefileGenerator::CreateLocalGenerator()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalNMakeMakefileGenerator void cmGlobalNMakeMakefileGenerator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalNMakeMakefileGenerator::GetActualName();
entry.Brief = "Generates NMake makefiles."; entry.Brief = "Generates NMake makefiles.";
entry.Full = ""; entry.Full = "";
} }

View File

@ -23,15 +23,16 @@ class cmGlobalNMakeMakefileGenerator : public cmGlobalUnixMakefileGenerator3
{ {
public: public:
cmGlobalNMakeMakefileGenerator(); cmGlobalNMakeMakefileGenerator();
static cmGlobalGenerator* New() { static cmGlobalGeneratorFactory* NewFactory() {
return new cmGlobalNMakeMakefileGenerator; } return new cmGlobalGeneratorSimpleFactory
<cmGlobalNMakeMakefileGenerator>(); }
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
return cmGlobalNMakeMakefileGenerator::GetActualName();} return cmGlobalNMakeMakefileGenerator::GetActualName();}
static const char* GetActualName() {return "NMake Makefiles";} static const char* GetActualName() {return "NMake Makefiles";}
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();

View File

@ -452,9 +452,9 @@ cmLocalGenerator* cmGlobalNinjaGenerator::CreateLocalGenerator()
} }
void cmGlobalNinjaGenerator void cmGlobalNinjaGenerator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalNinjaGenerator::GetActualName();
entry.Brief = "Generates build.ninja files (experimental)."; entry.Brief = "Generates build.ninja files (experimental).";
entry.Full = entry.Full =
"A build.ninja file is generated into the build tree. Recent " "A build.ninja file is generated into the build tree. Recent "

View File

@ -14,6 +14,7 @@
# define cmGlobalNinjaGenerator_h # define cmGlobalNinjaGenerator_h
# include "cmGlobalGenerator.h" # include "cmGlobalGenerator.h"
# include "cmGlobalGeneratorFactory.h"
# include "cmNinjaTypes.h" # include "cmNinjaTypes.h"
//#define NINJA_GEN_VERBOSE_FILES //#define NINJA_GEN_VERBOSE_FILES
@ -160,8 +161,8 @@ public:
cmGlobalNinjaGenerator(); cmGlobalNinjaGenerator();
/// Convenience method for creating an instance of this class. /// Convenience method for creating an instance of this class.
static cmGlobalGenerator* New() { static cmGlobalGeneratorFactory* NewFactory() {
return new cmGlobalNinjaGenerator; } return new cmGlobalGeneratorSimpleFactory<cmGlobalNinjaGenerator>(); }
/// Destructor. /// Destructor.
virtual ~cmGlobalNinjaGenerator() { } virtual ~cmGlobalNinjaGenerator() { }
@ -177,7 +178,7 @@ public:
static const char* GetActualName() { return "Ninja"; } static const char* GetActualName() { return "Ninja"; }
/// Overloaded methods. @see cmGlobalGenerator::GetDocumentation() /// Overloaded methods. @see cmGlobalGenerator::GetDocumentation()
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
/// Overloaded methods. @see cmGlobalGenerator::Generate() /// Overloaded methods. @see cmGlobalGenerator::Generate()
virtual void Generate(); virtual void Generate();

View File

@ -61,9 +61,9 @@ cmLocalGenerator *cmGlobalUnixMakefileGenerator3::CreateLocalGenerator()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalUnixMakefileGenerator3 void cmGlobalUnixMakefileGenerator3
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalUnixMakefileGenerator3::GetActualName();
entry.Brief = "Generates standard UNIX makefiles."; entry.Brief = "Generates standard UNIX makefiles.";
entry.Full = entry.Full =
"A hierarchy of UNIX makefiles is generated into the build tree. Any " "A hierarchy of UNIX makefiles is generated into the build tree. Any "

View File

@ -13,6 +13,7 @@
#define cmGlobalUnixMakefileGenerator3_h #define cmGlobalUnixMakefileGenerator3_h
#include "cmGlobalGenerator.h" #include "cmGlobalGenerator.h"
#include "cmGlobalGeneratorFactory.h"
class cmGeneratedFileStream; class cmGeneratedFileStream;
class cmMakefileTargetGenerator; class cmMakefileTargetGenerator;
@ -54,8 +55,9 @@ class cmGlobalUnixMakefileGenerator3 : public cmGlobalGenerator
{ {
public: public:
cmGlobalUnixMakefileGenerator3(); cmGlobalUnixMakefileGenerator3();
static cmGlobalGenerator* New() { static cmGlobalGeneratorFactory* NewFactory() {
return new cmGlobalUnixMakefileGenerator3; } return new cmGlobalGeneratorSimpleFactory
<cmGlobalUnixMakefileGenerator3>(); }
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
@ -63,7 +65,7 @@ public:
static const char* GetActualName() {return "Unix Makefiles";} static const char* GetActualName() {return "Unix Makefiles";}
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator3 ///! Create a local generator appropriate to this Global Generator3
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();

View File

@ -16,8 +16,61 @@
#include "cmSourceFile.h" #include "cmSourceFile.h"
#include "cmake.h" #include "cmake.h"
static const char vs10Win32generatorName[] = "Visual Studio 10";
static const char vs10Win64generatorName[] = "Visual Studio 10 Win64";
static const char vs10IA64generatorName[] = "Visual Studio 10 IA64";
cmGlobalVisualStudio10Generator::cmGlobalVisualStudio10Generator() class cmGlobalVisualStudio10Generator::Factory
: public cmGlobalGeneratorFactory
{
public:
virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const {
if(!strcmp(name, vs10Win32generatorName))
{
return new cmGlobalVisualStudio10Generator(
vs10Win32generatorName, NULL, NULL);
}
if(!strcmp(name, vs10Win64generatorName))
{
return new cmGlobalVisualStudio10Generator(
vs10Win64generatorName, "x64", "CMAKE_FORCE_WIN64");
}
if(!strcmp(name, vs10IA64generatorName))
{
return new cmGlobalVisualStudio10Generator(
vs10IA64generatorName, "Itanium", "CMAKE_FORCE_IA64");
}
return 0;
}
virtual void GetDocumentation(cmDocumentationEntry& entry) const {
entry.Name = "Visual Studio 10";
entry.Brief = "Generates Visual Studio 10 project files.";
entry.Full =
"It is possible to append a space followed by the platform name "
"to create project files for a specific target platform. E.g. "
"\"Visual Studio 10 Win64\" will create project files for "
"the x64 processor; \"Visual Studio 10 IA64\" for Itanium.";
}
virtual void GetGenerators(std::vector<std::string>& names) const {
names.push_back(vs10Win32generatorName);
names.push_back(vs10Win64generatorName);
names.push_back(vs10IA64generatorName); }
};
//----------------------------------------------------------------------------
cmGlobalGeneratorFactory* cmGlobalVisualStudio10Generator::NewFactory()
{
return new Factory;
}
//----------------------------------------------------------------------------
cmGlobalVisualStudio10Generator::cmGlobalVisualStudio10Generator(
const char* name, const char* architectureId,
const char* additionalPlatformDefinition)
: cmGlobalVisualStudio8Generator(name, architectureId,
additionalPlatformDefinition)
{ {
this->FindMakeProgramFile = "CMakeVS10FindMake.cmake"; this->FindMakeProgramFile = "CMakeVS10FindMake.cmake";
std::string vc10Express; std::string vc10Express;
@ -86,20 +139,19 @@ void cmGlobalVisualStudio10Generator::Generate()
} }
} }
//----------------------------------------------------------------------------
void cmGlobalVisualStudio10Generator
::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "Generates Visual Studio 10 project files.";
entry.Full = "";
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalVisualStudio10Generator void cmGlobalVisualStudio10Generator
::EnableLanguage(std::vector<std::string>const & lang, ::EnableLanguage(std::vector<std::string>const & lang,
cmMakefile *mf, bool optional) cmMakefile *mf, bool optional)
{ {
if(!strcmp(this->ArchitectureId, "Itanium") ||
!strcmp(this->ArchitectureId, "x64"))
{
if(this->IsExpressEdition() && !this->Find64BitTools(mf))
{
return;
}
}
cmGlobalVisualStudio8Generator::EnableLanguage(lang, mf, optional); cmGlobalVisualStudio8Generator::EnableLanguage(lang, mf, optional);
} }

View File

@ -24,9 +24,9 @@ class cmGlobalVisualStudio10Generator :
public cmGlobalVisualStudio8Generator public cmGlobalVisualStudio8Generator
{ {
public: public:
cmGlobalVisualStudio10Generator(); cmGlobalVisualStudio10Generator(const char* name,
static cmGlobalGenerator* New() { const char* architectureId, const char* additionalPlatformDefinition);
return new cmGlobalVisualStudio10Generator; } static cmGlobalGeneratorFactory* NewFactory();
virtual std::string virtual std::string
GenerateBuildCommand(const char* makeProgram, GenerateBuildCommand(const char* makeProgram,
@ -34,15 +34,8 @@ public:
const char* additionalOptions, const char *targetName, const char* additionalOptions, const char *targetName,
const char* config, bool ignoreErrors, bool); const char* config, bool ignoreErrors, bool);
///! Get the name for the generator.
virtual const char* GetName() const {
return cmGlobalVisualStudio10Generator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 10";}
virtual void AddPlatformDefinitions(cmMakefile* mf); virtual void AddPlatformDefinitions(cmMakefile* mf);
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
///! create the correct local generator ///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();
@ -92,6 +85,7 @@ protected:
bool UseFolderProperty(); bool UseFolderProperty();
private: private:
class Factory;
struct LongestSourcePath struct LongestSourcePath
{ {
LongestSourcePath(): Length(0), Target(0), SourceFile(0) {} LongestSourcePath(): Length(0), Target(0), SourceFile(0) {}

View File

@ -1,50 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 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.
============================================================================*/
#include "cmGlobalVisualStudio10IA64Generator.h"
#include "cmMakefile.h"
#include "cmake.h"
//----------------------------------------------------------------------------
cmGlobalVisualStudio10IA64Generator::cmGlobalVisualStudio10IA64Generator()
{
this->ArchitectureId = "x64";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio10IA64Generator
::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "Generates Visual Studio 10 Itanium project files.";
entry.Full = "";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio10IA64Generator
::AddPlatformDefinitions(cmMakefile* mf)
{
this->cmGlobalVisualStudio10Generator::AddPlatformDefinitions(mf);
mf->AddDefinition("CMAKE_FORCE_IA64", "TRUE");
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio10IA64Generator
::EnableLanguage(std::vector<std::string> const& languages,
cmMakefile* mf, bool optional)
{
if(this->IsExpressEdition() && !this->Find64BitTools(mf))
{
return;
}
this->cmGlobalVisualStudio10Generator
::EnableLanguage(languages, mf, optional);
}

View File

@ -1,40 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 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 cmGlobalVisualStudio10IA64Generator_h
#define cmGlobalVisualStudio10IA64Generator_h
#include "cmGlobalVisualStudio10Generator.h"
class cmGlobalVisualStudio10IA64Generator :
public cmGlobalVisualStudio10Generator
{
public:
cmGlobalVisualStudio10IA64Generator();
static cmGlobalGenerator* New() {
return new cmGlobalVisualStudio10IA64Generator; }
///! Get the name for the generator.
virtual const char* GetName() const {
return cmGlobalVisualStudio10IA64Generator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 10 IA64";}
virtual const char* GetPlatformName() const {return "Itanium";}
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
virtual void AddPlatformDefinitions(cmMakefile* mf);
virtual void EnableLanguage(std::vector<std::string>const& languages,
cmMakefile *, bool optional);
};
#endif

View File

@ -1,50 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 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.
============================================================================*/
#include "cmGlobalVisualStudio10Win64Generator.h"
#include "cmMakefile.h"
#include "cmake.h"
//----------------------------------------------------------------------------
cmGlobalVisualStudio10Win64Generator::cmGlobalVisualStudio10Win64Generator()
{
this->ArchitectureId = "x64";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio10Win64Generator
::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "Generates Visual Studio 10 Win64 project files.";
entry.Full = "";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio10Win64Generator
::AddPlatformDefinitions(cmMakefile* mf)
{
this->cmGlobalVisualStudio10Generator::AddPlatformDefinitions(mf);
mf->AddDefinition("CMAKE_FORCE_WIN64", "TRUE");
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio10Win64Generator
::EnableLanguage(std::vector<std::string> const& languages,
cmMakefile* mf, bool optional)
{
if(this->IsExpressEdition() && !this->Find64BitTools(mf))
{
return;
}
this->cmGlobalVisualStudio10Generator
::EnableLanguage(languages, mf, optional);
}

View File

@ -1,40 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 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 cmGlobalVisualStudio10Win64Generator_h
#define cmGlobalVisualStudio10Win64Generator_h
#include "cmGlobalVisualStudio10Generator.h"
class cmGlobalVisualStudio10Win64Generator :
public cmGlobalVisualStudio10Generator
{
public:
cmGlobalVisualStudio10Win64Generator();
static cmGlobalGenerator* New() {
return new cmGlobalVisualStudio10Win64Generator; }
///! Get the name for the generator.
virtual const char* GetName() const {
return cmGlobalVisualStudio10Win64Generator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 10 Win64";}
virtual const char* GetPlatformName() const {return "x64";}
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
virtual void AddPlatformDefinitions(cmMakefile* mf);
virtual void EnableLanguage(std::vector<std::string>const& languages,
cmMakefile *, bool optional);
};
#endif

View File

@ -1,29 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2011 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.
============================================================================*/
#include "cmGlobalVisualStudio11ARMGenerator.h"
#include "cmMakefile.h"
#include "cmake.h"
//----------------------------------------------------------------------------
cmGlobalVisualStudio11ARMGenerator::cmGlobalVisualStudio11ARMGenerator()
{
this->ArchitectureId = "ARM";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio11ARMGenerator
::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "Generates Visual Studio 11 ARM project files.";
entry.Full = "";
}

View File

@ -1,35 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2011 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 cmGlobalVisualStudio11ARMGenerator_h
#define cmGlobalVisualStudio11ARMGenerator_h
#include "cmGlobalVisualStudio11Generator.h"
class cmGlobalVisualStudio11ARMGenerator :
public cmGlobalVisualStudio11Generator
{
public:
cmGlobalVisualStudio11ARMGenerator();
static cmGlobalGenerator* New() {
return new cmGlobalVisualStudio11ARMGenerator; }
///! Get the name for the generator.
virtual const char* GetName() const {
return cmGlobalVisualStudio11ARMGenerator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 11 ARM";}
virtual const char* GetPlatformName() const {return "ARM";}
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
};
#endif

View File

@ -13,8 +13,61 @@
#include "cmLocalVisualStudio10Generator.h" #include "cmLocalVisualStudio10Generator.h"
#include "cmMakefile.h" #include "cmMakefile.h"
static const char vs11Win32generatorName[] = "Visual Studio 11";
static const char vs11Win64generatorName[] = "Visual Studio 11 Win64";
static const char vs11ARMgeneratorName[] = "Visual Studio 11 ARM";
class cmGlobalVisualStudio11Generator::Factory
: public cmGlobalGeneratorFactory
{
public:
virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const {
if(!strcmp(name, vs11Win32generatorName))
{
return new cmGlobalVisualStudio11Generator(
vs11Win32generatorName, NULL, NULL);
}
if(!strcmp(name, vs11Win64generatorName))
{
return new cmGlobalVisualStudio11Generator(
vs11Win64generatorName, "x64", "CMAKE_FORCE_WIN64");
}
if(!strcmp(name, vs11ARMgeneratorName))
{
return new cmGlobalVisualStudio11Generator(
vs11ARMgeneratorName, "ARM", NULL);
}
return 0;
}
virtual void GetDocumentation(cmDocumentationEntry& entry) const {
entry.Name = "Visual Studio 11";
entry.Brief = "Generates Visual Studio 11 project files.";
entry.Full =
"It is possible to append a space followed by the platform name "
"to create project files for a specific target platform. E.g. "
"\"Visual Studio 11 Win64\" will create project files for "
"the x64 processor; \"Visual Studio 11 ARM\" for ARM.";
}
virtual void GetGenerators(std::vector<std::string>& names) const {
names.push_back(vs11Win32generatorName);
names.push_back(vs11Win64generatorName);
names.push_back(vs11ARMgeneratorName); }
};
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmGlobalVisualStudio11Generator::cmGlobalVisualStudio11Generator() cmGlobalGeneratorFactory* cmGlobalVisualStudio11Generator::NewFactory()
{
return new Factory;
}
//----------------------------------------------------------------------------
cmGlobalVisualStudio11Generator::cmGlobalVisualStudio11Generator(
const char* name, const char* architectureId,
const char* additionalPlatformDefinition)
: cmGlobalVisualStudio10Generator(name, architectureId,
additionalPlatformDefinition)
{ {
this->FindMakeProgramFile = "CMakeVS11FindMake.cmake"; this->FindMakeProgramFile = "CMakeVS11FindMake.cmake";
std::string vc11Express; std::string vc11Express;
@ -40,12 +93,3 @@ cmLocalGenerator *cmGlobalVisualStudio11Generator::CreateLocalGenerator()
lg->SetGlobalGenerator(this); lg->SetGlobalGenerator(this);
return lg; return lg;
} }
//----------------------------------------------------------------------------
void cmGlobalVisualStudio11Generator
::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "Generates Visual Studio 11 project files.";
entry.Full = "";
}

View File

@ -20,20 +20,12 @@ class cmGlobalVisualStudio11Generator:
public cmGlobalVisualStudio10Generator public cmGlobalVisualStudio10Generator
{ {
public: public:
cmGlobalVisualStudio11Generator(); cmGlobalVisualStudio11Generator(const char* name,
static cmGlobalGenerator* New() { const char* architectureId, const char* additionalPlatformDefinition);
return new cmGlobalVisualStudio11Generator; } static cmGlobalGeneratorFactory* NewFactory();
///! Get the name for the generator.
virtual const char* GetName() const {
return cmGlobalVisualStudio11Generator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 11";}
virtual void WriteSLNHeader(std::ostream& fout); virtual void WriteSLNHeader(std::ostream& fout);
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
///! create the correct local generator ///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();
@ -41,5 +33,7 @@ public:
virtual std::string GetUserMacrosDirectory() { return ""; } virtual std::string GetUserMacrosDirectory() { return ""; }
protected: protected:
virtual const char* GetIDEVersion() { return "11.0"; } virtual const char* GetIDEVersion() { return "11.0"; }
private:
class Factory;
}; };
#endif #endif

View File

@ -1,37 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2011 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.
============================================================================*/
#include "cmGlobalVisualStudio11Win64Generator.h"
#include "cmMakefile.h"
#include "cmake.h"
//----------------------------------------------------------------------------
cmGlobalVisualStudio11Win64Generator::cmGlobalVisualStudio11Win64Generator()
{
this->ArchitectureId = "x64";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio11Win64Generator
::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "Generates Visual Studio 11 Win64 project files.";
entry.Full = "";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio11Win64Generator
::AddPlatformDefinitions(cmMakefile* mf)
{
this->cmGlobalVisualStudio11Generator::AddPlatformDefinitions(mf);
mf->AddDefinition("CMAKE_FORCE_WIN64", "TRUE");
}

View File

@ -1,37 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2011 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 cmGlobalVisualStudio11Win64Generator_h
#define cmGlobalVisualStudio11Win64Generator_h
#include "cmGlobalVisualStudio11Generator.h"
class cmGlobalVisualStudio11Win64Generator :
public cmGlobalVisualStudio11Generator
{
public:
cmGlobalVisualStudio11Win64Generator();
static cmGlobalGenerator* New() {
return new cmGlobalVisualStudio11Win64Generator; }
///! Get the name for the generator.
virtual const char* GetName() const {
return cmGlobalVisualStudio11Win64Generator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 11 Win64";}
virtual const char* GetPlatformName() const {return "x64";}
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
virtual void AddPlatformDefinitions(cmMakefile* mf);
};
#endif

View File

@ -200,7 +200,6 @@ void cmGlobalVisualStudio6Generator
tt != orderedProjectTargets.end(); ++tt) tt != orderedProjectTargets.end(); ++tt)
{ {
cmTarget* target = *tt; cmTarget* target = *tt;
cmMakefile* mf = target->GetMakefile();
// Write the project into the DSW file // Write the project into the DSW file
const char* expath = target->GetProperty("EXTERNAL_MSPROJECT"); const char* expath = target->GetProperty("EXTERNAL_MSPROJECT");
if(expath) if(expath)
@ -398,9 +397,9 @@ cmGlobalVisualStudio6Generator::WriteUtilityDepend(cmTarget* target)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalVisualStudio6Generator void cmGlobalVisualStudio6Generator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalVisualStudio6Generator::GetActualName();
entry.Brief = "Generates Visual Studio 6 project files."; entry.Brief = "Generates Visual Studio 6 project files.";
entry.Full = ""; entry.Full = "";
} }

View File

@ -13,6 +13,7 @@
#define cmGlobalVisualStudio6Generator_h #define cmGlobalVisualStudio6Generator_h
#include "cmGlobalVisualStudioGenerator.h" #include "cmGlobalVisualStudioGenerator.h"
#include "cmGlobalGeneratorFactory.h"
class cmTarget; class cmTarget;
@ -25,8 +26,9 @@ class cmGlobalVisualStudio6Generator : public cmGlobalVisualStudioGenerator
{ {
public: public:
cmGlobalVisualStudio6Generator(); cmGlobalVisualStudio6Generator();
static cmGlobalGenerator* New() { static cmGlobalGeneratorFactory* NewFactory() {
return new cmGlobalVisualStudio6Generator; } return new cmGlobalGeneratorSimpleFactory
<cmGlobalVisualStudio6Generator>(); }
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
@ -34,7 +36,7 @@ public:
static const char* GetActualName() {return "Visual Studio 6";} static const char* GetActualName() {return "Visual Studio 6";}
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();

View File

@ -128,6 +128,9 @@ void cmGlobalVisualStudio71Generator
fout << "\tEndGlobalSection\n"; fout << "\tEndGlobalSection\n";
} }
// Write out global sections
this->WriteSLNGlobalSections(fout, root);
// Write the footer for the SLN file // Write the footer for the SLN file
this->WriteSLNFooter(fout); this->WriteSLNFooter(fout);
} }
@ -273,8 +276,9 @@ void cmGlobalVisualStudio71Generator
// Write a dsp file into the SLN file, Note, that dependencies from // Write a dsp file into the SLN file, Note, that dependencies from
// executables to the libraries it uses are also done here // executables to the libraries it uses are also done here
void cmGlobalVisualStudio71Generator void cmGlobalVisualStudio71Generator
::WriteProjectConfigurations(std::ostream& fout, const char* name, ::WriteProjectConfigurations(
bool partOfDefaultBuild, std::ostream& fout, const char* name,
const std::set<std::string>& configsPartOfDefaultBuild,
const char* platformMapping) const char* platformMapping)
{ {
std::string guid = this->GetGUID(name); std::string guid = this->GetGUID(name);
@ -284,7 +288,9 @@ void cmGlobalVisualStudio71Generator
fout << "\t\t{" << guid << "}." << *i fout << "\t\t{" << guid << "}." << *i
<< ".ActiveCfg = " << *i << "|" << ".ActiveCfg = " << *i << "|"
<< (platformMapping ? platformMapping : "Win32") << std::endl; << (platformMapping ? platformMapping : "Win32") << std::endl;
if(partOfDefaultBuild) std::set<std::string>::const_iterator
ci = configsPartOfDefaultBuild.find(*i);
if(!(ci == configsPartOfDefaultBuild.end()))
{ {
fout << "\t\t{" << guid << "}." << *i fout << "\t\t{" << guid << "}." << *i
<< ".Build.0 = " << *i << "|" << ".Build.0 = " << *i << "|"
@ -293,17 +299,6 @@ void cmGlobalVisualStudio71Generator
} }
} }
//----------------------------------------------------------------------------
// Standard end of dsw file
void cmGlobalVisualStudio71Generator::WriteSLNFooter(std::ostream& fout)
{
fout << "\tGlobalSection(ExtensibilityGlobals) = postSolution\n"
<< "\tEndGlobalSection\n"
<< "\tGlobalSection(ExtensibilityAddIns) = postSolution\n"
<< "\tEndGlobalSection\n"
<< "EndGlobal\n";
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// ouput standard header for dsw file // ouput standard header for dsw file
void cmGlobalVisualStudio71Generator::WriteSLNHeader(std::ostream& fout) void cmGlobalVisualStudio71Generator::WriteSLNHeader(std::ostream& fout)
@ -313,9 +308,9 @@ void cmGlobalVisualStudio71Generator::WriteSLNHeader(std::ostream& fout)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalVisualStudio71Generator void cmGlobalVisualStudio71Generator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalVisualStudio71Generator::GetActualName();
entry.Brief = "Generates Visual Studio .NET 2003 project files."; entry.Brief = "Generates Visual Studio .NET 2003 project files.";
entry.Full = ""; entry.Full = "";
} }

View File

@ -24,8 +24,9 @@ class cmGlobalVisualStudio71Generator : public cmGlobalVisualStudio7Generator
{ {
public: public:
cmGlobalVisualStudio71Generator(); cmGlobalVisualStudio71Generator();
static cmGlobalGenerator* New() static cmGlobalGeneratorFactory* NewFactory() {
{ return new cmGlobalVisualStudio71Generator; } return new cmGlobalGeneratorSimpleFactory
<cmGlobalVisualStudio71Generator>(); }
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
@ -33,7 +34,7 @@ public:
static const char* GetActualName() {return "Visual Studio 7 .NET 2003";} static const char* GetActualName() {return "Visual Studio 7 .NET 2003";}
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();
@ -61,16 +62,15 @@ protected:
const char* name, const char* path, cmTarget &t); const char* name, const char* path, cmTarget &t);
virtual void WriteProjectDepends(std::ostream& fout, virtual void WriteProjectDepends(std::ostream& fout,
const char* name, const char* path, cmTarget &t); const char* name, const char* path, cmTarget &t);
virtual void WriteProjectConfigurations(std::ostream& fout, virtual void WriteProjectConfigurations(
const char* name, std::ostream& fout, const char* name,
bool partOfDefaultBuild, const std::set<std::string>& configsPartOfDefaultBuild,
const char* platformMapping = NULL); const char* platformMapping = NULL);
virtual void WriteExternalProject(std::ostream& fout, virtual void WriteExternalProject(std::ostream& fout,
const char* name, const char* name,
const char* path, const char* path,
const char* typeGuid, const char* typeGuid,
const std::set<cmStdString>& depends); const std::set<cmStdString>& depends);
virtual void WriteSLNFooter(std::ostream& fout);
virtual void WriteSLNHeader(std::ostream& fout); virtual void WriteSLNHeader(std::ostream& fout);
std::string ProjectConfigurationSectionName; std::string ProjectConfigurationSectionName;

View File

@ -10,6 +10,7 @@
See the License for more information. See the License for more information.
============================================================================*/ ============================================================================*/
#include "windows.h" // this must be first to define GetCurrentDirectory #include "windows.h" // this must be first to define GetCurrentDirectory
#include <assert.h>
#include "cmGlobalVisualStudio7Generator.h" #include "cmGlobalVisualStudio7Generator.h"
#include "cmGeneratedFileStream.h" #include "cmGeneratedFileStream.h"
#include "cmLocalVisualStudio7Generator.h" #include "cmLocalVisualStudio7Generator.h"
@ -243,20 +244,23 @@ void cmGlobalVisualStudio7Generator::WriteTargetConfigurations(
const char* expath = target->GetProperty("EXTERNAL_MSPROJECT"); const char* expath = target->GetProperty("EXTERNAL_MSPROJECT");
if(expath) if(expath)
{ {
std::set<std::string> allConfigurations(this->Configurations.begin(),
this->Configurations.end());
this->WriteProjectConfigurations( this->WriteProjectConfigurations(
fout, target->GetName(), fout, target->GetName(),
true, target->GetProperty("VS_PLATFORM_MAPPING")); allConfigurations, target->GetProperty("VS_PLATFORM_MAPPING"));
} }
else else
{ {
bool partOfDefaultBuild = this->IsPartOfDefaultBuild( const std::set<std::string>& configsPartOfDefaultBuild =
root->GetMakefile()->GetProjectName(), target); this->IsPartOfDefaultBuild(root->GetMakefile()->GetProjectName(),
target);
const char *vcprojName = const char *vcprojName =
target->GetProperty("GENERATOR_FILE_NAME"); target->GetProperty("GENERATOR_FILE_NAME");
if (vcprojName) if (vcprojName)
{ {
this->WriteProjectConfigurations(fout, vcprojName, this->WriteProjectConfigurations(fout, vcprojName,
partOfDefaultBuild); configsPartOfDefaultBuild);
} }
} }
} }
@ -431,6 +435,9 @@ void cmGlobalVisualStudio7Generator
this->WriteTargetConfigurations(fout, root, orderedProjectTargets); this->WriteTargetConfigurations(fout, root, orderedProjectTargets);
fout << "\tEndGlobalSection\n"; fout << "\tEndGlobalSection\n";
// Write out global sections
this->WriteSLNGlobalSections(fout, root);
// Write the footer for the SLN file // Write the footer for the SLN file
this->WriteSLNFooter(fout); this->WriteSLNFooter(fout);
} }
@ -579,8 +586,9 @@ cmGlobalVisualStudio7Generator
// Write a dsp file into the SLN file, Note, that dependencies from // Write a dsp file into the SLN file, Note, that dependencies from
// executables to the libraries it uses are also done here // executables to the libraries it uses are also done here
void cmGlobalVisualStudio7Generator void cmGlobalVisualStudio7Generator
::WriteProjectConfigurations(std::ostream& fout, const char* name, ::WriteProjectConfigurations(
bool partOfDefaultBuild, std::ostream& fout, const char* name,
const std::set<std::string>& configsPartOfDefaultBuild,
const char* platformMapping) const char* platformMapping)
{ {
std::string guid = this->GetGUID(name); std::string guid = this->GetGUID(name);
@ -590,7 +598,9 @@ void cmGlobalVisualStudio7Generator
fout << "\t\t{" << guid << "}." << *i fout << "\t\t{" << guid << "}." << *i
<< ".ActiveCfg = " << *i << "|" << ".ActiveCfg = " << *i << "|"
<< (platformMapping ? platformMapping : "Win32") << "\n"; << (platformMapping ? platformMapping : "Win32") << "\n";
if(partOfDefaultBuild) std::set<std::string>::const_iterator
ci = configsPartOfDefaultBuild.find(*i);
if(!(ci == configsPartOfDefaultBuild.end()))
{ {
fout << "\t\t{" << guid << "}." << *i fout << "\t\t{" << guid << "}." << *i
<< ".Build.0 = " << *i << "|" << ".Build.0 = " << *i << "|"
@ -624,14 +634,73 @@ void cmGlobalVisualStudio7Generator::WriteExternalProject(std::ostream& fout,
void cmGlobalVisualStudio7Generator
::WriteSLNGlobalSections(std::ostream& fout,
cmLocalGenerator* root)
{
bool extensibilityGlobalsOverridden = false;
bool extensibilityAddInsOverridden = false;
const cmPropertyMap& props = root->GetMakefile()->GetProperties();
for(cmPropertyMap::const_iterator itProp = props.begin();
itProp != props.end(); ++itProp)
{
if(itProp->first.find("VS_GLOBAL_SECTION_") == 0)
{
std::string sectionType;
std::string name = itProp->first.substr(18);
if(name.find("PRE_") == 0)
{
name = name.substr(4);
sectionType = "preSolution";
}
else if(name.find("POST_") == 0)
{
name = name.substr(5);
sectionType = "postSolution";
}
else
continue;
if(!name.empty())
{
if(name == "ExtensibilityGlobals" && sectionType == "postSolution")
extensibilityGlobalsOverridden = true;
else if(name == "ExtensibilityAddIns" && sectionType == "postSolution")
extensibilityAddInsOverridden = true;
fout << "\tGlobalSection(" << name << ") = " << sectionType << "\n";
std::vector<std::string> keyValuePairs;
cmSystemTools::ExpandListArgument(itProp->second.GetValue(),
keyValuePairs);
for(std::vector<std::string>::const_iterator itPair =
keyValuePairs.begin(); itPair != keyValuePairs.end(); ++itPair)
{
const std::string::size_type posEqual = itPair->find('=');
if(posEqual != std::string::npos)
{
const std::string key =
cmSystemTools::TrimWhitespace(itPair->substr(0, posEqual));
const std::string value =
cmSystemTools::TrimWhitespace(itPair->substr(posEqual + 1));
fout << "\t\t" << key << " = " << value << "\n";
}
}
fout << "\tEndGlobalSection\n";
}
}
}
if(!extensibilityGlobalsOverridden)
fout << "\tGlobalSection(ExtensibilityGlobals) = postSolution\n"
<< "\tEndGlobalSection\n";
if(!extensibilityAddInsOverridden)
fout << "\tGlobalSection(ExtensibilityAddIns) = postSolution\n"
<< "\tEndGlobalSection\n";
}
// Standard end of dsw file // Standard end of dsw file
void cmGlobalVisualStudio7Generator::WriteSLNFooter(std::ostream& fout) void cmGlobalVisualStudio7Generator::WriteSLNFooter(std::ostream& fout)
{ {
fout << "\tGlobalSection(ExtensibilityGlobals) = postSolution\n" fout << "EndGlobal\n";
<< "\tEndGlobalSection\n"
<< "\tGlobalSection(ExtensibilityAddIns) = postSolution\n"
<< "\tEndGlobalSection\n"
<< "EndGlobal\n";
} }
@ -740,9 +809,9 @@ std::vector<std::string> *cmGlobalVisualStudio7Generator::GetConfigurations()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalVisualStudio7Generator void cmGlobalVisualStudio7Generator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalVisualStudio7Generator::GetActualName();
entry.Brief = "Generates Visual Studio .NET 2002 project files."; entry.Brief = "Generates Visual Studio .NET 2002 project files.";
entry.Full = ""; entry.Full = "";
} }
@ -763,26 +832,34 @@ cmGlobalVisualStudio7Generator
} }
} }
bool cmGlobalVisualStudio7Generator::IsPartOfDefaultBuild(const char* project, std::set<std::string>
cmGlobalVisualStudio7Generator::IsPartOfDefaultBuild(const char* project,
cmTarget* target) cmTarget* target)
{ {
if(target->GetPropertyAsBool("EXCLUDE_FROM_DEFAULT_BUILD")) std::set<std::string> activeConfigs;
{
return false;
}
// if it is a utilitiy target then only make it part of the // if it is a utilitiy target then only make it part of the
// default build if another target depends on it // default build if another target depends on it
int type = target->GetType(); int type = target->GetType();
if (type == cmTarget::GLOBAL_TARGET) if (type == cmTarget::GLOBAL_TARGET)
{ {
return false; return activeConfigs;
} }
if(type == cmTarget::UTILITY) if(type == cmTarget::UTILITY && !this->IsDependedOn(project, target))
{ {
return this->IsDependedOn(project, target); return activeConfigs;
} }
// default is to be part of the build // inspect EXCLUDE_FROM_DEFAULT_BUILD[_<CONFIG>] properties
return true; for(std::vector<std::string>::iterator i = this->Configurations.begin();
i != this->Configurations.end(); ++i)
{
const char* propertyValue =
target->GetFeature("EXCLUDE_FROM_DEFAULT_BUILD", i->c_str());
if(cmSystemTools::IsOff(propertyValue))
{
activeConfigs.insert(*i);
}
}
return activeConfigs;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

View File

@ -13,6 +13,7 @@
#define cmGlobalVisualStudio7Generator_h #define cmGlobalVisualStudio7Generator_h
#include "cmGlobalVisualStudioGenerator.h" #include "cmGlobalVisualStudioGenerator.h"
#include "cmGlobalGeneratorFactory.h"
class cmTarget; class cmTarget;
struct cmIDEFlagTable; struct cmIDEFlagTable;
@ -26,8 +27,9 @@ class cmGlobalVisualStudio7Generator : public cmGlobalVisualStudioGenerator
{ {
public: public:
cmGlobalVisualStudio7Generator(); cmGlobalVisualStudio7Generator();
static cmGlobalGenerator* New() { static cmGlobalGeneratorFactory* NewFactory() {
return new cmGlobalVisualStudio7Generator; } return new cmGlobalGeneratorSimpleFactory
<cmGlobalVisualStudio7Generator>(); }
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
@ -38,7 +40,7 @@ public:
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
/** /**
* Try to determine system infomation such as shared library * Try to determine system infomation such as shared library
@ -105,10 +107,12 @@ protected:
const char* name, const char* path, cmTarget &t); const char* name, const char* path, cmTarget &t);
virtual void WriteProjectDepends(std::ostream& fout, virtual void WriteProjectDepends(std::ostream& fout,
const char* name, const char* path, cmTarget &t); const char* name, const char* path, cmTarget &t);
virtual void WriteProjectConfigurations(std::ostream& fout, virtual void WriteProjectConfigurations(
const char* name, std::ostream& fout, const char* name,
bool partOfDefaultBuild, const std::set<std::string>& configsPartOfDefaultBuild,
const char* platformMapping = NULL); const char* platformMapping = NULL);
virtual void WriteSLNGlobalSections(std::ostream& fout,
cmLocalGenerator* root);
virtual void WriteSLNFooter(std::ostream& fout); virtual void WriteSLNFooter(std::ostream& fout);
virtual void WriteSLNHeader(std::ostream& fout); virtual void WriteSLNHeader(std::ostream& fout);
virtual std::string WriteUtilityDepend(cmTarget* target); virtual std::string WriteUtilityDepend(cmTarget* target);
@ -136,7 +140,7 @@ protected:
std::string ConvertToSolutionPath(const char* path); std::string ConvertToSolutionPath(const char* path);
bool IsPartOfDefaultBuild(const char* project, std::set<std::string> IsPartOfDefaultBuild(const char* project,
cmTarget* target); cmTarget* target);
std::vector<std::string> Configurations; std::vector<std::string> Configurations;
std::map<cmStdString, cmStdString> GUIDMap; std::map<cmStdString, cmStdString> GUIDMap;

View File

@ -16,11 +16,74 @@
#include "cmake.h" #include "cmake.h"
#include "cmGeneratedFileStream.h" #include "cmGeneratedFileStream.h"
static const char vs8Win32generatorName[] = "Visual Studio 8 2005";
static const char vs8Win64generatorName[] = "Visual Studio 8 2005 Win64";
class cmGlobalVisualStudio8Generator::Factory
: public cmGlobalGeneratorFactory
{
public:
virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const {
if(!strcmp(name, vs8Win32generatorName))
{
return new cmGlobalVisualStudio8Generator(
vs8Win32generatorName, NULL, NULL);
}
if(!strcmp(name, vs8Win64generatorName))
{
return new cmGlobalVisualStudio8Generator(
vs8Win64generatorName, "x64", "CMAKE_FORCE_WIN64");
}
return 0;
}
virtual void GetDocumentation(cmDocumentationEntry& entry) const {
entry.Name = "Visual Studio 8 2005";
entry.Brief = "Generates Visual Studio 8 2005 project files.";
entry.Full =
"It is possible to append a space followed by the platform name "
"to create project files for a specific target platform. E.g. "
"\"Visual Studio 8 2005 Win64\" will create project files for "
"the x64 processor.";
}
virtual void GetGenerators(std::vector<std::string>& names) const {
names.push_back(vs8Win32generatorName);
names.push_back(vs8Win64generatorName); }
};
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmGlobalVisualStudio8Generator::cmGlobalVisualStudio8Generator() cmGlobalGeneratorFactory* cmGlobalVisualStudio8Generator::NewFactory()
{
return new Factory;
}
//----------------------------------------------------------------------------
cmGlobalVisualStudio8Generator::cmGlobalVisualStudio8Generator(
const char* name, const char* architectureId,
const char* additionalPlatformDefinition)
{ {
this->FindMakeProgramFile = "CMakeVS8FindMake.cmake"; this->FindMakeProgramFile = "CMakeVS8FindMake.cmake";
this->ProjectConfigurationSectionName = "ProjectConfigurationPlatforms"; this->ProjectConfigurationSectionName = "ProjectConfigurationPlatforms";
this->Name = name;
if (architectureId)
{
this->ArchitectureId = architectureId;
}
if (additionalPlatformDefinition)
{
this->AdditionalPlatformDefinition = additionalPlatformDefinition;
}
}
//----------------------------------------------------------------------------
const char* cmGlobalVisualStudio8Generator::GetPlatformName() const
{
if (!strcmp(this->ArchitectureId, "X86"))
{
return "Win32";
}
return this->ArchitectureId;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -45,9 +108,9 @@ void cmGlobalVisualStudio8Generator::WriteSLNHeader(std::ostream& fout)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalVisualStudio8Generator void cmGlobalVisualStudio8Generator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalVisualStudio8Generator::GetActualName();
entry.Brief = "Generates Visual Studio 8 2005 project files."; entry.Brief = "Generates Visual Studio 8 2005 project files.";
entry.Full = ""; entry.Full = "";
} }
@ -204,7 +267,6 @@ void cmGlobalVisualStudio8Generator::AddCheckTarget()
// overwritten by the CreateVCProjBuildRule. // overwritten by the CreateVCProjBuildRule.
// (this could be avoided with per-target source files) // (this could be avoided with per-target source files)
const char* no_main_dependency = 0; const char* no_main_dependency = 0;
const char* no_working_directory = 0;
if(cmSourceFile* file = if(cmSourceFile* file =
mf->AddCustomCommandToOutput( mf->AddCustomCommandToOutput(
stamps, listFiles, stamps, listFiles,
@ -258,8 +320,9 @@ cmGlobalVisualStudio8Generator
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void void
cmGlobalVisualStudio8Generator cmGlobalVisualStudio8Generator
::WriteProjectConfigurations(std::ostream& fout, const char* name, ::WriteProjectConfigurations(
bool partOfDefaultBuild, std::ostream& fout, const char* name,
const std::set<std::string>& configsPartOfDefaultBuild,
const char* platformMapping) const char* platformMapping)
{ {
std::string guid = this->GetGUID(name); std::string guid = this->GetGUID(name);
@ -270,7 +333,9 @@ cmGlobalVisualStudio8Generator
<< "|" << this->GetPlatformName() << ".ActiveCfg = " << *i << "|" << "|" << this->GetPlatformName() << ".ActiveCfg = " << *i << "|"
<< (platformMapping ? platformMapping : this->GetPlatformName()) << (platformMapping ? platformMapping : this->GetPlatformName())
<< "\n"; << "\n";
if(partOfDefaultBuild) std::set<std::string>::const_iterator
ci = configsPartOfDefaultBuild.find(*i);
if(!(ci == configsPartOfDefaultBuild.end()))
{ {
fout << "\t\t{" << guid << "}." << *i fout << "\t\t{" << guid << "}." << *i
<< "|" << this->GetPlatformName() << ".Build.0 = " << *i << "|" << "|" << this->GetPlatformName() << ".Build.0 = " << *i << "|"

View File

@ -23,19 +23,17 @@
class cmGlobalVisualStudio8Generator : public cmGlobalVisualStudio71Generator class cmGlobalVisualStudio8Generator : public cmGlobalVisualStudio71Generator
{ {
public: public:
cmGlobalVisualStudio8Generator(); cmGlobalVisualStudio8Generator(const char* name,
static cmGlobalGenerator* New() { const char* architectureId, const char* additionalPlatformDefinition);
return new cmGlobalVisualStudio8Generator; } static cmGlobalGeneratorFactory* NewFactory();
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {return this->Name;}
return cmGlobalVisualStudio8Generator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 8 2005";}
virtual const char* GetPlatformName() const {return "Win32";} const char* GetPlatformName() const;
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();
@ -74,12 +72,17 @@ protected:
static cmIDEFlagTable const* GetExtraFlagTableVS8(); static cmIDEFlagTable const* GetExtraFlagTableVS8();
virtual void WriteSLNHeader(std::ostream& fout); virtual void WriteSLNHeader(std::ostream& fout);
virtual void WriteSolutionConfigurations(std::ostream& fout); virtual void WriteSolutionConfigurations(std::ostream& fout);
virtual void WriteProjectConfigurations(std::ostream& fout, virtual void WriteProjectConfigurations(
const char* name, std::ostream& fout, const char* name,
bool partOfDefaultBuild, const std::set<std::string>& configsPartOfDefaultBuild,
const char* platformMapping = NULL); const char* platformMapping = NULL);
virtual bool ComputeTargetDepends(); virtual bool ComputeTargetDepends();
virtual void WriteProjectDepends(std::ostream& fout, const char* name, virtual void WriteProjectDepends(std::ostream& fout, const char* name,
const char* path, cmTarget &t); const char* path, cmTarget &t);
const char* Name;
private:
class Factory;
}; };
#endif #endif

View File

@ -1,40 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 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.
============================================================================*/
#include "windows.h" // this must be first to define GetCurrentDirectory
#include "cmGlobalVisualStudio8Win64Generator.h"
#include "cmLocalVisualStudio7Generator.h"
#include "cmMakefile.h"
#include "cmake.h"
cmGlobalVisualStudio8Win64Generator::cmGlobalVisualStudio8Win64Generator()
{
this->ArchitectureId = "x64";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio8Win64Generator
::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "Generates Visual Studio 8 2005 Win64 project files.";
entry.Full = "";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio8Win64Generator
::AddPlatformDefinitions(cmMakefile* mf)
{
this->cmGlobalVisualStudio8Generator::AddPlatformDefinitions(mf);
mf->AddDefinition("CMAKE_FORCE_WIN64", "TRUE");
}

View File

@ -1,47 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 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 cmGlobalVisualStudio8Win64Generator_h
#define cmGlobalVisualStudio8Win64Generator_h
#include "cmGlobalVisualStudio8Generator.h"
/** \class cmGlobalVisualStudio8Win64Generator
* \brief Write a Unix makefiles.
*
* cmGlobalVisualStudio8Win64Generator manages UNIX build process for a tree
*/
class cmGlobalVisualStudio8Win64Generator :
public cmGlobalVisualStudio8Generator
{
public:
cmGlobalVisualStudio8Win64Generator();
static cmGlobalGenerator* New() {
return new cmGlobalVisualStudio8Win64Generator; }
///! Get the name for the generator.
virtual const char* GetName() const {
return cmGlobalVisualStudio8Win64Generator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 8 2005 Win64";}
virtual const char* GetPlatformName() const {return "x64";}
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
/**
* Try to determine system infomation such as shared library
* extension, pthreads, byte order etc.
*/
virtual void AddPlatformDefinitions(cmMakefile *);
};
#endif

View File

@ -15,9 +15,61 @@
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmake.h" #include "cmake.h"
static const char vs9Win32generatorName[] = "Visual Studio 9 2008";
static const char vs9Win64generatorName[] = "Visual Studio 8 2005 Win64";
static const char vs9IA64generatorName[] = "Visual Studio 9 2008 IA64";
class cmGlobalVisualStudio9Generator::Factory
: public cmGlobalGeneratorFactory
{
public:
virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const {
if(!strcmp(name, vs9Win32generatorName))
{
return new cmGlobalVisualStudio9Generator(
vs9Win32generatorName, NULL, NULL);
}
if(!strcmp(name, vs9Win64generatorName))
{
return new cmGlobalVisualStudio9Generator(
vs9Win64generatorName, "x64", "CMAKE_FORCE_WIN64");
}
if(!strcmp(name, vs9IA64generatorName))
{
return new cmGlobalVisualStudio9Generator(
vs9IA64generatorName, "Itanium", "CMAKE_FORCE_IA64");
}
return 0;
}
cmGlobalVisualStudio9Generator::cmGlobalVisualStudio9Generator() virtual void GetDocumentation(cmDocumentationEntry& entry) const {
entry.Name = "Visual Studio 9 2008";
entry.Brief = "Generates Visual Studio 9 2008 project files.";
entry.Full =
"It is possible to append a space followed by the platform name "
"to create project files for a specific target platform. E.g. "
"\"Visual Studio 9 2008 Win64\" will create project files for "
"the x64 processor; \"Visual Studio 9 2008 IA64\" for Itanium.";
}
virtual void GetGenerators(std::vector<std::string>& names) const {
names.push_back(vs9Win32generatorName);
names.push_back(vs9Win64generatorName);
names.push_back(vs9IA64generatorName); }
};
//----------------------------------------------------------------------------
cmGlobalGeneratorFactory* cmGlobalVisualStudio9Generator::NewFactory()
{
return new Factory;
}
//----------------------------------------------------------------------------
cmGlobalVisualStudio9Generator::cmGlobalVisualStudio9Generator(
const char* name, const char* architectureId,
const char* additionalPlatformDefinition)
: cmGlobalVisualStudio8Generator(name, architectureId,
additionalPlatformDefinition)
{ {
this->FindMakeProgramFile = "CMakeVS9FindMake.cmake"; this->FindMakeProgramFile = "CMakeVS9FindMake.cmake";
} }
@ -40,15 +92,6 @@ cmLocalGenerator *cmGlobalVisualStudio9Generator::CreateLocalGenerator()
return lg; return lg;
} }
//----------------------------------------------------------------------------
void cmGlobalVisualStudio9Generator
::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "Generates Visual Studio 9 2008 project files.";
entry.Full = "";
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalVisualStudio9Generator void cmGlobalVisualStudio9Generator
::EnableLanguage(std::vector<std::string>const & lang, ::EnableLanguage(std::vector<std::string>const & lang,

View File

@ -24,17 +24,9 @@ class cmGlobalVisualStudio9Generator :
public cmGlobalVisualStudio8Generator public cmGlobalVisualStudio8Generator
{ {
public: public:
cmGlobalVisualStudio9Generator(); cmGlobalVisualStudio9Generator(const char* name,
static cmGlobalGenerator* New() { const char* architectureId, const char* additionalPlatformDefinition);
return new cmGlobalVisualStudio9Generator; } static cmGlobalGeneratorFactory* NewFactory();
///! Get the name for the generator.
virtual const char* GetName() const {
return cmGlobalVisualStudio9Generator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 9 2008";}
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
///! create the correct local generator ///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();
@ -61,5 +53,7 @@ public:
virtual std::string GetUserMacrosRegKeyBase(); virtual std::string GetUserMacrosRegKeyBase();
protected: protected:
virtual const char* GetIDEVersion() { return "9.0"; } virtual const char* GetIDEVersion() { return "9.0"; }
private:
class Factory;
}; };
#endif #endif

View File

@ -1,37 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 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.
============================================================================*/
#include "cmGlobalVisualStudio9IA64Generator.h"
#include "cmLocalVisualStudio7Generator.h"
#include "cmMakefile.h"
cmGlobalVisualStudio9IA64Generator::cmGlobalVisualStudio9IA64Generator()
{
this->ArchitectureId = "Itanium";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio9IA64Generator
::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "Generates Visual Studio 9 2008 Itanium project files.";
entry.Full = "";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio9IA64Generator
::AddPlatformDefinitions(cmMakefile* mf)
{
cmGlobalVisualStudio9Generator::AddPlatformDefinitions(mf);
mf->AddDefinition("CMAKE_FORCE_IA64", "TRUE");
}

View File

@ -1,47 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 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 cmGlobalVisualStudio9IA64Generator_h
#define cmGlobalVisualStudio9IA64Generator_h
#include "cmGlobalVisualStudio9Generator.h"
/** \class cmGlobalVisualStudio8IA64Generator
* \brief Write a Unix makefiles.
*
* cmGlobalVisualStudio8IA64Generator manages UNIX build process for a tree
*/
class cmGlobalVisualStudio9IA64Generator :
public cmGlobalVisualStudio9Generator
{
public:
cmGlobalVisualStudio9IA64Generator();
static cmGlobalGenerator* New() {
return new cmGlobalVisualStudio9IA64Generator; }
///! Get the name for the generator.
virtual const char* GetName() const {
return cmGlobalVisualStudio9IA64Generator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 9 2008 IA64";}
virtual const char* GetPlatformName() const {return "Itanium";}
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
/**
* Try to determine system infomation such as shared library
* extension, pthreads, byte order etc.
*/
virtual void AddPlatformDefinitions(cmMakefile *);
};
#endif

View File

@ -1,37 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 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.
============================================================================*/
#include "cmGlobalVisualStudio9Win64Generator.h"
#include "cmLocalVisualStudio7Generator.h"
#include "cmMakefile.h"
cmGlobalVisualStudio9Win64Generator::cmGlobalVisualStudio9Win64Generator()
{
this->ArchitectureId = "x64";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio9Win64Generator
::GetDocumentation(cmDocumentationEntry& entry) const
{
entry.Name = this->GetName();
entry.Brief = "Generates Visual Studio 9 2008 Win64 project files.";
entry.Full = "";
}
//----------------------------------------------------------------------------
void cmGlobalVisualStudio9Win64Generator
::AddPlatformDefinitions(cmMakefile* mf)
{
cmGlobalVisualStudio9Generator::AddPlatformDefinitions(mf);
mf->AddDefinition("CMAKE_FORCE_WIN64", "TRUE");
}

View File

@ -1,47 +0,0 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 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 cmGlobalVisualStudio9Win64Generator_h
#define cmGlobalVisualStudio9Win64Generator_h
#include "cmGlobalVisualStudio9Generator.h"
/** \class cmGlobalVisualStudio8Win64Generator
* \brief Write a Unix makefiles.
*
* cmGlobalVisualStudio8Win64Generator manages UNIX build process for a tree
*/
class cmGlobalVisualStudio9Win64Generator :
public cmGlobalVisualStudio9Generator
{
public:
cmGlobalVisualStudio9Win64Generator();
static cmGlobalGenerator* New() {
return new cmGlobalVisualStudio9Win64Generator; }
///! Get the name for the generator.
virtual const char* GetName() const {
return cmGlobalVisualStudio9Win64Generator::GetActualName();}
static const char* GetActualName() {return "Visual Studio 9 2008 Win64";}
virtual const char* GetPlatformName() const {return "x64";}
/** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const;
/**
* Try to determine system infomation such as shared library
* extension, pthreads, byte order etc.
*/
virtual void AddPlatformDefinitions(cmMakefile *);
};
#endif

View File

@ -22,6 +22,7 @@
cmGlobalVisualStudioGenerator::cmGlobalVisualStudioGenerator() cmGlobalVisualStudioGenerator::cmGlobalVisualStudioGenerator()
{ {
this->ArchitectureId = "X86"; this->ArchitectureId = "X86";
this->AdditionalPlatformDefinition = NULL;
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -75,7 +76,6 @@ void cmGlobalVisualStudioGenerator::Generate()
#endif #endif
// Now make all targets depend on the ALL_BUILD target // Now make all targets depend on the ALL_BUILD target
cmTargets targets;
for(std::vector<cmLocalGenerator*>::iterator i = gen.begin(); for(std::vector<cmLocalGenerator*>::iterator i = gen.begin();
i != gen.end(); ++i) i != gen.end(); ++i)
{ {
@ -494,6 +494,11 @@ void cmGlobalVisualStudioGenerator::AddPlatformDefinitions(cmMakefile* mf)
{ {
mf->AddDefinition("MSVC_C_ARCHITECTURE_ID", this->ArchitectureId); mf->AddDefinition("MSVC_C_ARCHITECTURE_ID", this->ArchitectureId);
mf->AddDefinition("MSVC_CXX_ARCHITECTURE_ID", this->ArchitectureId); mf->AddDefinition("MSVC_CXX_ARCHITECTURE_ID", this->ArchitectureId);
if(this->AdditionalPlatformDefinition)
{
mf->AddDefinition(this->AdditionalPlatformDefinition, "TRUE");
}
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

View File

@ -99,6 +99,7 @@ protected:
typedef std::map<cmTarget*, cmStdString> UtilityDependsMap; typedef std::map<cmTarget*, cmStdString> UtilityDependsMap;
UtilityDependsMap UtilityDepends; UtilityDependsMap UtilityDepends;
const char* ArchitectureId; const char* ArchitectureId;
const char* AdditionalPlatformDefinition;
private: private:
void ComputeTargetObjects(cmGeneratorTarget* gt) const; void ComputeTargetObjects(cmGeneratorTarget* gt) const;

View File

@ -58,9 +58,9 @@ cmLocalGenerator *cmGlobalWatcomWMakeGenerator::CreateLocalGenerator()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalWatcomWMakeGenerator void cmGlobalWatcomWMakeGenerator
::GetDocumentation(cmDocumentationEntry& entry) const ::GetDocumentation(cmDocumentationEntry& entry)
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalWatcomWMakeGenerator::GetActualName();
entry.Brief = "Generates Watcom WMake makefiles."; entry.Brief = "Generates Watcom WMake makefiles.";
entry.Full = ""; entry.Full = "";
} }

View File

@ -23,14 +23,16 @@ class cmGlobalWatcomWMakeGenerator : public cmGlobalUnixMakefileGenerator3
{ {
public: public:
cmGlobalWatcomWMakeGenerator(); cmGlobalWatcomWMakeGenerator();
static cmGlobalGenerator* New() { return new cmGlobalWatcomWMakeGenerator; } static cmGlobalGeneratorFactory* NewFactory() {
return new cmGlobalGeneratorSimpleFactory
<cmGlobalWatcomWMakeGenerator>(); }
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
return cmGlobalWatcomWMakeGenerator::GetActualName();} return cmGlobalWatcomWMakeGenerator::GetActualName();}
static const char* GetActualName() {return "Watcom WMake";} static const char* GetActualName() {return "Watcom WMake";}
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();

View File

@ -20,6 +20,7 @@
#include "cmSourceFile.h" #include "cmSourceFile.h"
#include "cmCustomCommandGenerator.h" #include "cmCustomCommandGenerator.h"
#include "cmGeneratorTarget.h" #include "cmGeneratorTarget.h"
#include "cmGlobalGeneratorFactory.h"
#include <cmsys/auto_ptr.hxx> #include <cmsys/auto_ptr.hxx>
@ -112,6 +113,18 @@ public:
} }
}; };
class cmGlobalXCodeGenerator::Factory : public cmGlobalGeneratorFactory
{
public:
virtual cmGlobalGenerator* CreateGlobalGenerator(const char* name) const;
virtual void GetDocumentation(cmDocumentationEntry& entry) const {
cmGlobalXCodeGenerator::GetDocumentation(entry); }
virtual void GetGenerators(std::vector<std::string>& names) const {
names.push_back(cmGlobalXCodeGenerator::GetActualName()); }
};
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmGlobalXCodeGenerator::cmGlobalXCodeGenerator(std::string const& version) cmGlobalXCodeGenerator::cmGlobalXCodeGenerator(std::string const& version)
{ {
@ -132,8 +145,17 @@ cmGlobalXCodeGenerator::cmGlobalXCodeGenerator(std::string const& version)
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmGlobalGenerator* cmGlobalXCodeGenerator::New() cmGlobalGeneratorFactory* cmGlobalXCodeGenerator::NewFactory()
{ {
return new Factory;
}
//----------------------------------------------------------------------------
cmGlobalGenerator* cmGlobalXCodeGenerator::Factory
::CreateGlobalGenerator(const char* name) const
{
if (strcmp(name, GetActualName()))
return 0;
#if defined(CMAKE_BUILD_WITH_CMAKE) #if defined(CMAKE_BUILD_WITH_CMAKE)
cmXcodeVersionParser parser; cmXcodeVersionParser parser;
std::string versionFile; std::string versionFile;
@ -3474,9 +3496,8 @@ const char* cmGlobalXCodeGenerator::GetCMakeCFGIntDir() const
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmGlobalXCodeGenerator::GetDocumentation(cmDocumentationEntry& entry) void cmGlobalXCodeGenerator::GetDocumentation(cmDocumentationEntry& entry)
const
{ {
entry.Name = this->GetName(); entry.Name = cmGlobalXCodeGenerator::GetActualName();
entry.Brief = "Generate Xcode project files."; entry.Brief = "Generate Xcode project files.";
entry.Full = ""; entry.Full = "";
} }

View File

@ -15,6 +15,7 @@
#include "cmGlobalGenerator.h" #include "cmGlobalGenerator.h"
#include "cmXCodeObject.h" #include "cmXCodeObject.h"
#include "cmCustomCommand.h" #include "cmCustomCommand.h"
class cmGlobalGeneratorFactory;
class cmTarget; class cmTarget;
class cmSourceFile; class cmSourceFile;
class cmSourceGroup; class cmSourceGroup;
@ -29,7 +30,7 @@ class cmGlobalXCodeGenerator : public cmGlobalGenerator
{ {
public: public:
cmGlobalXCodeGenerator(std::string const& version); cmGlobalXCodeGenerator(std::string const& version);
static cmGlobalGenerator* New(); static cmGlobalGeneratorFactory* NewFactory();
///! Get the name for the generator. ///! Get the name for the generator.
virtual const char* GetName() const { virtual const char* GetName() const {
@ -37,7 +38,7 @@ public:
static const char* GetActualName() {return "Xcode";} static const char* GetActualName() {return "Xcode";}
/** Get the documentation entry for this generator. */ /** Get the documentation entry for this generator. */
virtual void GetDocumentation(cmDocumentationEntry& entry) const; static void GetDocumentation(cmDocumentationEntry& entry);
///! Create a local generator appropriate to this Global Generator ///! Create a local generator appropriate to this Global Generator
virtual cmLocalGenerator *CreateLocalGenerator(); virtual cmLocalGenerator *CreateLocalGenerator();
@ -186,6 +187,7 @@ private:
const char* varNameSuffix, const char* varNameSuffix,
const char* default_flags); const char* default_flags);
class Factory;
class BuildObjectListOrString; class BuildObjectListOrString;
friend class BuildObjectListOrString; friend class BuildObjectListOrString;

View File

@ -72,9 +72,12 @@ public:
"CMAKE_INCLUDE_DIRECTORIES_BEFORE to ON. " "CMAKE_INCLUDE_DIRECTORIES_BEFORE to ON. "
"By using AFTER or BEFORE explicitly, you can select between " "By using AFTER or BEFORE explicitly, you can select between "
"appending and prepending, independent of the default. " "appending and prepending, independent of the default. "
"\n"
"If the SYSTEM option is given, the compiler will be told the " "If the SYSTEM option is given, the compiler will be told the "
"directories are meant as system include directories on some " "directories are meant as system include directories on some "
"platforms."; "platforms (signalling this setting might achieve effects such as "
"the compiler skipping warnings, or these fixed-install system files "
"not being considered in dependency calculations - see compiler docs).";
} }
cmTypeMacro(cmIncludeDirectoryCommand, cmCommand); cmTypeMacro(cmIncludeDirectoryCommand, cmCommand);

View File

@ -224,6 +224,10 @@ cmLoadedCommand::~cmLoadedCommand()
bool cmLoadCommandCommand bool cmLoadCommandCommand
::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &) ::InitialPass(std::vector<std::string> const& args, cmExecutionStatus &)
{ {
this->Makefile->IssueMessage(
cmake::AUTHOR_WARNING,
"The \"load_command\" command will be removed in CMake 3.0. "
"See command documentation for details.");
if(args.size() < 1 ) if(args.size() < 1 )
{ {
return true; return true;

View File

@ -47,7 +47,7 @@ public:
*/ */
virtual const char* GetTerseDocumentation() const virtual const char* GetTerseDocumentation() const
{ {
return "Load a command into a running CMake."; return "Deprecated. Use macro() or function() instead.";
} }
/** /**
@ -56,6 +56,13 @@ public:
virtual const char* GetFullDocumentation() const virtual const char* GetFullDocumentation() const
{ {
return return
"This command will be removed in CMake 3.0. "
"It works only when the target architecture matches the "
"running CMake binary. "
"Use macro() or function() to add commands. "
"Use execute_process() to run advanced computations "
"in external processes."
"\n"
" load_command(COMMAND_NAME <loc1> [loc2 ...])\n" " load_command(COMMAND_NAME <loc1> [loc2 ...])\n"
"The given locations are searched for a library whose name is " "The given locations are searched for a library whose name is "
"cmCOMMAND_NAME. If found, it is loaded as a module and the command " "cmCOMMAND_NAME. If found, it is loaded as a module and the command "
@ -67,6 +74,12 @@ public:
"Otherwise the variable will not be set."; "Otherwise the variable will not be set.";
} }
/** This command is kept for compatibility with older CMake versions. */
virtual bool IsDiscouraged() const
{
return true;
}
cmTypeMacro(cmLoadCommandCommand, cmCommand); cmTypeMacro(cmLoadCommandCommand, cmCommand);
}; };

View File

@ -326,18 +326,18 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout,
{ {
cmSystemTools::ReplaceString(source, "$(IntDir)/", ""); cmSystemTools::ReplaceString(source, "$(IntDir)/", "");
#if defined(_WIN32) || defined(__CYGWIN__) #if defined(_WIN32) || defined(__CYGWIN__)
std::ofstream fout(source.c_str(), std::ofstream sourceFout(source.c_str(),
std::ios::binary | std::ios::out std::ios::binary | std::ios::out
| std::ios::trunc); | std::ios::trunc);
#else #else
std::ofstream fout(source.c_str(), std::ofstream sourceFout(source.c_str(),
std::ios::out | std::ios::trunc); std::ios::out | std::ios::trunc);
#endif #endif
if(fout) if(sourceFout)
{ {
fout.write("# generated from CMake",22); sourceFout.write("# generated from CMake",22);
fout.flush(); sourceFout.flush();
fout.close(); sourceFout.close();
} }
} }
} }
@ -710,6 +710,8 @@ void cmLocalVisualStudio6Generator::SetBuildType(BuildType b,
switch(b) switch(b)
{ {
case WIN32_EXECUTABLE:
break;
case STATIC_LIBRARY: case STATIC_LIBRARY:
this->DSPHeaderTemplate = root; this->DSPHeaderTemplate = root;
this->DSPHeaderTemplate += "/staticLibHeader.dsptemplate"; this->DSPHeaderTemplate += "/staticLibHeader.dsptemplate";

View File

@ -914,12 +914,12 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
// for FAT32 file systems, which can cause an empty manifest // for FAT32 file systems, which can cause an empty manifest
// to be embedded into the resulting executable. See CMake // to be embedded into the resulting executable. See CMake
// bug #2617. // bug #2617.
const char* tool = "VCManifestTool"; const char* manifestTool = "VCManifestTool";
if(this->FortranProject) if(this->FortranProject)
{ {
tool = "VFManifestTool"; manifestTool = "VFManifestTool";
} }
fout << "\t\t\t<Tool\n\t\t\t\tName=\"" << tool << "\"\n" fout << "\t\t\t<Tool\n\t\t\t\tName=\"" << manifestTool << "\"\n"
<< "\t\t\t\tUseFAT32Workaround=\"true\"\n" << "\t\t\t\tUseFAT32Workaround=\"true\"\n"
<< "\t\t\t/>\n"; << "\t\t\t/>\n";
} }
@ -1003,6 +1003,8 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
} }
switch(target.GetType()) switch(target.GetType())
{ {
case cmTarget::UNKNOWN_LIBRARY:
break;
case cmTarget::OBJECT_LIBRARY: case cmTarget::OBJECT_LIBRARY:
{ {
std::string libpath = this->GetTargetDirectory(target); std::string libpath = this->GetTargetDirectory(target);

View File

@ -84,7 +84,6 @@ cmLocalVisualStudioGenerator
const char* newline_text) const char* newline_text)
{ {
bool useLocal = this->CustomCommandUseLocal(); bool useLocal = this->CustomCommandUseLocal();
const cmCustomCommandLines& commandLines = cc.GetCommandLines();
const char* workingDirectory = cc.GetWorkingDirectory(); const char* workingDirectory = cc.GetWorkingDirectory();
cmCustomCommandGenerator ccg(cc, configName, this->Makefile); cmCustomCommandGenerator ccg(cc, configName, this->Makefile);
RelativeRoot relativeRoot = workingDirectory? NONE : START_OUTPUT; RelativeRoot relativeRoot = workingDirectory? NONE : START_OUTPUT;

View File

@ -92,12 +92,12 @@ public:
"facilitates creating macros with optional arguments. Additionally " "facilitates creating macros with optional arguments. Additionally "
"${ARGV} holds the list of all arguments given to the macro and " "${ARGV} holds the list of all arguments given to the macro and "
"${ARGN} " "${ARGN} "
"holds the list of argument past the last expected argument. " "holds the list of arguments past the last expected argument. "
"Note that the parameters to a macro and values such as ARGN " "Note that the parameters to a macro and values such as ARGN "
"are not variables in the usual CMake sense. They are string " "are not variables in the usual CMake sense. They are string "
"replacements much like the c preprocessor would do with a " "replacements much like the C preprocessor would do with a macro. "
"macro. If you want true CMake variables you should look at " "If you want true CMake variables and/or better CMake scope control "
"the function command." "you should look at the function command."
"\n" "\n"
"See the cmake_policy() command documentation for the behavior of " "See the cmake_policy() command documentation for the behavior of "
"policies inside macros." "policies inside macros."

View File

@ -3937,6 +3937,46 @@ void cmMakefile::DefineProperties(cmake *cm)
"See the global property of the same name for details. " "See the global property of the same name for details. "
"This overrides the global property for a directory.", "This overrides the global property for a directory.",
true); true);
cm->DefineProperty
("VS_GLOBAL_SECTION_PRE_<section>", cmProperty::DIRECTORY,
"Specify a preSolution global section in Visual Studio.",
"Setting a property like this generates an entry of the following form "
"in the solution file:\n"
" GlobalSection(<section>) = preSolution\n"
" <contents based on property value>\n"
" EndGlobalSection\n"
"The property must be set to a semicolon-separated list of key=value "
"pairs. Each such pair will be transformed into an entry in the solution "
"global section. Whitespace around key and value is ignored. List "
"elements which do not contain an equal sign are skipped."
"\n"
"This property only works for Visual Studio 7 and above; it is ignored "
"on other generators. The property only applies when set on a directory "
"whose CMakeLists.txt conatins a project() command.");
cm->DefineProperty
("VS_GLOBAL_SECTION_POST_<section>", cmProperty::DIRECTORY,
"Specify a postSolution global section in Visual Studio.",
"Setting a property like this generates an entry of the following form "
"in the solution file:\n"
" GlobalSection(<section>) = postSolution\n"
" <contents based on property value>\n"
" EndGlobalSection\n"
"The property must be set to a semicolon-separated list of key=value "
"pairs. Each such pair will be transformed into an entry in the solution "
"global section. Whitespace around key and value is ignored. List "
"elements which do not contain an equal sign are skipped."
"\n"
"This property only works for Visual Studio 7 and above; it is ignored "
"on other generators. The property only applies when set on a directory "
"whose CMakeLists.txt conatins a project() command."
"\n"
"Note that CMake generates postSolution sections ExtensibilityGlobals "
"and ExtensibilityAddIns by default. If you set the corresponding "
"property, it will override the default section. For example, setting "
"VS_GLOBAL_SECTION_POST_ExtensibilityGlobals will override the default "
"contents of the ExtensibilityGlobals section, while keeping "
"ExtensibilityAddIns on its default.");
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

View File

@ -58,11 +58,11 @@ public:
{ {
return return
" math(EXPR <output variable> <math expression>)\n" " math(EXPR <output variable> <math expression>)\n"
"EXPR evaluates mathematical expression and return result in the " "EXPR evaluates mathematical expression and returns result in the "
"output variable. Example mathematical expression is " "output variable. Example mathematical expression is "
"'5 * ( 10 + 13 )'. Supported operators are " "'5 * ( 10 + 13 )'. Supported operators are "
"+ - * / % | & ^ ~ << >> * / %. They have the same meaning " "+ - * / % | & ^ ~ << >> * / %. They have the same meaning "
" as they do in c code."; " as they do in C code.";
} }
cmTypeMacro(cmMathCommand, cmCommand); cmTypeMacro(cmMathCommand, cmCommand);

View File

@ -67,8 +67,9 @@ public:
" STATUS = Incidental information\n" " STATUS = Incidental information\n"
" WARNING = CMake Warning, continue processing\n" " WARNING = CMake Warning, continue processing\n"
" AUTHOR_WARNING = CMake Warning (dev), continue processing\n" " AUTHOR_WARNING = CMake Warning (dev), continue processing\n"
" SEND_ERROR = CMake Error, continue but skip generation\n" " SEND_ERROR = CMake Error, continue processing,\n"
" FATAL_ERROR = CMake Error, stop all processing\n" " but skip generation\n"
" FATAL_ERROR = CMake Error, stop processing and generation\n"
"The CMake command-line tool displays STATUS messages on stdout " "The CMake command-line tool displays STATUS messages on stdout "
"and all other message types on stderr. " "and all other message types on stderr. "
"The CMake GUI displays all messages in its log area. " "The CMake GUI displays all messages in its log area. "

View File

@ -564,6 +564,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
// for instance ARG_MAX is 2096152 on Ubuntu or 262144 on Mac // for instance ARG_MAX is 2096152 on Ubuntu or 262144 on Mac
commandLineLengthLimit = ((int)sysconf(_SC_ARG_MAX))-linkRuleLength-1000; commandLineLengthLimit = ((int)sysconf(_SC_ARG_MAX))-linkRuleLength-1000;
#else #else
(void)linkRuleLength;
commandLineLengthLimit = -1; commandLineLengthLimit = -1;
#endif #endif
} }

View File

@ -457,7 +457,7 @@ cmPolicies::cmPolicies()
"This makes sure that the modules belonging to " "This makes sure that the modules belonging to "
"CMake always get those files included which they expect, and against " "CMake always get those files included which they expect, and against "
"which they were developed and tested. " "which they were developed and tested. "
"In call other cases, the files found in " "In all other cases, the files found in "
"CMAKE_MODULE_PATH still take precedence over the ones in " "CMAKE_MODULE_PATH still take precedence over the ones in "
"the CMake module directory. " "the CMake module directory. "
"The OLD behaviour is to always prefer files from CMAKE_MODULE_PATH over " "The OLD behaviour is to always prefer files from CMAKE_MODULE_PATH over "

View File

@ -85,6 +85,18 @@ static std::string extractSubDir(const std::string& absPath,
} }
static void copyTargetProperty(cmTarget* destinationTarget,
cmTarget* sourceTarget,
const char* propertyName)
{
const char* propertyValue = sourceTarget->GetProperty(propertyName);
if (propertyValue)
{
destinationTarget->SetProperty(propertyName, propertyValue);
}
}
cmQtAutomoc::cmQtAutomoc() cmQtAutomoc::cmQtAutomoc()
:Verbose(cmsys::SystemTools::GetEnv("VERBOSE") != 0) :Verbose(cmsys::SystemTools::GetEnv("VERBOSE") != 0)
,ColorOutput(true) ,ColorOutput(true)
@ -152,9 +164,13 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
std::string automocComment = "Automoc for target "; std::string automocComment = "Automoc for target ";
automocComment += targetName; automocComment += targetName;
makefile->AddUtilityCommand(automocTargetName.c_str(), true, cmTarget* automocTarget = makefile->AddUtilityCommand(
automocTargetName.c_str(), true,
workingDirectory.c_str(), depends, workingDirectory.c_str(), depends,
commandLines, false, automocComment.c_str()); commandLines, false, automocComment.c_str());
// inherit FOLDER property from target (#13688)
copyTargetProperty(automocTarget, target, "FOLDER");
target->AddUtility(automocTargetName.c_str()); target->AddUtility(automocTargetName.c_str());
// configure a file to get all information to automoc at buildtime: // configure a file to get all information to automoc at buildtime:
@ -195,6 +211,34 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
} }
} }
const char* qtIncDir = 0;
const char* qtCoreIncDir = 0;
// check whether ${QT_INCLUDE_DIR} is part of the implicit include dirs,
// see http://public.kitware.com/Bug/view.php?id=13667
bool qtIncludeDirMayHaveBeenRemoved = false;
if (makefile->IsSet("QT_INCLUDE_DIR"))
{
qtIncDir = makefile->GetDefinition("QT_INCLUDE_DIR");
std::string s =
makefile->GetSafeDefinition("CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES");
std::vector<std::string> implIncDirs;
cmSystemTools::ExpandListArgument(s, implIncDirs);
if (std::find(implIncDirs.begin(), implIncDirs.end(),std::string(qtIncDir))
!= implIncDirs.end())
{
qtIncludeDirMayHaveBeenRemoved = true;
if (makefile->IsSet("QT_QTCORE_INCLUDE_DIR"))
{
qtCoreIncDir = makefile->GetDefinition("QT_QTCORE_INCLUDE_DIR");
}
}
}
bool haveQtCoreIncDir = false;
bool haveQtIncDir = false;
std::vector<std::string> includeDirs; std::vector<std::string> includeDirs;
cmGeneratorTarget gtgt(target); cmGeneratorTarget gtgt(target);
localGen->GetIncludeDirectories(includeDirs, &gtgt, "CXX"); localGen->GetIncludeDirectories(includeDirs, &gtgt, "CXX");
@ -207,6 +251,37 @@ void cmQtAutomoc::SetupAutomocTarget(cmTarget* target)
_moc_incs += sep; _moc_incs += sep;
sep = ";"; sep = ";";
_moc_incs += *incDirIt; _moc_incs += *incDirIt;
if (qtIncludeDirMayHaveBeenRemoved && qtCoreIncDir && qtIncDir) // #13667
{
if (*incDirIt == qtIncDir)
{
haveQtIncDir = true;
qtIncludeDirMayHaveBeenRemoved = false; // it's here, i.e. not removed
}
if (*incDirIt == qtCoreIncDir)
{
haveQtCoreIncDir = true;
}
}
}
// Some projects (kdelibs, phonon) query the compiler for its default
// include search dirs, and add those to
// CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES.
// These may include e.g./usr/lib/qt/include . This is typically also part
// of ${QT_INCLUDES}. If this directory is then contained in the implicit
// include dirs, it is removed from the include dirs returned from the
// target above. So we add ${QT_INCLUDE_DIR} manually for moc if we detected
// that ${QT_QTCORE_INCLUDE_DIR} is among the include dirs (there shouldn't
// be a way to use Qt4 without using ${QT_QTCORE_INCLUDE_DIR} I think.
// See #13646 and #13667.
if (qtIncludeDirMayHaveBeenRemoved && qtCoreIncDir && qtIncDir
&& (haveQtCoreIncDir == true) && (haveQtIncDir == false))
{
_moc_incs += sep;
sep = ";";
_moc_incs += qtIncDir;
} }
const char* tmp = target->GetProperty("COMPILE_DEFINITIONS"); const char* tmp = target->GetProperty("COMPILE_DEFINITIONS");

View File

@ -156,7 +156,9 @@ public:
"\n" "\n"
"The EXCLUDE_FROM_DEFAULT_BUILD property is used by the visual " "The EXCLUDE_FROM_DEFAULT_BUILD property is used by the visual "
"studio generators. If it is set to 1 the target will not be " "studio generators. If it is set to 1 the target will not be "
"part of the default build when you select \"Build Solution\"." "part of the default build when you select \"Build Solution\". "
"This can also be set on a per-configuration basis using "
"EXCLUDE_FROM_DEFAULT_BUILD_<CONFIG>."
; ;
} }

View File

@ -458,7 +458,7 @@ void cmSourceFile::DefineProperties(cmake *cm)
"A property on a source file that indicates if the source file " "A property on a source file that indicates if the source file "
"is a header file with no associated implementation. This is " "is a header file with no associated implementation. This is "
"set automatically based on the file extension and is used by " "set automatically based on the file extension and is used by "
"CMake to determine is certain dependency information should be " "CMake to determine if certain dependency information should be "
"computed."); "computed.");
cm->DefineProperty cm->DefineProperty

View File

@ -68,7 +68,7 @@ public:
"expression matches the file will be favored.\n" "expression matches the file will be favored.\n"
"The name of the group may contain backslashes to specify subgroups:\n" "The name of the group may contain backslashes to specify subgroups:\n"
" source_group(outer\\\\inner ...)\n" " source_group(outer\\\\inner ...)\n"
"For backwards compatibility, this command is also supports the " "For backwards compatibility, this command also supports the "
"format:\n" "format:\n"
" source_group(name regex)"; " source_group(name regex)";
} }

View File

@ -265,6 +265,21 @@ void cmTarget::DefineProperties(cmake *cm)
"whatever file extension is required by the host app for your " "whatever file extension is required by the host app for your "
"bundle."); "bundle.");
cm->DefineProperty
("EXCLUDE_FROM_DEFAULT_BUILD", cmProperty::TARGET,
"Exclude target from \"Build Solution\".",
"This property is only used by Visual Studio generators 7 and above. "
"When set to TRUE, the target will not be built when you press "
"\"Build Solution\".");
cm->DefineProperty
("EXCLUDE_FROM_DEFAULT_BUILD_<CONFIG>", cmProperty::TARGET,
"Per-configuration version of target exclusion from \"Build Solution\". ",
"This is the configuration-specific version of "
"EXCLUDE_FROM_DEFAULT_BUILD. If the generic EXCLUDE_FROM_DEFAULT_BUILD "
"is also set on a target, EXCLUDE_FROM_DEFAULT_BUILD_<CONFIG> takes "
"precedence in configurations for which it has a value.");
cm->DefineProperty cm->DefineProperty
("FRAMEWORK", cmProperty::TARGET, ("FRAMEWORK", cmProperty::TARGET,
"This target is a framework on the Mac.", "This target is a framework on the Mac.",
@ -650,6 +665,22 @@ void cmTarget::DefineProperties(cmake *cm)
"It is intended to specify dependencies on \"linker scripts\" for " "It is intended to specify dependencies on \"linker scripts\" for "
"custom Makefile link rules."); "custom Makefile link rules.");
cm->DefineProperty
("LINK_DEPENDS_NO_SHARED", cmProperty::TARGET,
"Do not depend on linked shared library files.",
"Set this property to true to tell CMake generators not to add "
"file-level dependencies on the shared library files linked by "
"this target. "
"Modification to the shared libraries will not be sufficient to "
"re-link this target. "
"Logical target-level dependencies will not be affected so the "
"linked shared libraries will still be brought up to date before "
"this target is built."
"\n"
"This property is initialized by the value of the variable "
"CMAKE_LINK_DEPENDS_NO_SHARED if it is set when a target is "
"created.");
cm->DefineProperty cm->DefineProperty
("LINK_INTERFACE_LIBRARIES", cmProperty::TARGET, ("LINK_INTERFACE_LIBRARIES", cmProperty::TARGET,
"List public interface libraries for a shared library or executable.", "List public interface libraries for a shared library or executable.",
@ -1314,6 +1345,7 @@ void cmTarget::SetMakefile(cmMakefile* mf)
this->SetPropertyDefault("OSX_ARCHITECTURES", 0); this->SetPropertyDefault("OSX_ARCHITECTURES", 0);
this->SetPropertyDefault("AUTOMOC", 0); this->SetPropertyDefault("AUTOMOC", 0);
this->SetPropertyDefault("AUTOMOC_MOC_OPTIONS", 0); this->SetPropertyDefault("AUTOMOC_MOC_OPTIONS", 0);
this->SetPropertyDefault("LINK_DEPENDS_NO_SHARED", 0);
this->SetPropertyDefault("LINK_INTERFACE_LIBRARIES", 0); this->SetPropertyDefault("LINK_INTERFACE_LIBRARIES", 0);
this->SetPropertyDefault("WIN32_EXECUTABLE", 0); this->SetPropertyDefault("WIN32_EXECUTABLE", 0);
this->SetPropertyDefault("MACOSX_BUNDLE", 0); this->SetPropertyDefault("MACOSX_BUNDLE", 0);

View File

@ -100,11 +100,11 @@ public:
"to the LINK_INTERFACE_LIBRARIES and its per-configuration equivalent " "to the LINK_INTERFACE_LIBRARIES and its per-configuration equivalent "
"target properties instead of using them for linking. " "target properties instead of using them for linking. "
"Libraries specified as \"debug\" are appended to the " "Libraries specified as \"debug\" are appended to the "
"the LINK_INTERFACE_LIBRARIES_DEBUG property (or to the properties " "LINK_INTERFACE_LIBRARIES_DEBUG property (or to the properties "
"corresponding to configurations listed in the DEBUG_CONFIGURATIONS " "corresponding to configurations listed in the DEBUG_CONFIGURATIONS "
"global property if it is set). " "global property if it is set). "
"Libraries specified as \"optimized\" are appended to the " "Libraries specified as \"optimized\" are appended to the "
"the LINK_INTERFACE_LIBRARIES property. " "LINK_INTERFACE_LIBRARIES property. "
"Libraries specified as \"general\" (or without any keyword) are " "Libraries specified as \"general\" (or without any keyword) are "
"treated as if specified for both \"debug\" and \"optimized\"." "treated as if specified for both \"debug\" and \"optimized\"."
"\n" "\n"

View File

@ -81,7 +81,7 @@ public:
"the executable, but it will not try to run the executable. Instead it " "the executable, but it will not try to run the executable. Instead it "
"will create cache variables which must be filled by the user or by " "will create cache variables which must be filled by the user or by "
"presetting them in some CMake script file to the values the " "presetting them in some CMake script file to the values the "
"executable would have produced if it would have been run on its actual " "executable would have produced if it had been run on its actual "
"target platform. These variables are RUN_RESULT_VAR (explanation see " "target platform. These variables are RUN_RESULT_VAR (explanation see "
"above) and if RUN_OUTPUT_VARIABLE (or OUTPUT_VARIABLE) was used, an " "above) and if RUN_OUTPUT_VARIABLE (or OUTPUT_VARIABLE) was used, an "
"additional cache variable " "additional cache variable "

View File

@ -404,6 +404,9 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
case cmTarget::UTILITY: case cmTarget::UTILITY:
configType += "Utility"; configType += "Utility";
break; break;
case cmTarget::GLOBAL_TARGET:
case cmTarget::UNKNOWN_LIBRARY:
break;
} }
configType += "</ConfigurationType>\n"; configType += "</ConfigurationType>\n";
this->WriteString(configType.c_str(), 2); this->WriteString(configType.c_str(), 2);
@ -425,8 +428,8 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
mfcLine += useOfMfcValue + "</UseOfMfc>\n"; mfcLine += useOfMfcValue + "</UseOfMfc>\n";
this->WriteString(mfcLine.c_str(), 2); this->WriteString(mfcLine.c_str(), 2);
if(this->Target->GetType() <= cmTarget::OBJECT_LIBRARY && if((this->Target->GetType() <= cmTarget::OBJECT_LIBRARY &&
this->ClOptions[*i]->UsingUnicode() || this->ClOptions[*i]->UsingUnicode()) ||
this->Target->GetPropertyAsBool("VS_WINRT_EXTENSIONS")) this->Target->GetPropertyAsBool("VS_WINRT_EXTENSIONS"))
{ {
this->WriteString("<CharacterSet>Unicode</CharacterSet>\n", 2); this->WriteString("<CharacterSet>Unicode</CharacterSet>\n", 2);
@ -907,7 +910,6 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
cmSourceFile* source) cmSourceFile* source)
{ {
cmSourceFile& sf = *source; cmSourceFile& sf = *source;
cmLocalVisualStudio7Generator* lg = this->LocalGenerator;
std::string objectName; std::string objectName;
if(this->GeneratorTarget->ExplicitObjectName.find(&sf) if(this->GeneratorTarget->ExplicitObjectName.find(&sf)

View File

@ -271,13 +271,6 @@ bool cmWin32ProcessExecution::Wait(int timeout)
return this->PrivateClose(timeout); return this->PrivateClose(timeout);
} }
/*
* Internal dictionary mapping popen* file pointers to process handles,
* for use when retrieving the process exit code. See _PyPclose() below
* for more information on this dictionary's use.
*/
static void *_PyPopenProcs = NULL;
static BOOL RealPopenCreateProcess(const char *cmdstring, static BOOL RealPopenCreateProcess(const char *cmdstring,
const char *path, const char *path,
const char *szConsoleSpawn, const char *szConsoleSpawn,
@ -679,18 +672,6 @@ bool cmWin32ProcessExecution::PrivateOpen(const char *cmdstring,
} }
} }
/*
* Insert the files we've created into the process dictionary
* all referencing the list with the process handle and the
* initial number of files (see description below in _PyPclose).
* Since if _PyPclose later tried to wait on a process when all
* handles weren't closed, it could create a deadlock with the
* child, we spend some energy here to try to ensure that we
* either insert all file handles into the dictionary or none
* at all. It's a little clumsy with the various popen modes
* and variable number of files involved.
*/
/* Child is launched. Close the parents copy of those pipe /* Child is launched. Close the parents copy of those pipe
* handles that only the child should have open. You need to * handles that only the child should have open. You need to
* make sure that no handles to the write end of the output pipe * make sure that no handles to the write end of the output pipe
@ -761,43 +742,6 @@ cmWin32ProcessExecution::~cmWin32ProcessExecution()
this->CloseHandles(); this->CloseHandles();
} }
/*
* Wrapper for fclose() to use for popen* files, so we can retrieve the
* exit code for the child process and return as a result of the close.
*
* This function uses the _PyPopenProcs dictionary in order to map the
* input file pointer to information about the process that was
* originally created by the popen* call that created the file pointer.
* The dictionary uses the file pointer as a key (with one entry
* inserted for each file returned by the original popen* call) and a
* single list object as the value for all files from a single call.
* The list object contains the Win32 process handle at [0], and a file
* count at [1], which is initialized to the total number of file
* handles using that list.
*
* This function closes whichever handle it is passed, and decrements
* the file count in the dictionary for the process handle pointed to
* by this file. On the last close (when the file count reaches zero),
* this function will wait for the child process and then return its
* exit code as the result of the close() operation. This permits the
* files to be closed in any order - it is always the close() of the
* final handle that will return the exit code.
*/
/* RED_FLAG 31-Aug-2000 Tim
* This is always called (today!) between a pair of
* Py_BEGIN_ALLOW_THREADS/ Py_END_ALLOW_THREADS
* macros. So the thread running this has no valid thread state, as
* far as Python is concerned. However, this calls some Python API
* functions that cannot be called safely without a valid thread
* state, in particular PyDict_GetItem.
* As a temporary hack (although it may last for years ...), we
* *rely* on not having a valid thread state in this function, in
* order to create our own "from scratch".
* This will deadlock if _PyPclose is ever called by a thread
* holding the global lock.
*/
bool cmWin32ProcessExecution::PrivateClose(int /* timeout */) bool cmWin32ProcessExecution::PrivateClose(int /* timeout */)
{ {
HANDLE hProcess = this->ProcessHandle; HANDLE hProcess = this->ProcessHandle;

View File

@ -63,15 +63,8 @@
# include "cmGlobalVisualStudio71Generator.h" # include "cmGlobalVisualStudio71Generator.h"
# include "cmGlobalVisualStudio8Generator.h" # include "cmGlobalVisualStudio8Generator.h"
# include "cmGlobalVisualStudio9Generator.h" # include "cmGlobalVisualStudio9Generator.h"
# include "cmGlobalVisualStudio9IA64Generator.h"
# include "cmGlobalVisualStudio9Win64Generator.h"
# include "cmGlobalVisualStudio10Generator.h" # include "cmGlobalVisualStudio10Generator.h"
# include "cmGlobalVisualStudio10IA64Generator.h"
# include "cmGlobalVisualStudio10Win64Generator.h"
# include "cmGlobalVisualStudio11Generator.h" # include "cmGlobalVisualStudio11Generator.h"
# include "cmGlobalVisualStudio11Win64Generator.h"
# include "cmGlobalVisualStudio11ARMGenerator.h"
# include "cmGlobalVisualStudio8Win64Generator.h"
# include "cmGlobalBorlandMakefileGenerator.h" # include "cmGlobalBorlandMakefileGenerator.h"
# include "cmGlobalNMakeMakefileGenerator.h" # include "cmGlobalNMakeMakefileGenerator.h"
# include "cmGlobalJOMMakefileGenerator.h" # include "cmGlobalJOMMakefileGenerator.h"
@ -223,6 +216,11 @@ cmake::~cmake()
{ {
delete (*j).second; delete (*j).second;
} }
for(RegisteredGeneratorsVector::iterator j = this->Generators.begin();
j != this->Generators.end(); ++j)
{
delete *j;
}
#ifdef CMAKE_BUILD_WITH_CMAKE #ifdef CMAKE_BUILD_WITH_CMAKE
delete this->VariableWatch; delete this->VariableWatch;
#endif #endif
@ -1872,10 +1870,10 @@ void cmake::AddDefaultExtraGenerators()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmake::GetRegisteredGenerators(std::vector<std::string>& names) void cmake::GetRegisteredGenerators(std::vector<std::string>& names)
{ {
for(RegisteredGeneratorsMap::const_iterator i = this->Generators.begin(); for(RegisteredGeneratorsVector::const_iterator i = this->Generators.begin();
i != this->Generators.end(); ++i) i != this->Generators.end(); ++i)
{ {
names.push_back(i->first); (*i)->GetGenerators(names);
} }
for(RegisteredExtraGeneratorsMap::const_iterator for(RegisteredExtraGeneratorsMap::const_iterator
i = this->ExtraGenerators.begin(); i = this->ExtraGenerators.begin();
@ -1887,29 +1885,36 @@ void cmake::GetRegisteredGenerators(std::vector<std::string>& names)
cmGlobalGenerator* cmake::CreateGlobalGenerator(const char* name) cmGlobalGenerator* cmake::CreateGlobalGenerator(const char* name)
{ {
cmGlobalGenerator* generator = 0;
cmExternalMakefileProjectGenerator* extraGenerator = 0; cmExternalMakefileProjectGenerator* extraGenerator = 0;
RegisteredGeneratorsMap::const_iterator genIt = this->Generators.find(name);
if(genIt == this->Generators.end())
{
RegisteredExtraGeneratorsMap::const_iterator extraGenIt = RegisteredExtraGeneratorsMap::const_iterator extraGenIt =
this->ExtraGenerators.find(name); this->ExtraGenerators.find(name);
if (extraGenIt == this->ExtraGenerators.end()) if (extraGenIt != this->ExtraGenerators.end())
{ {
return 0;
}
extraGenerator = (extraGenIt->second)(); extraGenerator = (extraGenIt->second)();
genIt=this->Generators.find(extraGenerator->GetGlobalGeneratorName(name)); name = extraGenerator->GetGlobalGeneratorName(name);
if(genIt == this->Generators.end()) }
cmGlobalGenerator* generator = 0;
for (RegisteredGeneratorsVector::const_iterator i =
this->Generators.begin(); i != this->Generators.end(); ++i)
{ {
delete extraGenerator; generator = (*i)->CreateGlobalGenerator(name);
return 0; if (generator)
{
break;
} }
} }
generator = (genIt->second)(); if (generator)
{
generator->SetCMakeInstance(this); generator->SetCMakeInstance(this);
generator->SetExternalMakefileProjectGenerator(extraGenerator); generator->SetExternalMakefileProjectGenerator(extraGenerator);
}
else
{
delete extraGenerator;
}
return generator; return generator;
} }
@ -2573,55 +2578,41 @@ void cmake::AddDefaultGenerators()
{ {
#if defined(_WIN32) && !defined(__CYGWIN__) #if defined(_WIN32) && !defined(__CYGWIN__)
# if !defined(CMAKE_BOOT_MINGW) # if !defined(CMAKE_BOOT_MINGW)
this->Generators[cmGlobalVisualStudio6Generator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio6Generator::New; cmGlobalVisualStudio6Generator::NewFactory());
this->Generators[cmGlobalVisualStudio7Generator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio7Generator::New; cmGlobalVisualStudio7Generator::NewFactory());
this->Generators[cmGlobalVisualStudio10Generator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio10Generator::New; cmGlobalVisualStudio10Generator::NewFactory());
this->Generators[cmGlobalVisualStudio10IA64Generator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio10IA64Generator::New; cmGlobalVisualStudio11Generator::NewFactory());
this->Generators[cmGlobalVisualStudio10Win64Generator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio10Win64Generator::New; cmGlobalVisualStudio71Generator::NewFactory());
this->Generators[cmGlobalVisualStudio11Generator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio11Generator::New; cmGlobalVisualStudio8Generator::NewFactory());
this->Generators[cmGlobalVisualStudio11Win64Generator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio11Win64Generator::New; cmGlobalVisualStudio9Generator::NewFactory());
this->Generators[cmGlobalVisualStudio11ARMGenerator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio11ARMGenerator::New; cmGlobalBorlandMakefileGenerator::NewFactory());
this->Generators[cmGlobalVisualStudio71Generator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio71Generator::New; cmGlobalNMakeMakefileGenerator::NewFactory());
this->Generators[cmGlobalVisualStudio8Generator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio8Generator::New; cmGlobalJOMMakefileGenerator::NewFactory());
this->Generators[cmGlobalVisualStudio9Generator::GetActualName()] = this->Generators.push_back(
&cmGlobalVisualStudio9Generator::New; cmGlobalWatcomWMakeGenerator::NewFactory());
this->Generators[cmGlobalVisualStudio9IA64Generator::GetActualName()] =
&cmGlobalVisualStudio9IA64Generator::New;
this->Generators[cmGlobalVisualStudio9Win64Generator::GetActualName()] =
&cmGlobalVisualStudio9Win64Generator::New;
this->Generators[cmGlobalVisualStudio8Win64Generator::GetActualName()] =
&cmGlobalVisualStudio8Win64Generator::New;
this->Generators[cmGlobalBorlandMakefileGenerator::GetActualName()] =
&cmGlobalBorlandMakefileGenerator::New;
this->Generators[cmGlobalNMakeMakefileGenerator::GetActualName()] =
&cmGlobalNMakeMakefileGenerator::New;
this->Generators[cmGlobalJOMMakefileGenerator::GetActualName()] =
&cmGlobalJOMMakefileGenerator::New;
this->Generators[cmGlobalWatcomWMakeGenerator::GetActualName()] =
&cmGlobalWatcomWMakeGenerator::New;
# endif # endif
this->Generators[cmGlobalMSYSMakefileGenerator::GetActualName()] = this->Generators.push_back(
&cmGlobalMSYSMakefileGenerator::New; cmGlobalMSYSMakefileGenerator::NewFactory());
this->Generators[cmGlobalMinGWMakefileGenerator::GetActualName()] = this->Generators.push_back(
&cmGlobalMinGWMakefileGenerator::New; cmGlobalMinGWMakefileGenerator::NewFactory());
#endif #endif
this->Generators[cmGlobalUnixMakefileGenerator3::GetActualName()] = this->Generators.push_back(
&cmGlobalUnixMakefileGenerator3::New; cmGlobalUnixMakefileGenerator3::NewFactory());
this->Generators[cmGlobalNinjaGenerator::GetActualName()] = this->Generators.push_back(
&cmGlobalNinjaGenerator::New; cmGlobalNinjaGenerator::NewFactory());
#ifdef CMAKE_USE_XCODE #ifdef CMAKE_USE_XCODE
this->Generators[cmGlobalXCodeGenerator::GetActualName()] = this->Generators.push_back(
&cmGlobalXCodeGenerator::New; cmGlobalXCodeGenerator::NewFactory());
#endif #endif
} }
@ -2715,17 +2706,15 @@ void cmake::GetPropertiesDocumentation(std::map<std::string,
void cmake::GetGeneratorDocumentation(std::vector<cmDocumentationEntry>& v) void cmake::GetGeneratorDocumentation(std::vector<cmDocumentationEntry>& v)
{ {
for(RegisteredGeneratorsMap::const_iterator i = this->Generators.begin(); for(RegisteredGeneratorsVector::const_iterator i =
i != this->Generators.end(); ++i) this->Generators.begin(); i != this->Generators.end(); ++i)
{ {
cmDocumentationEntry e; cmDocumentationEntry e;
cmGlobalGenerator* generator = (i->second)(); (*i)->GetDocumentation(e);
generator->GetDocumentation(e);
delete generator;
v.push_back(e); v.push_back(e);
} }
for(RegisteredExtraGeneratorsMap::const_iterator for(RegisteredExtraGeneratorsMap::const_iterator i =
i = this->ExtraGenerators.begin(); i != this->ExtraGenerators.end(); ++i) this->ExtraGenerators.begin(); i != this->ExtraGenerators.end(); ++i)
{ {
cmDocumentationEntry e; cmDocumentationEntry e;
cmExternalMakefileProjectGenerator* generator = (i->second)(); cmExternalMakefileProjectGenerator* generator = (i->second)();

View File

@ -17,6 +17,7 @@
#include "cmPropertyDefinitionMap.h" #include "cmPropertyDefinitionMap.h"
#include "cmPropertyMap.h" #include "cmPropertyMap.h"
class cmGlobalGeneratorFactory;
class cmGlobalGenerator; class cmGlobalGenerator;
class cmLocalGenerator; class cmLocalGenerator;
class cmCacheManager; class cmCacheManager;
@ -396,12 +397,9 @@ protected:
cmExternalMakefileProjectGenerator* (*CreateExtraGeneratorFunctionType)(); cmExternalMakefileProjectGenerator* (*CreateExtraGeneratorFunctionType)();
typedef std::map<cmStdString, typedef std::map<cmStdString,
CreateExtraGeneratorFunctionType> RegisteredExtraGeneratorsMap; CreateExtraGeneratorFunctionType> RegisteredExtraGeneratorsMap;
typedef std::vector<cmGlobalGeneratorFactory*> RegisteredGeneratorsVector;
typedef cmGlobalGenerator* (*CreateGeneratorFunctionType)();
typedef std::map<cmStdString,
CreateGeneratorFunctionType> RegisteredGeneratorsMap;
RegisteredCommandsMap Commands; RegisteredCommandsMap Commands;
RegisteredGeneratorsMap Generators; RegisteredGeneratorsVector Generators;
RegisteredExtraGeneratorsMap ExtraGenerators; RegisteredExtraGeneratorsMap ExtraGenerators;
void AddDefaultCommands(); void AddDefaultCommands();
void AddDefaultGenerators(); void AddDefaultGenerators();

View File

@ -237,12 +237,14 @@ int main() {
// needed to suppress filename output of msvc tools // needed to suppress filename output of msvc tools
std::string srcfilename; std::string srcfilename;
{
std::string::size_type pos = srcfile.rfind("\\"); std::string::size_type pos = srcfile.rfind("\\");
if (pos == std::string::npos) { if (pos == std::string::npos) {
srcfilename = srcfile; srcfilename = srcfile;
} else { } else {
srcfilename = srcfile.substr(pos + 1); srcfilename = srcfile.substr(pos + 1);
} }
}
std::string nol = " /nologo "; std::string nol = " /nologo ";
std::string show = " /showIncludes "; std::string show = " /showIncludes ";
@ -266,10 +268,12 @@ int main() {
// call cl in object dir so the .i is generated there // call cl in object dir so the .i is generated there
std::string objdir; std::string objdir;
{
std::string::size_type pos = objfile.rfind("\\"); std::string::size_type pos = objfile.rfind("\\");
if (pos != std::string::npos) { if (pos != std::string::npos) {
objdir = objfile.substr(0, pos); objdir = objfile.substr(0, pos);
} }
}
// extract dependencies with cl.exe // extract dependencies with cl.exe
int exit_code = process(srcfilename, dfile, objfile, int exit_code = process(srcfilename, dfile, objfile,

View File

@ -31,14 +31,14 @@ int main (int argc, char *argv[])
int cc; int cc;
for ( cc = 2; cc < argc; cc ++ ) for ( cc = 2; cc < argc; cc ++ )
{ {
std::string arg = argv[cc]; std::string nextArg = argv[cc];
if ( (arg.find_first_of(" ") != arg.npos) && if ( (nextArg.find_first_of(" ") != nextArg.npos) &&
(arg.find_first_of("\"") == arg.npos) ) (nextArg.find_first_of("\"") == nextArg.npos) )
{ {
arg = "\"" + arg + "\""; nextArg = "\"" + nextArg + "\"";
} }
command += " "; command += " ";
command += arg; command += nextArg;
} }
return cmWin32ProcessExecution::Windows9xHack(command.c_str()); return cmWin32ProcessExecution::Windows9xHack(command.c_str());

View File

@ -1323,7 +1323,7 @@ int SystemInformationImplementation::GetFullyQualifiedDomainName(
for (ifa=ifas; ifa!=NULL; ifa=ifa->ifa_next) for (ifa=ifas; ifa!=NULL; ifa=ifa->ifa_next)
{ {
int fam=ifa->ifa_addr->sa_family; int fam = ifa->ifa_addr? ifa->ifa_addr->sa_family : -1;
if ((fam==AF_INET) || (fam==AF_INET6)) if ((fam==AF_INET) || (fam==AF_INET6))
{ {
char host[NI_MAXHOST]={'\0'}; char host[NI_MAXHOST]={'\0'};

View File

@ -60,6 +60,12 @@ file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
"static const char* zot_macro_tgt = \"zot_macro_tgt\";\n") "static const char* zot_macro_tgt = \"zot_macro_tgt\";\n")
file(WRITE ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_lib.h
"#define link_depends_no_shared_lib_value 1\n")
file(WRITE ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_exe.h
"#define link_depends_no_shared_exe_value 0\n")
set(link_depends_no_shared_check_txt ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_check.txt)
help_xcode_depends() help_xcode_depends()
message("Building project first time") message("Building project first time")
@ -125,6 +131,19 @@ else()
message(SEND_ERROR "Project did not initially build properly: ${out}") message(SEND_ERROR "Project did not initially build properly: ${out}")
endif() endif()
if(EXISTS "${link_depends_no_shared_check_txt}")
file(STRINGS "${link_depends_no_shared_check_txt}" link_depends_no_shared_check LIMIT_COUNT 1)
if("${link_depends_no_shared_check}" STREQUAL "1")
message(STATUS "link_depends_no_shared_exe is newer than link_depends_no_shared_lib as expected.")
else()
message(SEND_ERROR "Project did not initially build properly: "
"link_depends_no_shared_exe is older than link_depends_no_shared_lib.")
endif()
else()
message(SEND_ERROR "Project did not initially build properly: "
"Targets link_depends_no_shared_lib and link_depends_no_shared_exe not both built.")
endif()
message("Waiting 3 seconds...") message("Waiting 3 seconds...")
# any additional argument will cause ${bar} to wait forever # any additional argument will cause ${bar} to wait forever
execute_process(COMMAND ${bar} -infinite TIMEOUT 3 OUTPUT_VARIABLE out) execute_process(COMMAND ${bar} -infinite TIMEOUT 3 OUTPUT_VARIABLE out)
@ -141,6 +160,9 @@ file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
"static const char* zot_macro_tgt = \"zot_macro_tgt changed\";\n") "static const char* zot_macro_tgt = \"zot_macro_tgt changed\";\n")
file(WRITE ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_lib.h
"#define link_depends_no_shared_lib_value 0\n")
if(TEST_LINK_DEPENDS) if(TEST_LINK_DEPENDS)
file(WRITE ${TEST_LINK_DEPENDS} "2") file(WRITE ${TEST_LINK_DEPENDS} "2")
endif() endif()
@ -219,3 +241,15 @@ is not newer than dependency
") ")
endif() endif()
endif() endif()
if(EXISTS "${link_depends_no_shared_check_txt}")
file(STRINGS "${link_depends_no_shared_check_txt}" link_depends_no_shared_check LIMIT_COUNT 1)
if("${link_depends_no_shared_check}" STREQUAL "0")
message(STATUS "link_depends_no_shared_exe is older than link_depends_no_shared_lib as expected.")
else()
message(SEND_ERROR "Project did not rebuild properly: link_depends_no_shared_exe is newer than link_depends_no_shared_lib.")
endif()
else()
message(SEND_ERROR "Project did not rebuild properly. "
"Targets link_depends_no_shared_lib and link_depends_no_shared_exe not both built.")
endif()

View File

@ -108,3 +108,18 @@ if(TEST_LINK_DEPENDS)
add_executable(linkdep linkdep.cxx) add_executable(linkdep linkdep.cxx)
set_property(TARGET linkdep PROPERTY LINK_DEPENDS ${TEST_LINK_DEPENDS}) set_property(TARGET linkdep PROPERTY LINK_DEPENDS ${TEST_LINK_DEPENDS})
endif() endif()
add_library(link_depends_no_shared_lib SHARED link_depends_no_shared_lib.c
${CMAKE_CURRENT_BINARY_DIR}/link_depends_no_shared_lib.h)
add_executable(link_depends_no_shared_exe link_depends_no_shared_exe.c
${CMAKE_CURRENT_BINARY_DIR}/link_depends_no_shared_exe.h)
target_link_libraries(link_depends_no_shared_exe link_depends_no_shared_lib)
set_property(TARGET link_depends_no_shared_exe PROPERTY LINK_DEPENDS_NO_SHARED 1)
add_custom_target(link_depends_no_shared_check ALL
COMMAND ${CMAKE_COMMAND}
-Dlib=$<TARGET_FILE:link_depends_no_shared_lib>
-Dexe=$<TARGET_FILE:link_depends_no_shared_exe>
-Dout=${CMAKE_CURRENT_BINARY_DIR}/link_depends_no_shared_check.txt
-P ${CMAKE_CURRENT_SOURCE_DIR}/link_depends_no_shared_check.cmake
)
add_dependencies(link_depends_no_shared_check link_depends_no_shared_exe)

View File

@ -0,0 +1,7 @@
if(NOT EXISTS "${lib}" OR NOT EXISTS "${exe}")
file(REMOVE "${out}")
elseif("${exe}" IS_NEWER_THAN "${lib}")
file(WRITE "${out}" "1\n")
else()
file(WRITE "${out}" "0\n")
endif()

View File

@ -0,0 +1,9 @@
#include "link_depends_no_shared_exe.h"
#ifdef _WIN32
__declspec(dllimport)
#endif
int link_depends_no_shared_lib(void);
int main()
{
return link_depends_no_shared_lib() + link_depends_no_shared_exe_value;
}

View File

@ -0,0 +1,8 @@
#include "link_depends_no_shared_lib.h"
#ifdef _WIN32
__declspec(dllexport)
#endif
int link_depends_no_shared_lib(void)
{
return link_depends_no_shared_lib_value;
}

View File

@ -983,6 +983,36 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
set_tests_properties(ExternalProject PROPERTIES set_tests_properties(ExternalProject PROPERTIES
TIMEOUT ${CMAKE_LONG_TEST_TIMEOUT}) TIMEOUT ${CMAKE_LONG_TEST_TIMEOUT})
add_test(ExternalProjectUpdateSetup ${CMAKE_CTEST_COMMAND}
--build-and-test
"${CMake_SOURCE_DIR}/Tests/ExternalProjectUpdate"
"${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate"
--build-generator ${CMAKE_TEST_GENERATOR}
--build-project ExternalProjectUpdateTest
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--build-exe-dir "${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate"
--force-new-ctest-process
--test-command ${CMAKE_CTEST_COMMAND} -V
)
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate")
set_tests_properties(ExternalProjectUpdateSetup PROPERTIES
TIMEOUT ${CMAKE_LONG_TEST_TIMEOUT})
add_test(NAME ExternalProjectUpdate
COMMAND ${CMAKE_CMAKE_COMMAND}
-DExternalProjectUpdate_SOURCE_DIR:PATH=${CMake_SOURCE_DIR}/Tests/ExternalProjectUpdate
-DExternalProjectUpdate_BINARY_DIR:PATH=${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate
-DCMAKE_TEST_GENERATOR=${CMAKE_TEST_GENERATOR}
-DCMAKE_TEST_MAKEPROGRAM=${CMAKE_TEST_MAKEPROGRAM}
-DCMAKE_CTEST_COMMAND=${CMAKE_CTEST_COMMAND}
-P ${CMake_SOURCE_DIR}/Tests/ExternalProjectUpdate/ExternalProjectUpdateTest.cmake
)
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate")
set_tests_properties(ExternalProjectUpdate PROPERTIES
TIMEOUT ${CMAKE_LONG_TEST_TIMEOUT}
WORKING_DIRECTORY ${CMake_SOURCE_DIR}/Tests/ExternalProjectUpdate
DEPENDS ExternalProjectUpdateSetup )
# do each of the tutorial steps # do each of the tutorial steps
foreach(STP RANGE 1 7) foreach(STP RANGE 1 7)
add_test(TutorialStep${STP} ${CMAKE_CTEST_COMMAND} add_test(TutorialStep${STP} ${CMAKE_CTEST_COMMAND}
@ -1412,6 +1442,35 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--test-command VSMidl) --test-command VSMidl)
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSMidl") list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSMidl")
if(NOT MSVC60 AND NOT CMAKE_TEST_MAKEPROGRAM MATCHES "[mM][sS][bB][uU][iI][lL][dD]\\.[eE][xX][eE]")
# The test (and tested property) works with .sln files, so it's skipped when:
# * Using VS6, which doesn't use .sln files
# * cmake --build is set up to use MSBuild, since the MSBuild invocation does not use the .sln file
set(_last_test "")
foreach(config ${CMAKE_CONFIGURATION_TYPES})
add_test(NAME VSExcludeFromDefaultBuild-${config} COMMAND ${CMAKE_CTEST_COMMAND}
--build-and-test
"${CMake_SOURCE_DIR}/Tests/VSExcludeFromDefaultBuild"
"${CMake_BINARY_DIR}/Tests/VSExcludeFromDefaultBuild"
--build-config ${config}
--build-two-config
--build-generator ${CMAKE_TEST_GENERATOR}
--build-project VSExcludeFromDefaultBuild
--build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
--test-command ${CMAKE_COMMAND}
-D "activeConfig=${config}"
-D "allConfigs=${CMAKE_CONFIGURATION_TYPES}"
-D "dir=${CMake_BINARY_DIR}/Tests/VSExcludeFromDefaultBuild"
-P "${CMake_SOURCE_DIR}/Tests/VSExcludeFromDefaultBuild/ResultTest.cmake")
if(_last_test)
set_property(TEST VSExcludeFromDefaultBuild-${config} PROPERTY DEPENDS ${_last_test})
endif()
set(_last_test "VSExcludeFromDefaultBuild-${config}")
endforeach()
unset(_last_test)
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSExcludeFromDefaultBuild")
endif()
endif() endif()
if (APPLE) if (APPLE)

View File

@ -638,6 +638,17 @@ if(do_svn_tests)
"${binary_base}/TutorialStep1-SVN-trunk/Tutorial" 98) "${binary_base}/TutorialStep1-SVN-trunk/Tutorial" 98)
endif() endif()
if(do_git_tests)
add_test(TutorialStep1-GIT-byhash
"${binary_base}/TutorialStep1-GIT-byhash/Tutorial" 100)
add_test(TutorialStep1-GIT-bytag
"${binary_base}/TutorialStep1-GIT-bytag/Tutorial" 99)
add_test(TutorialStep1-GIT-master
"${binary_base}/TutorialStep1-GIT-master/Tutorial" 98)
endif()
# InstallTree tests: # InstallTree tests:
# #

View File

@ -0,0 +1,94 @@
cmake_minimum_required(VERSION 2.8)
project(ExternalProjectUpdateTest NONE)
include(ExternalProject)
find_package(Git)
option(ExternalProjectUpdateTest_USE_FOLDERS "Enable folder grouping in IDEs." ON)
if(ExternalProjectUpdateTest_USE_FOLDERS)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
else()
set_property(GLOBAL PROPERTY USE_FOLDERS OFF)
endif()
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER
"CMakePredefinedTargets-in-ExternalProjectUpdateTest")
set(base "${CMAKE_BINARY_DIR}/CMakeExternals")
set(binary_base "${base}/Build")
set_property(DIRECTORY PROPERTY EP_BASE ${base})
set_property(DIRECTORY PROPERTY EP_STEP_TARGETS configure build test)
set(do_git_tests 0)
if(GIT_EXECUTABLE)
set(do_git_tests 1)
execute_process(
COMMAND "${GIT_EXECUTABLE}" --version
OUTPUT_VARIABLE ov
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX REPLACE "^git version (.+)$" "\\1" git_version "${ov}")
message(STATUS "git_version='${git_version}'")
if(git_version VERSION_LESS 1.6.5)
message(STATUS "No ExternalProject git tests with git client less than version 1.6.5")
set(do_git_tests 0)
endif()
endif()
# This should be specified from the command line.
if(NOT TEST_GIT_TAG)
set(TEST_GIT_TAG origin/master)
endif()
if(do_git_tests)
set(local_git_repo "../../LocalRepositories/GIT")
# Unzip/untar the git repository in our source folder so that other
# projects below may use it to test git args of ExternalProject_Add
#
set(proj SetupLocalGITRepository)
ExternalProject_Add(${proj}
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/LocalRepositories/GIT
URL ${CMAKE_CURRENT_SOURCE_DIR}/gitrepo.tgz
BUILD_COMMAND ""
CONFIGURE_COMMAND "${GIT_EXECUTABLE}" --version
INSTALL_COMMAND ""
)
set_property(TARGET ${proj}
PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
set(proj TutorialStep1-GIT)
ExternalProject_Add(${proj}
GIT_REPOSITORY "${local_git_repo}"
GIT_TAG ${TEST_GIT_TAG}
CMAKE_GENERATOR "${CMAKE_GENERATOR}"
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
INSTALL_COMMAND ""
DEPENDS "SetupLocalGITRepository"
)
set_property(TARGET ${proj} PROPERTY FOLDER "GIT")
endif()
# Test the testable built/installed products:
#
enable_testing()
# Do at least a smoke test of a built executable from each
# project's build directory...
#
# BuildTree tests:
#
if(do_git_tests)
add_test(TutorialStep1-GIT
"${binary_base}/TutorialStep1-GIT/Tutorial" 81)
endif()
message(STATUS "do_git_tests='${do_git_tests}'")
message(STATUS "GIT_EXECUTABLE='${GIT_EXECUTABLE}'")

Some files were not shown because too many files have changed in this diff Show More