[Cmake-commits] CMake branch, next, updated. v2.8.8-2644-g5beb676

Brad King brad.king at kitware.com
Thu Apr 19 09:35:44 EDT 2012


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  5beb676f3159b436a03b9137eb3b5e6d1c09d62d (commit)
       via  8787f946b73315d84649bd9818a8225a772c7c36 (commit)
       via  4a30258d91818eb1c1d6741b5a47c54cbfab3313 (commit)
       via  f3191f5bc0db2d6717be20585c97f0f2346b8524 (commit)
       via  59139031a1aa24231b9302aa4cd8ecc4e22fb594 (commit)
      from  b5f02907649c3f075fcf44225bd259b27262a972 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5beb676f3159b436a03b9137eb3b5e6d1c09d62d
commit 5beb676f3159b436a03b9137eb3b5e6d1c09d62d
Merge: b5f0290 8787f94
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Apr 19 09:35:41 2012 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Thu Apr 19 09:35:41 2012 -0400

    Merge topic 'enhance-include_external_msproject' into next
    
    8787f94 Merge branch 'list-empty-error' into enhance-include_external_msproject
    4a30258 include_external_msproject: Test TYPE, GUID, PLATFORM options (#13120)
    f3191f5 Merge branch 'test-RunCMake-check' into enhance-include_external_msproject
    5913903 include_external_msproject: Add TYPE, GUID, PLATFORM options (#13120)


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8787f946b73315d84649bd9818a8225a772c7c36
commit 8787f946b73315d84649bd9818a8225a772c7c36
Merge: 4a30258 05604eb
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Apr 19 09:33:29 2012 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Apr 19 09:33:29 2012 -0400

    Merge branch 'list-empty-error' into enhance-include_external_msproject
    
    Resolve conflict in Tests/RunCMake/CMakeLists.txt by adding both tests.

diff --cc Tests/RunCMake/CMakeLists.txt
index 4e1660c,865a409..1c6db39
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@@ -49,7 -44,4 +49,8 @@@ add_RunCMake_test(ObjectLibrary
  
  add_RunCMake_test(build_command)
  add_RunCMake_test(find_package)
+ add_RunCMake_test(list)
 +
 +if("${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio [^6]")
 +  add_RunCMake_test(include_external_msproject)
 +endif()

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4a30258d91818eb1c1d6741b5a47c54cbfab3313
commit 4a30258d91818eb1c1d6741b5a47c54cbfab3313
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Apr 19 08:35:10 2012 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Apr 19 08:35:55 2012 -0400

    include_external_msproject: Test TYPE, GUID, PLATFORM options (#13120)
    
    Add "RunCMake.include_external_msproject" test to use the TYPE, GUID, and
    PLATFORM options to include_external_msproject.  Since projects with
    custom types and platforms cannot be loaded without special VS plugins
    validate the results by directly parsing the generated solution (.sln).
    
    Co-Author: Leonid Yurchenko <nocturne at qarea.com>

diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 488d469..4e1660c 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -49,3 +49,7 @@ add_RunCMake_test(ObjectLibrary)
 
 add_RunCMake_test(build_command)
 add_RunCMake_test(find_package)
+
+if("${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio [^6]")
+  add_RunCMake_test(include_external_msproject)
+endif()
diff --git a/Tests/RunCMake/include_external_msproject/CMakeLists.txt b/Tests/RunCMake/include_external_msproject/CMakeLists.txt
new file mode 100644
index 0000000..e8db6b0
--- /dev/null
+++ b/Tests/RunCMake/include_external_msproject/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/include_external_msproject/CustomGuid-check.cmake b/Tests/RunCMake/include_external_msproject/CustomGuid-check.cmake
new file mode 100644
index 0000000..68dec4c
--- /dev/null
+++ b/Tests/RunCMake/include_external_msproject/CustomGuid-check.cmake
@@ -0,0 +1 @@
+check_project(CustomGuid external "aaa-bbb-ccc-000" "" "")
diff --git a/Tests/RunCMake/include_external_msproject/CustomGuid.cmake b/Tests/RunCMake/include_external_msproject/CustomGuid.cmake
new file mode 100644
index 0000000..1dbe7da
--- /dev/null
+++ b/Tests/RunCMake/include_external_msproject/CustomGuid.cmake
@@ -0,0 +1,2 @@
+include_external_msproject(external external.project
+                           GUID aaa-bbb-ccc-000)
diff --git a/Tests/RunCMake/include_external_msproject/CustomGuidTypePlatform-check.cmake b/Tests/RunCMake/include_external_msproject/CustomGuidTypePlatform-check.cmake
new file mode 100644
index 0000000..614712e
--- /dev/null
+++ b/Tests/RunCMake/include_external_msproject/CustomGuidTypePlatform-check.cmake
@@ -0,0 +1 @@
+check_project(CustomGuidTypePlatform external "aaa-bbb-ccc-111" "aaa-bbb-ccc-ddd-eee" "Custom Platform")
diff --git a/Tests/RunCMake/include_external_msproject/CustomGuidTypePlatform.cmake b/Tests/RunCMake/include_external_msproject/CustomGuidTypePlatform.cmake
new file mode 100644
index 0000000..ee4db65
--- /dev/null
+++ b/Tests/RunCMake/include_external_msproject/CustomGuidTypePlatform.cmake
@@ -0,0 +1,5 @@
+# Test all optional parameters are set.
+include_external_msproject(external external.project
+                           GUID aaa-bbb-ccc-111
+                           TYPE aaa-bbb-ccc-ddd-eee
+                           PLATFORM "Custom Platform")
diff --git a/Tests/RunCMake/include_external_msproject/CustomTypePlatform-check.cmake b/Tests/RunCMake/include_external_msproject/CustomTypePlatform-check.cmake
new file mode 100644
index 0000000..054eeb0
--- /dev/null
+++ b/Tests/RunCMake/include_external_msproject/CustomTypePlatform-check.cmake
@@ -0,0 +1 @@
+check_project(CustomTypePlatform external "" "aaa-bbb-ccc-ddd-eee" "Custom Platform")
diff --git a/Tests/RunCMake/include_external_msproject/CustomTypePlatform.cmake b/Tests/RunCMake/include_external_msproject/CustomTypePlatform.cmake
new file mode 100644
index 0000000..8c76adb
--- /dev/null
+++ b/Tests/RunCMake/include_external_msproject/CustomTypePlatform.cmake
@@ -0,0 +1,3 @@
+include_external_msproject(external external.project
+                           TYPE aaa-bbb-ccc-ddd-eee
+                           PLATFORM "Custom Platform")
diff --git a/Tests/RunCMake/include_external_msproject/RunCMakeTest.cmake b/Tests/RunCMake/include_external_msproject/RunCMakeTest.cmake
new file mode 100644
index 0000000..90710f9
--- /dev/null
+++ b/Tests/RunCMake/include_external_msproject/RunCMakeTest.cmake
@@ -0,0 +1,6 @@
+include(RunCMake)
+include(${CMAKE_CURRENT_LIST_DIR}/check_utils.cmake)
+
+run_cmake(CustomGuid)
+run_cmake(CustomTypePlatform)
+run_cmake(CustomGuidTypePlatform)
diff --git a/Tests/RunCMake/include_external_msproject/check_utils.cmake b/Tests/RunCMake/include_external_msproject/check_utils.cmake
new file mode 100644
index 0000000..7d6b8f8
--- /dev/null
+++ b/Tests/RunCMake/include_external_msproject/check_utils.cmake
@@ -0,0 +1,109 @@
+# Check that file contains line that matches regular expression.
+# Sets IS_FOUND variable to TRUE if found and to FALSE otherwise.
+macro(check_line_exists TARGET_FILE REG_EXP_REF)
+  set(IS_FOUND "FALSE")
+
+  file(STRINGS ${TARGET_FILE} FOUND_LINE LIMIT_COUNT 1 REGEX "${${REG_EXP_REF}}")
+  list(LENGTH FOUND_LINE _VAR_LEN)
+
+  if(_VAR_LEN GREATER 0)
+    set(IS_FOUND "TRUE")
+  endif(_VAR_LEN GREATER 0)
+endmacro(check_line_exists TARGET_FILE REG_EXP_REF)
+
+# Search and parse project section line by project name.
+# If search was successful stores found type and guid into FOUND_TYPE and FOUND_GUID variables respectively.
+# Sets IS_FOUND variable to TRUE if found and to FALSE otherwise.
+macro(parse_project_section TARGET_FILE PROJECT_NAME)
+  set(REG_EXP "^Project\\(\\\"{(.+)}\\\"\\) = \\\"${PROJECT_NAME}\\\", \\\".+\\..+\\\", \\\"{(.+)}\\\"$")
+
+  check_line_exists(${TARGET_FILE} REG_EXP)
+  if(NOT IS_FOUND)
+    return()
+  endif(NOT IS_FOUND)
+
+  string(REGEX REPLACE "${REG_EXP}" "\\1;\\2" _GUIDS "${FOUND_LINE}")
+
+  list(GET _GUIDS 0 FOUND_TYPE)
+  list(GET _GUIDS 1 FOUND_GUID)
+endmacro(parse_project_section TARGET_FILE PROJECT_NAME)
+
+# Search project section line by project name and type.
+# Returns TRUE if found and FALSE otherwise
+function(check_project_type TARGET_FILE PROJECT_NAME PROJECT_TYPE RESULT)
+  set(${RESULT} "FALSE" PARENT_SCOPE)
+
+  parse_project_section(${TARGET_FILE} ${PROJECT_NAME})
+  if(IS_FOUND AND FOUND_TYPE STREQUAL PROJECT_TYPE)
+    set(${RESULT} "TRUE" PARENT_SCOPE)
+  endif(IS_FOUND AND FOUND_TYPE STREQUAL PROJECT_TYPE)
+endfunction(check_project_type TARGET_FILE PROJECT_NAME PROJECT_TYPE RESULT)
+
+
+# Search project section line by project name and id.
+# Returns TRUE if found and FALSE otherwise
+function(check_project_guid TARGET_FILE PROJECT_NAME PROJECT_GUID RESULT)
+  set(${RESULT} "FALSE" PARENT_SCOPE)
+
+  parse_project_section(${TARGET_FILE} ${PROJECT_NAME})
+  if(IS_FOUND AND FOUND_GUID STREQUAL PROJECT_GUID)
+    set(${RESULT} "TRUE" PARENT_SCOPE)
+  endif(IS_FOUND AND FOUND_GUID STREQUAL PROJECT_GUID)
+endfunction(check_project_guid TARGET_FILE PROJECT_NAME PROJECT_GUID RESULT)
+
+
+# Search project's build configuration line by project name and target platform name.
+# Returns TRUE if found and FALSE otherwise
+function(check_custom_platform TARGET_FILE PROJECT_NAME PLATFORM_NAME RESULT)
+  set(${RESULT} "FALSE" PARENT_SCOPE)
+
+  # extract project guid
+  parse_project_section(${TARGET_FILE} ${PROJECT_NAME})
+  if(NOT IS_FOUND)
+    return()
+  endif(NOT IS_FOUND)
+
+  # probably whould be better to use configuration name
+  # extracted from CMAKE_CONFIGURATION_TYPES than just hardcoded "Debug" instead
+  set(REG_EXP "^(\t)*\\{${FOUND_GUID}\\}\\.Debug[^ ]*\\.ActiveCfg = Debug\\|${PLATFORM_NAME}$")
+  check_line_exists(${TARGET_FILE} REG_EXP)
+
+  set(${RESULT} ${IS_FOUND} PARENT_SCOPE)
+endfunction(check_custom_platform TARGET_FILE PLATFORM_NAME RESULT)
+
+# RunCMake test check helper
+function(check_project test name guid type platform)
+  set(sln "${RunCMake_TEST_BINARY_DIR}/${test}.sln")
+  set(sep "")
+  set(failed "")
+  if(NOT type)
+    set(type 8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942)
+  endif()
+  if(NOT platform)
+    if("${RunCMake_GENERATOR}" MATCHES "Win64")
+      set(platform "x64")
+    else()
+      set(platform "Win32")
+    endif()
+  endif()
+  if(guid)
+    check_project_guid("${sln}" "${name}" "${guid}" passed_guid)
+    if(NOT passed_guid)
+      set(failed "${failed}${sep}${name} solution has no project with expected GUID=${guid}")
+      set(sep "\n")
+    endif()
+  else()
+    set(passed_guid 1)
+  endif()
+  check_project_type("${sln}" "${name}" "${type}" passed_type)
+  if(NOT passed_type)
+    set(failed "${failed}${sep}${name} solution has no project with expected TYPE=${type}")
+    set(sep "\n")
+  endif()
+  check_custom_platform("${sln}" "${name}" "${platform}" passed_platform)
+  if(NOT passed_platform)
+    set(failed "${failed}${sep}${name} solution has no project with expected PLATFORM=${platform}")
+    set(sep "\n")
+  endif()
+  set(RunCMake_TEST_FAILED "${failed}" PARENT_SCOPE)
+endfunction()
diff --git a/Tests/RunCMake/include_external_msproject/main.cpp b/Tests/RunCMake/include_external_msproject/main.cpp
new file mode 100644
index 0000000..9198103
--- /dev/null
+++ b/Tests/RunCMake/include_external_msproject/main.cpp
@@ -0,0 +1,3 @@
+void main()
+{
+}

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f3191f5bc0db2d6717be20585c97f0f2346b8524
commit f3191f5bc0db2d6717be20585c97f0f2346b8524
Merge: 5913903 38c3943
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Thu Apr 19 08:34:56 2012 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Thu Apr 19 08:34:56 2012 -0400

    Merge branch 'test-RunCMake-check' into enhance-include_external_msproject


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=59139031a1aa24231b9302aa4cd8ecc4e22fb594
commit 59139031a1aa24231b9302aa4cd8ecc4e22fb594
Author:     Leonid Yurchenko <nocturne at qarea.com>
AuthorDate: Mon Apr 16 10:07:19 2012 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Apr 16 10:17:03 2012 -0400

    include_external_msproject: Add TYPE, GUID, PLATFORM options (#13120)
    
    These allow one to reference more external VS project file variations.

diff --git a/Source/cmGlobalVisualStudio71Generator.cxx b/Source/cmGlobalVisualStudio71Generator.cxx
index a5feaca..11bccde 100644
--- a/Source/cmGlobalVisualStudio71Generator.cxx
+++ b/Source/cmGlobalVisualStudio71Generator.cxx
@@ -241,9 +241,12 @@ void cmGlobalVisualStudio71Generator
 ::WriteExternalProject(std::ostream& fout, 
                        const char* name,
                        const char* location,
+                       const char* typeGuid,
                        const std::set<cmStdString>& depends)
 { 
-  fout << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"" 
+  fout << "Project(\"{"
+       << (typeGuid ? typeGuid : "8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942")
+       << "}\") = \""
        << name << "\", \""
        << this->ConvertToSolutionPath(location) << "\", \"{"
        << this->GetGUID(name)
@@ -279,18 +282,20 @@ void cmGlobalVisualStudio71Generator
 // executables to the libraries it uses are also done here
 void cmGlobalVisualStudio71Generator
 ::WriteProjectConfigurations(std::ostream& fout, const char* name,
-                             bool partOfDefaultBuild)
+                             bool partOfDefaultBuild, const char* platformMapping)
 {
   std::string guid = this->GetGUID(name);
   for(std::vector<std::string>::iterator i = this->Configurations.begin();
       i != this->Configurations.end(); ++i)
     {
     fout << "\t\t{" << guid << "}." << *i 
-         << ".ActiveCfg = " << *i << "|Win32\n";
+         << ".ActiveCfg = " << *i << "|"
+         << (platformMapping ? platformMapping : "Win32") << std::endl;
     if(partOfDefaultBuild)
       {
       fout << "\t\t{" << guid << "}." << *i
-           << ".Build.0 = " << *i << "|Win32\n";
+           << ".Build.0 = " << *i << "|"
+           << (platformMapping ? platformMapping : "Win32") << std::endl;
       }
     }
 }
diff --git a/Source/cmGlobalVisualStudio71Generator.h b/Source/cmGlobalVisualStudio71Generator.h
index 81c2087..503b708 100644
--- a/Source/cmGlobalVisualStudio71Generator.h
+++ b/Source/cmGlobalVisualStudio71Generator.h
@@ -64,10 +64,12 @@ protected:
                            const char* name, const char* path, cmTarget &t);
   virtual void WriteProjectConfigurations(std::ostream& fout,
                                           const char* name,
-                                          bool partOfDefaultBuild);
+                                          bool partOfDefaultBuild,
+                                          const char* platformMapping = NULL);
   virtual void WriteExternalProject(std::ostream& fout,
                                     const char* name,
                                     const char* path,
+                                    const char* typeGuid,
                                     const std::set<cmStdString>& depends);
   virtual void WriteSLNFooter(std::ostream& fout);
   virtual void WriteSLNHeader(std::ostream& fout);
diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx
index a68e6d8..09b200f 100644
--- a/Source/cmGlobalVisualStudio7Generator.cxx
+++ b/Source/cmGlobalVisualStudio7Generator.cxx
@@ -251,7 +251,8 @@ void cmGlobalVisualStudio7Generator::WriteTargetConfigurations(
     if(expath)
       {
       this->WriteProjectConfigurations(fout, target->GetName(),
-                                       true);
+                                       true,
+                                       target->GetProperty("VS_PLATFORM_MAPPING"));
       }
     else
       {
@@ -286,8 +287,12 @@ void cmGlobalVisualStudio7Generator::WriteTargetsToSolution(
       {
       std::string project = target->GetName();
       std::string location = expath;
-      this->WriteExternalProject(fout, project.c_str(), 
-                                 location.c_str(), target->GetUtilities());
+
+      this->WriteExternalProject(fout,
+                                 project.c_str(),
+                                 location.c_str(),
+                                 target->GetProperty("VS_PROJECT_TYPE"),
+                                 target->GetUtilities());
       written = true;
       }
     else
@@ -580,18 +585,20 @@ cmGlobalVisualStudio7Generator
 // executables to the libraries it uses are also done here
 void cmGlobalVisualStudio7Generator
 ::WriteProjectConfigurations(std::ostream& fout, const char* name,
-                             bool partOfDefaultBuild)
+                             bool partOfDefaultBuild, const char* platformMapping)
 {
   std::string guid = this->GetGUID(name);
   for(std::vector<std::string>::iterator i = this->Configurations.begin();
       i != this->Configurations.end(); ++i)
     {
     fout << "\t\t{" << guid << "}." << *i
-         << ".ActiveCfg = " << *i << "|Win32\n";
+         << ".ActiveCfg = " << *i << "|"
+         << (platformMapping ? platformMapping : "Win32") << "\n";
     if(partOfDefaultBuild)
       {
       fout << "\t\t{" << guid << "}." << *i
-           << ".Build.0 = " << *i << "|Win32\n";
+           << ".Build.0 = " << *i << "|"
+           << (platformMapping ? platformMapping : "Win32") << "\n";
       }
     }
 }
@@ -604,10 +611,14 @@ void cmGlobalVisualStudio7Generator
 void cmGlobalVisualStudio7Generator::WriteExternalProject(std::ostream& fout, 
                                const char* name,
                                const char* location,
+                               const char* typeGuid,
                                const std::set<cmStdString>&)
 { 
   std::string d = cmSystemTools::ConvertToOutputPath(location);
-  fout << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"" 
+  fout << "Project("
+       << "\"{"
+       << (typeGuid ? typeGuid : "8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942")
+       << "}\") = \""
        << name << "\", \""
        << this->ConvertToSolutionPath(location) << "\", \"{"
        << this->GetGUID(name)
diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h
index c92998e..9b9107d 100644
--- a/Source/cmGlobalVisualStudio7Generator.h
+++ b/Source/cmGlobalVisualStudio7Generator.h
@@ -107,7 +107,8 @@ protected:
                            const char* name, const char* path, cmTarget &t);
   virtual void WriteProjectConfigurations(std::ostream& fout,
                                           const char* name,
-                                          bool partOfDefaultBuild);
+                                          bool partOfDefaultBuild,
+                                          const char* platformMapping = NULL);
   virtual void WriteSLNFooter(std::ostream& fout);
   virtual void WriteSLNHeader(std::ostream& fout);
   virtual std::string WriteUtilityDepend(cmTarget* target);
@@ -130,6 +131,7 @@ protected:
   virtual void WriteExternalProject(std::ostream& fout,
                                     const char* name,
                                     const char* path,
+                                    const char* typeGuid,
                                     const std::set<cmStdString>&
                                     dependencies);
 
diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx
index a723109..72eb48d 100644
--- a/Source/cmGlobalVisualStudio8Generator.cxx
+++ b/Source/cmGlobalVisualStudio8Generator.cxx
@@ -270,20 +270,20 @@ cmGlobalVisualStudio8Generator
 void
 cmGlobalVisualStudio8Generator
 ::WriteProjectConfigurations(std::ostream& fout, const char* name,
-                             bool partOfDefaultBuild)
+                             bool partOfDefaultBuild, const char* platformMapping)
 {
   std::string guid = this->GetGUID(name);
   for(std::vector<std::string>::iterator i = this->Configurations.begin();
       i != this->Configurations.end(); ++i)
     {
     fout << "\t\t{" << guid << "}." << *i
-         << "|" << this->GetPlatformName() << ".ActiveCfg = "
-         << *i << "|" << this->GetPlatformName() << "\n";
+         << "|" << this->GetPlatformName() << ".ActiveCfg = " << *i << "|"
+         << (platformMapping ? platformMapping : this->GetPlatformName()) << "\n";
     if(partOfDefaultBuild)
       {
       fout << "\t\t{" << guid << "}." << *i
-           << "|" << this->GetPlatformName() << ".Build.0 = "
-           << *i << "|" << this->GetPlatformName() << "\n";
+           << "|" << this->GetPlatformName() << ".Build.0 = " << *i << "|"
+           << (platformMapping ? platformMapping : this->GetPlatformName()) << "\n";
       }
     }
 }
diff --git a/Source/cmGlobalVisualStudio8Generator.h b/Source/cmGlobalVisualStudio8Generator.h
index e0913ed..7dae429 100644
--- a/Source/cmGlobalVisualStudio8Generator.h
+++ b/Source/cmGlobalVisualStudio8Generator.h
@@ -77,7 +77,8 @@ protected:
   virtual void WriteSolutionConfigurations(std::ostream& fout);
   virtual void WriteProjectConfigurations(std::ostream& fout,
                                           const char* name,
-                                          bool partOfDefaultBuild);
+                                          bool partOfDefaultBuild,
+                                          const char* platformMapping = NULL);
   virtual bool ComputeTargetDepends();
   virtual void WriteProjectDepends(std::ostream& fout, const char* name,
                                    const char* path, cmTarget &t);
diff --git a/Source/cmIncludeExternalMSProjectCommand.cxx b/Source/cmIncludeExternalMSProjectCommand.cxx
index a4369a3..bcec45e 100644
--- a/Source/cmIncludeExternalMSProjectCommand.cxx
+++ b/Source/cmIncludeExternalMSProjectCommand.cxx
@@ -25,18 +25,76 @@ bool cmIncludeExternalMSProjectCommand
 #ifdef _WIN32
   if(this->Makefile->GetDefinition("WIN32"))
     {
+    enum Doing { DoingNone, DoingType, DoingGuid, DoingPlatform };
+
+    Doing doing = DoingNone;
+
+    std::string customType;
+    std::string customGuid;
+    std::string platformMapping;
+
+    std::vector<std::string> depends;
+    for (unsigned int i=2; i<args.size(); ++i)
+      {
+      if (args[i] == "TYPE")
+        {
+        doing = DoingType;
+        }
+      else if (args[i] == "GUID")
+        {
+        doing = DoingGuid;
+        }
+      else if (args[i] == "PLATFORM")
+        {
+        doing = DoingPlatform;
+        }
+      else
+        {
+        switch (doing)
+          {
+          case DoingNone: depends.push_back(args[i]);    break;
+          case DoingType: customType = args[i];          break;
+          case DoingGuid: customGuid = args[i];          break;
+          case DoingPlatform: platformMapping = args[i]; break;
+          }
+        doing = DoingNone;
+        }
+      }
+
+    // Hack together a utility target storing enough information
+    // to reproduce the target inclusion.
+    std::string utility_name = args[0];
+
     std::string path = args[1];
     cmSystemTools::ConvertToUnixSlashes(path);
 
+    if (!customGuid.empty())
+      {
+      std::string guidVariable = utility_name + "_GUID_CMAKE";
+      this->Makefile->GetCMakeInstance()->AddCacheEntry(guidVariable.c_str(),
+                                                        customGuid.c_str(),
+                                                        "Stored GUID",
+                                                        cmCacheManager::INTERNAL);
+      }
+
     // Create a target instance for this utility.
     cmTarget* target=this->Makefile->AddNewTarget(cmTarget::UTILITY, 
-                                                  args[0].c_str());
+                                                  utility_name.c_str());
+
+    target->SetProperty("GENERATOR_FILE_NAME", utility_name.c_str());
     target->SetProperty("EXTERNAL_MSPROJECT", path.c_str());
-    target->SetProperty("EXCLUDE_FROM_ALL","FALSE"); 
-    target->SetProperty("GENERATOR_FILE_NAME", args[0].c_str());
-    for (unsigned int i=2; i<args.size(); ++i) 
+    target->SetProperty("EXCLUDE_FROM_ALL", "FALSE");
+
+    if (!customType.empty())
+      target->SetProperty("VS_PROJECT_TYPE",customType.c_str());
+    if (!platformMapping.empty())
+      target->SetProperty("VS_PLATFORM_MAPPING",platformMapping.c_str());
+
+    for (std::vector<std::string>::const_iterator it = depends.begin();
+         it != depends.end();
+         ++it)
       {
-      target->AddUtility(args[i].c_str());
+      target->AddUtility(it->c_str());
       }
     }
 #endif
diff --git a/Source/cmIncludeExternalMSProjectCommand.h b/Source/cmIncludeExternalMSProjectCommand.h
index 911a772..2b2ed0d 100644
--- a/Source/cmIncludeExternalMSProjectCommand.h
+++ b/Source/cmIncludeExternalMSProjectCommand.h
@@ -59,11 +59,21 @@ public:
     {
     return
       "  include_external_msproject(projectname location\n"
+      "                             [TYPE projectTypeGUID]\n"
+      "                             [GUID projectGUID]\n"
+      "                             [PLATFORM platformName]\n"
       "                             dep1 dep2 ...)\n"
       "Includes an external Microsoft project in the generated workspace "
       "file.  Currently does nothing on UNIX. This will create a "
       "target named [projectname].  This can be used in the add_dependencies "
-      "command to make things depend on the external project.";
+      "command to make things depend on the external project."
+      "\n"
+      "TYPE, GUID and PLATFORM are optional parameters that allow one "
+      "to specify the type of project, id (GUID) of the project and "
+      "the name of the target platform.  "
+      "This is useful for projects requiring values other than the default "
+      "(e.g. WIX projects). "
+      "These options are not supported by the Visual Studio 6 generator.";
     }
   
   cmTypeMacro(cmIncludeExternalMSProjectCommand, cmCommand);
diff --git a/Source/cmLocalVisualStudio10Generator.cxx b/Source/cmLocalVisualStudio10Generator.cxx
index bf0e997..ace7adf 100644
--- a/Source/cmLocalVisualStudio10Generator.cxx
+++ b/Source/cmLocalVisualStudio10Generator.cxx
@@ -99,6 +99,14 @@ void cmLocalVisualStudio10Generator
 {
   cmVS10XMLParser parser;
   parser.ParseFile(path); 
+
+  // if we can not find a GUID then create one
+  if(parser.GUID.empty())
+    {
+    this->GlobalGenerator->CreateGUID(name);
+    return;
+    }
+
   std::string guidStoreName = name;
   guidStoreName += "_GUID_CMAKE";
   // save the GUID in the cache

-----------------------------------------------------------------------

Summary of changes:
 Source/cmGlobalVisualStudio71Generator.cxx         |   13 ++-
 Source/cmGlobalVisualStudio71Generator.h           |    4 +-
 Source/cmGlobalVisualStudio7Generator.cxx          |   25 +++--
 Source/cmGlobalVisualStudio7Generator.h            |    4 +-
 Source/cmGlobalVisualStudio8Generator.cxx          |   10 +-
 Source/cmGlobalVisualStudio8Generator.h            |    3 +-
 Source/cmIncludeExternalMSProjectCommand.cxx       |   68 +++++++++++-
 Source/cmIncludeExternalMSProjectCommand.h         |   12 ++-
 Source/cmLocalVisualStudio10Generator.cxx          |    8 ++
 Tests/RunCMake/CMakeLists.txt                      |    4 +
 .../CMakeLists.txt                                 |    0
 .../CustomGuid-check.cmake                         |    1 +
 .../include_external_msproject/CustomGuid.cmake    |    2 +
 .../CustomGuidTypePlatform-check.cmake             |    1 +
 .../CustomGuidTypePlatform.cmake                   |    5 +
 .../CustomTypePlatform-check.cmake                 |    1 +
 .../CustomTypePlatform.cmake                       |    3 +
 .../include_external_msproject/RunCMakeTest.cmake  |    6 +
 .../include_external_msproject/check_utils.cmake   |  109 ++++++++++++++++++++
 Tests/RunCMake/include_external_msproject/main.cpp |    3 +
 20 files changed, 257 insertions(+), 25 deletions(-)
 copy Tests/RunCMake/{find_package => include_external_msproject}/CMakeLists.txt (100%)
 create mode 100644 Tests/RunCMake/include_external_msproject/CustomGuid-check.cmake
 create mode 100644 Tests/RunCMake/include_external_msproject/CustomGuid.cmake
 create mode 100644 Tests/RunCMake/include_external_msproject/CustomGuidTypePlatform-check.cmake
 create mode 100644 Tests/RunCMake/include_external_msproject/CustomGuidTypePlatform.cmake
 create mode 100644 Tests/RunCMake/include_external_msproject/CustomTypePlatform-check.cmake
 create mode 100644 Tests/RunCMake/include_external_msproject/CustomTypePlatform.cmake
 create mode 100644 Tests/RunCMake/include_external_msproject/RunCMakeTest.cmake
 create mode 100644 Tests/RunCMake/include_external_msproject/check_utils.cmake
 create mode 100644 Tests/RunCMake/include_external_msproject/main.cpp


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list