Merge topic 'doc-genex'
263f6b888c Help: Document TARGET_PROPERTY genex handling of transitive properties
f70eb84be7 Help: Clarify role of TARGET_NAME generator expression
36145e2680 Help: Organize target-dependent generator expressions into subsections
50eadd794e Help: Clarify cross-references to target-dependent generator expressions
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !9460
diff --git a/.clang-tidy b/.clang-tidy
index 03e6a51..6d2edd4 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -5,12 +5,16 @@
-bugprone-easily-swappable-parameters,\
-bugprone-empty-catch,\
-bugprone-implicit-widening-of-multiplication-result,\
+-bugprone-inc-dec-in-conditions,\
-bugprone-macro-parentheses,\
-bugprone-misplaced-widening-cast,\
+-bugprone-multi-level-implicit-pointer-conversion,\
-bugprone-narrowing-conversions,\
-bugprone-switch-missing-default-case,\
-bugprone-too-small-loop-variable,\
-bugprone-unchecked-optional-access,\
+-bugprone-unused-local-non-trivial-variable,\
+-bugprone-unused-return-value,\
misc-*,\
-misc-confusable-identifiers,\
-misc-const-correctness,\
@@ -31,9 +35,12 @@
-modernize-use-transparent-functors,\
performance-*,\
-performance-avoid-endl,\
+-performance-enum-size,\
-performance-inefficient-vector-operation,\
-performance-noexcept-swap,\
readability-*,\
+-readability-avoid-nested-conditional-operator,\
+-readability-avoid-return-with-void-value,\
-readability-avoid-unconditional-preprocessor-if,\
-readability-convert-member-functions-to-static,\
-readability-function-cognitive-complexity,\
@@ -45,8 +52,11 @@
-readability-magic-numbers,\
-readability-make-member-function-const,\
-readability-named-parameter,\
+-readability-redundant-casting,\
-readability-redundant-declaration,\
+-readability-redundant-inline-specifier,\
-readability-redundant-member-init,\
+-readability-reference-to-constructed-temporary,\
-readability-simplify-boolean-expr,\
-readability-static-accessed-through-instance,\
-readability-suspicious-call-argument,\
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1508615..a3d959c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -59,7 +59,7 @@
p:doc-package:
extends:
- - .fedora39_sphinx_package
+ - .fedora40_sphinx_package
- .cmake_prep_doc_linux
- .linux_x86_64_tags
- .cmake_doc_artifacts
@@ -108,18 +108,18 @@
- .cmake_cdash_artifacts
- .run_automatically
-l:tidy-fedora39:
+l:tidy-fedora40:
extends:
- - .fedora39_tidy
+ - .fedora40_tidy
- .cmake_build_linux
- .cmake_tidy_artifacts
- .linux_x86_64_tags
- .cmake_cdash_artifacts
- .run_automatically
-l:sphinx-fedora39:
+l:sphinx-fedora40:
extends:
- - .fedora39_sphinx
+ - .fedora40_sphinx
- .cmake_build_linux
- .cmake_sphinx_artifacts
- .linux_x86_64_tags
@@ -128,9 +128,9 @@
CMAKE_CI_JOB_CONTINUOUS: "true"
CMAKE_CI_JOB_HELP: "true"
-l:clang-analyzer-fedora39:
+l:clang-analyzer-fedora40:
extends:
- - .fedora39_clang_analyzer
+ - .fedora40_clang_analyzer
- .cmake_build_linux
- .linux_x86_64_tags
- .run_automatically
@@ -234,9 +234,9 @@
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
-t:fedora39-ninja-clang:
+t:fedora40-ninja-clang:
extends:
- - .fedora39_ninja_clang
+ - .fedora40_ninja_clang
- .cmake_test_linux_release
- .linux_x86_64_tags
- .run_dependent
@@ -244,9 +244,9 @@
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
-t:fedora39-ninja-multi-clang:
+t:fedora40-ninja-multi-clang:
extends:
- - .fedora39_ninja_multi_clang
+ - .fedora40_ninja_multi_clang
- .cmake_test_linux_release
- .linux_x86_64_tags
- .run_dependent
@@ -254,9 +254,9 @@
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
-t:fedora39-makefiles-clang:
+t:fedora40-makefiles-clang:
extends:
- - .fedora39_makefiles_clang
+ - .fedora40_makefiles_clang
- .cmake_test_linux_release
- .linux_x86_64_tags
- .run_dependent
@@ -264,17 +264,17 @@
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
-t:fedora39-makefiles:
+t:fedora40-makefiles:
extends:
- - .fedora39_makefiles
+ - .fedora40_makefiles
- .cmake_test_linux_release
- .linux_x86_64_tags
- .run_dependent
- .needs_centos7_x86_64
-t:fedora39-makefiles-nospace:
+t:fedora40-makefiles-nospace:
extends:
- - .fedora39_makefiles
+ - .fedora40_makefiles
- .cmake_test_linux_release
- .linux_x86_64_tags
- .cmake_junit_artifacts
@@ -282,7 +282,7 @@
- .needs_centos7_x86_64
variables:
GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci"
- CMAKE_CI_BUILD_NAME: fedora39_makefiles_nospace
+ CMAKE_CI_BUILD_NAME: fedora40_makefiles_nospace
CMAKE_CI_JOB_NIGHTLY: "true"
t:nvhpc22.11-ninja:
@@ -406,26 +406,6 @@
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
-t:linux-gcc-cxx-modules-ninja:
- extends:
- - .gcc_cxx_modules_ninja
- - .cmake_test_linux_release
- - .linux_x86_64_tags
- - .run_dependent
- - .needs_centos7_x86_64
- variables:
- CMAKE_CI_JOB_NIGHTLY: "true"
-
-t:linux-gcc-cxx-modules-ninja-multi:
- extends:
- - .gcc_cxx_modules_ninja_multi
- - .cmake_test_linux_release
- - .linux_x86_64_tags
- - .run_dependent
- - .needs_centos7_x86_64
- variables:
- CMAKE_CI_JOB_NIGHTLY: "true"
-
t:debian10-legacy:
extends:
- .debian10_legacy
@@ -437,9 +417,9 @@
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
-b:fedora39-ninja:
+b:fedora40-ninja:
extends:
- - .fedora39_ninja
+ - .fedora40_ninja
- .cmake_build_linux
- .cmake_build_artifacts
- .linux_x86_64_tags
@@ -447,9 +427,9 @@
variables:
CMAKE_CI_JOB_CONTINUOUS: "true"
-b:fedora39-makefiles-symlinked:
+b:fedora40-makefiles-symlinked:
extends:
- - .fedora39_makefiles_symlinked
+ - .fedora40_makefiles_symlinked
- .cmake_build_linux
- .cmake_build_artifacts
- .linux_x86_64_tags
@@ -484,54 +464,54 @@
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
-b:fedora39-extdeps:
+b:fedora40-extdeps:
extends:
- - .fedora39_extdeps
+ - .fedora40_extdeps
- .cmake_build_linux_standalone
- .linux_x86_64_tags
- .run_manually
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
-t:fedora39-ninja:
+t:fedora40-ninja:
extends:
- - .fedora39_ninja
+ - .fedora40_ninja
- .cmake_test_linux
- .linux_x86_64_tags_x11
- .cmake_test_artifacts
- .run_dependent
dependencies:
- - b:fedora39-ninja
+ - b:fedora40-ninja
needs:
- - b:fedora39-ninja
+ - b:fedora40-ninja
variables:
CMAKE_CI_JOB_CONTINUOUS: "true"
-t:fedora39-makefiles-symlinked:
+t:fedora40-makefiles-symlinked:
extends:
- - .fedora39_makefiles_symlinked
+ - .fedora40_makefiles_symlinked
- .cmake_test_linux
- .linux_x86_64_tags_x11
- .cmake_test_artifacts
- .run_dependent
dependencies:
- - b:fedora39-makefiles-symlinked
+ - b:fedora40-makefiles-symlinked
needs:
- - b:fedora39-makefiles-symlinked
+ - b:fedora40-makefiles-symlinked
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
-t:fedora39-ninja-multi:
+t:fedora40-ninja-multi:
extends:
- - .fedora39_ninja_multi
+ - .fedora40_ninja_multi
- .cmake_test_linux_external
- .linux_x86_64_tags
- .cmake_junit_artifacts
- .run_dependent
dependencies:
- - t:fedora39-ninja
+ - t:fedora40-ninja
needs:
- - t:fedora39-ninja
+ - t:fedora40-ninja
t:intel2016u2-makefiles:
extends:
@@ -786,9 +766,9 @@
## Sanitizer builds
-b:fedora39-asan:
+b:fedora40-asan:
extends:
- - .fedora39_asan
+ - .fedora40_asan
- .cmake_build_linux
- .cmake_build_artifacts
- .linux_x86_64_tags
@@ -796,16 +776,16 @@
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
-t:fedora39-asan:
+t:fedora40-asan:
extends:
- - .fedora39_asan
+ - .fedora40_asan
- .cmake_memcheck_linux
- .linux_x86_64_tags
- .run_dependent
dependencies:
- - b:fedora39-asan
+ - b:fedora40-asan
needs:
- - b:fedora39-asan
+ - b:fedora40-asan
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
diff --git a/.gitlab/ci/configure_debian12_aarch64_ninja.cmake b/.gitlab/ci/configure_debian12_aarch64_ninja.cmake
index 0e2c991..24be975 100644
--- a/.gitlab/ci/configure_debian12_aarch64_ninja.cmake
+++ b/.gitlab/ci/configure_debian12_aarch64_ninja.cmake
@@ -64,6 +64,9 @@
set(CMake_TEST_FindMPI "ON" CACHE BOOL "")
set(CMake_TEST_FindODBC "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenACC "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_C "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_CXX "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_Fortran "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenAL "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenGL "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
diff --git a/.gitlab/ci/configure_debian12_ninja_common.cmake b/.gitlab/ci/configure_debian12_ninja_common.cmake
index b3a97f6..98ae771 100644
--- a/.gitlab/ci/configure_debian12_ninja_common.cmake
+++ b/.gitlab/ci/configure_debian12_ninja_common.cmake
@@ -69,6 +69,9 @@
set(CMake_TEST_FindMPI "ON" CACHE BOOL "")
set(CMake_TEST_FindODBC "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenACC "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_C "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_CXX "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_Fortran "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenAL "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenGL "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
diff --git a/.gitlab/ci/configure_fedora39_clang_analyzer.cmake b/.gitlab/ci/configure_fedora39_clang_analyzer.cmake
deleted file mode 100644
index 1bfb3fb..0000000
--- a/.gitlab/ci/configure_fedora39_clang_analyzer.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-set(configure_no_sccache 1)
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora39_common.cmake")
diff --git a/.gitlab/ci/configure_fedora39_common_clang.cmake b/.gitlab/ci/configure_fedora39_common_clang.cmake
deleted file mode 100644
index 1b3835a..0000000
--- a/.gitlab/ci/configure_fedora39_common_clang.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
-set(CMAKE_Fortran_COMPILER "/usr/bin/flang-new" CACHE FILEPATH "")
-set(CMAKE_Fortran_COMPILER_ID "LLVMFlang" CACHE STRING "")
-set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 "1" CACHE BOOL "")
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_fedora39_makefiles_symlinked.cmake b/.gitlab/ci/configure_fedora39_makefiles_symlinked.cmake
deleted file mode 100644
index b53ab66..0000000
--- a/.gitlab/ci/configure_fedora39_makefiles_symlinked.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-include("${CMAKE_CURRENT_LIST_DIR}/configure_symlinked_common.cmake")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora39_common.cmake")
diff --git a/.gitlab/ci/configure_fedora39_ninja_multi.cmake b/.gitlab/ci/configure_fedora39_ninja_multi.cmake
deleted file mode 100644
index 94af721..0000000
--- a/.gitlab/ci/configure_fedora39_ninja_multi.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
-if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
- set(CMake_TEST_ISPC "ON" CACHE STRING "")
-endif()
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_fedora39_ninja_multi_clang.cmake b/.gitlab/ci/configure_fedora39_ninja_multi_clang.cmake
deleted file mode 100644
index 79d3eaa..0000000
--- a/.gitlab/ci/configure_fedora39_ninja_multi_clang.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly" CACHE STRING "")
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora39_common_clang.cmake")
diff --git a/.gitlab/ci/configure_fedora39_asan.cmake b/.gitlab/ci/configure_fedora40_asan.cmake
similarity index 65%
rename from .gitlab/ci/configure_fedora39_asan.cmake
rename to .gitlab/ci/configure_fedora40_asan.cmake
index 872517c..ccdba4e 100644
--- a/.gitlab/ci/configure_fedora39_asan.cmake
+++ b/.gitlab/ci/configure_fedora40_asan.cmake
@@ -1,4 +1,4 @@
set(CMAKE_C_FLAGS "-fsanitize=address" CACHE STRING "")
set(CMAKE_CXX_FLAGS "-fsanitize=address" CACHE STRING "")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora39_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora40_common.cmake")
diff --git a/.gitlab/ci/configure_fedora40_clang_analyzer.cmake b/.gitlab/ci/configure_fedora40_clang_analyzer.cmake
new file mode 100644
index 0000000..c210126
--- /dev/null
+++ b/.gitlab/ci/configure_fedora40_clang_analyzer.cmake
@@ -0,0 +1,3 @@
+set(configure_no_sccache 1)
+
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora40_common.cmake")
diff --git a/.gitlab/ci/configure_fedora39_common.cmake b/.gitlab/ci/configure_fedora40_common.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora39_common.cmake
rename to .gitlab/ci/configure_fedora40_common.cmake
diff --git a/.gitlab/ci/configure_fedora40_common_clang.cmake b/.gitlab/ci/configure_fedora40_common_clang.cmake
new file mode 100644
index 0000000..a4ae3f3
--- /dev/null
+++ b/.gitlab/ci/configure_fedora40_common_clang.cmake
@@ -0,0 +1,17 @@
+set(CMAKE_Fortran_COMPILER "/usr/bin/flang-new" CACHE FILEPATH "")
+set(CMAKE_Fortran_COMPILER_ID "LLVMFlang" CACHE STRING "")
+set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 "1" CACHE BOOL "")
+
+set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
+set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23;26" CACHE STRING "")
+
+set(CMake_TEST_FindOpenACC "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_C "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_CXX "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_Fortran "OFF" CACHE BOOL "") # flang-new fails producing LLVM IR
+set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenMP_CXX "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenMP_Fortran "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenMP "ON" CACHE BOOL "")
+
+include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_fedora39_extdeps.cmake b/.gitlab/ci/configure_fedora40_extdeps.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora39_extdeps.cmake
rename to .gitlab/ci/configure_fedora40_extdeps.cmake
diff --git a/.gitlab/ci/configure_fedora39_makefiles.cmake b/.gitlab/ci/configure_fedora40_makefiles.cmake
similarity index 96%
rename from .gitlab/ci/configure_fedora39_makefiles.cmake
rename to .gitlab/ci/configure_fedora40_makefiles.cmake
index 90d8343..478ba11 100644
--- a/.gitlab/ci/configure_fedora39_makefiles.cmake
+++ b/.gitlab/ci/configure_fedora40_makefiles.cmake
@@ -1,5 +1,5 @@
set(CMake_TEST_C_STANDARDS "90;99;11;17;23" CACHE STRING "")
-set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23" CACHE STRING "")
+set(CMake_TEST_CXX_STANDARDS "98;11;14;17;20;23;26" CACHE STRING "")
set(CMake_TEST_CTestUpdate_BZR "ON" CACHE BOOL "")
set(CMake_TEST_CTestUpdate_GIT "ON" CACHE BOOL "")
@@ -67,6 +67,9 @@
set(CMake_TEST_FindMPI "ON" CACHE BOOL "")
set(CMake_TEST_FindODBC "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenACC "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_C "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_CXX "ON" CACHE BOOL "")
+set(CMake_TEST_FindOpenACC_Fortran "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenAL "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenGL "ON" CACHE BOOL "")
set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
diff --git a/.gitlab/ci/configure_fedora39_makefiles_clang.cmake b/.gitlab/ci/configure_fedora40_makefiles_clang.cmake
similarity index 68%
rename from .gitlab/ci/configure_fedora39_makefiles_clang.cmake
rename to .gitlab/ci/configure_fedora40_makefiles_clang.cmake
index a85ae70..d5739c3 100644
--- a/.gitlab/ci/configure_fedora39_makefiles_clang.cmake
+++ b/.gitlab/ci/configure_fedora40_makefiles_clang.cmake
@@ -2,4 +2,4 @@
set(CMAKE_TESTS_CDASH_SERVER "https://open.cdash.org" CACHE STRING "")
endif()
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora39_common_clang.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora40_common_clang.cmake")
diff --git a/.gitlab/ci/configure_fedora40_makefiles_symlinked.cmake b/.gitlab/ci/configure_fedora40_makefiles_symlinked.cmake
new file mode 100644
index 0000000..6a677fd
--- /dev/null
+++ b/.gitlab/ci/configure_fedora40_makefiles_symlinked.cmake
@@ -0,0 +1,2 @@
+include("${CMAKE_CURRENT_LIST_DIR}/configure_symlinked_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora40_common.cmake")
diff --git a/.gitlab/ci/configure_fedora39_ninja.cmake b/.gitlab/ci/configure_fedora40_ninja.cmake
similarity index 71%
rename from .gitlab/ci/configure_fedora39_ninja.cmake
rename to .gitlab/ci/configure_fedora40_ninja.cmake
index 8d04bde..b16e928 100644
--- a/.gitlab/ci/configure_fedora39_ninja.cmake
+++ b/.gitlab/ci/configure_fedora40_ninja.cmake
@@ -2,6 +2,7 @@
if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
set(CMake_TEST_ISPC "ON" CACHE STRING "")
endif()
+set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly" CACHE STRING "")
set(CMake_TEST_TLS_VERIFY_URL "https://gitlab.kitware.com" CACHE STRING "")
set(CMake_TEST_TLS_VERSION "1.3" CACHE STRING "")
@@ -12,4 +13,4 @@
# Cover compilation with C++11 only and not higher standards.
set(CMAKE_CXX_STANDARD "11" CACHE STRING "")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora39_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora40_common.cmake")
diff --git a/.gitlab/ci/configure_fedora39_ninja_clang.cmake b/.gitlab/ci/configure_fedora40_ninja_clang.cmake
similarity index 72%
rename from .gitlab/ci/configure_fedora39_ninja_clang.cmake
rename to .gitlab/ci/configure_fedora40_ninja_clang.cmake
index 79d3eaa..c760603 100644
--- a/.gitlab/ci/configure_fedora39_ninja_clang.cmake
+++ b/.gitlab/ci/configure_fedora40_ninja_clang.cmake
@@ -1,3 +1,3 @@
set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly" CACHE STRING "")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora39_common_clang.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora40_common_clang.cmake")
diff --git a/.gitlab/ci/configure_fedora40_ninja_multi.cmake b/.gitlab/ci/configure_fedora40_ninja_multi.cmake
new file mode 100644
index 0000000..f77606e
--- /dev/null
+++ b/.gitlab/ci/configure_fedora40_ninja_multi.cmake
@@ -0,0 +1,6 @@
+if (NOT "$ENV{CMAKE_CI_NIGHTLY}" STREQUAL "")
+ set(CMake_TEST_ISPC "ON" CACHE STRING "")
+endif()
+set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly" CACHE STRING "")
+
+include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_fedora39_ninja_clang.cmake b/.gitlab/ci/configure_fedora40_ninja_multi_clang.cmake
similarity index 72%
copy from .gitlab/ci/configure_fedora39_ninja_clang.cmake
copy to .gitlab/ci/configure_fedora40_ninja_multi_clang.cmake
index 79d3eaa..c760603 100644
--- a/.gitlab/ci/configure_fedora39_ninja_clang.cmake
+++ b/.gitlab/ci/configure_fedora40_ninja_multi_clang.cmake
@@ -1,3 +1,3 @@
set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,shared,bmionly" CACHE STRING "")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora39_common_clang.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora40_common_clang.cmake")
diff --git a/.gitlab/ci/configure_fedora39_sphinx.cmake b/.gitlab/ci/configure_fedora40_sphinx.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora39_sphinx.cmake
rename to .gitlab/ci/configure_fedora40_sphinx.cmake
diff --git a/.gitlab/ci/configure_fedora39_sphinx_package.cmake b/.gitlab/ci/configure_fedora40_sphinx_package.cmake
similarity index 100%
rename from .gitlab/ci/configure_fedora39_sphinx_package.cmake
rename to .gitlab/ci/configure_fedora40_sphinx_package.cmake
diff --git a/.gitlab/ci/configure_fedora39_tidy.cmake b/.gitlab/ci/configure_fedora40_tidy.cmake
similarity index 83%
rename from .gitlab/ci/configure_fedora39_tidy.cmake
rename to .gitlab/ci/configure_fedora40_tidy.cmake
index 7a3eaa6..037732c 100644
--- a/.gitlab/ci/configure_fedora39_tidy.cmake
+++ b/.gitlab/ci/configure_fedora40_tidy.cmake
@@ -3,4 +3,4 @@
set(CMake_CLANG_TIDY_MODULE "$ENV{CI_PROJECT_DIR}/Utilities/ClangTidyModule/build/libcmake-clang-tidy-module.so" CACHE FILEPATH "")
set(CMake_CLANG_TIDY_EXPORT_FIXES_DIR "$ENV{CI_PROJECT_DIR}/.gitlab/clang-tidy-fixes" CACHE PATH "")
-include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora39_common.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora40_common.cmake")
diff --git a/.gitlab/ci/configure_linux_gcc_cxx_modules_ninja.cmake b/.gitlab/ci/configure_linux_gcc_cxx_modules_ninja.cmake
deleted file mode 100644
index f0ba9eb..0000000
--- a/.gitlab/ci/configure_linux_gcc_cxx_modules_ninja.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,bmionly" CACHE STRING "")
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/configure_linux_gcc_cxx_modules_ninja_multi.cmake b/.gitlab/ci/configure_linux_gcc_cxx_modules_ninja_multi.cmake
deleted file mode 100644
index f0ba9eb..0000000
--- a/.gitlab/ci/configure_linux_gcc_cxx_modules_ninja_multi.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-set(CMake_TEST_MODULE_COMPILATION "named,compile_commands,collation,partitions,internal_partitions,export_bmi,install_bmi,bmionly" CACHE STRING "")
-
-include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
diff --git a/.gitlab/ci/ctest_memcheck_fedora39_asan.lsan.supp b/.gitlab/ci/ctest_memcheck_fedora40_asan.lsan.supp
similarity index 100%
rename from .gitlab/ci/ctest_memcheck_fedora39_asan.lsan.supp
rename to .gitlab/ci/ctest_memcheck_fedora40_asan.lsan.supp
diff --git a/.gitlab/ci/docker/fedora39-hip/Dockerfile b/.gitlab/ci/docker/fedora39-hip/Dockerfile
new file mode 100644
index 0000000..0347cc4
--- /dev/null
+++ b/.gitlab/ci/docker/fedora39-hip/Dockerfile
@@ -0,0 +1,27 @@
+# syntax=docker/dockerfile:1
+
+ARG BASE_IMAGE=fedora:39
+
+FROM ${BASE_IMAGE} AS dnf-cache
+# Populate DNF cache w/ the fresh metadata and prefetch packages.
+RUN --mount=type=bind,source=deps_packages.lst,target=/root/deps_packages.lst \
+ --mount=type=tmpfs,target=/var/log \
+ --mount=type=tmpfs,target=/tmp \
+ dnf install \
+ --setopt=install_weak_deps=False \
+ --setopt=fastestmirror=True \
+ --setopt=max_parallel_downloads=10 \
+ --downloadonly \
+ -y \
+ $(grep -h '^[^#]\+$' /root/*.lst)
+
+FROM ${BASE_IMAGE}
+LABEL maintainer="Brad King <brad.king@kitware.com>"
+
+RUN --mount=type=bind,source=install_deps.sh,target=/root/install_deps.sh \
+ --mount=type=bind,source=deps_packages.lst,target=/root/deps_packages.lst \
+ --mount=type=cache,from=dnf-cache,source=/var/cache/dnf,target=/var/cache/dnf,sharing=private \
+ --mount=type=cache,target=/var/cache/pip \
+ --mount=type=tmpfs,target=/var/log \
+ --mount=type=tmpfs,target=/tmp \
+ sh /root/install_deps.sh
diff --git a/.gitlab/ci/docker/fedora39-hip/deps_packages.lst b/.gitlab/ci/docker/fedora39-hip/deps_packages.lst
new file mode 100644
index 0000000..70b114c
--- /dev/null
+++ b/.gitlab/ci/docker/fedora39-hip/deps_packages.lst
@@ -0,0 +1,15 @@
+# Install development tools.
+clang
+clang-tools-extra
+compiler-rt
+gcc-c++
+git-core
+make
+
+# Install HIP language toolchain.
+hsakmt-devel
+lld
+llvm
+rocm-comgr-devel
+rocm-hip-devel
+rocm-runtime-devel
diff --git a/.gitlab/ci/docker/fedora39-hip/install_deps.sh b/.gitlab/ci/docker/fedora39-hip/install_deps.sh
new file mode 100755
index 0000000..eedff9c
--- /dev/null
+++ b/.gitlab/ci/docker/fedora39-hip/install_deps.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+set -e
+
+dnf install \
+ --setopt=install_weak_deps=False \
+ --setopt=fastestmirror=True \
+ --setopt=max_parallel_downloads=10 \
+ -y \
+ $(grep '^[^#]\+$' /root/deps_packages.lst)
diff --git a/.gitlab/ci/docker/fedora39/Dockerfile b/.gitlab/ci/docker/fedora40/Dockerfile
similarity index 98%
rename from .gitlab/ci/docker/fedora39/Dockerfile
rename to .gitlab/ci/docker/fedora40/Dockerfile
index f14e017..896456c 100644
--- a/.gitlab/ci/docker/fedora39/Dockerfile
+++ b/.gitlab/ci/docker/fedora40/Dockerfile
@@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1
-ARG BASE_IMAGE=fedora:39
+ARG BASE_IMAGE=fedora:40
FROM ${BASE_IMAGE} AS dnf-cache
# Populate DNF cache w/ the fresh metadata and prefetch packages.
diff --git a/.gitlab/ci/docker/fedora39/deps_packages.lst b/.gitlab/ci/docker/fedora40/deps_packages.lst
similarity index 93%
rename from .gitlab/ci/docker/fedora39/deps_packages.lst
rename to .gitlab/ci/docker/fedora40/deps_packages.lst
index 1459894..c7bad7c 100644
--- a/.gitlab/ci/docker/fedora39/deps_packages.lst
+++ b/.gitlab/ci/docker/fedora40/deps_packages.lst
@@ -11,7 +11,6 @@
clang-tools-extra-devel
compiler-rt
flang
-flang-devel
gcc-c++
git-core
llvm-devel
@@ -32,6 +31,7 @@
# Install documentation tools.
python3-sphinx
+python3-sphinxcontrib-qthelp
texinfo
qt5-qttools-devel
qt6-qttools-devel
@@ -49,13 +49,6 @@
# Install ASM_NASM language toolchain.
nasm
-# Install HIP language toolchain.
-hsakmt-devel
-lld
-rocm-comgr-devel
-rocm-hip-devel
-rocm-runtime-devel
-
# Packages needed to test CTest.
breezy
subversion
@@ -99,6 +92,7 @@
libicu-devel
libinput-devel systemd-devel
libjpeg-turbo-devel
+libomp-devel
libpng-devel
opensp-devel
postgresql-server-devel
@@ -126,3 +120,6 @@
xalan-c-devel
xerces-c-devel
xz-devel
+
+# Packages needed to test third-party binaries.
+ncurses-compat-libs
diff --git a/.gitlab/ci/docker/fedora39/install_deps.sh b/.gitlab/ci/docker/fedora40/install_deps.sh
similarity index 100%
rename from .gitlab/ci/docker/fedora39/install_deps.sh
rename to .gitlab/ci/docker/fedora40/install_deps.sh
diff --git a/.gitlab/ci/docker/fedora39/install_iwyu.sh b/.gitlab/ci/docker/fedora40/install_iwyu.sh
similarity index 77%
rename from .gitlab/ci/docker/fedora39/install_iwyu.sh
rename to .gitlab/ci/docker/fedora40/install_iwyu.sh
index 684e355..50ed612 100755
--- a/.gitlab/ci/docker/fedora39/install_iwyu.sh
+++ b/.gitlab/ci/docker/fedora40/install_iwyu.sh
@@ -18,13 +18,13 @@
git checkout "clang_$llvm_version"
git apply <<EOF
diff --git a/iwyu_driver.cc b/iwyu_driver.cc
-index 42fea35..fbb77a9 100644
+index dd4b046..cfd568a 100644
--- a/iwyu_driver.cc
+++ b/iwyu_driver.cc
-@@ -167,6 +167,7 @@ CompilerInstance* CreateCompilerInstance(int argc, const char **argv) {
- DiagnosticsEngine diagnostics(diagnostic_id, &*diagnostic_options,
- diagnostic_client);
- Driver driver(path, getDefaultTargetTriple(), diagnostics);
+@@ -249,6 +249,7 @@ bool ExecuteAction(int argc, const char** argv,
+ /*CodeGenOpts=*/nullptr);
+
+ Driver driver(path, getDefaultTargetTriple(), *diagnostics);
+ driver.ResourceDir = "/usr/lib64/clang/$llvm_full_version";
driver.setTitle("include what you use");
diff --git a/.gitlab/ci/docker/fedora39/install_rvm.sh b/.gitlab/ci/docker/fedora40/install_rvm.sh
similarity index 100%
rename from .gitlab/ci/docker/fedora39/install_rvm.sh
rename to .gitlab/ci/docker/fedora40/install_rvm.sh
diff --git a/.gitlab/ci/docker/fedora39/iwyu_packages.lst b/.gitlab/ci/docker/fedora40/iwyu_packages.lst
similarity index 100%
rename from .gitlab/ci/docker/fedora39/iwyu_packages.lst
rename to .gitlab/ci/docker/fedora40/iwyu_packages.lst
diff --git a/.gitlab/ci/docker/fedora39/rvm_packages.lst b/.gitlab/ci/docker/fedora40/rvm_packages.lst
similarity index 100%
rename from .gitlab/ci/docker/fedora39/rvm_packages.lst
rename to .gitlab/ci/docker/fedora40/rvm_packages.lst
diff --git a/.gitlab/ci/docker/gcc_cxx_modules/Dockerfile b/.gitlab/ci/docker/gcc_cxx_modules/Dockerfile
deleted file mode 100644
index d8e8238..0000000
--- a/.gitlab/ci/docker/gcc_cxx_modules/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-FROM fedora:38
-MAINTAINER Ben Boeckel <ben.boeckel@kitware.com>
-
-# Install build dependencies for packages.
-COPY install_deps.sh /root/install_deps.sh
-RUN sh /root/install_deps.sh
-
-COPY install_gcc.sh /root/install_gcc.sh
-RUN sh /root/install_gcc.sh
diff --git a/.gitlab/ci/docker/gcc_cxx_modules/install_deps.sh b/.gitlab/ci/docker/gcc_cxx_modules/install_deps.sh
deleted file mode 100755
index b8b706b..0000000
--- a/.gitlab/ci/docker/gcc_cxx_modules/install_deps.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-set -e
-
-dnf install -y --setopt=install_weak_deps=False \
- gcc-c++ mpfr-devel libmpc-devel isl-devel flex bison file findutils diffutils git-core
-dnf clean all
diff --git a/.gitlab/ci/docker/gcc_cxx_modules/install_gcc.sh b/.gitlab/ci/docker/gcc_cxx_modules/install_gcc.sh
deleted file mode 100755
index 15cfe39..0000000
--- a/.gitlab/ci/docker/gcc_cxx_modules/install_gcc.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-
-set -e
-
-readonly revision="29862e21f6d656eca59284c927d0c4c0698eb99c" # master as of 21 Sep 2023
-readonly tarball="git://gcc.gnu.org/git/gcc.git"
-
-readonly workdir="$HOME/gcc"
-readonly srcdir="$workdir/gcc"
-readonly builddir="$workdir/build"
-readonly njobs="$( nproc )"
-
-mkdir -p "$workdir"
-cd "$workdir"
-git clone "$tarball" "$srcdir"
-git -C "$srcdir" checkout "$revision"
-mkdir -p "$builddir"
-cd "$builddir"
-"$srcdir/configure" \
- --disable-multilib \
- --enable-languages=c,c++ \
- --prefix="/opt/gcc-p1689"
-make "-j$njobs"
-make "-j$njobs" install-strip
-rm -rf "$workdir"
diff --git a/.gitlab/ci/env_fedora39_common_clang.sh b/.gitlab/ci/env_fedora39_common_clang.sh
deleted file mode 100644
index 076669b..0000000
--- a/.gitlab/ci/env_fedora39_common_clang.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-export CC=/usr/bin/clang-17
-export CXX=/usr/bin/clang++-17
-export FC=/usr/bin/flang-new
diff --git a/.gitlab/ci/env_fedora39_makefiles_clang.sh b/.gitlab/ci/env_fedora39_makefiles_clang.sh
deleted file mode 100644
index 6200f82..0000000
--- a/.gitlab/ci/env_fedora39_makefiles_clang.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora39_common_clang.sh
diff --git a/.gitlab/ci/env_fedora39_makefiles_symlinked.cmake b/.gitlab/ci/env_fedora39_makefiles_symlinked.cmake
deleted file mode 100644
index 052e9a7..0000000
--- a/.gitlab/ci/env_fedora39_makefiles_symlinked.cmake
+++ /dev/null
@@ -1 +0,0 @@
-include("${CMAKE_CURRENT_LIST_DIR}/env_fedora39_makefiles.cmake")
diff --git a/.gitlab/ci/env_fedora39_makefiles_symlinked.sh b/.gitlab/ci/env_fedora39_makefiles_symlinked.sh
deleted file mode 100644
index 39ac189..0000000
--- a/.gitlab/ci/env_fedora39_makefiles_symlinked.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora39_makefiles.sh
diff --git a/.gitlab/ci/env_fedora39_ninja_clang.sh b/.gitlab/ci/env_fedora39_ninja_clang.sh
deleted file mode 100644
index 6200f82..0000000
--- a/.gitlab/ci/env_fedora39_ninja_clang.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora39_common_clang.sh
diff --git a/.gitlab/ci/env_fedora39_ninja_multi_clang.sh b/.gitlab/ci/env_fedora39_ninja_multi_clang.sh
deleted file mode 100644
index 6200f82..0000000
--- a/.gitlab/ci/env_fedora39_ninja_multi_clang.sh
+++ /dev/null
@@ -1 +0,0 @@
-. .gitlab/ci/env_fedora39_common_clang.sh
diff --git a/.gitlab/ci/env_fedora39_asan.sh b/.gitlab/ci/env_fedora40_asan.sh
similarity index 100%
rename from .gitlab/ci/env_fedora39_asan.sh
rename to .gitlab/ci/env_fedora40_asan.sh
diff --git a/.gitlab/ci/env_fedora39_clang_analyzer.sh b/.gitlab/ci/env_fedora40_clang_analyzer.sh
similarity index 100%
rename from .gitlab/ci/env_fedora39_clang_analyzer.sh
rename to .gitlab/ci/env_fedora40_clang_analyzer.sh
diff --git a/.gitlab/ci/env_fedora40_common_clang.sh b/.gitlab/ci/env_fedora40_common_clang.sh
new file mode 100644
index 0000000..a3861d0
--- /dev/null
+++ b/.gitlab/ci/env_fedora40_common_clang.sh
@@ -0,0 +1,3 @@
+export CC=/usr/bin/clang-18
+export CXX=/usr/bin/clang++-18
+export FC=/usr/bin/flang-new
diff --git a/.gitlab/ci/env_fedora39_extdeps.sh b/.gitlab/ci/env_fedora40_extdeps.sh
similarity index 100%
rename from .gitlab/ci/env_fedora39_extdeps.sh
rename to .gitlab/ci/env_fedora40_extdeps.sh
diff --git a/.gitlab/ci/env_fedora39_makefiles.cmake b/.gitlab/ci/env_fedora40_makefiles.cmake
similarity index 100%
rename from .gitlab/ci/env_fedora39_makefiles.cmake
rename to .gitlab/ci/env_fedora40_makefiles.cmake
diff --git a/.gitlab/ci/env_fedora39_makefiles.sh b/.gitlab/ci/env_fedora40_makefiles.sh
similarity index 100%
rename from .gitlab/ci/env_fedora39_makefiles.sh
rename to .gitlab/ci/env_fedora40_makefiles.sh
diff --git a/.gitlab/ci/env_fedora40_makefiles_clang.sh b/.gitlab/ci/env_fedora40_makefiles_clang.sh
new file mode 100644
index 0000000..2021086
--- /dev/null
+++ b/.gitlab/ci/env_fedora40_makefiles_clang.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora40_common_clang.sh
diff --git a/.gitlab/ci/env_fedora40_makefiles_symlinked.cmake b/.gitlab/ci/env_fedora40_makefiles_symlinked.cmake
new file mode 100644
index 0000000..d381807
--- /dev/null
+++ b/.gitlab/ci/env_fedora40_makefiles_symlinked.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/env_fedora40_makefiles.cmake")
diff --git a/.gitlab/ci/env_fedora40_makefiles_symlinked.sh b/.gitlab/ci/env_fedora40_makefiles_symlinked.sh
new file mode 100644
index 0000000..5a7584a
--- /dev/null
+++ b/.gitlab/ci/env_fedora40_makefiles_symlinked.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora40_makefiles.sh
diff --git a/.gitlab/ci/env_fedora39_ninja.sh b/.gitlab/ci/env_fedora40_ninja.sh
similarity index 100%
rename from .gitlab/ci/env_fedora39_ninja.sh
rename to .gitlab/ci/env_fedora40_ninja.sh
diff --git a/.gitlab/ci/env_fedora40_ninja_clang.sh b/.gitlab/ci/env_fedora40_ninja_clang.sh
new file mode 100644
index 0000000..2021086
--- /dev/null
+++ b/.gitlab/ci/env_fedora40_ninja_clang.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora40_common_clang.sh
diff --git a/.gitlab/ci/env_fedora39_ninja_multi.sh b/.gitlab/ci/env_fedora40_ninja_multi.sh
similarity index 100%
rename from .gitlab/ci/env_fedora39_ninja_multi.sh
rename to .gitlab/ci/env_fedora40_ninja_multi.sh
diff --git a/.gitlab/ci/env_fedora40_ninja_multi_clang.sh b/.gitlab/ci/env_fedora40_ninja_multi_clang.sh
new file mode 100644
index 0000000..2021086
--- /dev/null
+++ b/.gitlab/ci/env_fedora40_ninja_multi_clang.sh
@@ -0,0 +1 @@
+. .gitlab/ci/env_fedora40_common_clang.sh
diff --git a/.gitlab/ci/post_build_fedora39_tidy.sh b/.gitlab/ci/post_build_fedora40_tidy.sh
similarity index 100%
rename from .gitlab/ci/post_build_fedora39_tidy.sh
rename to .gitlab/ci/post_build_fedora40_tidy.sh
diff --git a/.gitlab/ci/pre_build_fedora39_tidy.sh b/.gitlab/ci/pre_build_fedora40_tidy.sh
similarity index 100%
rename from .gitlab/ci/pre_build_fedora39_tidy.sh
rename to .gitlab/ci/pre_build_fedora40_tidy.sh
diff --git a/.gitlab/os-linux.yml b/.gitlab/os-linux.yml
index 03778c2..f9fd6c2 100644
--- a/.gitlab/os-linux.yml
+++ b/.gitlab/os-linux.yml
@@ -5,7 +5,7 @@
### Release
.linux_prep_source:
- image: "fedora:39"
+ image: "fedora:40"
variables:
GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
@@ -68,45 +68,53 @@
### Fedora
-.fedora39:
- image: "kitware/cmake:ci-fedora39-x86_64-2024-04-10"
+.fedora40:
+ image: "kitware/cmake:ci-fedora40-x86_64-2024-04-24"
variables:
GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci/long file name for testing purposes"
CMAKE_ARCH: x86_64
+# FIXME(#25932): Our HIP tests do not fully work in CI with Fedora 40.
+.fedora39_hip:
+ image: "kitware/cmake:ci-fedora39-hip-x86_64-2024-04-24"
+
+ variables:
+ GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
+ CMAKE_ARCH: x86_64
+
#### Lint builds
-.fedora39_tidy:
- extends: .fedora39
+.fedora40_tidy:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_tidy
+ CMAKE_CONFIGURATION: fedora40_tidy
CMAKE_CI_NO_INSTALL: 1
-.fedora39_clang_analyzer:
- extends: .fedora39
+.fedora40_clang_analyzer:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_clang_analyzer
+ CMAKE_CONFIGURATION: fedora40_clang_analyzer
CMAKE_CI_BUILD_TYPE: Debug
CTEST_NO_WARNINGS_ALLOWED: 1
CMAKE_CI_NO_INSTALL: 1
-.fedora39_sphinx:
- extends: .fedora39
+.fedora40_sphinx:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_sphinx
+ CMAKE_CONFIGURATION: fedora40_sphinx
CTEST_NO_WARNINGS_ALLOWED: 1
CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
CMAKE_CI_NO_INSTALL: 1
-.fedora39_sphinx_package:
- extends: .fedora39
+.fedora40_sphinx_package:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_sphinx_package
+ CMAKE_CONFIGURATION: fedora40_sphinx_package
CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
#### Build and test
@@ -162,43 +170,43 @@
CMAKE_CI_BUILD_TYPE: Release
CTEST_NO_WARNINGS_ALLOWED: 1
-.fedora39_extdeps:
- extends: .fedora39
+.fedora40_extdeps:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_extdeps
+ CMAKE_CONFIGURATION: fedora40_extdeps
CMAKE_CI_BUILD_TYPE: Release
CTEST_NO_WARNINGS_ALLOWED: 1
-.fedora39_ninja:
- extends: .fedora39
+.fedora40_ninja:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_ninja
+ CMAKE_CONFIGURATION: fedora40_ninja
CMAKE_CI_BUILD_TYPE: Release
CTEST_NO_WARNINGS_ALLOWED: 1
-.fedora39_ninja_multi:
- extends: .fedora39
+.fedora40_ninja_multi:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_ninja_multi
+ CMAKE_CONFIGURATION: fedora40_ninja_multi
CTEST_NO_WARNINGS_ALLOWED: 1
CMAKE_GENERATOR: "Ninja Multi-Config"
-.fedora39_makefiles:
- extends: .fedora39
+.fedora40_makefiles:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_makefiles
+ CMAKE_CONFIGURATION: fedora40_makefiles
CTEST_NO_WARNINGS_ALLOWED: 1
CMAKE_GENERATOR: "Unix Makefiles"
-.fedora39_makefiles_symlinked:
- extends: .fedora39
+.fedora40_makefiles_symlinked:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_makefiles_symlinked
+ CMAKE_CONFIGURATION: fedora40_makefiles_symlinked
CTEST_NO_WARNINGS_ALLOWED: 1
CMAKE_GENERATOR: "Unix Makefiles"
CMAKE_CI_IN_SYMLINK_TREE: 1
@@ -219,24 +227,24 @@
variables:
CMAKE_CONFIGURATION: debian12_ninja_clang
-.fedora39_makefiles_clang:
- extends: .fedora39
+.fedora40_makefiles_clang:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_makefiles_clang
+ CMAKE_CONFIGURATION: fedora40_makefiles_clang
CMAKE_GENERATOR: "Unix Makefiles"
-.fedora39_ninja_clang:
- extends: .fedora39
+.fedora40_ninja_clang:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_ninja_clang
+ CMAKE_CONFIGURATION: fedora40_ninja_clang
-.fedora39_ninja_multi_clang:
- extends: .fedora39
+.fedora40_ninja_multi_clang:
+ extends: .fedora40
variables:
- CMAKE_CONFIGURATION: fedora39_ninja_multi_clang
+ CMAKE_CONFIGURATION: fedora40_ninja_multi_clang
CMAKE_GENERATOR: "Ninja Multi-Config"
### Sanitizers
@@ -252,13 +260,13 @@
CTEST_MEMORYCHECK_TYPE: AddressSanitizer
CTEST_MEMORYCHECK_SANITIZER_OPTIONS: ""
-.fedora39_asan:
+.fedora40_asan:
extends:
- - .fedora39
+ - .fedora40
- .fedora_asan_addon
variables:
- CMAKE_CONFIGURATION: fedora39_asan
+ CMAKE_CONFIGURATION: fedora40_asan
### Intel Compiler
@@ -410,7 +418,7 @@
CTEST_LABELS: "HIP"
.fedora39_hip_radeon:
- extends: .fedora39
+ extends: .fedora39_hip
variables:
CMAKE_CONFIGURATION: fedora39_hip_radeon
@@ -423,30 +431,6 @@
CMAKE_CONFIGURATION: hip5.5_nvidia
CTEST_LABELS: "HIP"
-### C++ modules
-
-.gcc_cxx_modules_x86_64:
- image: "kitware/cmake:ci-gcc_cxx_modules-x86_64-2023-09-21"
-
- variables:
- GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
- CMAKE_ARCH: x86_64
- CC: "/opt/gcc-p1689/bin/gcc"
- CXX: "/opt/gcc-p1689/bin/g++"
-
-.gcc_cxx_modules_ninja:
- extends: .gcc_cxx_modules_x86_64
-
- variables:
- CMAKE_CONFIGURATION: linux_gcc_cxx_modules_ninja
-
-.gcc_cxx_modules_ninja_multi:
- extends: .gcc_cxx_modules_x86_64
-
- variables:
- CMAKE_CONFIGURATION: linux_gcc_cxx_modules_ninja_multi
- CMAKE_GENERATOR: "Ninja Multi-Config"
-
### Debian 10 legacy packages
.debian10:
@@ -539,7 +523,7 @@
.cmake_codespell_linux:
stage: build
- extends: .fedora39
+ extends: .fedora40
script:
- .gitlab/ci/codespell.sh
interruptible: true
@@ -682,7 +666,7 @@
.cmake_org_help:
stage: build
extends:
- - .fedora39
+ - .fedora40
- .linux_x86_64_tags
- .cmake_org_help_artifacts
script:
diff --git a/.gitlab/upload.yml b/.gitlab/upload.yml
index 56793af..6b46313 100644
--- a/.gitlab/upload.yml
+++ b/.gitlab/upload.yml
@@ -1,7 +1,7 @@
# Steps for uploading artifacts
.rsync_upload_package:
- image: "fedora:39"
+ image: "fedora:40"
stage: upload
tags:
- cmake
@@ -21,7 +21,7 @@
.rsync_upload_help:
stage: upload
- image: "fedora:39"
+ image: "fedora:40"
tags:
- cmake
- docker
diff --git a/CTestCustom.cmake.in b/CTestCustom.cmake.in
index a81ee4b..ae55715 100644
--- a/CTestCustom.cmake.in
+++ b/CTestCustom.cmake.in
@@ -17,6 +17,7 @@
"not sorted slower link editing will result"
"stl_deque.h:479"
"Utilities.cmzlib."
+ "Utilities.cmzstd."
"Utilities.cmbzip2."
"Source.CTest.Curl"
"Source.CursesDialog.form"
diff --git a/Help/command/file.rst b/Help/command/file.rst
index ee7d05d..ef49faa 100644
--- a/Help/command/file.rst
+++ b/Help/command/file.rst
@@ -28,7 +28,6 @@
file(`STRINGS`_ <filename> <out-var> [...])
file(`\<HASH\>`_ <filename> <out-var>)
file(`TIMESTAMP`_ <filename> <out-var> [...])
- file(`GET_RUNTIME_DEPENDENCIES`_ [...])
`Writing`_
file({`WRITE`_ | `APPEND`_} <filename> <content>...)
@@ -65,6 +64,10 @@
file(`ARCHIVE_CREATE`_ OUTPUT <archive> PATHS <paths>... [...])
file(`ARCHIVE_EXTRACT`_ INPUT <archive> [...])
+ `Handling Runtime Binaries`_
+ file(`GET_RUNTIME_DEPENDENCIES`_ [...])
+
+
Reading
^^^^^^^
@@ -157,323 +160,6 @@
See the :command:`string(TIMESTAMP)` command for documentation of
the ``<format>`` and ``UTC`` options.
-.. signature::
- file(GET_RUNTIME_DEPENDENCIES [...])
-
- .. versionadded:: 3.16
-
- Recursively get the list of libraries depended on by the given files:
-
- .. code-block:: cmake
-
- file(GET_RUNTIME_DEPENDENCIES
- [RESOLVED_DEPENDENCIES_VAR <deps_var>]
- [UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>]
- [CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>]
- [EXECUTABLES <executable_files>...]
- [LIBRARIES <library_files>...]
- [MODULES <module_files>...]
- [DIRECTORIES <directories>...]
- [BUNDLE_EXECUTABLE <bundle_executable_file>]
- [PRE_INCLUDE_REGEXES <regexes>...]
- [PRE_EXCLUDE_REGEXES <regexes>...]
- [POST_INCLUDE_REGEXES <regexes>...]
- [POST_EXCLUDE_REGEXES <regexes>...]
- [POST_INCLUDE_FILES <files>...]
- [POST_EXCLUDE_FILES <files>...]
- )
-
- Please note that this sub-command is not intended to be used in project mode.
- It is intended for use at install time, either from code generated by the
- :command:`install(RUNTIME_DEPENDENCY_SET)` command, or from code provided by
- the project via :command:`install(CODE)` or :command:`install(SCRIPT)`.
- For example:
-
- .. code-block:: cmake
-
- install(CODE [[
- file(GET_RUNTIME_DEPENDENCIES
- # ...
- )
- ]])
-
- The arguments are as follows:
-
- ``RESOLVED_DEPENDENCIES_VAR <deps_var>``
- Name of the variable in which to store the list of resolved dependencies.
-
- ``UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>``
- Name of the variable in which to store the list of unresolved
- dependencies. If this variable is not specified, and there are any
- unresolved dependencies, an error is issued.
-
- ``CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>``
- Variable prefix in which to store conflicting dependency information.
- Dependencies are conflicting if two files with the same name are found in
- two different directories. The list of filenames that conflict are stored
- in ``<conflicting_deps_prefix>_FILENAMES``. For each filename, the list
- of paths that were found for that filename are stored in
- ``<conflicting_deps_prefix>_<filename>``.
-
- ``EXECUTABLES <executable_files>...``
- List of executable files to read for dependencies. These are executables
- that are typically created with :command:`add_executable`, but they do
- not have to be created by CMake. On Apple platforms, the paths to these
- files determine the value of ``@executable_path`` when recursively
- resolving the libraries. Specifying any kind of library (``STATIC``,
- ``MODULE``, or ``SHARED``) here will result in undefined behavior.
-
- ``LIBRARIES <library_files>...``
- List of library files to read for dependencies. These are libraries that
- are typically created with :command:`add_library(SHARED)`, but they do
- not have to be created by CMake. Specifying ``STATIC`` libraries,
- ``MODULE`` libraries, or executables here will result in undefined
- behavior.
-
- ``MODULES <module_files>...``
- List of loadable module files to read for dependencies. These are modules
- that are typically created with :command:`add_library(MODULE)`, but they
- do not have to be created by CMake. They are typically used by calling
- ``dlopen()`` at runtime rather than linked at link time with ``ld -l``.
- Specifying ``STATIC`` libraries, ``SHARED`` libraries, or executables
- here will result in undefined behavior.
-
- ``DIRECTORIES <directories>...``
- List of additional directories to search for dependencies. On Linux
- platforms, these directories are searched if the dependency is not found
- in any of the other usual paths. If it is found in such a directory, a
- warning is issued, because it means that the file is incomplete (it does
- not list all of the directories that contain its dependencies).
- On Windows platforms, these directories are searched if the dependency
- is not found in any of the other search paths, but no warning is issued,
- because searching other paths is a normal part of Windows dependency
- resolution. On Apple platforms, this argument has no effect.
-
- ``BUNDLE_EXECUTABLE <bundle_executable_file>``
- Executable to treat as the "bundle executable" when resolving libraries.
- On Apple platforms, this argument determines the value of
- ``@executable_path`` when recursively resolving libraries for
- ``LIBRARIES`` and ``MODULES`` files. It has no effect on ``EXECUTABLES``
- files. On other platforms, it has no effect. This is typically (but not
- always) one of the executables in the ``EXECUTABLES`` argument which
- designates the "main" executable of the package.
-
- The following arguments specify filters for including or excluding libraries
- to be resolved. See below for a full description of how they work.
-
- ``PRE_INCLUDE_REGEXES <regexes>...``
- List of pre-include regexes through which to filter the names of
- not-yet-resolved dependencies.
-
- ``PRE_EXCLUDE_REGEXES <regexes>...``
- List of pre-exclude regexes through which to filter the names of
- not-yet-resolved dependencies.
-
- ``POST_INCLUDE_REGEXES <regexes>...``
- List of post-include regexes through which to filter the names of
- resolved dependencies.
-
- ``POST_EXCLUDE_REGEXES <regexes>...``
- List of post-exclude regexes through which to filter the names of
- resolved dependencies.
-
- ``POST_INCLUDE_FILES <files>...``
- .. versionadded:: 3.21
-
- List of post-include filenames through which to filter the names of
- resolved dependencies. Symlinks are resolved when attempting to match
- these filenames.
-
- ``POST_EXCLUDE_FILES <files>...``
- .. versionadded:: 3.21
-
- List of post-exclude filenames through which to filter the names of
- resolved dependencies. Symlinks are resolved when attempting to match
- these filenames.
-
- These arguments can be used to exclude unwanted system libraries when
- resolving the dependencies, or to include libraries from a specific
- directory. The filtering works as follows:
-
- 1. If the not-yet-resolved dependency matches any of the
- ``PRE_INCLUDE_REGEXES``, steps 2 and 3 are skipped, and the dependency
- resolution proceeds to step 4.
-
- 2. If the not-yet-resolved dependency matches any of the
- ``PRE_EXCLUDE_REGEXES``, dependency resolution stops for that dependency.
-
- 3. Otherwise, dependency resolution proceeds.
-
- 4. ``file(GET_RUNTIME_DEPENDENCIES)`` searches for the dependency according
- to the linking rules of the platform (see below).
-
- 5. If the dependency is found, and its full path matches one of the
- ``POST_INCLUDE_REGEXES`` or ``POST_INCLUDE_FILES``, the full path is added
- to the resolved dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)``
- recursively resolves that library's own dependencies. Otherwise, resolution
- proceeds to step 6.
-
- 6. If the dependency is found, but its full path matches one of the
- ``POST_EXCLUDE_REGEXES`` or ``POST_EXCLUDE_FILES``, it is not added to the
- resolved dependencies, and dependency resolution stops for that dependency.
-
- 7. If the dependency is found, and its full path does not match either
- ``POST_INCLUDE_REGEXES``, ``POST_INCLUDE_FILES``, ``POST_EXCLUDE_REGEXES``,
- or ``POST_EXCLUDE_FILES``, the full path is added to the resolved
- dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)`` recursively resolves
- that library's own dependencies.
-
- Different platforms have different rules for how dependencies are resolved.
- These specifics are described here.
-
- On Linux platforms, library resolution works as follows:
-
- 1. If the depending file does not have any ``RUNPATH`` entries, and the
- library exists in one of the depending file's ``RPATH`` entries, or its
- parents', in that order, the dependency is resolved to that file.
- 2. Otherwise, if the depending file has any ``RUNPATH`` entries, and the
- library exists in one of those entries, the dependency is resolved to that
- file.
- 3. Otherwise, if the library exists in one of the directories listed by
- ``ldconfig``, the dependency is resolved to that file.
- 4. Otherwise, if the library exists in one of the ``DIRECTORIES`` entries,
- the dependency is resolved to that file. In this case, a warning is
- issued, because finding a file in one of the ``DIRECTORIES`` means that
- the depending file is not complete (it does not list all the directories
- from which it pulls dependencies).
-
- 5. Otherwise, the dependency is unresolved.
-
- On Windows platforms, library resolution works as follows:
-
- 1. DLL dependency names are converted to lowercase for matching filters.
- Windows DLL names are case-insensitive, and some linkers mangle the
- case of the DLL dependency names. However, this makes it more difficult
- for ``PRE_INCLUDE_REGEXES``, ``PRE_EXCLUDE_REGEXES``,
- ``POST_INCLUDE_REGEXES``, and ``POST_EXCLUDE_REGEXES`` to properly
- filter DLL names - every regex would have to check for both uppercase
- and lowercase letters. For example:
-
- .. code-block:: cmake
-
- file(GET_RUNTIME_DEPENDENCIES
- # ...
- PRE_INCLUDE_REGEXES "^[Mm][Yy][Ll][Ii][Bb][Rr][Aa][Rr][Yy]\\.[Dd][Ll][Ll]$"
- )
-
- Converting the DLL name to lowercase allows the regexes to only match
- lowercase names, thus simplifying the regex. For example:
-
- .. code-block:: cmake
-
- file(GET_RUNTIME_DEPENDENCIES
- # ...
- PRE_INCLUDE_REGEXES "^mylibrary\\.dll$"
- )
-
- This regex will match ``mylibrary.dll`` regardless of how it is cased,
- either on disk or in the depending file. (For example, it will match
- ``mylibrary.dll``, ``MyLibrary.dll``, and ``MYLIBRARY.DLL``.)
-
- .. versionchanged:: 3.27
-
- The conversion to lowercase only applies while matching filters.
- Results reported after filtering case-preserve each DLL name as it is
- found on disk, if resolved, and otherwise as it is referenced by the
- dependent binary.
-
- Prior to CMake 3.27, the results were reported with lowercase DLL
- file names, but the directory portion retained its casing.
-
- 2. (**Not yet implemented**) If the depending file is a Windows Store app,
- and the dependency is listed as a dependency in the application's package
- manifest, the dependency is resolved to that file.
-
- 3. Otherwise, if the library exists in the same directory as the depending
- file, the dependency is resolved to that file.
-
- 4. Otherwise, if the library exists in either the operating system's
- ``system32`` directory or the ``Windows`` directory, in that order, the
- dependency is resolved to that file.
-
- 5. Otherwise, if the library exists in one of the directories specified by
- ``DIRECTORIES``, in the order they are listed, the dependency is resolved
- to that file. In this case, a warning is not issued, because searching
- other directories is a normal part of Windows library resolution.
-
- 6. Otherwise, the dependency is unresolved.
-
- On Apple platforms, library resolution works as follows:
-
- 1. If the dependency starts with ``@executable_path/``, and an
- ``EXECUTABLES`` argument is in the process of being resolved, and
- replacing ``@executable_path/`` with the directory of the executable
- yields an existing file, the dependency is resolved to that file.
-
- 2. Otherwise, if the dependency starts with ``@executable_path/``, and there
- is a ``BUNDLE_EXECUTABLE`` argument, and replacing ``@executable_path/``
- with the directory of the bundle executable yields an existing file, the
- dependency is resolved to that file.
-
- 3. Otherwise, if the dependency starts with ``@loader_path/``, and replacing
- ``@loader_path/`` with the directory of the depending file yields an
- existing file, the dependency is resolved to that file.
-
- 4. Otherwise, if the dependency starts with ``@rpath/``, and replacing
- ``@rpath/`` with one of the ``RPATH`` entries of the depending file
- yields an existing file, the dependency is resolved to that file.
- Note that ``RPATH`` entries that start with ``@executable_path/`` or
- ``@loader_path/`` also have these items replaced with the appropriate
- path.
-
- 5. Otherwise, if the dependency is an absolute file that exists,
- the dependency is resolved to that file.
-
- 6. Otherwise, the dependency is unresolved.
-
- This function accepts several variables that determine which tool is used for
- dependency resolution:
-
- .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM
-
- Determines which operating system and executable format the files are built
- for. This could be one of several values:
-
- * ``linux+elf``
- * ``windows+pe``
- * ``macos+macho``
-
- If this variable is not specified, it is determined automatically by system
- introspection.
-
- .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL
-
- Determines the tool to use for dependency resolution. It could be one of
- several values, depending on the value of
- :variable:`CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM`:
-
- ================================================= =============================================
- ``CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM`` ``CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL``
- ================================================= =============================================
- ``linux+elf`` ``objdump``
- ``windows+pe`` ``objdump`` or ``dumpbin``
- ``macos+macho`` ``otool``
- ================================================= =============================================
-
- If this variable is not specified, it is determined automatically by system
- introspection.
-
- .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND
-
- Determines the path to the tool to use for dependency resolution. This is
- the actual path to ``objdump``, ``dumpbin``, or ``otool``.
-
- If this variable is not specified, it is determined by the value of
- ``CMAKE_OBJDUMP`` if set, else by system introspection.
-
- .. versionadded:: 3.18
- Use ``CMAKE_OBJDUMP`` if set.
-
Writing
^^^^^^^
@@ -1275,3 +961,323 @@
timestamp instead of extracting file timestamps from the archive.
With ``VERBOSE``, the command will produce verbose output.
+
+Handling Runtime Binaries
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. signature::
+ file(GET_RUNTIME_DEPENDENCIES [...])
+
+ .. versionadded:: 3.16
+
+ Recursively get the list of libraries depended on by the given files:
+
+ .. code-block:: cmake
+
+ file(GET_RUNTIME_DEPENDENCIES
+ [RESOLVED_DEPENDENCIES_VAR <deps_var>]
+ [UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>]
+ [CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>]
+ [EXECUTABLES <executable_files>...]
+ [LIBRARIES <library_files>...]
+ [MODULES <module_files>...]
+ [DIRECTORIES <directories>...]
+ [BUNDLE_EXECUTABLE <bundle_executable_file>]
+ [PRE_INCLUDE_REGEXES <regexes>...]
+ [PRE_EXCLUDE_REGEXES <regexes>...]
+ [POST_INCLUDE_REGEXES <regexes>...]
+ [POST_EXCLUDE_REGEXES <regexes>...]
+ [POST_INCLUDE_FILES <files>...]
+ [POST_EXCLUDE_FILES <files>...]
+ )
+
+ Please note that this sub-command is not intended to be used in project mode.
+ It is intended for use at install time, either from code generated by the
+ :command:`install(RUNTIME_DEPENDENCY_SET)` command, or from code provided by
+ the project via :command:`install(CODE)` or :command:`install(SCRIPT)`.
+ For example:
+
+ .. code-block:: cmake
+
+ install(CODE [[
+ file(GET_RUNTIME_DEPENDENCIES
+ # ...
+ )
+ ]])
+
+ The arguments are as follows:
+
+ ``RESOLVED_DEPENDENCIES_VAR <deps_var>``
+ Name of the variable in which to store the list of resolved dependencies.
+
+ ``UNRESOLVED_DEPENDENCIES_VAR <unresolved_deps_var>``
+ Name of the variable in which to store the list of unresolved
+ dependencies. If this variable is not specified, and there are any
+ unresolved dependencies, an error is issued.
+
+ ``CONFLICTING_DEPENDENCIES_PREFIX <conflicting_deps_prefix>``
+ Variable prefix in which to store conflicting dependency information.
+ Dependencies are conflicting if two files with the same name are found in
+ two different directories. The list of filenames that conflict are stored
+ in ``<conflicting_deps_prefix>_FILENAMES``. For each filename, the list
+ of paths that were found for that filename are stored in
+ ``<conflicting_deps_prefix>_<filename>``.
+
+ ``EXECUTABLES <executable_files>...``
+ List of executable files to read for dependencies. These are executables
+ that are typically created with :command:`add_executable`, but they do
+ not have to be created by CMake. On Apple platforms, the paths to these
+ files determine the value of ``@executable_path`` when recursively
+ resolving the libraries. Specifying any kind of library (``STATIC``,
+ ``MODULE``, or ``SHARED``) here will result in undefined behavior.
+
+ ``LIBRARIES <library_files>...``
+ List of library files to read for dependencies. These are libraries that
+ are typically created with :command:`add_library(SHARED)`, but they do
+ not have to be created by CMake. Specifying ``STATIC`` libraries,
+ ``MODULE`` libraries, or executables here will result in undefined
+ behavior.
+
+ ``MODULES <module_files>...``
+ List of loadable module files to read for dependencies. These are modules
+ that are typically created with :command:`add_library(MODULE)`, but they
+ do not have to be created by CMake. They are typically used by calling
+ ``dlopen()`` at runtime rather than linked at link time with ``ld -l``.
+ Specifying ``STATIC`` libraries, ``SHARED`` libraries, or executables
+ here will result in undefined behavior.
+
+ ``DIRECTORIES <directories>...``
+ List of additional directories to search for dependencies. On Linux
+ platforms, these directories are searched if the dependency is not found
+ in any of the other usual paths. If it is found in such a directory, a
+ warning is issued, because it means that the file is incomplete (it does
+ not list all of the directories that contain its dependencies).
+ On Windows platforms, these directories are searched if the dependency
+ is not found in any of the other search paths, but no warning is issued,
+ because searching other paths is a normal part of Windows dependency
+ resolution. On Apple platforms, this argument has no effect.
+
+ ``BUNDLE_EXECUTABLE <bundle_executable_file>``
+ Executable to treat as the "bundle executable" when resolving libraries.
+ On Apple platforms, this argument determines the value of
+ ``@executable_path`` when recursively resolving libraries for
+ ``LIBRARIES`` and ``MODULES`` files. It has no effect on ``EXECUTABLES``
+ files. On other platforms, it has no effect. This is typically (but not
+ always) one of the executables in the ``EXECUTABLES`` argument which
+ designates the "main" executable of the package.
+
+ The following arguments specify filters for including or excluding libraries
+ to be resolved. See below for a full description of how they work.
+
+ ``PRE_INCLUDE_REGEXES <regexes>...``
+ List of pre-include regexes through which to filter the names of
+ not-yet-resolved dependencies.
+
+ ``PRE_EXCLUDE_REGEXES <regexes>...``
+ List of pre-exclude regexes through which to filter the names of
+ not-yet-resolved dependencies.
+
+ ``POST_INCLUDE_REGEXES <regexes>...``
+ List of post-include regexes through which to filter the names of
+ resolved dependencies.
+
+ ``POST_EXCLUDE_REGEXES <regexes>...``
+ List of post-exclude regexes through which to filter the names of
+ resolved dependencies.
+
+ ``POST_INCLUDE_FILES <files>...``
+ .. versionadded:: 3.21
+
+ List of post-include filenames through which to filter the names of
+ resolved dependencies. Symlinks are resolved when attempting to match
+ these filenames.
+
+ ``POST_EXCLUDE_FILES <files>...``
+ .. versionadded:: 3.21
+
+ List of post-exclude filenames through which to filter the names of
+ resolved dependencies. Symlinks are resolved when attempting to match
+ these filenames.
+
+ These arguments can be used to exclude unwanted system libraries when
+ resolving the dependencies, or to include libraries from a specific
+ directory. The filtering works as follows:
+
+ 1. If the not-yet-resolved dependency matches any of the
+ ``PRE_INCLUDE_REGEXES``, steps 2 and 3 are skipped, and the dependency
+ resolution proceeds to step 4.
+
+ 2. If the not-yet-resolved dependency matches any of the
+ ``PRE_EXCLUDE_REGEXES``, dependency resolution stops for that dependency.
+
+ 3. Otherwise, dependency resolution proceeds.
+
+ 4. ``file(GET_RUNTIME_DEPENDENCIES)`` searches for the dependency according
+ to the linking rules of the platform (see below).
+
+ 5. If the dependency is found, and its full path matches one of the
+ ``POST_INCLUDE_REGEXES`` or ``POST_INCLUDE_FILES``, the full path is added
+ to the resolved dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)``
+ recursively resolves that library's own dependencies. Otherwise, resolution
+ proceeds to step 6.
+
+ 6. If the dependency is found, but its full path matches one of the
+ ``POST_EXCLUDE_REGEXES`` or ``POST_EXCLUDE_FILES``, it is not added to the
+ resolved dependencies, and dependency resolution stops for that dependency.
+
+ 7. If the dependency is found, and its full path does not match either
+ ``POST_INCLUDE_REGEXES``, ``POST_INCLUDE_FILES``, ``POST_EXCLUDE_REGEXES``,
+ or ``POST_EXCLUDE_FILES``, the full path is added to the resolved
+ dependencies, and ``file(GET_RUNTIME_DEPENDENCIES)`` recursively resolves
+ that library's own dependencies.
+
+ Different platforms have different rules for how dependencies are resolved.
+ These specifics are described here.
+
+ On Linux platforms, library resolution works as follows:
+
+ 1. If the depending file does not have any ``RUNPATH`` entries, and the
+ library exists in one of the depending file's ``RPATH`` entries, or its
+ parents', in that order, the dependency is resolved to that file.
+ 2. Otherwise, if the depending file has any ``RUNPATH`` entries, and the
+ library exists in one of those entries, the dependency is resolved to that
+ file.
+ 3. Otherwise, if the library exists in one of the directories listed by
+ ``ldconfig``, the dependency is resolved to that file.
+ 4. Otherwise, if the library exists in one of the ``DIRECTORIES`` entries,
+ the dependency is resolved to that file. In this case, a warning is
+ issued, because finding a file in one of the ``DIRECTORIES`` means that
+ the depending file is not complete (it does not list all the directories
+ from which it pulls dependencies).
+
+ 5. Otherwise, the dependency is unresolved.
+
+ On Windows platforms, library resolution works as follows:
+
+ 1. DLL dependency names are converted to lowercase for matching filters.
+ Windows DLL names are case-insensitive, and some linkers mangle the
+ case of the DLL dependency names. However, this makes it more difficult
+ for ``PRE_INCLUDE_REGEXES``, ``PRE_EXCLUDE_REGEXES``,
+ ``POST_INCLUDE_REGEXES``, and ``POST_EXCLUDE_REGEXES`` to properly
+ filter DLL names - every regex would have to check for both uppercase
+ and lowercase letters. For example:
+
+ .. code-block:: cmake
+
+ file(GET_RUNTIME_DEPENDENCIES
+ # ...
+ PRE_INCLUDE_REGEXES "^[Mm][Yy][Ll][Ii][Bb][Rr][Aa][Rr][Yy]\\.[Dd][Ll][Ll]$"
+ )
+
+ Converting the DLL name to lowercase allows the regexes to only match
+ lowercase names, thus simplifying the regex. For example:
+
+ .. code-block:: cmake
+
+ file(GET_RUNTIME_DEPENDENCIES
+ # ...
+ PRE_INCLUDE_REGEXES "^mylibrary\\.dll$"
+ )
+
+ This regex will match ``mylibrary.dll`` regardless of how it is cased,
+ either on disk or in the depending file. (For example, it will match
+ ``mylibrary.dll``, ``MyLibrary.dll``, and ``MYLIBRARY.DLL``.)
+
+ .. versionchanged:: 3.27
+
+ The conversion to lowercase only applies while matching filters.
+ Results reported after filtering case-preserve each DLL name as it is
+ found on disk, if resolved, and otherwise as it is referenced by the
+ dependent binary.
+
+ Prior to CMake 3.27, the results were reported with lowercase DLL
+ file names, but the directory portion retained its casing.
+
+ 2. (**Not yet implemented**) If the depending file is a Windows Store app,
+ and the dependency is listed as a dependency in the application's package
+ manifest, the dependency is resolved to that file.
+
+ 3. Otherwise, if the library exists in the same directory as the depending
+ file, the dependency is resolved to that file.
+
+ 4. Otherwise, if the library exists in either the operating system's
+ ``system32`` directory or the ``Windows`` directory, in that order, the
+ dependency is resolved to that file.
+
+ 5. Otherwise, if the library exists in one of the directories specified by
+ ``DIRECTORIES``, in the order they are listed, the dependency is resolved
+ to that file. In this case, a warning is not issued, because searching
+ other directories is a normal part of Windows library resolution.
+
+ 6. Otherwise, the dependency is unresolved.
+
+ On Apple platforms, library resolution works as follows:
+
+ 1. If the dependency starts with ``@executable_path/``, and an
+ ``EXECUTABLES`` argument is in the process of being resolved, and
+ replacing ``@executable_path/`` with the directory of the executable
+ yields an existing file, the dependency is resolved to that file.
+
+ 2. Otherwise, if the dependency starts with ``@executable_path/``, and there
+ is a ``BUNDLE_EXECUTABLE`` argument, and replacing ``@executable_path/``
+ with the directory of the bundle executable yields an existing file, the
+ dependency is resolved to that file.
+
+ 3. Otherwise, if the dependency starts with ``@loader_path/``, and replacing
+ ``@loader_path/`` with the directory of the depending file yields an
+ existing file, the dependency is resolved to that file.
+
+ 4. Otherwise, if the dependency starts with ``@rpath/``, and replacing
+ ``@rpath/`` with one of the ``RPATH`` entries of the depending file
+ yields an existing file, the dependency is resolved to that file.
+ Note that ``RPATH`` entries that start with ``@executable_path/`` or
+ ``@loader_path/`` also have these items replaced with the appropriate
+ path.
+
+ 5. Otherwise, if the dependency is an absolute file that exists,
+ the dependency is resolved to that file.
+
+ 6. Otherwise, the dependency is unresolved.
+
+ This function accepts several variables that determine which tool is used for
+ dependency resolution:
+
+ .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM
+
+ Determines which operating system and executable format the files are built
+ for. This could be one of several values:
+
+ * ``linux+elf``
+ * ``windows+pe``
+ * ``macos+macho``
+
+ If this variable is not specified, it is determined automatically by system
+ introspection.
+
+ .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL
+
+ Determines the tool to use for dependency resolution. It could be one of
+ several values, depending on the value of
+ :variable:`CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM`:
+
+ ================================================= =============================================
+ ``CMAKE_GET_RUNTIME_DEPENDENCIES_PLATFORM`` ``CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL``
+ ================================================= =============================================
+ ``linux+elf`` ``objdump``
+ ``windows+pe`` ``objdump`` or ``dumpbin``
+ ``macos+macho`` ``otool``
+ ================================================= =============================================
+
+ If this variable is not specified, it is determined automatically by system
+ introspection.
+
+ .. variable:: CMAKE_GET_RUNTIME_DEPENDENCIES_COMMAND
+
+ Determines the path to the tool to use for dependency resolution. This is
+ the actual path to ``objdump``, ``dumpbin``, or ``otool``.
+
+ If this variable is not specified, it is determined by the value of
+ ``CMAKE_OBJDUMP`` if set, else by system introspection.
+
+ .. versionadded:: 3.18
+ Use ``CMAKE_OBJDUMP`` if set.
diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake
index 1113e9a..857399c 100644
--- a/Modules/Compiler/GNU.cmake
+++ b/Modules/Compiler/GNU.cmake
@@ -151,7 +151,7 @@
list(APPEND __lto_flags -flto)
endif()
- if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.7)
+ if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 4.7 AND NOT APPLE)
# '-ffat-lto-objects' introduced since GCC 4.7:
# * https://gcc.gnu.org/onlinedocs/gcc-4.6.4/gcc/Option-Summary.html (no)
# * https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Option-Summary.html (yes)
diff --git a/Modules/FortranCInterface/CMakeLists.txt b/Modules/FortranCInterface/CMakeLists.txt
index a0f1862..2e8e14f 100644
--- a/Modules/FortranCInterface/CMakeLists.txt
+++ b/Modules/FortranCInterface/CMakeLists.txt
@@ -113,11 +113,15 @@
if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND
CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 12)
target_compile_options(FortranCInterface PRIVATE "-fno-lto")
- target_compile_options(myfort PRIVATE "-flto=auto" "-ffat-lto-objects")
+ if(NOT APPLE)
+ target_compile_options(myfort PRIVATE "-flto=auto" "-ffat-lto-objects")
+ endif()
endif()
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" AND
CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 12)
- target_compile_options(symbols PRIVATE "-flto=auto" "-ffat-lto-objects")
+ if(NOT APPLE)
+ target_compile_options(symbols PRIVATE "-flto=auto" "-ffat-lto-objects")
+ endif()
endif()
file(GENERATE OUTPUT exe-$<CONFIG>.cmake CONTENT [[
diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx
index b7786d3..6889656 100644
--- a/Source/CPack/cmCPackGenerator.cxx
+++ b/Source/CPack/cmCPackGenerator.cxx
@@ -187,7 +187,7 @@
this->CleanTemporaryDirectory();
std::string bareTempInstallDirectory =
- this->GetOption("CPACK_TEMPORARY_INSTALL_DIRECTORY");
+ this->GetOption("CPACK_TEMPORARY_DIRECTORY");
std::string tempInstallDirectoryStr = bareTempInstallDirectory;
bool setDestDir = this->GetOption("CPACK_SET_DESTDIR").IsOn() ||
cmIsInternallyOn(this->GetOption("CPACK_SET_DESTDIR"));
@@ -1218,6 +1218,60 @@
// it, the default value should be:
this->SetOptionIfNotSet("CPACK_PACKAGING_INSTALL_PREFIX", "/");
+ // Special handling for CPACK_TEMPORARY[_INSTALL]_DIRECTORY.
+ // Note: Make sure that if only one of these variables is already set, the
+ // other will be set to the same value. If they are set to different
+ // values, however, we cannot proceed.
+ cmValue val1 =
+ this->MakefileMap->GetDefinition("CPACK_TEMPORARY_INSTALL_DIRECTORY");
+ cmValue val2 = this->MakefileMap->GetDefinition("CPACK_TEMPORARY_DIRECTORY");
+ if (val1 != val2) {
+ // One variable is set but not the other?
+ // Then set the other variable to the same value (even if it is invalid).
+ if (val1.Get() != nullptr && val2.Get() == nullptr) {
+ cmCPackLogger(cmCPackLog::LOG_WARNING,
+ "Variable CPACK_TEMPORARY_INSTALL_DIRECTORY is set, which "
+ "is not recommended. For backwards-compatibility we will "
+ "also set CPACK_TEMPORARY_DIRECTORY to the same value and "
+ "proceed. However, better set neither of them!"
+ << std::endl);
+ this->MakefileMap->AddDefinition("CPACK_TEMPORARY_DIRECTORY", val1);
+ } else if (val1.Get() == nullptr && val2.Get() != nullptr) {
+ cmCPackLogger(
+ cmCPackLog::LOG_WARNING,
+ "Variable CPACK_TEMPORARY_DIRECTORY is set, which is not recommended."
+ << std::endl);
+ cmCPackLogger(
+ cmCPackLog::LOG_DEBUG,
+ "For backwards-compatibility we will set "
+ "CPACK_TEMPORARY_INSTALL_DIRECTORY to the same value as "
+ "CPACK_TEMPORARY_DIRECTORY. However, better set neither of them!"
+ << std::endl);
+ this->MakefileMap->AddDefinition("CPACK_TEMPORARY_INSTALL_DIRECTORY",
+ val2);
+ } else {
+ cmCPackLogger(cmCPackLog::LOG_VERBOSE,
+ "CPACK_TEMPORARY_INSTALL_DIRECTORY is already set to: "
+ << val1 << std::endl);
+ cmCPackLogger(
+ cmCPackLog::LOG_VERBOSE,
+ "CPACK_TEMPORARY_DIRECTORY is already set to: " << val2 << std::endl);
+ cmCPackLogger(cmCPackLog::LOG_ERROR,
+ "Variables CPACK_TEMPORARY_DIRECTORY and "
+ "CPACK_TEMPORARY_INSTALL_DIRECTORY are both set but to "
+ "different values. This is not supported!"
+ << std::endl);
+ return 0;
+ }
+ } else if (val1.Get() != nullptr && val2.Get() != nullptr) {
+ cmCPackLogger(cmCPackLog::LOG_WARNING,
+ "Variables CPACK_TEMPORARY_DIRECTORY and "
+ "CPACK_TEMPORARY_INSTALL_DIRECTORY are both set. Because "
+ "they are set to the same value we can still proceed. "
+ "However, better set neither of them!"
+ << std::endl);
+ }
+
return result;
}
@@ -1356,7 +1410,7 @@
int cmCPackGenerator::CleanTemporaryDirectory()
{
std::string tempInstallDirectory =
- this->GetOption("CPACK_TEMPORARY_INSTALL_DIRECTORY");
+ this->GetOption("CPACK_TEMPORARY_DIRECTORY");
if (cmsys::SystemTools::FileExists(tempInstallDirectory)) {
cmCPackLogger(cmCPackLog::LOG_OUTPUT,
"- Clean temporary : " << tempInstallDirectory << std::endl);
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index 498fd6e..e1aefd9 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -760,7 +760,9 @@
}
if (!this->GetCTestConfiguration("BuildDirectory").empty()) {
this->Impl->BinaryDir = this->GetCTestConfiguration("BuildDirectory");
- cmSystemTools::ChangeDirectory(this->Impl->BinaryDir);
+ if (this->Impl->TestDir.empty()) {
+ cmSystemTools::ChangeDirectory(this->Impl->BinaryDir);
+ }
}
this->Impl->TimeOut =
std::chrono::seconds(atoi(this->GetCTestConfiguration("TimeOut").c_str()));
diff --git a/Source/cmELF.cxx b/Source/cmELF.cxx
index d9a4408..a71e5f1 100644
--- a/Source/cmELF.cxx
+++ b/Source/cmELF.cxx
@@ -621,7 +621,19 @@
// Make sure the whole value was read.
if (!(*this->Stream)) {
- this->SetErrorMessage("Dynamic section specifies unreadable RPATH.");
+ if (tag == cmELF::TagRPath) {
+ this->SetErrorMessage(
+ "Dynamic section specifies unreadable DT_RPATH");
+ } else if (tag == cmELF::TagRunPath) {
+ this->SetErrorMessage(
+ "Dynamic section specifies unreadable DT_RUNPATH");
+ } else if (tag == cmELF::TagMipsRldMapRel) {
+ this->SetErrorMessage(
+ "Dynamic section specifies unreadable DT_MIPS_RLD_MAP_REL");
+ } else {
+ this->SetErrorMessage("Dynamic section specifies unreadable value"
+ " for unexpected attribute");
+ }
se.Value = "";
return nullptr;
}
diff --git a/Tests/FindOpenACC/CMakeLists.txt b/Tests/FindOpenACC/CMakeLists.txt
index ef7de65..1b6bcf2 100644
--- a/Tests/FindOpenACC/CMakeLists.txt
+++ b/Tests/FindOpenACC/CMakeLists.txt
@@ -1,11 +1,5 @@
-
-set(langs C CXX)
-if(NOT CMAKE_GENERATOR STREQUAL "Ninja")
- list(APPEND langs Fortran)
-endif()
-
-foreach(lang IN LISTS langs)
- if(CMAKE_${lang}_COMPILER)
+foreach(lang IN ITEMS C CXX Fortran)
+ if(CMake_TEST_FindOpenACC_${lang})
add_test(NAME FindOpenACC.Test${lang} COMMAND
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
--build-and-test
diff --git a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake
index 3ce2a08..190c6c1 100644
--- a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake
@@ -542,7 +542,7 @@
run_cmake_command(test-dir-invalid-arg ${CMAKE_CTEST_COMMAND} --test-dir)
run_cmake_command(test-dir-non-existing-dir ${CMAKE_CTEST_COMMAND} --test-dir non-existing-dir)
-function(run_testDir)
+function(run_testDir testName testPreset)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/testDir)
set(RunCMake_TEST_NO_CLEAN 1)
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
@@ -552,9 +552,16 @@
add_test(Test1 \"${CMAKE_COMMAND}\" -E true)
add_test(Test2 \"${CMAKE_COMMAND}\" -E true)
")
- run_cmake_command(testDir ${CMAKE_CTEST_COMMAND} --test-dir "${RunCMake_TEST_BINARY_DIR}/sub")
+ if (testPreset)
+ set(presetCommandLine --preset=default)
+ configure_file(
+ ${RunCMake_SOURCE_DIR}/testDir-presets.json.in
+ ${RunCMake_TEST_BINARY_DIR}/CMakePresets.json)
+ endif()
+ run_cmake_command(${testName} ${CMAKE_CTEST_COMMAND} --test-dir "${RunCMake_TEST_BINARY_DIR}/sub" ${presetCommandLine})
endfunction()
-run_testDir()
+run_testDir(testDir 0)
+run_testDir(testDir-preset 1)
# Test --output-junit
function(run_output_junit)
diff --git a/Tests/RunCMake/CTestCommandLine/testDir-presets.json.in b/Tests/RunCMake/CTestCommandLine/testDir-presets.json.in
new file mode 100644
index 0000000..46391f8
--- /dev/null
+++ b/Tests/RunCMake/CTestCommandLine/testDir-presets.json.in
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "cmakeMinimumRequired": {
+ "major": 3,
+ "minor": 22,
+ "patch": 0
+ },
+ "configurePresets": [
+ {
+ "name": "default",
+ "binaryDir": "presetBinaryDir"
+ }
+ ],
+ "testPresets": [
+ {
+ "name": "default",
+ "configurePreset": "default"
+ }
+ ]
+}
diff --git a/Utilities/ClangTidyModule/UsePragmaOnceCheck.cxx b/Utilities/ClangTidyModule/UsePragmaOnceCheck.cxx
index 37ecd70..9ec8e5f 100644
--- a/Utilities/ClangTidyModule/UsePragmaOnceCheck.cxx
+++ b/Utilities/ClangTidyModule/UsePragmaOnceCheck.cxx
@@ -55,10 +55,10 @@
, FID(FID)
{
SourceManager& SM = this->PP->getSourceManager();
- const FileEntry* Entry = SM.getFileEntryForID(FID);
+ OptionalFileEntryRef Entry = SM.getFileEntryRefForID(FID);
assert(Entry && "Invalid FileID given");
- Lexer MyLexer(FID, SM.getMemoryBufferForFileOrFake(Entry), SM,
+ Lexer MyLexer(FID, SM.getMemoryBufferForFileOrFake(*Entry), SM,
this->PP->getLangOpts());
Token Tok;
@@ -157,9 +157,10 @@
// guards.
SourceManager& SM = this->PP->getSourceManager();
if (Reason == EnterFile && FileType == SrcMgr::C_User) {
- if (const FileEntry* FE = SM.getFileEntryForID(SM.getFileID(Loc))) {
+ if (OptionalFileEntryRef FE =
+ SM.getFileEntryRefForID(SM.getFileID(Loc))) {
std::string FileName = cleanPath(FE->getName());
- this->Files[FileName] = FE;
+ this->Files.try_emplace(FileName, *FE);
}
}
}
@@ -205,9 +206,9 @@
continue;
}
- const FileEntry* FE =
- SM.getFileEntryForID(SM.getFileID(MI->getDefinitionLoc()));
- std::string FileName = cleanPath(FE->getName());
+ FileEntryRef FE =
+ *SM.getFileEntryRefForID(SM.getFileID(MI->getDefinitionLoc()));
+ std::string FileName = cleanPath(FE.getName());
this->Files.erase(FileName);
// Look up Locations for this guard.
@@ -290,7 +291,7 @@
}
std::vector<std::pair<Token, const MacroInfo*>> Macros;
- llvm::StringMap<const FileEntry*> Files;
+ llvm::StringMap<FileEntryRef> Files;
std::map<const IdentifierInfo*, std::pair<SourceLocation, SourceLocation>>
Ifndefs;
std::map<SourceLocation, SourceLocation> EndIfs;
diff --git a/Utilities/Sphinx/CTestCustom.cmake.in b/Utilities/Sphinx/CTestCustom.cmake.in
index 840121b..ee13aa1 100644
--- a/Utilities/Sphinx/CTestCustom.cmake.in
+++ b/Utilities/Sphinx/CTestCustom.cmake.in
@@ -1,3 +1,4 @@
list(APPEND CTEST_CUSTOM_WARNING_EXCEPTION
"cmake.texi:[0-9]+: warning: .definfoenclose is obsolete"
+ "cmake.texi:[0-9]+: warning: @ref should not appear on @item line"
)