summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Help/command/UNSET_NOTE.txt9
-rw-r--r--Help/command/set.rst13
-rw-r--r--Help/command/unset.rst11
-rw-r--r--Modules/Compiler/IBMClang.cmake5
-rw-r--r--Source/CMakeVersion.cmake2
-rw-r--r--Source/cmBinUtilsWindowsPELinker.cxx58
-rw-r--r--Source/cmCommonTargetGenerator.cxx3
-rw-r--r--Source/cmGlobalGenerator.cxx9
-rw-r--r--Source/cmGlobalGenerator.h5
-rw-r--r--Tests/FortranModules/Executable/CMakeLists.txt1
-rw-r--r--Tests/FortranModules/Executable/main.f904
-rw-r--r--Tests/FortranModules/Library/CMakeLists.txt7
-rw-r--r--Tests/FortranModules/Library/cycleA1.f903
-rw-r--r--Tests/FortranModules/Library/cycleA2.f905
-rw-r--r--Tests/FortranModules/Library/cycleB1.f903
-rw-r--r--Tests/FortranModules/Library/cycleB2.f905
-rw-r--r--Tests/RunCMake/CMakeLists.txt1
-rw-r--r--Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/RunCMakeTest.cmake4
-rw-r--r--Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-all-check.cmake14
-rw-r--r--Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-all-stderr-Borland.txt7
-rw-r--r--Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-unresolved-all-stderr-Borland.txt4
-rw-r--r--Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows.cmake5
22 files changed, 150 insertions, 28 deletions
diff --git a/Help/command/UNSET_NOTE.txt b/Help/command/UNSET_NOTE.txt
new file mode 100644
index 0000000..8dc9125
--- /dev/null
+++ b/Help/command/UNSET_NOTE.txt
@@ -0,0 +1,9 @@
+.. note::
+
+ When evaluating :ref:`Variable References` of the form ``${VAR}``, CMake
+ first searches for a normal variable with that name. If no such normal
+ variable exists, CMake will then search for a cache entry with that name.
+ Because of this, **unsetting a normal variable can expose a cache variable
+ that was previously hidden**. To force a variable reference of the form
+ ``${VAR}`` to return an empty string, use ``set(<variable> "")``, which
+ clears the normal variable but leaves it defined.
diff --git a/Help/command/set.rst b/Help/command/set.rst
index ee677c9..aeb88b3 100644
--- a/Help/command/set.rst
+++ b/Help/command/set.rst
@@ -8,9 +8,8 @@ and cache entries.
Signatures of this command that specify a ``<value>...`` placeholder
expect zero or more arguments. Multiple arguments will be joined as
-a :ref:`semicolon-separated list <CMake Language Lists>` to form the actual variable
-value to be set. Zero arguments will cause normal variables to be
-unset. See the :command:`unset` command to unset variables explicitly.
+a :ref:`semicolon-separated list <CMake Language Lists>` to form the
+actual variable value to be set.
Set Normal Variable
^^^^^^^^^^^^^^^^^^^
@@ -19,7 +18,11 @@ Set Normal Variable
set(<variable> <value>... [PARENT_SCOPE])
:target: normal
- Sets the given ``<variable>`` in the current function or directory scope.
+ Set or unset ``<variable>`` in the current function or directory scope:
+
+ * If at least one ``<value>...`` is given, set the variable to that value.
+ * If no value is given, unset the variable. This is equivalent to
+ :command:`unset(<variable>) <unset>`.
If the ``PARENT_SCOPE`` option is given the variable will be set in
the scope above the current scope. Each new directory or :command:`function`
@@ -34,6 +37,8 @@ Set Normal Variable
can be used as an alternate method to the :command:`set(PARENT_SCOPE)`
and :command:`unset(PARENT_SCOPE)` commands to update the parent scope.
+.. include:: UNSET_NOTE.txt
+
Set Cache Entry
^^^^^^^^^^^^^^^
diff --git a/Help/command/unset.rst b/Help/command/unset.rst
index 1cd1398..522be89 100644
--- a/Help/command/unset.rst
+++ b/Help/command/unset.rst
@@ -12,19 +12,14 @@ Unset Normal Variable or Cache Entry
Removes a normal variable from the current scope, causing it
to become undefined. If ``CACHE`` is present, then a cache variable
-is removed instead of a normal variable. Note that when evaluating
-:ref:`Variable References` of the form ``${VAR}``, CMake first searches
-for a normal variable with that name. If no such normal variable exists,
-CMake will then search for a cache entry with that name. Because of this
-unsetting a normal variable can expose a cache variable that was previously
-hidden. To force a variable reference of the form ``${VAR}`` to return an
-empty string, use ``set(<variable> "")``, which clears the normal variable
-but leaves it defined.
+is removed instead of a normal variable.
If ``PARENT_SCOPE`` is present then the variable is removed from the scope
above the current scope. See the same option in the :command:`set` command
for further details.
+.. include:: UNSET_NOTE.txt
+
Unset Environment Variable
^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Modules/Compiler/IBMClang.cmake b/Modules/Compiler/IBMClang.cmake
index a9d760f..169a0f0 100644
--- a/Modules/Compiler/IBMClang.cmake
+++ b/Modules/Compiler/IBMClang.cmake
@@ -43,7 +43,10 @@ macro(__compiler_ibmclang lang)
set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES)
set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES)
- set(_CMAKE_LTO_THIN TRUE)
+ # Thin LTO is not yet supported on AIX.
+ if(NOT (CMAKE_SYSTEM_NAME STREQUAL "AIX"))
+ set(_CMAKE_LTO_THIN TRUE)
+ endif()
if(_CMAKE_LTO_THIN)
set(CMAKE_${lang}_COMPILE_OPTIONS_IPO "-flto=thin")
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index e29df7f..c6a4f38 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -1,7 +1,7 @@
# CMake version number components.
set(CMake_VERSION_MAJOR 3)
set(CMake_VERSION_MINOR 26)
-set(CMake_VERSION_PATCH 20230324)
+set(CMake_VERSION_PATCH 20230327)
#set(CMake_VERSION_RC 0)
set(CMake_VERSION_IS_DIRTY 0)
diff --git a/Source/cmBinUtilsWindowsPELinker.cxx b/Source/cmBinUtilsWindowsPELinker.cxx
index 79e39e9..918f563 100644
--- a/Source/cmBinUtilsWindowsPELinker.cxx
+++ b/Source/cmBinUtilsWindowsPELinker.cxx
@@ -3,7 +3,10 @@
#include "cmBinUtilsWindowsPELinker.h"
+#include <algorithm>
+#include <iterator>
#include <sstream>
+#include <utility>
#include <vector>
#include <cm/memory>
@@ -16,6 +19,27 @@
#ifdef _WIN32
# include <windows.h>
+
+# include "cmsys/Encoding.hxx"
+#endif
+
+#ifdef _WIN32
+namespace {
+
+void ReplaceWithActualNameCasing(std::string& path)
+{
+ WIN32_FIND_DATAW findData;
+ HANDLE hFind = ::FindFirstFileW(
+ cmsys::Encoding::ToWindowsExtendedPath(path).c_str(), &findData);
+
+ if (hFind != INVALID_HANDLE_VALUE) {
+ auto onDiskName = cmsys::Encoding::ToNarrow(findData.cFileName);
+ ::FindClose(hFind);
+ path.replace(path.end() - onDiskName.size(), path.end(), onDiskName);
+ }
+}
+
+}
#endif
cmBinUtilsWindowsPELinker::cmBinUtilsWindowsPELinker(
@@ -60,29 +84,47 @@ bool cmBinUtilsWindowsPELinker::ScanDependencies(
if (!this->Tool->GetFileInfo(file, needed)) {
return false;
}
- for (auto& n : needed) {
- n = cmSystemTools::LowerCase(n);
- }
+
+ struct WinPEDependency
+ {
+ WinPEDependency(std::string o)
+ : Original(std::move(o))
+ , LowerCase(cmSystemTools::LowerCase(Original))
+ {
+ }
+ std::string const Original;
+ std::string const LowerCase;
+ };
+
+ std::vector<WinPEDependency> depends;
+ depends.reserve(needed.size());
+ std::move(needed.begin(), needed.end(), std::back_inserter(depends));
std::string origin = cmSystemTools::GetFilenamePath(file);
- for (auto const& lib : needed) {
- if (!this->Archive->IsPreExcluded(lib)) {
+ for (auto const& lib : depends) {
+ if (!this->Archive->IsPreExcluded(lib.LowerCase)) {
std::string path;
bool resolved = false;
- if (!this->ResolveDependency(lib, origin, path, resolved)) {
+ if (!this->ResolveDependency(lib.LowerCase, origin, path, resolved)) {
return false;
}
if (resolved) {
if (!this->Archive->IsPostExcluded(path)) {
+#ifdef _WIN32
+ ReplaceWithActualNameCasing(path);
+#else
+ path.replace(path.end() - lib.Original.size(), path.end(),
+ lib.Original);
+#endif
bool unique;
- this->Archive->AddResolvedPath(lib, path, unique);
+ this->Archive->AddResolvedPath(lib.Original, path, unique);
if (unique &&
!this->ScanDependencies(path, cmStateEnums::SHARED_LIBRARY)) {
return false;
}
}
} else {
- this->Archive->AddUnresolvedPath(lib);
+ this->Archive->AddUnresolvedPath(lib.Original);
}
}
}
diff --git a/Source/cmCommonTargetGenerator.cxx b/Source/cmCommonTargetGenerator.cxx
index 5601bf2..f6fdd48 100644
--- a/Source/cmCommonTargetGenerator.cxx
+++ b/Source/cmCommonTargetGenerator.cxx
@@ -165,6 +165,7 @@ std::vector<std::string> cmCommonTargetGenerator::GetLinkedTargetDirectories(
{
std::vector<std::string> dirs;
std::set<cmGeneratorTarget const*> emitted;
+ cmGlobalCommonGenerator* const gg = this->GlobalCommonGenerator;
if (cmComputeLinkInformation* cli =
this->GeneratorTarget->GetLinkInformation(config)) {
cmComputeLinkInformation::ItemVector const& items = cli->GetItems();
@@ -172,6 +173,8 @@ std::vector<std::string> cmCommonTargetGenerator::GetLinkedTargetDirectories(
cmGeneratorTarget const* linkee = item.Target;
if (linkee &&
!linkee->IsImported()
+ // Skip targets that build after this one in a static lib cycle.
+ && gg->TargetOrderIndexLess(linkee, this->GeneratorTarget)
// We can ignore the INTERFACE_LIBRARY items because
// Target->GetLinkInformation already processed their
// link interface and they don't have any output themselves.
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 7ed68d6..0e9f78e 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -1727,8 +1727,7 @@ cmGlobalGenerator::GetLocalGeneratorTargetsInOrder(cmLocalGenerator* lg) const
cm::append(gts, lg->GetGeneratorTargets());
std::sort(gts.begin(), gts.end(),
[this](cmGeneratorTarget const* l, cmGeneratorTarget const* r) {
- return this->TargetOrderIndex.at(l) <
- this->TargetOrderIndex.at(r);
+ return this->TargetOrderIndexLess(l, r);
});
return gts;
}
@@ -3068,6 +3067,12 @@ cmGlobalGenerator::GetTargetDirectDepends(cmGeneratorTarget const* target)
return this->TargetDependencies[target];
}
+bool cmGlobalGenerator::TargetOrderIndexLess(cmGeneratorTarget const* l,
+ cmGeneratorTarget const* r) const
+{
+ return this->TargetOrderIndex.at(l) < this->TargetOrderIndex.at(r);
+}
+
bool cmGlobalGenerator::IsReservedTarget(std::string const& name)
{
// The following is a list of targets reserved
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 7de8215..4d321b5 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -479,6 +479,11 @@ public:
TargetDependSet const& GetTargetDirectDepends(
const cmGeneratorTarget* target);
+ // Return true if target 'l' occurs before 'r' in a global ordering
+ // of targets that respects inter-target dependencies.
+ bool TargetOrderIndexLess(cmGeneratorTarget const* l,
+ cmGeneratorTarget const* r) const;
+
const std::map<std::string, std::vector<cmLocalGenerator*>>& GetProjectMap()
const
{
diff --git a/Tests/FortranModules/Executable/CMakeLists.txt b/Tests/FortranModules/Executable/CMakeLists.txt
index f31a3e6..182e23a 100644
--- a/Tests/FortranModules/Executable/CMakeLists.txt
+++ b/Tests/FortranModules/Executable/CMakeLists.txt
@@ -6,3 +6,4 @@ add_executable(subdir_exe2 main.f90)
target_link_libraries(subdir_exe2 subdir_mods subdir_mods2)
add_dependencies(subdir_exe2 ExternalTarget)
target_link_libraries(subdir_exe2 myext)
+target_link_libraries(subdir_exe2 cycleA)
diff --git a/Tests/FortranModules/Executable/main.f90 b/Tests/FortranModules/Executable/main.f90
index 640259c..218eee6 100644
--- a/Tests/FortranModules/Executable/main.f90
+++ b/Tests/FortranModules/Executable/main.f90
@@ -3,5 +3,9 @@ PROGRAM MAINF90
USE libraryModuleB
USE subdirModuleA
USE externalMod
+ USE libraryCycleA
+ USE libraryCycleB
CALL printExtModGreeting
+ CALL libraryCycleA2
+ CALL libraryCycleB2
END PROGRAM MAINF90
diff --git a/Tests/FortranModules/Library/CMakeLists.txt b/Tests/FortranModules/Library/CMakeLists.txt
index 17438ca..e525208 100644
--- a/Tests/FortranModules/Library/CMakeLists.txt
+++ b/Tests/FortranModules/Library/CMakeLists.txt
@@ -3,9 +3,14 @@ add_library(subdir_mods a.f90 b.f90)
add_executable(subdir_exe main.f90)
target_link_libraries(subdir_exe subdir_mods)
+add_library(cycleA STATIC cycleA1.f90 cycleA2.f90)
+add_library(cycleB STATIC cycleB1.f90 cycleB2.f90)
+target_link_libraries(cycleA PRIVATE cycleB)
+target_link_libraries(cycleB PRIVATE cycleA)
+
# Test module output directory if available.
if(CMAKE_Fortran_MODDIR_FLAG)
- set_target_properties(subdir_mods PROPERTIES
+ set_target_properties(subdir_mods cycleA cycleB PROPERTIES
Fortran_MODULE_DIRECTORY modules
)
endif()
diff --git a/Tests/FortranModules/Library/cycleA1.f90 b/Tests/FortranModules/Library/cycleA1.f90
new file mode 100644
index 0000000..cceebe2
--- /dev/null
+++ b/Tests/FortranModules/Library/cycleA1.f90
@@ -0,0 +1,3 @@
+subroutine cycleA1
+use libraryCycleA
+end subroutine
diff --git a/Tests/FortranModules/Library/cycleA2.f90 b/Tests/FortranModules/Library/cycleA2.f90
new file mode 100644
index 0000000..a2e432e
--- /dev/null
+++ b/Tests/FortranModules/Library/cycleA2.f90
@@ -0,0 +1,5 @@
+module libraryCycleA
+contains
+ subroutine libraryCycleA2
+ end subroutine
+end module
diff --git a/Tests/FortranModules/Library/cycleB1.f90 b/Tests/FortranModules/Library/cycleB1.f90
new file mode 100644
index 0000000..d6680fa
--- /dev/null
+++ b/Tests/FortranModules/Library/cycleB1.f90
@@ -0,0 +1,3 @@
+subroutine cycleB1
+use libraryCycleB
+end subroutine
diff --git a/Tests/FortranModules/Library/cycleB2.f90 b/Tests/FortranModules/Library/cycleB2.f90
new file mode 100644
index 0000000..07c774e
--- /dev/null
+++ b/Tests/FortranModules/Library/cycleB2.f90
@@ -0,0 +1,5 @@
+module libraryCycleB
+contains
+ subroutine libraryCycleB2
+ end subroutine
+end module
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 0ebb720..080740c 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -784,6 +784,7 @@ if(DEFINED CMake_COMPILER_FORCES_NEW_DTAGS)
endif()
add_RunCMake_test(file-GET_RUNTIME_DEPENDENCIES
-DCMake_INSTALL_NAME_TOOL_BUG=${CMake_INSTALL_NAME_TOOL_BUG}
+ -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
)
add_RunCMake_test(CPackCommandLine)
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/RunCMakeTest.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/RunCMakeTest.cmake
index 43b406b..a68607e 100644
--- a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/RunCMakeTest.cmake
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/RunCMakeTest.cmake
@@ -9,6 +9,10 @@ function(run_install_test case)
run_cmake_command(${case}-build ${CMAKE_COMMAND} --build . --config Debug)
# Check "all" components.
set(CMAKE_INSTALL_PREFIX ${RunCMake_TEST_BINARY_DIR}/root-all)
+ set(maybe_stderr "${case}-all-stderr-${CMAKE_C_COMPILER_ID}.txt")
+ if(EXISTS "${RunCMake_SOURCE_DIR}/${maybe_stderr}")
+ set(RunCMake-stderr-file "${maybe_stderr}")
+ endif()
run_cmake_command(${case}-all ${CMAKE_COMMAND} --install . --prefix ${CMAKE_INSTALL_PREFIX} --config Debug)
endfunction()
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-all-check.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-all-check.cmake
index cb0e534..10b7b82 100644
--- a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-all-check.cmake
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-all-check.cmake
@@ -1,19 +1,29 @@
+if(CMAKE_C_COMPILER_ID STREQUAL "Borland")
+ # Borland upper-cases dll names referenced in import libraries.
+ set(conflict_dll [[CONFLICT\.DLL]])
+ set(unresolved_dll [[UNRESOLVED\.DLL]])
+else()
+ set(conflict_dll [[conflict\.dll]])
+ set(unresolved_dll [[unresolved\.dll]])
+endif()
+
set(_check
[=[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/\.conflict/\.\./(lib)?libdir\.dll]=]
[=[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/\.search/(lib)?search\.dll]=]
+ [=[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/(lib)?MixedCase\.dll]=]
[=[[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/(lib)?testlib\.dll]=]
)
check_contents(deps/deps1.txt "^${_check}$")
check_contents(deps/deps2.txt "^${_check}$")
check_contents(deps/deps3.txt "^${_check}$")
set(_check
- [=[(lib)?unresolved\.dll]=]
+ "(lib)?${unresolved_dll}"
)
check_contents(deps/udeps1.txt "^${_check}$")
check_contents(deps/udeps2.txt "^${_check}$")
check_contents(deps/udeps3.txt "^${_check}$")
set(_check
- "^(lib)?conflict\\.dll:[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/\\.conflict/(lib)?conflict\\.dll;[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/(lib)?conflict\\.dll\n$"
+ "^(lib)?${conflict_dll}:[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/\\.conflict/(lib)?conflict\\.dll;[^;]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-build/root-all/bin/(lib)?conflict\\.dll\n$"
)
check_contents(deps/cdeps1.txt "${_check}")
check_contents(deps/cdeps2.txt "${_check}")
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-all-stderr-Borland.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-all-stderr-Borland.txt
new file mode 100644
index 0000000..607e4b8
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-all-stderr-Borland.txt
@@ -0,0 +1,7 @@
+^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
+ file Multiple conflicting paths found for PATH\.DLL:
+
+ [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-build/root-all/lib/test1/path\.dll
+ [^
+]*/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-conflict-build/root-all/lib/test2/path\.dll$
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-unresolved-all-stderr-Borland.txt b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-unresolved-all-stderr-Borland.txt
new file mode 100644
index 0000000..fea1083
--- /dev/null
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows-unresolved-all-stderr-Borland.txt
@@ -0,0 +1,4 @@
+^CMake Error at cmake_install\.cmake:[0-9]+ \(file\):
+ file Could not resolve runtime dependencies:
+
+ UNRESOLVED\.DLL$
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows.cmake
index 9160ce5..aad9077 100644
--- a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows.cmake
+++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/windows.cmake
@@ -8,6 +8,7 @@ set(testlib_names
search
unresolved
conflict
+ MixedCase
)
file(REMOVE "${CMAKE_BINARY_DIR}/testlib.c")
@@ -34,7 +35,7 @@ file(WRITE "${CMAKE_BINARY_DIR}/testlib_noconflict.c" "__declspec(dllimport) ext
add_library(testlib_noconflict SHARED "${CMAKE_BINARY_DIR}/testlib_noconflict.c")
target_link_libraries(testlib_noconflict PRIVATE libdir)
-install(TARGETS testlib libdir_postexcluded libdir conflict testlib_noconflict DESTINATION bin)
+install(TARGETS testlib libdir_postexcluded libdir conflict MixedCase testlib_noconflict DESTINATION bin)
install(TARGETS libdir search_postexcluded search DESTINATION bin/.search) # Prefixing with "." ensures it is the first item after list(SORT)
install(TARGETS testlib_conflict conflict DESTINATION bin/.conflict)
@@ -61,6 +62,7 @@ install(CODE [[
"^(lib)?search\\.dll$"
"^(lib)?unresolved\\.dll$"
"^(lib)?conflict\\.dll$"
+ "^(lib)?mixedcase\\.dll$"
"^kernel32\\.dll$"
PRE_EXCLUDE_REGEXES ".*"
POST_INCLUDE_REGEXES
@@ -68,6 +70,7 @@ install(CODE [[
"^.*/(lib)?libdir\\.dll$"
"^.*/(lib)?search\\.dll$"
"^.*/(lib)?conflict\\.dll$"
+ "^.*/(lib)?mixedcase\\.dll$"
POST_EXCLUDE_REGEXES ".*"
DIRECTORIES
"${CMAKE_INSTALL_PREFIX}/bin/.search"