mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 10:50:16 -06:00
MinGW: Search for packages in standard MSYSTEM environment prefixes
MSYS2 and similar MinGW/MSYS distributions define development
environments with a `MSYSTEM` environment variable. Each such
environment has a documented installation prefix for its packages,
often provided by a `MSYSTEM_PREFIX` environment variable.
Since commit 84a25fc263 (cmake_host_system_information: Add
MSYSTEM_PREFIX query, 2023-09-08) we can look up this prefix.
Add `$MSYSTEM_PREFIX/local` and `$MSYSTEM_PREFIX` to our system search
prefixes when targeting MinGW under `MSYSTEM` environments. This is
their equivalent to `/usr/local` and `/usr`, which we search by default
on UNIX systems.
Issue: #24216
This commit is contained in:
6
Help/release/dev/mingw-search-prefixes.rst
Normal file
6
Help/release/dev/mingw-search-prefixes.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
mingw-search-prefixes
|
||||
---------------------
|
||||
|
||||
* When using MinGW tools in a ``MSYSTEM`` environment on Windows,
|
||||
the ``$MSYSTEM_PREFIX/local`` and ``$MSYSTEM_PREFIX`` prefixes are
|
||||
now added to :variable:`CMAKE_SYSTEM_PREFIX_PATH`.
|
||||
@@ -38,6 +38,12 @@ OpenBSD:
|
||||
Unix:
|
||||
* ``ENV{CONDA_PREFIX}`` when using a conda compiler
|
||||
|
||||
MSYSTEM environment with MinGW toolchain:
|
||||
.. versionadded:: 3.28
|
||||
|
||||
* ``ENV{MSYSTEM_PREFIX}/local``
|
||||
* ``ENV{MSYSTEM_PREFIX}``
|
||||
|
||||
Windows:
|
||||
* ``ENV{ProgramW6432}``
|
||||
* ``ENV{ProgramFiles}``
|
||||
|
||||
@@ -10,6 +10,25 @@ set(__WINDOWS_GNU 1)
|
||||
|
||||
set(MINGW 1)
|
||||
|
||||
# On Windows hosts, in MSYSTEM environments, search standard prefixes.
|
||||
if(CMAKE_HOST_WIN32)
|
||||
# Bootstrap CMake does not have cmake_host_system_information.
|
||||
if(COMMAND cmake_host_system_information)
|
||||
cmake_host_system_information(RESULT _MSYSTEM_PREFIX QUERY MSYSTEM_PREFIX)
|
||||
elseif(IS_DIRECTORY "$ENV{MSYSTEM_PREFIX}")
|
||||
set(_MSYSTEM_PREFIX "$ENV{MSYSTEM_PREFIX}")
|
||||
endif()
|
||||
|
||||
# Search this MSYSTEM environment's equivalent to /usr/local and /usr.
|
||||
if(_MSYSTEM_PREFIX)
|
||||
list(PREPEND CMAKE_SYSTEM_PREFIX_PATH "${_MSYSTEM_PREFIX}")
|
||||
if(IS_DIRECTORY "${_MSYSTEM_PREFIX}/local")
|
||||
list(PREPEND CMAKE_SYSTEM_PREFIX_PATH "${_MSYSTEM_PREFIX}/local")
|
||||
endif()
|
||||
endif()
|
||||
unset(_MSYSTEM_PREFIX)
|
||||
endif()
|
||||
|
||||
set(CMAKE_IMPORT_LIBRARY_PREFIX "lib")
|
||||
set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
|
||||
set(CMAKE_SHARED_MODULE_PREFIX "lib")
|
||||
|
||||
@@ -518,10 +518,10 @@ foreach(var
|
||||
endforeach()
|
||||
add_RunCMake_test(file-DOWNLOAD)
|
||||
add_RunCMake_test(file-RPATH -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME})
|
||||
add_RunCMake_test(find_file)
|
||||
add_RunCMake_test(find_library -DCYGWIN=${CYGWIN} -DMSYS=${MSYS})
|
||||
add_RunCMake_test(find_package -DMSYS=${MSYS})
|
||||
add_RunCMake_test(find_path)
|
||||
add_RunCMake_test(find_file -DMINGW=${MINGW})
|
||||
add_RunCMake_test(find_library -DMINGW=${MINGW} -DCYGWIN=${CYGWIN} -DMSYS=${MSYS})
|
||||
add_RunCMake_test(find_package -DMINGW=${MINGW} -DMSYS=${MSYS})
|
||||
add_RunCMake_test(find_path -DMINGW=${MINGW})
|
||||
add_RunCMake_test(find_program -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME})
|
||||
add_RunCMake_test(foreach)
|
||||
add_RunCMake_test(function)
|
||||
|
||||
1
Tests/RunCMake/find_file/MSYSTEM_PREFIX-stdout.txt
Normal file
1
Tests/RunCMake/find_file/MSYSTEM_PREFIX-stdout.txt
Normal file
@@ -0,0 +1 @@
|
||||
-- MSYSTEM_PREFIX_H='[^']*/Tests/RunCMake/find_file/MSYSTEM_PREFIX/include/msystem_prefix.h'
|
||||
5
Tests/RunCMake/find_file/MSYSTEM_PREFIX.cmake
Normal file
5
Tests/RunCMake/find_file/MSYSTEM_PREFIX.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
set(ENV{MSYSTEM} "FAKEMSYS")
|
||||
set(ENV{MSYSTEM_PREFIX} "${CMAKE_CURRENT_LIST_DIR}/MSYSTEM_PREFIX")
|
||||
enable_language(C)
|
||||
find_file(MSYSTEM_PREFIX_H NAMES msystem_prefix.h)
|
||||
message(STATUS "MSYSTEM_PREFIX_H='${MSYSTEM_PREFIX_H}'")
|
||||
@@ -12,6 +12,10 @@ run_cmake(VALIDATOR-undefined-function)
|
||||
run_cmake(VALIDATOR-specify-macro)
|
||||
run_cmake(VALIDATOR)
|
||||
|
||||
if(CMAKE_HOST_WIN32 AND MINGW)
|
||||
run_cmake(MSYSTEM_PREFIX)
|
||||
endif()
|
||||
|
||||
run_cmake_with_options(FromPATHEnvDebugVar --debug-find-var=PrefixInPATH_File)
|
||||
|
||||
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
||||
|
||||
1
Tests/RunCMake/find_library/MSYSTEM_PREFIX-stdout.txt
Normal file
1
Tests/RunCMake/find_library/MSYSTEM_PREFIX-stdout.txt
Normal file
@@ -0,0 +1 @@
|
||||
-- MSYSTEM_PREFIX_LIB='[^']*/Tests/RunCMake/find_library/MSYSTEM_PREFIX/lib/libmsystem_prefix.a'
|
||||
5
Tests/RunCMake/find_library/MSYSTEM_PREFIX.cmake
Normal file
5
Tests/RunCMake/find_library/MSYSTEM_PREFIX.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
set(ENV{MSYSTEM} "FAKEMSYS")
|
||||
set(ENV{MSYSTEM_PREFIX} "${CMAKE_CURRENT_LIST_DIR}/MSYSTEM_PREFIX")
|
||||
enable_language(C)
|
||||
find_library(MSYSTEM_PREFIX_LIB NAMES msystem_prefix)
|
||||
message(STATUS "MSYSTEM_PREFIX_LIB='${MSYSTEM_PREFIX_LIB}'")
|
||||
@@ -20,6 +20,10 @@ run_cmake(VALIDATOR-undefined-function)
|
||||
run_cmake(VALIDATOR-specify-macro)
|
||||
run_cmake(VALIDATOR)
|
||||
|
||||
if(CMAKE_HOST_WIN32 AND MINGW)
|
||||
run_cmake(MSYSTEM_PREFIX)
|
||||
endif()
|
||||
|
||||
run_cmake_script(FromScriptMode "-DTEMP_DIR=${RunCMake_BINARY_DIR}/FromScriptMode-temp")
|
||||
|
||||
run_cmake_with_options(FromPATHEnvDebugVar --debug-find-var=CREATED_LIBRARY)
|
||||
|
||||
1
Tests/RunCMake/find_package/MSYSTEM_PREFIX-stdout.txt
Normal file
1
Tests/RunCMake/find_package/MSYSTEM_PREFIX-stdout.txt
Normal file
@@ -0,0 +1 @@
|
||||
-- MsysPfx_DIR='[^']*/Tests/RunCMake/find_package/MSYSTEM_PREFIX'
|
||||
5
Tests/RunCMake/find_package/MSYSTEM_PREFIX.cmake
Normal file
5
Tests/RunCMake/find_package/MSYSTEM_PREFIX.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
set(ENV{MSYSTEM} "FAKEMSYS")
|
||||
set(ENV{MSYSTEM_PREFIX} "${CMAKE_CURRENT_LIST_DIR}/MSYSTEM_PREFIX")
|
||||
enable_language(C)
|
||||
find_package(MsysPfx QUIET)
|
||||
message(STATUS "MsysPfx_DIR='${MsysPfx_DIR}'")
|
||||
@@ -72,6 +72,10 @@ run_cmake(REGISTRY_VIEW-no-view)
|
||||
run_cmake(REGISTRY_VIEW-wrong-view)
|
||||
run_cmake(REGISTRY_VIEW-propagated)
|
||||
|
||||
if(CMAKE_HOST_WIN32 AND MINGW)
|
||||
run_cmake(MSYSTEM_PREFIX)
|
||||
endif()
|
||||
|
||||
if(CMAKE_HOST_WIN32)
|
||||
run_cmake(CMP0144-WARN-CaseInsensitive)
|
||||
run_cmake(CMP0144-OLD-CaseInsensitive)
|
||||
|
||||
1
Tests/RunCMake/find_path/MSYSTEM_PREFIX-stdout.txt
Normal file
1
Tests/RunCMake/find_path/MSYSTEM_PREFIX-stdout.txt
Normal file
@@ -0,0 +1 @@
|
||||
-- MSYSTEM_PREFIX_INCLUDE_DIR='[^']*/Tests/RunCMake/find_path/MSYSTEM_PREFIX/include'
|
||||
5
Tests/RunCMake/find_path/MSYSTEM_PREFIX.cmake
Normal file
5
Tests/RunCMake/find_path/MSYSTEM_PREFIX.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
set(ENV{MSYSTEM} "FAKEMSYS")
|
||||
set(ENV{MSYSTEM_PREFIX} "${CMAKE_CURRENT_LIST_DIR}/MSYSTEM_PREFIX")
|
||||
enable_language(C)
|
||||
find_path(MSYSTEM_PREFIX_INCLUDE_DIR NAMES msystem_prefix.h)
|
||||
message(STATUS "MSYSTEM_PREFIX_INCLUDE_DIR='${MSYSTEM_PREFIX_INCLUDE_DIR}'")
|
||||
@@ -12,6 +12,10 @@ run_cmake(VALIDATOR-undefined-function)
|
||||
run_cmake(VALIDATOR-specify-macro)
|
||||
run_cmake(VALIDATOR)
|
||||
|
||||
if(CMAKE_HOST_WIN32 AND MINGW)
|
||||
run_cmake(MSYSTEM_PREFIX)
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
run_cmake(FrameworksWithSubdirs)
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user