Guest User

Untitled

a guest
Jun 18th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.97 KB | None | 0 0
  1. commit 0615f74db21d4688d21d707e3cfcc7fa5ff392c0
  2. Author: Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
  3. Date: Mon Oct 18 14:20:56 2010 +0200
  4.  
  5. qmake: Add support for Clang-style precompiled headers
  6.  
  7. The config option clang_pch_style will ensure that QMAKE_PCH_OUTPUT_BASE
  8. will not have QMAKE_PCH_OUTPUT_EXT appended, but instead the final output
  9. file QMAKE_PCH_OUTPUT will have the QMAKE_PCH_OUTPUT_EXT included.
  10.  
  11. Without clang_pch_style:
  12.  
  13. QMAKE_PCH_OUTPUT_BASE = .pch/debug-shared/QtCore.gch
  14. QMAKE_PCH_OUTPUT = .pch/debug-shared/QtCore.gch/c++
  15.  
  16. With clang_pch_style:
  17.  
  18. QMAKE_PCH_OUTPUT_BASE = .pch/debug-shared/QtCore
  19. QMAKE_PCH_OUTPUT = .pch/debug-shared/QtCore/c++.gch
  20.  
  21. Reviewed-by: pending
  22.  
  23. diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp
  24. index 71a6061..43543a1 100644
  25. --- a/qmake/generators/unix/unixmake.cpp
  26. +++ b/qmake/generators/unix/unixmake.cpp
  27. @@ -206,6 +206,33 @@ UnixMakefileGenerator::init()
  28. // icc style
  29. pchFlags = pchFlags.replace("${QMAKE_PCH_OUTPUT}",
  30. pchBaseName + project->first("QMAKE_PCH_OUTPUT_EXT"));
  31. + } else {
  32. + // gcc style (including clang_pch_style)
  33. + QString headerPrefix = project->first("QMAKE_PRECOMP_PREFIX");
  34. + QString headerSuffix;
  35. + if (project->isActiveConfig("clang_pch_style"))
  36. + headerSuffix = project->first("QMAKE_PCH_OUTPUT_EXT");
  37. + else
  38. + pchBaseName += project->first("QMAKE_PCH_OUTPUT_EXT");
  39. +
  40. + pchBaseName += Option::dir_sep;
  41. + QString pchOutputFile;
  42. +
  43. + if(comps[i] == "C") {
  44. + pchOutputFile = "c";
  45. + } else if(comps[i] == "CXX") {
  46. + pchOutputFile = "c++";
  47. + } else if(project->isActiveConfig("objective_c")) {
  48. + if(comps[i] == "OBJC")
  49. + pchOutputFile = "objective-c";
  50. + else if(comps[i] == "OBJCXX")
  51. + pchOutputFile = "objective-c++";
  52. + }
  53. +
  54. + if(!pchOutputFile.isEmpty()) {
  55. + pchFlags = pchFlags.replace("${QMAKE_PCH_OUTPUT}",
  56. + pchBaseName + pchOutputFile + headerSuffix);
  57. + }
  58. }
  59.  
  60. if (!pchFlags.isEmpty())
  61. @@ -379,7 +406,9 @@ QStringList
  62. QString header_prefix;
  63. if(!project->isEmpty("PRECOMPILED_DIR"))
  64. header_prefix = project->first("PRECOMPILED_DIR");
  65. - header_prefix += project->first("QMAKE_ORIG_TARGET") + project->first("QMAKE_PCH_OUTPUT_EXT");
  66. + header_prefix += project->first("QMAKE_ORIG_TARGET");
  67. + if (!project->isActiveConfig("clang_pch_style"))
  68. + header_prefix += project->first("QMAKE_PCH_OUTPUT_EXT");
  69. if (project->isActiveConfig("icc_pch_style")) {
  70. // icc style
  71. for(QStringList::Iterator it = Option::cpp_ext.begin(); it != Option::cpp_ext.end(); ++it) {
  72. @@ -389,23 +418,25 @@ QStringList
  73. }
  74. }
  75. } else {
  76. - // gcc style
  77. + // gcc style (including clang_pch_style)
  78. + QString header_suffix = project->isActiveConfig("clang_pch_style")
  79. + ? project->first("QMAKE_PCH_OUTPUT_EXT") : "";
  80. header_prefix += Option::dir_sep + project->first("QMAKE_PRECOMP_PREFIX");
  81. for(QStringList::Iterator it = Option::c_ext.begin(); it != Option::c_ext.end(); ++it) {
  82. if(file.endsWith(*it)) {
  83. if(!project->isEmpty("QMAKE_CFLAGS_PRECOMPILE")) {
  84. - QString precomp_c_h = header_prefix + "c";
  85. + QString precomp_c_h = header_prefix + "c" + header_suffix;
  86. if(!ret.contains(precomp_c_h))
  87. ret += precomp_c_h;
  88. }
  89. if(project->isActiveConfig("objective_c")) {
  90. if(!project->isEmpty("QMAKE_OBJCFLAGS_PRECOMPILE")) {
  91. - QString precomp_objc_h = header_prefix + "objective-c";
  92. + QString precomp_objc_h = header_prefix + "objective-c" + header_suffix;
  93. if(!ret.contains(precomp_objc_h))
  94. ret += precomp_objc_h;
  95. }
  96. if(!project->isEmpty("QMAKE_OBJCXXFLAGS_PRECOMPILE")) {
  97. - QString precomp_objcpp_h = header_prefix + "objective-c++";
  98. + QString precomp_objcpp_h = header_prefix + "objective-c++" + header_suffix;
  99. if(!ret.contains(precomp_objcpp_h))
  100. ret += precomp_objcpp_h;
  101. }
  102. @@ -416,13 +447,13 @@ QStringList
  103. for(QStringList::Iterator it = Option::cpp_ext.begin(); it != Option::cpp_ext.end(); ++it) {
  104. if(file.endsWith(*it)) {
  105. if(!project->isEmpty("QMAKE_CXXFLAGS_PRECOMPILE")) {
  106. - QString precomp_cpp_h = header_prefix + "c++";
  107. + QString precomp_cpp_h = header_prefix + "c++" + header_suffix;
  108. if(!ret.contains(precomp_cpp_h))
  109. ret += precomp_cpp_h;
  110. }
  111. if(project->isActiveConfig("objective_c")) {
  112. if(!project->isEmpty("QMAKE_OBJCXXFLAGS_PRECOMPILE")) {
  113. - QString precomp_objcpp_h = header_prefix + "objective-c++";
  114. + QString precomp_objcpp_h = header_prefix + "objective-c++" + header_suffix;
  115. if(!ret.contains(precomp_objcpp_h))
  116. ret += precomp_objcpp_h;
  117. }
  118. diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
  119. index d16cd6b3..7c68316 100644
  120. --- a/qmake/generators/unix/unixmake2.cpp
  121. +++ b/qmake/generators/unix/unixmake2.cpp
  122. @@ -835,7 +835,9 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
  123.  
  124. if(!project->isEmpty("PRECOMPILED_DIR"))
  125. precomph_out_dir = project->first("PRECOMPILED_DIR");
  126. - precomph_out_dir += project->first("QMAKE_ORIG_TARGET") + project->first("QMAKE_PCH_OUTPUT_EXT");
  127. + precomph_out_dir += project->first("QMAKE_ORIG_TARGET");
  128. + if (!project->isActiveConfig("clang_pch_style"))
  129. + precomph_out_dir += project->first("QMAKE_PCH_OUTPUT_EXT");
  130.  
  131. if (project->isActiveConfig("icc_pch_style")) {
  132. // icc style
  133. @@ -849,19 +851,22 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
  134.  
  135. precomp_files << precomph_out_dir << sourceFile << objectFile;
  136. } else {
  137. - // gcc style
  138. + // gcc style (including clang_pch_style)
  139. precomph_out_dir += Option::dir_sep;
  140.  
  141. QString header_prefix = project->first("QMAKE_PRECOMP_PREFIX");
  142. + QString header_suffix = project->isActiveConfig("clang_pch_style")
  143. + ? project->first("QMAKE_PCH_OUTPUT_EXT") : "";
  144. +
  145. if(!project->isEmpty("QMAKE_CFLAGS_PRECOMPILE"))
  146. - precomp_files += precomph_out_dir + header_prefix + "c";
  147. + precomp_files += precomph_out_dir + header_prefix + "c" + header_suffix;
  148. if(!project->isEmpty("QMAKE_CXXFLAGS_PRECOMPILE"))
  149. - precomp_files += precomph_out_dir + header_prefix + "c++";
  150. + precomp_files += precomph_out_dir + header_prefix + "c++" + header_suffix;
  151. if(project->isActiveConfig("objective_c")) {
  152. if(!project->isEmpty("QMAKE_OBJCFLAGS_PRECOMPILE"))
  153. - precomp_files += precomph_out_dir + header_prefix + "objective-c";
  154. + precomp_files += precomph_out_dir + header_prefix + "objective-c" + header_suffix;
  155. if(!project->isEmpty("QMAKE_OBJCXXFLAGS_PRECOMPILE"))
  156. - precomp_files += precomph_out_dir + header_prefix + "objective-c++";
  157. + precomp_files += precomph_out_dir + header_prefix + "objective-c++" + header_suffix;
  158. }
  159. }
  160. t << "-$(DEL_FILE) " << precomp_files.join(" ") << "\n\t";
  161. @@ -930,7 +935,9 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
  162. QString pchOutput;
  163. if(!project->isEmpty("PRECOMPILED_DIR"))
  164. pchOutput = project->first("PRECOMPILED_DIR");
  165. - pchOutput += pchBaseName + project->first("QMAKE_PCH_OUTPUT_EXT");
  166. + pchOutput += pchBaseName;
  167. + if (!project->isActiveConfig("clang_pch_style"))
  168. + pchOutput += project->first("QMAKE_PCH_OUTPUT_EXT");
  169.  
  170. if (project->isActiveConfig("icc_pch_style")) {
  171. // icc style
  172. @@ -943,9 +950,10 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
  173. pchFlags = pchFlags.replace("${QMAKE_PCH_TEMP_SOURCE}", sourceFile)
  174. .replace("${QMAKE_PCH_TEMP_OBJECT}", objectFile);
  175. } else {
  176. - // gcc style
  177. + // gcc style (including clang_pch_style)
  178. QString header_prefix = project->first("QMAKE_PRECOMP_PREFIX");
  179. -
  180. + QString header_suffix = project->isActiveConfig("clang_pch_style")
  181. + ? project->first("QMAKE_PCH_OUTPUT_EXT") : "";
  182. pchOutput += Option::dir_sep;
  183. QString pchOutputDir = pchOutput, pchOutputFile;
  184.  
  185. @@ -961,7 +969,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
  186. }
  187. if(pchOutputFile.isEmpty())
  188. continue;
  189. - pchOutput += header_prefix + pchOutputFile;
  190. + pchOutput += header_prefix + pchOutputFile + header_suffix;
  191.  
  192. t << pchOutput << ": " << pchInput << " " << findDependencies(pchInput).join(" \\\n\t\t")
  193. << "\n\t" << mkdir_p_asstring(pchOutputDir);
Add Comment
Please, Sign In to add comment