compiletools 7.0.0__tar.gz → 7.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. {compiletools-7.0.0 → compiletools-7.0.2}/PKG-INFO +3 -3
  2. {compiletools-7.0.0 → compiletools-7.0.2}/pyproject.toml +3 -3
  3. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-cake.rst +1 -1
  4. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-cleanup-locks.rst +1 -1
  5. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-commandline.rst +1 -1
  6. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-compilation-database.rst +1 -1
  7. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-config.rst +1 -1
  8. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-cppdeps.rst +1 -1
  9. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-doc.rst +1 -1
  10. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-filelist.rst +1 -1
  11. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-findtargets.rst +1 -1
  12. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-gitroot.rst +1 -1
  13. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-headertree.rst +1 -1
  14. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-jobs.rst +1 -1
  15. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-list-variants.rst +1 -1
  16. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-magicflags.rst +1 -1
  17. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/apptools.py +63 -11
  18. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/file_analyzer.py +15 -8
  19. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/magicflags.py +19 -11
  20. compiletools-7.0.2/src/compiletools/samples/header_guard_bug/README.md +57 -0
  21. compiletools-7.0.2/src/compiletools/samples/header_guard_bug/header_a.hpp +34 -0
  22. compiletools-7.0.2/src/compiletools/samples/header_guard_bug/header_b.hpp +32 -0
  23. compiletools-7.0.2/src/compiletools/samples/header_guard_bug/main.cpp +17 -0
  24. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_deps/feature_header.hpp +1 -1
  25. compiletools-7.0.2/src/compiletools/samples/macro_deps/feature_y_impl.cpp +5 -0
  26. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magic_processing_order/complex_test.cpp +1 -1
  27. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_findtargets.py +1 -0
  28. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_magicflags.py +51 -5
  29. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_magicpkgconfig.py +52 -0
  30. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/version.py +1 -1
  31. compiletools-7.0.0/src/compiletools/samples/macro_deps/feature_y_impl.cpp +0 -5
  32. {compiletools-7.0.0 → compiletools-7.0.2}/scripts/create-documentation +0 -0
  33. {compiletools-7.0.0 → compiletools-7.0.2}/scripts/ct-build +0 -0
  34. {compiletools-7.0.0 → compiletools-7.0.2}/scripts/ct-build-dynamic-library +0 -0
  35. {compiletools-7.0.0 → compiletools-7.0.2}/scripts/ct-build-static-library +0 -0
  36. {compiletools-7.0.0 → compiletools-7.0.2}/scripts/ct-lock-helper +0 -0
  37. {compiletools-7.0.0 → compiletools-7.0.2}/scripts/ct-lock-helper-py +0 -0
  38. {compiletools-7.0.0 → compiletools-7.0.2}/scripts/ct-release +0 -0
  39. {compiletools-7.0.0 → compiletools-7.0.2}/scripts/ct-watch-build +0 -0
  40. {compiletools-7.0.0 → compiletools-7.0.2}/scripts/profile-ct-cake-worktree +0 -0
  41. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.cleanup-remote-locks.rst +0 -0
  42. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.create-documentation.rst +0 -0
  43. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-build-dynamic-library.rst +0 -0
  44. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-build-static-library.rst +0 -0
  45. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-build.rst +0 -0
  46. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-create-makefile.rst +0 -0
  47. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-git-sha-report.rst +0 -0
  48. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-lock-helper.rst +0 -0
  49. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-release.rst +0 -0
  50. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.ct-watch-build.rst +0 -0
  51. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/README.profile-ct-cake-worktree.rst +0 -0
  52. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/__init__.py +0 -0
  53. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/cake.py +0 -0
  54. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/cleanup_locks.py +0 -0
  55. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/cleanup_locks_main.py +0 -0
  56. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/compilation_database.py +0 -0
  57. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/compiler_macros.py +0 -0
  58. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/config.py +0 -0
  59. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/configutils.py +0 -0
  60. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/conftest.py +0 -0
  61. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/cppdeps.py +0 -0
  62. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/ct.conf.d/blank.conf +0 -0
  63. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/ct.conf.d/blank.release.conf +0 -0
  64. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/ct.conf.d/clang.debug.conf +0 -0
  65. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/ct.conf.d/clang.release.conf +0 -0
  66. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/ct.conf.d/ct.conf +0 -0
  67. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/ct.conf.d/gcc.debug.conf +0 -0
  68. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/ct.conf.d/gcc.release.conf +0 -0
  69. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/doc.py +0 -0
  70. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/filelist.py +0 -0
  71. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/filesystem_utils.py +0 -0
  72. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/findtargets.py +0 -0
  73. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/git_sha_report.py +0 -0
  74. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/git_utils.py +0 -0
  75. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/global_hash_registry.py +0 -0
  76. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/headerdeps.py +0 -0
  77. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/headertree.py +0 -0
  78. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/hunter.py +0 -0
  79. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/jobs.py +0 -0
  80. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/listvariants.py +0 -0
  81. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/lock_utils.py +0 -0
  82. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/locking.py +0 -0
  83. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/makefile.py +0 -0
  84. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/namer.py +0 -0
  85. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/preprocessing_cache.py +0 -0
  86. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/preprocessor.py +0 -0
  87. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/calculator/add.C +0 -0
  88. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/calculator/add.H +0 -0
  89. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/calculator/calculator.cpp +0 -0
  90. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/calculator/calculator.h +0 -0
  91. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/calculator/main.cpp +0 -0
  92. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/conditional_includes/linux_header.h +0 -0
  93. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/conditional_includes/main.cpp +0 -0
  94. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/conditional_includes/windows_header.h +0 -0
  95. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/aarch64_feature.hpp +0 -0
  96. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/advanced_feature.hpp +0 -0
  97. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/advanced_preprocessor_header.hpp +0 -0
  98. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/advanced_preprocessor_test.cpp +0 -0
  99. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/alt_form_feature.hpp +0 -0
  100. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/arm_feature.hpp +0 -0
  101. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/armcc_feature.hpp +0 -0
  102. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/avx2_optimization.hpp +0 -0
  103. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/basic_feature.hpp +0 -0
  104. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/cache_profiler.hpp +0 -0
  105. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/certificate_validation.hpp +0 -0
  106. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/cflags_feature.hpp +0 -0
  107. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/clang_feature.hpp +0 -0
  108. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/combined_features.hpp +0 -0
  109. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/compiler_builtin_header.hpp +0 -0
  110. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/compiler_builtin_test.cpp +0 -0
  111. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/conditional_header.hpp +0 -0
  112. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/cppflags_feature.hpp +0 -0
  113. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/cpu_profiler.hpp +0 -0
  114. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/custom_allocator.hpp +0 -0
  115. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/cxxflags_feature.hpp +0 -0
  116. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/default_feature.hpp +0 -0
  117. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/detailed_profiler.hpp +0 -0
  118. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/elif_header.hpp +0 -0
  119. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/elif_test.cpp +0 -0
  120. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/emscripten_feature.hpp +0 -0
  121. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/expert_feature.hpp +0 -0
  122. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/expert_mode_base.hpp +0 -0
  123. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/fma_optimization.hpp +0 -0
  124. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/gcc_feature.hpp +0 -0
  125. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/high_optimization.hpp +0 -0
  126. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/intel_feature.hpp +0 -0
  127. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/leak_detector.hpp +0 -0
  128. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/linux_advanced.hpp +0 -0
  129. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/linux_epoll_threading.hpp +0 -0
  130. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/linux_feature.hpp +0 -0
  131. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/main.cpp +0 -0
  132. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/memory_profiler.hpp +0 -0
  133. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/memory_tracker.hpp +0 -0
  134. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/msvc_feature.hpp +0 -0
  135. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/multi_flag_header.hpp +0 -0
  136. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/multi_flag_test.cpp +0 -0
  137. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/nested_macros_header.hpp +0 -0
  138. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/nested_macros_test.cpp +0 -0
  139. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/networking_base.hpp +0 -0
  140. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/numa_threading.hpp +0 -0
  141. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/partial_features.hpp +0 -0
  142. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/profiling_base.hpp +0 -0
  143. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/riscv_feature.hpp +0 -0
  144. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/simd_optimization.hpp +0 -0
  145. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/ssl_networking.hpp +0 -0
  146. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/stack_tracer.hpp +0 -0
  147. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/strict_cert_validation.hpp +0 -0
  148. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/tcc_feature.hpp +0 -0
  149. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/temp_defined.hpp +0 -0
  150. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/temp_still_defined.hpp +0 -0
  151. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/version1_feature.hpp +0 -0
  152. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/version2_feature.hpp +0 -0
  153. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/version3_feature.hpp +0 -0
  154. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/version_205_plus.hpp +0 -0
  155. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/version_ge_2_feature.hpp +0 -0
  156. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/windows_advanced.hpp +0 -0
  157. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/windows_iocp.hpp +0 -0
  158. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/windows_iocp_threading.hpp +0 -0
  159. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cppflags_macros/x86_64_feature.hpp +0 -0
  160. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cross_platform/cross_platform.cpp +0 -0
  161. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cross_platform/cross_platform.hpp +0 -0
  162. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cross_platform/cross_platform_lin.cpp +0 -0
  163. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cross_platform/cross_platform_win.cpp +0 -0
  164. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cross_platform/test_source.cpp +0 -0
  165. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cycle/cycle_a.hpp +0 -0
  166. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cycle/cycle_b.hpp +0 -0
  167. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/cycle/cycle_c.hpp +0 -0
  168. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/dottypaths/d1/d1.cpp +0 -0
  169. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/dottypaths/d1/d1.hpp +0 -0
  170. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/dottypaths/d2/d2.cpp +0 -0
  171. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/dottypaths/d2/d2.hpp +0 -0
  172. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/dottypaths/dottypaths.cpp +0 -0
  173. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/duplicate_flags/main.cpp +0 -0
  174. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/empty_macro_bug/README.md +0 -0
  175. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/empty_macro_bug/libs/base.hpp +0 -0
  176. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/empty_macro_bug/libs/conditional.hpp +0 -0
  177. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/empty_macro_bug/libs/dependency.hpp +0 -0
  178. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/empty_macro_bug/libs/main.cpp +0 -0
  179. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/factory/a_widget.cpp +0 -0
  180. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/factory/a_widget.hpp +0 -0
  181. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/factory/red_herring_c_style_2.hpp +0 -0
  182. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/factory/test_factory.cpp +0 -0
  183. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/factory/widget.hpp +0 -0
  184. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/factory/widget_factory.cpp +0 -0
  185. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/factory/widget_factory.hpp +0 -0
  186. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/factory/z_widget.cpp +0 -0
  187. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/factory/z_widget.hpp +0 -0
  188. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/feature_headers/database.h +0 -0
  189. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/feature_headers/feature_config.h +0 -0
  190. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/feature_headers/graphics.h +0 -0
  191. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/feature_headers/logging.h +0 -0
  192. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/feature_headers/main.cpp +0 -0
  193. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/feature_headers/networking.h +0 -0
  194. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/hunter_macro_propagation/README.md +0 -0
  195. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/hunter_macro_propagation/app.cpp +0 -0
  196. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/hunter_macro_propagation/config.h +0 -0
  197. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/hunter_macro_propagation/renderer.h +0 -0
  198. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/isystem_include_bug/fake_system_include/system/version.h +0 -0
  199. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/isystem_include_bug/main.cpp +0 -0
  200. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/ldflags/conditional_ldflags_test.cpp +0 -0
  201. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/ldflags/version_dependent_ldflags.cpp +0 -0
  202. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/ldflags/version_macro.hpp +0 -0
  203. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/library/build.sh +0 -0
  204. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/library/main.cpp +0 -0
  205. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/library/mylib/get_double.cpp +0 -0
  206. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/library/mylib/get_double.hpp +0 -0
  207. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/library/mylib/get_int.cpp +0 -0
  208. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/library/mylib/get_int.hpp +0 -0
  209. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/library/mylib/get_numbers.cpp +0 -0
  210. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/library/mylib/get_numbers.hpp +0 -0
  211. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/lotsofmagic/lotsofmagic.cpp +0 -0
  212. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_deps/feature_x_impl.cpp +0 -0
  213. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_deps/main.cpp +0 -0
  214. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_state_dependency/README.md +0 -0
  215. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_state_dependency/clean_main.cpp +0 -0
  216. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_state_dependency/config.h +0 -0
  217. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_state_dependency/core.h +0 -0
  218. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_state_dependency/debug.h +0 -0
  219. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_state_dependency/feature.h +0 -0
  220. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_state_dependency/main.cpp +0 -0
  221. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_state_dependency/module_b.h +0 -0
  222. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_state_dependency/release.h +0 -0
  223. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/macro_state_dependency/sample.cpp +0 -0
  224. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magic_processing_order/complex_header.h +0 -0
  225. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magic_processing_order/macro_header.h +0 -0
  226. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magic_processing_order/test_macro_transform.cpp +0 -0
  227. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magic_processing_order/traits_header.h +0 -0
  228. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicinclude/main.cpp +0 -0
  229. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicinclude/subdir/important.hpp +0 -0
  230. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicinclude/subdir2/important2.hpp +0 -0
  231. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicinclude/subdir3/important3.hpp +0 -0
  232. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicpkgconfig/main.cpp +0 -0
  233. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicpkgconfig_fake/main.cpp +0 -0
  234. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicsourceinheader/include_dir/some_header.hpp +0 -0
  235. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicsourceinheader/include_dir/sub_dir/another_header.hpp +0 -0
  236. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicsourceinheader/include_dir/sub_dir/the_code_lin.cpp +0 -0
  237. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicsourceinheader/include_dir/sub_dir/the_code_win.cpp +0 -0
  238. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/magicsourceinheader/main.cpp +0 -0
  239. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/movingheaders/main.cpp +0 -0
  240. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/movingheaders/someheader.hpp +0 -0
  241. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/nestedconfig/gcc.debug.conf +0 -0
  242. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/nestedconfig/nc.cpp +0 -0
  243. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/nestedconfig/subdir/gcc.debug.conf +0 -0
  244. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/nestedconfig/subdir/nc.cpp +0 -0
  245. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/numbers/get_double.cpp +0 -0
  246. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/numbers/get_double.hpp +0 -0
  247. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/numbers/get_int.cpp +0 -0
  248. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/numbers/get_int.hpp +0 -0
  249. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/numbers/get_numbers.cpp +0 -0
  250. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/numbers/get_numbers.hpp +0 -0
  251. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/numbers/test_direct_include.cpp +0 -0
  252. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/numbers/test_library.cpp +0 -0
  253. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/parse_order_macro_bug/libs/common_file.cpp +0 -0
  254. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/parse_order_macro_bug/libs/conditional_include.hpp +0 -0
  255. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/parse_order_macro_bug/libs/entry_point_1.cpp +0 -0
  256. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/parse_order_macro_bug/libs/entry_point_2.cpp +0 -0
  257. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/parse_order_macro_bug/libs/hash_map.hpp +0 -0
  258. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/parse_order_macro_bug/libs/hash_utility.hpp +0 -0
  259. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/parse_order_macro_bug/libs/intermediate.cpp +0 -0
  260. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/pkg_config_header_deps/README.md +0 -0
  261. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/pkg_config_header_deps/libs/header_with_macros.hpp +0 -0
  262. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/pkg_config_header_deps/libs/header_with_pkgconfig.hpp +0 -0
  263. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/pkg_config_header_deps/libs/main_header.hpp +0 -0
  264. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/pkg_config_header_deps/src/test.cpp +0 -0
  265. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/pkgconfig/main.cpp +0 -0
  266. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/pkgs/conditional.pc +0 -0
  267. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/pkgs/modified.pc +0 -0
  268. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/pkgs/nested.pc +0 -0
  269. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/serialise_tests/README.txt +0 -0
  270. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/serialise_tests/createfile.cpp +0 -0
  271. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/serialise_tests/createfile.hpp +0 -0
  272. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/serialise_tests/filename.hpp +0 -0
  273. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/serialise_tests/obtainlock.cpp +0 -0
  274. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/serialise_tests/obtainlock.hpp +0 -0
  275. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/serialise_tests/test_flock_1.cpp +0 -0
  276. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/serialise_tests/test_flock_2.cpp +0 -0
  277. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/simple/helloworld_c.c +0 -0
  278. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/simple/helloworld_cpp.cpp +0 -0
  279. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/simple/test_cflags.c +0 -0
  280. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/README.md +0 -0
  281. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/a-game.cpp +0 -0
  282. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/b-game.cpp +0 -0
  283. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/core/background_task.hpp +0 -0
  284. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/core/event_handler.hpp +0 -0
  285. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/core/memory_buffer.hpp +0 -0
  286. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/event_loop.cpp +0 -0
  287. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/event_loop.hpp +0 -0
  288. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/systems/audio_system.cpp +0 -0
  289. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/systems/audio_system.hpp +0 -0
  290. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/systems/input_system.cpp +0 -0
  291. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/systems/input_system.hpp +0 -0
  292. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/systems/render_system.cpp +0 -0
  293. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/systems/render_system.hpp +0 -0
  294. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/systems/task_scheduler.cpp +0 -0
  295. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/transitive_cache_bug/engine/systems/task_scheduler.hpp +0 -0
  296. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/version_dependent_api/api_config.h +0 -0
  297. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/version_dependent_api/api_config_new.h +0 -0
  298. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/version_dependent_api/test_main.cpp +0 -0
  299. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/version_dependent_api/test_main_new.cpp +0 -0
  300. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/version_dependent_api/version.h +0 -0
  301. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/samples/version_dependent_api/version_new.h +0 -0
  302. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/simple_preprocessor.py +0 -0
  303. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/stringzilla_utils.py +0 -0
  304. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_apptools.py +0 -0
  305. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_base.py +0 -0
  306. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_cake.py +0 -0
  307. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_cap.py +0 -0
  308. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_cleanup_locks.py +0 -0
  309. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_compilation_database.py +0 -0
  310. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_compiler_macros.py +0 -0
  311. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_configutils.py +0 -0
  312. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_cppdeps.py +0 -0
  313. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_ct_lock_helper.py +0 -0
  314. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_ct_lock_helper_py.py +0 -0
  315. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_empty_macro_bug.py +0 -0
  316. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_environment_assumptions.py +0 -0
  317. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_fd_fix_integration.py +0 -0
  318. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_file_analyzer.py +0 -0
  319. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_file_analyzer_integration.py +0 -0
  320. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_file_locking.py +0 -0
  321. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_file_open_efficiency.py +0 -0
  322. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_filelist_sample_output.py +0 -0
  323. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_filesystem_utils.py +0 -0
  324. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_global_hash_registry.py +0 -0
  325. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_headerdeps.py +0 -0
  326. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_hunter.py +0 -0
  327. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_hunter_macro_propagation.py +0 -0
  328. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_library.py +0 -0
  329. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_listvariants.py +0 -0
  330. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_locking_contract.py +0 -0
  331. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_macro_state_dependency.py +0 -0
  332. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_macro_state_isolation.py +0 -0
  333. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_macro_state_pollution.py +0 -0
  334. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_magicinclude.py +0 -0
  335. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_makefile.py +0 -0
  336. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_movingheaders.py +0 -0
  337. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_multiuser_cache.py +0 -0
  338. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_namer.py +0 -0
  339. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_parse_order_macro_bug.py +0 -0
  340. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_pkg_config_header_deps.py +0 -0
  341. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_preprocessing_cache.py +0 -0
  342. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_serialisetests.py +0 -0
  343. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_shared_cache_low_mtime_resolution.py +0 -0
  344. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_simple_preprocessor.py +0 -0
  345. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_stringzilla_utils.py +0 -0
  346. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_transitive_cache_bug.py +0 -0
  347. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/test_utils.py +0 -0
  348. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/testhelper.py +0 -0
  349. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/tree.py +0 -0
  350. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/utils.py +0 -0
  351. {compiletools-7.0.0 → compiletools-7.0.2}/src/compiletools/wrappedos.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: compiletools
3
- Version: 7.0.0
3
+ Version: 7.0.2
4
4
  Summary: Tools to make compiling C/C++ projects easy
5
5
  Keywords: c++,make,development
6
6
  Author: DrGeoff
@@ -24,7 +24,7 @@ Requires-Dist: rich-rst>=1.1.7
24
24
  Requires-Dist: stringzilla>=3.0.0
25
25
  Requires-Dist: bump-my-version>=0.26.0 ; extra == 'dev'
26
26
  Requires-Dist: twine>=5.0.0 ; extra == 'dev'
27
- Requires-Dist: pytest>=7.0.0 ; extra == 'dev'
27
+ Requires-Dist: pytest>=7.0.2 ; extra == 'dev'
28
28
  Requires-Dist: pytest-xdist>=3.5 ; extra == 'dev'
29
29
  Requires-Dist: ruff>=0.12.9 ; extra == 'dev'
30
30
  Requires-Python: >=3.9
@@ -50,7 +50,7 @@ C/C++ build tools that requires almost no configuration.
50
50
 
51
51
  :Author: drgeoffathome@gmail.com
52
52
  :Date: 2025-12-17
53
- :Version: 7.0.0
53
+ :Version: 7.0.2
54
54
  :Manual section: 1
55
55
  :Manual group: developers
56
56
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "compiletools"
3
- version = "7.0.0"
3
+ version = "7.0.2"
4
4
  description = "Tools to make compiling C/C++ projects easy"
5
5
  readme = "src/compiletools/README.ct-doc.rst"
6
6
  requires-python = ">=3.9"
@@ -34,7 +34,7 @@ dependencies = [
34
34
  dev = [
35
35
  "bump-my-version>=0.26.0",
36
36
  "twine>=5.0.0",
37
- "pytest>=7.0.0",
37
+ "pytest>=7.0.2",
38
38
  "pytest-xdist>=3.5",
39
39
  "ruff>=0.12.9",
40
40
  ]
@@ -79,7 +79,7 @@ include = [
79
79
  ]
80
80
 
81
81
  [tool.bumpversion]
82
- current_version = "7.0.0"
82
+ current_version = "7.0.2"
83
83
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
84
84
  serialize = ["{major}.{minor}.{patch}"]
85
85
  search = "{current_version}"
@@ -9,7 +9,7 @@ Swiss army knife for building a C/C++ project
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2018-02-06
11
11
  :Copyright: Copyright (C) 2011-2016 Zomojo Pty Ltd
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -8,7 +8,7 @@ Clean up stale lock directories in shared object caches
8
8
 
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2025-10-16
11
- :Version: 7.0.0
11
+ :Version: 7.0.2
12
12
  :Manual section: 1
13
13
  :Manual group: developers
14
14
 
@@ -9,7 +9,7 @@ This document describes the command line arguments that are common across ct-* p
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2017-07-06
11
11
  :Copyright: Copyright (C) 2011-2016 Zomojo Pty Ltd
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -8,7 +8,7 @@ Generate compile_commands.json for clang tooling and IDE integration
8
8
 
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2025-10-08
11
- :Version: 7.0.0
11
+ :Version: 7.0.2
12
12
  :Manual section: 1
13
13
  :Manual group: developers
14
14
 
@@ -9,7 +9,7 @@ Helper tool for examining ct-* configuration
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2016-08-16
11
11
  :Copyright: Copyright (C) 2011-2016 Zomojo Pty Ltd
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -9,7 +9,7 @@ C/C++ dependency analysis using the preprocessor
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2022-06-05
11
11
  :Copyright: Copyright (C) Geoffery Ericksson
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -15,7 +15,7 @@ C/C++ build tools that requires almost no configuration.
15
15
 
16
16
  :Author: drgeoffathome@gmail.com
17
17
  :Date: 2025-12-17
18
- :Version: 7.0.0
18
+ :Version: 7.0.2
19
19
  :Manual section: 1
20
20
  :Manual group: developers
21
21
 
@@ -9,7 +9,7 @@ Determine header and source dependencies of a C/C++ file by following headers an
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2017-07-06
11
11
  :Copyright: Copyright (C) 2011-2016 Zomojo Pty Ltd
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -9,7 +9,7 @@ Find executable and test targets in a C/C++ project
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2018-04-17
11
11
  :Copyright: Copyright (C) 2011-2018 Zomojo Pty Ltd
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -9,7 +9,7 @@ Display the git repository root directory
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2017-09-28
11
11
  :Copyright: Copyright (C) 2011-2016 Zomojo Pty Ltd
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -9,7 +9,7 @@ Create a tree of header dependencies starting at the given C/C++ file
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2018-07-26
11
11
  :Copyright: Copyright (C) 2011-2018 Zomojo Pty Ltd
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -9,7 +9,7 @@ Determine optimal parallel job count for builds
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2017-04-28
11
11
  :Copyright: Copyright (C) 2011-2016 Zomojo Pty Ltd
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -9,7 +9,7 @@ List available build variants
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2016-08-16
11
11
  :Copyright: Copyright (C) 2011-2016 Zomojo Pty Ltd
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -9,7 +9,7 @@ Show the magic flags / magic comments that a file exports
9
9
  :Author: drgeoffathome@gmail.com
10
10
  :Date: 2018-02-23
11
11
  :Copyright: Copyright (C) 2011-2018 Zomojo Pty Ltd
12
- :Version: 7.0.0
12
+ :Version: 7.0.2
13
13
  :Manual section: 1
14
14
  :Manual group: developers
15
15
 
@@ -579,7 +579,6 @@ def extract_command_line_macros_sz(args, flag_sources_sz, verbose=0):
579
579
  def clear_cache():
580
580
  """Clear any caches for macro extraction and pkg-config."""
581
581
  cached_pkg_config.cache_clear()
582
- cached_pkg_config_sz.cache_clear()
583
582
  _get_functional_cxx_compiler_cached.cache_clear()
584
583
 
585
584
 
@@ -772,20 +771,73 @@ def cached_pkg_config(package, option):
772
771
  return result.stdout.rstrip()
773
772
 
774
773
 
775
- @functools.lru_cache(maxsize=None)
776
- def cached_pkg_config_sz(package_sz, option):
777
- """StringZilla-aware version of cached_pkg_config with separate cache"""
778
- import stringzilla as sz
779
- result = cached_pkg_config(package_sz.decode('utf-8'), option)
780
- return sz.Str(result)
774
+ def filter_pkg_config_cflags(cflags_str, verbose=0):
775
+ """
776
+ Process pkg-config cflags output.
777
+ Converts -I to -isystem, except for default system include paths
778
+ which are dropped to prevent include order issues (e.g. with libc++).
779
+ Uses shlex for robust shell tokenization and quoting.
780
+ """
781
+ if not cflags_str:
782
+ return ""
783
+
784
+ # Standard system include paths
785
+ system_include_paths = set(['/usr/include'])
786
+ prefix = os.environ.get('PREFIX')
787
+ if prefix:
788
+ system_include_paths.add(os.path.normpath(os.path.join(prefix, 'include')))
789
+
790
+ # Use shlex to correctly handle quoted paths in flags
791
+ try:
792
+ flags = split_command_cached(cflags_str)
793
+ except ValueError:
794
+ # Fallback for malformed strings
795
+ flags = cflags_str.split()
796
+
797
+ flag_iter = iter(flags)
798
+ processed_flags = []
799
+
800
+ for flag in flag_iter:
801
+ if flag.startswith("-I"):
802
+ path = None
803
+ if flag == "-I":
804
+ # Detached -I
805
+ try:
806
+ path = next(flag_iter)
807
+ except StopIteration:
808
+ # Trailing -I at end of string, preserve as-is
809
+ processed_flags.append(shlex.quote(flag))
810
+ break
811
+ else:
812
+ # Attached -Ipath
813
+ path = flag[2:]
814
+
815
+ # Normalize and check
816
+ normalized_path = os.path.normpath(path)
817
+ is_system = False
818
+ for sys_path in system_include_paths:
819
+ if normalized_path == sys_path:
820
+ is_system = True
821
+ break
822
+
823
+ if is_system:
824
+ if verbose >= 6:
825
+ print(f"Dropping default system include path from pkg-config: {path}")
826
+ continue
827
+
828
+ # Reconstruct as -isystem, quoting path for shell safety
829
+ processed_flags.append(f"-isystem {shlex.quote(path)}")
830
+ else:
831
+ # Re-quote other flags to preserve them correctly in the output string
832
+ processed_flags.append(shlex.quote(flag))
833
+
834
+ return " ".join(processed_flags)
781
835
 
782
836
 
783
837
  def _add_flags_from_pkg_config(args):
784
838
  for pkg in args.pkg_config:
785
- cflags = (
786
- cached_pkg_config(pkg, "--cflags")
787
- .replace("-I", "-isystem ")
788
- ) # This helps the CppHeaderDeps avoid searching packages
839
+ raw_cflags = cached_pkg_config(pkg, "--cflags")
840
+ cflags = filter_pkg_config_cflags(raw_cflags, args.verbose)
789
841
 
790
842
  if cflags:
791
843
  args.CPPFLAGS += f" {cflags}"
@@ -594,8 +594,13 @@ def analyze_file(content_hash: str) -> 'FileAnalysisResult':
594
594
  'value': value_trimmed
595
595
  })
596
596
 
597
+ # Sort directives by line number for correct guard detection
598
+ # The directives list is built by iterating directive_positions.items()
599
+ # which processes by directive TYPE, not line number order
600
+ directives_sorted = sorted(directives, key=lambda d: d.line_num)
601
+
597
602
  # Detect include guard first so we can exclude it from defines
598
- include_guard = detect_include_guard(directives)
603
+ include_guard = detect_include_guard(directives_sorted)
599
604
 
600
605
  # Extract defines with full information (excluding include guard)
601
606
  defines = []
@@ -922,14 +927,16 @@ def detect_include_guard(directives: List[PreprocessorDirective]) -> Optional['s
922
927
 
923
928
  guard_candidate = directive.macro_name
924
929
 
925
- # Check if the next directive is #define with the same name
926
- if (i + 1 < len(directives) and
927
- directives[i + 1].directive_type == 'define' and
928
- directives[i + 1].macro_name and
929
- directives[i + 1].macro_name == guard_candidate):
930
+ # Look ahead up to 5 positions for the matching #define
931
+ # This handles cases where comments or other directives appear between
932
+ # the #ifndef and the matching #define
933
+ for j in range(i + 1, min(i + 6, len(directives))):
934
+ if (directives[j].directive_type == 'define' and
935
+ directives[j].macro_name and
936
+ directives[j].macro_name == guard_candidate):
930
937
 
931
- # guard_candidate is already sz.Str from PreprocessorDirective.macro_name
932
- return guard_candidate
938
+ # guard_candidate is already sz.Str from PreprocessorDirective.macro_name
939
+ return guard_candidate
933
940
 
934
941
  return None
935
942
 
@@ -1,4 +1,5 @@
1
1
  import sys
2
+ import os
2
3
  import re
3
4
  import functools
4
5
  from collections import defaultdict
@@ -16,7 +17,6 @@ import compiletools.apptools
16
17
  import compiletools.compiler_macros
17
18
  import compiletools.namer
18
19
  from compiletools.preprocessing_cache import get_or_compute_preprocessing, MacroState
19
- from compiletools.apptools import cached_pkg_config_sz
20
20
  from compiletools.stringzilla_utils import strip_sz
21
21
  from compiletools.file_analyzer import FileAnalysisResult
22
22
 
@@ -211,22 +211,30 @@ class MagicFlagsBase:
211
211
 
212
212
  def _handle_pkg_config(self, flag):
213
213
  flagsforfilename = defaultdict(list)
214
- for pkg in flag.split():
215
- cflags_raw = cached_pkg_config_sz(pkg, "--cflags")
216
- # Replace -I flags with -isystem to help CppHeaderDeps avoid searching packages
217
- from compiletools.stringzilla_utils import replace_sz
218
- cflags = replace_sz(cflags_raw, '-I', '-isystem')
219
- libs = cached_pkg_config_sz(pkg, "--libs")
214
+
215
+ # Convert to string for splitting, as we need to iterate over packages
216
+ flag_str = str(flag)
217
+
218
+ for pkg in flag_str.split():
219
+ # pkg is str. Call cached_pkg_config directly to avoid unnecessary sz conversions
220
+ cflags_raw = compiletools.apptools.cached_pkg_config(pkg, "--cflags")
221
+
222
+ # Use the shared filtering logic from apptools
223
+ cflags_str = compiletools.apptools.filter_pkg_config_cflags(cflags_raw, self._args.verbose)
224
+ cflags_list = compiletools.utils.split_command_cached_sz(sz.Str(cflags_str))
225
+
226
+ libs_raw = compiletools.apptools.cached_pkg_config(pkg, "--libs")
227
+ libs_list = compiletools.utils.split_command_cached_sz(sz.Str(libs_raw))
220
228
 
221
229
  # Add cflags to all C/C++ flag categories
222
230
  for key in (sz.Str("CPPFLAGS"), sz.Str("CFLAGS"), sz.Str("CXXFLAGS")):
223
- flagsforfilename[key].append(cflags)
224
- flagsforfilename[sz.Str("LDFLAGS")].append(libs)
231
+ flagsforfilename[key].extend(cflags_list)
232
+ flagsforfilename[sz.Str("LDFLAGS")].extend(libs_list)
225
233
 
226
234
  if self._args.verbose >= 9:
227
235
  print(f"Magic PKG-CONFIG = {pkg}:")
228
- print(f"\tadded {cflags} to CPPFLAGS, CFLAGS, and CXXFLAGS")
229
- print(f"\tadded {libs} to LDFLAGS")
236
+ print(f"\tadded {cflags_list} to CPPFLAGS, CFLAGS, and CXXFLAGS")
237
+ print(f"\tadded {libs_list} to LDFLAGS")
230
238
  return flagsforfilename
231
239
 
232
240
  def _resolve_readmacros_path(self, flag, source_filename):
@@ -0,0 +1,57 @@
1
+ # Accurate Header Guard Detection
2
+
3
+ ## Overview
4
+
5
+ This sample demonstrates a bug in ct-magicflags where non-standard header guards
6
+ cause Pass 2 to skip transitive dependencies, resulting in missing magic flags.
7
+
8
+ ## The Bug
9
+
10
+ ### Pass 1: Initial Discovery
11
+ - Processes main.cpp → header_a.hpp → header_b.hpp
12
+ - Discovers all dependencies (2 headers)
13
+ - Macro convergence defines HEADER_A_HPP_GUARD (non-standard pattern prevents detection)
14
+
15
+ ### Pass 2: Re-discovery with Converged Macros
16
+ - FileAnalyzer fails to detect HEADER_A_HPP_GUARD as a header guard
17
+ - Guard macro enters Pass 2 macro state
18
+ - Preprocessor evaluates `#ifndef HEADER_A_HPP_GUARD` as FALSE
19
+ - Skips entire header_a.hpp contents (including `#include "header_b.hpp"`)
20
+ - Only discovers 1 header instead of 2
21
+
22
+ ### Result
23
+ - header_b.hpp not rediscovered in Pass 2
24
+ - Magic flags lost: `//#PKG-CONFIG=zlib`, `//#LDFLAGS=-lm`
25
+ - Game engine missing critical dependencies
26
+
27
+ ## Non-Standard Guard Pattern
28
+
29
+ header_a.hpp uses a guard pattern that breaks FileAnalyzer detection:
30
+
31
+ ```cpp
32
+ #ifndef HEADER_A_HPP_GUARD
33
+ #define SOME_OTHER_MACRO 1 // This breaks detection!
34
+ #define HEADER_A_HPP_GUARD
35
+ ```
36
+
37
+ FileAnalyzer expects `#define HEADER_A_HPP_GUARD` immediately after `#ifndef`,
38
+ but the intermediate `#define SOME_OTHER_MACRO 1` causes it to miss the guard.
39
+
40
+ ## Testing
41
+
42
+ ```bash
43
+ cd /home/gericksson/compiletools
44
+ pytest src/compiletools/test_magicflags.py::TestMagicFlagsModule::test_header_guard_bug_transitive_magic_flags -v
45
+ ```
46
+
47
+ **Before fix**: Test FAILS (weapon dependencies missing)
48
+ **After fix**: Test PASSES (all dependencies discovered)
49
+
50
+ ## Fix
51
+
52
+ **File**: `/home/gericksson/compiletools/src/compiletools/file_analyzer.py`
53
+
54
+ 1. **Line ~598**: Sort directives by line number before guard detection
55
+ 2. **Line ~930-939**: Look ahead 5 positions for matching #define (not just next)
56
+
57
+ This allows FileAnalyzer to correctly detect non-standard guard patterns.
@@ -0,0 +1,34 @@
1
+ // Player entity for game engine
2
+ //
3
+ // This header demonstrates the guard bug:
4
+ // - Has a non-standard guard pattern (SOME_OTHER_MACRO between #ifndef and #define)
5
+ // - Includes header_b.hpp for weapon equipment system
6
+ // - After Pass 1, HEADER_A_HPP_GUARD is defined in macro state
7
+ // - Pass 2 skips this header's contents, missing header_b.hpp and its dependencies
8
+
9
+ #ifndef HEADER_A_HPP_GUARD
10
+ #define SOME_OTHER_MACRO 1 // Breaks FileAnalyzer guard detection. A comment also broke the pattern.
11
+ #define HEADER_A_HPP_GUARD
12
+
13
+ // Feature macro to trigger Pass 2 analysis (macro convergence)
14
+ #define PLAYER_HAS_INVENTORY 1
15
+
16
+ // Include weapon system - this will be SKIPPED in Pass 2 due to guard bug
17
+ #include "header_b.hpp"
18
+
19
+ namespace game {
20
+
21
+ class player {
22
+ public:
23
+ void equip_weapon();
24
+ void attack();
25
+ void take_damage(int amount);
26
+
27
+ private:
28
+ int health_;
29
+ int damage_;
30
+ };
31
+
32
+ } // namespace game
33
+
34
+ #endif // HEADER_A_HPP_GUARD
@@ -0,0 +1,32 @@
1
+ // Weapon system for game engine
2
+ //
3
+ // This header contains magic flags for external dependencies:
4
+ // - zlib: Compress weapon asset data
5
+ // - libm: Math library for damage calculations
6
+ //
7
+ // Bug: These magic flags are NOT discovered when Pass 2 skips header_a.hpp
8
+
9
+ #ifndef HEADER_B_HPP_GUARD
10
+ // Break guard detection pattern
11
+ #define HEADER_B_HPP_GUARD
12
+
13
+ // Magic flags that should be discovered by ct-magicflags
14
+ //#PKG-CONFIG=zlib
15
+ //#LDFLAGS=-lm
16
+
17
+ namespace game {
18
+
19
+ class weapon {
20
+ public:
21
+ void deal_damage();
22
+ int calculate_critical_strike();
23
+ void compress_weapon_data(); // Requires zlib
24
+
25
+ private:
26
+ int base_damage_;
27
+ float critical_multiplier_; // Requires libm for calculations
28
+ };
29
+
30
+ } // namespace game
31
+
32
+ #endif // HEADER_B_HPP_GUARD
@@ -0,0 +1,17 @@
1
+ // Game engine initialization test
2
+ //
3
+ // This test demonstrates a header guard bug where Pass 2 macro convergence
4
+ // causes transitive dependencies to be missed in the game's equipment system.
5
+ //
6
+ // Bug Impact: Weapon system dependencies (zlib compression, math library) are
7
+ // not discovered because Pass 2 skips header_a.hpp after its guard is defined.
8
+
9
+ #include "header_a.hpp"
10
+
11
+ int main() {
12
+ // Initialize game with player and equipment
13
+ game::player hero;
14
+ hero.equip_weapon();
15
+ hero.attack();
16
+ return 0;
17
+ }
@@ -4,6 +4,6 @@
4
4
  #endif
5
5
 
6
6
  #ifdef USE_FEATURE_Y
7
- //#PKG-CONFIG=libcrypt
7
+ //#PKG-CONFIG=nested
8
8
  //#SOURCE=feature_y_impl.cpp
9
9
  #endif
@@ -0,0 +1,5 @@
1
+ #include <vector>
2
+
3
+ void feature_y_function() {
4
+ // Implementation using nested package
5
+ }
@@ -1,4 +1,4 @@
1
- //#PKG-CONFIG=zlib libcrypt
1
+ //#PKG-CONFIG=zlib nested
2
2
 
3
3
  #include "complex_header.h"
4
4
  #include <iostream>
@@ -49,6 +49,7 @@ class TestFindTargetsModule:
49
49
  "parse_order_macro_bug/libs/entry_point_2.cpp",
50
50
  "transitive_cache_bug/engine/a-game.cpp",
51
51
  "transitive_cache_bug/engine/b-game.cpp",
52
+ "header_guard_bug/main.cpp",
52
53
  }
53
54
  relativeexpectedtests = {
54
55
  "cross_platform/test_source.cpp",
@@ -90,7 +90,7 @@ class TestMagicFlagsModule(tb.BaseCompileToolsTestCase):
90
90
  assert sz.Str("CXXFLAGS") in result
91
91
 
92
92
  @uth.requires_functional_compiler
93
- def test_direct_and_cpp_magic_generate_same_results(self):
93
+ def test_direct_and_cpp_magic_generate_same_results(self, pkgconfig_env):
94
94
  """Test that DirectMagicFlags and CppMagicFlags produce identical results on conditional compilation samples"""
95
95
 
96
96
  # Test files with optional expected values for correctness verification
@@ -156,7 +156,7 @@ class TestMagicFlagsModule(tb.BaseCompileToolsTestCase):
156
156
  fail_msg = "\n\nDirectMagicFlags vs CppMagicFlags equivalence failures:\n" + "\n".join(failures)
157
157
  assert False, fail_msg
158
158
 
159
- def test_macro_deps_cross_file(self):
159
+ def test_macro_deps_cross_file(self, pkgconfig_env):
160
160
  """Test that macros defined in source files affect header magic flags"""
161
161
  source_file = "macro_deps/main.cpp"
162
162
 
@@ -169,7 +169,7 @@ class TestMagicFlagsModule(tb.BaseCompileToolsTestCase):
169
169
  # Should only contain feature X dependencies, not feature Y
170
170
  assert sz.Str("PKG-CONFIG") in result_direct
171
171
  assert "zlib" in [str(x) for x in result_direct[sz.Str("PKG-CONFIG")]]
172
- assert "libcrypt" not in [str(x) for x in result_direct.get(sz.Str("PKG-CONFIG"), [])]
172
+ assert "nested" not in [str(x) for x in result_direct.get(sz.Str("PKG-CONFIG"), [])]
173
173
 
174
174
  assert sz.Str("SOURCE") in result_direct
175
175
  feature_x_source = self._get_sample_path("macro_deps/feature_x_impl.cpp")
@@ -256,7 +256,7 @@ class TestMagicFlagsModule(tb.BaseCompileToolsTestCase):
256
256
  "All versions should have common MYAPP flags"
257
257
 
258
258
  @uth.requires_functional_compiler
259
- def test_magic_processing_order_bug(self):
259
+ def test_magic_processing_order_bug(self, pkgconfig_env):
260
260
  """Test that DirectMagicFlags and CppMagicFlags produce identical results - should expose the processing order bug"""
261
261
 
262
262
  source_file = "magic_processing_order/complex_test.cpp"
@@ -282,7 +282,7 @@ class TestMagicFlagsModule(tb.BaseCompileToolsTestCase):
282
282
  f"This indicates a magic processing order bug in DirectMagicFlags!"
283
283
 
284
284
  @uth.requires_functional_compiler
285
- def test_conditional_magic_comments_with_complex_headers(self):
285
+ def test_conditional_magic_comments_with_complex_headers(self, pkgconfig_env):
286
286
  """Test conditional magic comments work correctly with header dependencies"""
287
287
 
288
288
  source_file = "magic_processing_order/complex_test.cpp"
@@ -681,3 +681,49 @@ class TestMagicFlagsModule(tb.BaseCompileToolsTestCase):
681
681
  # Verify results are identical
682
682
  assert sz.Str('-ltest') in result2.get(sz.Str("LDFLAGS"), [])
683
683
 
684
+ def test_header_guard_bug_transitive_magic_flags(self):
685
+ """Test for include guard detection with non-standard guard patterns.
686
+
687
+ This test verifies the fix for a bug where include guards were not detected
688
+ when other directives appeared between #ifndef and #define. The sample uses
689
+ header_a.hpp with a non-standard pattern:
690
+ #ifndef HEADER_A_HPP_GUARD
691
+ #define SOME_OTHER_MACRO 1 // Breaks simple sequential detection
692
+ #define HEADER_A_HPP_GUARD
693
+
694
+ File structure:
695
+ main.cpp -> header_a.hpp (non-standard guard) -> header_b.hpp (has magic flags)
696
+
697
+ The bug: directives were processed by TYPE (all #ifndef, then all #define, etc.)
698
+ rather than by LINE NUMBER, causing guard detection to fail. This resulted in:
699
+ - Guard macro incorrectly included in defines list
700
+ - Transitive dependencies possibly missing due to stale guard macros in cache
701
+
702
+ Fixed in file_analyzer.py by:
703
+ - Sorting directives by line number before guard detection (line 597-603)
704
+ - Robust lookahead pattern (up to 5 directives) instead of strict next-directive check
705
+
706
+ This test now passes and validates magic flags are correctly discovered from
707
+ transitive headers even with non-standard guard patterns.
708
+ """
709
+
710
+ source_file = "header_guard_bug/main.cpp"
711
+
712
+ # Parse with DirectMagicFlags
713
+ result = self._parse_with_magic("direct", source_file)
714
+
715
+ # Verify magic flags from transitive header (header_b.hpp) are discovered
716
+ assert sz.Str("PKG-CONFIG") in result, \
717
+ "PKG-CONFIG not found - transitive header magic flags not discovered"
718
+
719
+ pkg_config_values = [str(x) for x in result.get(sz.Str("PKG-CONFIG"), [])]
720
+ assert "zlib" in pkg_config_values, \
721
+ f"Expected zlib in PKG-CONFIG from header_b.hpp, got: {pkg_config_values}"
722
+
723
+ assert sz.Str("LDFLAGS") in result, \
724
+ "LDFLAGS not found - transitive header magic flags not discovered"
725
+
726
+ ldflags_values = [str(x) for x in result.get(sz.Str("LDFLAGS"), [])]
727
+ assert "-lm" in ldflags_values, \
728
+ f"Expected -lm in LDFLAGS from header_b.hpp, got: {ldflags_values}"
729
+