09b2f1c3f5
In Modules/Platform/WindowsPaths.cmake our previously recorded environment variable combinations no longer seem to be correct. For example, a 64-bit cmake binary may see ProgramW6432 in the environment and end up not considering the "ProgramFiles(x86)" variable. Instead check for all possible environment variables in the preferred order and then remove duplicates. Reported-by: Shawn Waldon <shawn.waldon@kitware.com>
103 lines
3.3 KiB
CMake
103 lines
3.3 KiB
CMake
|
|
#=============================================================================
|
|
# Copyright 2006-2009 Kitware, Inc.
|
|
#
|
|
# Distributed under the OSI-approved BSD License (the "License");
|
|
# see accompanying file Copyright.txt for details.
|
|
#
|
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
# See the License for more information.
|
|
#=============================================================================
|
|
# (To distribute this file outside of CMake, substitute the full
|
|
# License text for the above reference.)
|
|
|
|
# Block multiple inclusion because "CMakeCInformation.cmake" includes
|
|
# "Platform/${CMAKE_SYSTEM_NAME}" even though the generic module
|
|
# "CMakeSystemSpecificInformation.cmake" already included it.
|
|
# The extra inclusion is a work-around documented next to the include()
|
|
# call, so this can be removed when the work-around is removed.
|
|
if(__WINDOWS_PATHS_INCLUDED)
|
|
return()
|
|
endif()
|
|
set(__WINDOWS_PATHS_INCLUDED 1)
|
|
|
|
# Add the program-files folder(s) to the list of installation
|
|
# prefixes.
|
|
#
|
|
# Windows 64-bit Binary:
|
|
# ENV{ProgramFiles(x86)} = [C:\Program Files (x86)]
|
|
# ENV{ProgramFiles} = [C:\Program Files]
|
|
# ENV{ProgramW6432} = [C:\Program Files] or <not set>
|
|
#
|
|
# Windows 32-bit Binary on 64-bit Windows:
|
|
# ENV{ProgramFiles(x86)} = [C:\Program Files (x86)]
|
|
# ENV{ProgramFiles} = [C:\Program Files (x86)]
|
|
# ENV{ProgramW6432} = [C:\Program Files]
|
|
set(_programfiles "")
|
|
foreach(v "ProgramW6432" "ProgramFiles" "ProgramFiles(x86)")
|
|
if(DEFINED "ENV{${v}}")
|
|
file(TO_CMAKE_PATH "$ENV{${v}}" _env_programfiles)
|
|
list(APPEND _programfiles "${_env_programfiles}")
|
|
unset(_env_programfiles)
|
|
endif()
|
|
endforeach()
|
|
if(DEFINED "ENV{SystemDrive}")
|
|
foreach(d "Program Files" "Program Files (x86)")
|
|
if(EXISTS "$ENV{SystemDrive}/${d}")
|
|
list(APPEND _programfiles "$ENV{SystemDrive}/${d}")
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
if(_programfiles)
|
|
list(REMOVE_DUPLICATES _programfiles)
|
|
list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${_programfiles})
|
|
endif()
|
|
unset(_programfiles)
|
|
|
|
# Add the CMake install location.
|
|
get_filename_component(_CMAKE_INSTALL_DIR "${CMAKE_ROOT}" PATH)
|
|
get_filename_component(_CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" PATH)
|
|
list(APPEND CMAKE_SYSTEM_PREFIX_PATH "${_CMAKE_INSTALL_DIR}")
|
|
|
|
if (NOT CMAKE_FIND_NO_INSTALL_PREFIX)
|
|
# Add other locations.
|
|
list(APPEND CMAKE_SYSTEM_PREFIX_PATH
|
|
# Project install destination.
|
|
"${CMAKE_INSTALL_PREFIX}"
|
|
)
|
|
if (CMAKE_STAGING_PREFIX)
|
|
list(APPEND CMAKE_SYSTEM_PREFIX_PATH
|
|
# User-supplied staging prefix.
|
|
"${CMAKE_STAGING_PREFIX}"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(CMAKE_CROSSCOMPILING AND NOT CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
|
|
# MinGW (useful when cross compiling from linux with CMAKE_FIND_ROOT_PATH set)
|
|
list(APPEND CMAKE_SYSTEM_PREFIX_PATH /)
|
|
endif()
|
|
|
|
list(APPEND CMAKE_SYSTEM_INCLUDE_PATH
|
|
)
|
|
|
|
# mingw can also link against dlls which can also be in /bin, so list this too
|
|
if (NOT CMAKE_FIND_NO_INSTALL_PREFIX)
|
|
list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
|
|
"${CMAKE_INSTALL_PREFIX}/bin"
|
|
)
|
|
if (CMAKE_STAGING_PREFIX)
|
|
list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
|
|
"${CMAKE_STAGING_PREFIX}/bin"
|
|
)
|
|
endif()
|
|
endif()
|
|
list(APPEND CMAKE_SYSTEM_LIBRARY_PATH
|
|
"${_CMAKE_INSTALL_DIR}/bin"
|
|
/bin
|
|
)
|
|
|
|
list(APPEND CMAKE_SYSTEM_PROGRAM_PATH
|
|
)
|