소스 검색

Merge topic 'unicode-vs-projects'

ee8cef87 Encoding: If configured, write Visual Studio project files as UTF-8.
91fd99b8 Encoding: Provide option to configure CMake to use UTF-8 encoding.
Brad King 11 년 전
부모
커밋
5a21cbc96b

+ 7 - 0
CMakeLists.txt

@@ -36,6 +36,13 @@ if("${CMake_SOURCE_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
   endmacro()
 endif()
 
+# option to set the internal encoding of CMake to UTF-8
+option(CMAKE_ENCODING_UTF8 "Use UTF-8 encoding internally (experimental)." OFF)
+mark_as_advanced(CMAKE_ENCODING_UTF8)
+if(CMAKE_ENCODING_UTF8)
+  set(KWSYS_ENCODING_DEFAULT_CODEPAGE CP_UTF8)
+endif()
+
 #-----------------------------------------------------------------------
 # a macro to deal with system libraries, implemented as a macro
 # simply to improve readability of the main script

+ 5 - 0
Source/CMakeLists.txt

@@ -24,6 +24,11 @@ endif()
 
 set(EXECUTABLE_OUTPUT_PATH ${CMake_BIN_DIR})
 
+# ensure Unicode friendly APIs are used on Windows
+if(WIN32)
+  add_definitions(-DUNICODE -D_UNICODE)
+endif()
+
 # configure the .h file
 configure_file(
   "${CMake_SOURCE_DIR}/Source/cmConfigure.cmake.h.in"

+ 0 - 5
Source/QtDialog/CMakeLists.txt

@@ -59,11 +59,6 @@ else()
   endif()
 endif()
 
-
-if(WIN32 AND KWSYS_ENCODING_DEFAULT_CODEPAGE MATCHES CP_UTF8)
-  add_definitions(-DKWSYS_CP_UTF8)
-endif()
-
 set(SRCS
   AddCacheEntry.cxx
   AddCacheEntry.h

+ 1 - 1
Source/QtDialog/CMakeSetup.cxx

@@ -79,7 +79,7 @@ int main(int argc, char** argv)
 
   QApplication app(argc, argv);
 
-#if defined(KWSYS_CP_UTF8)
+#if defined(CMAKE_ENCODING_UTF8)
   QTextCodec* utf8_codec = QTextCodec::codecForName("UTF-8");
   QTextCodec::setCodecForLocale(utf8_codec);
 #endif

+ 1 - 0
Source/cmConfigure.cmake.h.in

@@ -16,4 +16,5 @@
 #cmakedefine HAVE_ENVIRON_NOT_REQUIRE_PROTOTYPE
 #cmakedefine HAVE_UNSETENV
 #cmakedefine CMAKE_USE_ELF_PARSER
+#cmakedefine CMAKE_ENCODING_UTF8
 #define CMAKE_DATA_DIR "/@CMAKE_DATA_DIR@"

+ 13 - 1
Source/cmGlobalVisualStudio7Generator.cxx

@@ -873,7 +873,8 @@ cmGlobalVisualStudio7Generator::WriteUtilityDepend(cmTarget const* target)
   std::string guid = this->GetGUID(pname.c_str());
 
   fout <<
-    "<?xml version=\"1.0\" encoding = \"Windows-1252\"?>\n"
+    "<?xml version=\"1.0\" encoding = \""
+    << this->Encoding() << "\"?>\n"
     "<VisualStudioProject\n"
     "\tProjectType=\"Visual C++\"\n"
     "\tVersion=\"" << this->GetIDEVersion() << "0\"\n"
@@ -1038,3 +1039,14 @@ cmIDEFlagTable const* cmGlobalVisualStudio7Generator::GetExtraFlagTableVS7()
 {
   return cmVS7ExtraFlagTable;
 }
+
+std::string cmGlobalVisualStudio7Generator::Encoding()
+{
+  std::ostringstream encoding;
+#ifdef CMAKE_ENCODING_UTF8
+  encoding << "UTF-8";
+#else
+  encoding << "Windows-1252";
+#endif
+  return encoding.str();
+}

+ 3 - 0
Source/cmGlobalVisualStudio7Generator.h

@@ -109,6 +109,9 @@ public:
 
   virtual void FindMakeProgram(cmMakefile*);
 
+  // Encoding for Visual Studio files
+  virtual std::string Encoding();
+
 protected:
   virtual const char* GetIDEVersion() { return "7.0"; }
 

+ 2 - 1
Source/cmGlobalVisualStudioGenerator.cxx

@@ -1,3 +1,4 @@
+
 /*============================================================================
   CMake - Cross Platform Makefile Generator
   Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
@@ -918,4 +919,4 @@ std::string cmGlobalVisualStudioGenerator::ExpandCFGIntDir(
     i += config.size();
     }
   return tmp;
-}
+}

+ 8 - 4
Source/cmLocalVisualStudio7Generator.cxx

@@ -1975,7 +1975,8 @@ cmLocalVisualStudio7Generator
 
   cmGlobalVisualStudio7Generator* gg =
     static_cast<cmGlobalVisualStudio7Generator *>(this->GlobalGenerator);
-  fout << "<?xml version=\"1.0\" encoding = \"Windows-1252\"?>\n"
+  fout << "<?xml version=\"1.0\" encoding = \""
+       << gg->Encoding() << "\"?>\n"
        << "<VisualStudioProject\n"
        << "\tProjectCreator=\"Intel Fortran\"\n"
        << "\tVersion=\"" << gg->GetIntelProjectVersion() << "\"\n";
@@ -2038,7 +2039,12 @@ cmLocalVisualStudio7Generator::WriteProjectStart(std::ostream& fout,
     this->WriteProjectStartFortran(fout, libName, target);
     return;
     }
-  fout << "<?xml version=\"1.0\" encoding = \"Windows-1252\"?>\n"
+
+  cmGlobalVisualStudio7Generator* gg =
+    static_cast<cmGlobalVisualStudio7Generator *>(this->GlobalGenerator);
+
+  fout << "<?xml version=\"1.0\" encoding = \""
+       << gg->Encoding() << "\"?>\n"
        << "<VisualStudioProject\n"
        << "\tProjectType=\"Visual C++\"\n";
   if(this->Version == VS71)
@@ -2059,8 +2065,6 @@ cmLocalVisualStudio7Generator::WriteProjectStart(std::ostream& fout,
     {
     keyword = "Win32Proj";
     }
-  cmGlobalVisualStudio7Generator* gg =
-    static_cast<cmGlobalVisualStudio7Generator *>(this->GlobalGenerator);
   fout << "\tName=\"" << projLabel << "\"\n";
   if(this->Version >= VS8)
     {

+ 4 - 2
Source/cmVisualStudio10TargetGenerator.cxx

@@ -222,7 +222,8 @@ void cmVisualStudio10TargetGenerator::Generate()
   //get the tools version to use
   const std::string toolsVer(this->GlobalGenerator->GetToolsVersion());
   std::string project_defaults=
-    "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n";
+    "<?xml version=\"1.0\" encoding=\"" +
+    this->GlobalGenerator->Encoding() + "\"?>\n";
   project_defaults.append("<Project DefaultTargets=\"Build\" ToolsVersion=\"");
   project_defaults.append(toolsVer +"\" ");
   project_defaults.append(
@@ -732,7 +733,8 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
   //get the tools version to use
   const std::string toolsVer(this->GlobalGenerator->GetToolsVersion());
   std::string project_defaults=
-    "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n";
+    "<?xml version=\"1.0\" encoding=\"" +
+    this->GlobalGenerator->Encoding() + "\"?>\n";
   project_defaults.append("<Project ToolsVersion=\"");
   project_defaults.append(toolsVer +"\" ");
   project_defaults.append(