Files
gnss-sdr/cmake/Modules/DetectMacOSVersion.cmake
T

201 lines
7.3 KiB
CMake

# GNSS-SDR is a Global Navigation Satellite System software-defined receiver.
# This file is part of GNSS-SDR.
#
# SPDX-FileCopyrightText: 2011-2026 C. Fernandez-Prades cfernandez(at)cttc.es
# SPDX-License-Identifier: BSD-3-Clause
# Output variables:
# MACOS_DISTRIBUTION - Human-readable platform string
# (e.g. "macOS Sequoia 15.4 (arm64)")
# MACOS_PACKAGES_PREFIX - Base install prefix of the detected package
# manager, or empty string if none found
# MACPORTS_EXECUTABLE - Full path to the MacPorts 'port' binary,
# if MacPorts is present
# MACPORTS_PREFIX - MacPorts installation root
# MACPORTS_VERSION - MacPorts version string (e.g. "2.9.3")
# HOMEBREW_EXECUTABLE - Full path to the Homebrew 'brew' binary,
# if Homebrew is present
# HOMEBREW_PREFIX - Homebrew installation root
# HOMEBREW_VERSION - Homebrew version string (e.g. "4.3.0")
execute_process(
COMMAND uname -r
OUTPUT_VARIABLE DARWIN_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX MATCH "^[0-9]+" DARWIN_VERSION "${DARWIN_VERSION}")
if(NOT "${DARWIN_VERSION}" STREQUAL "" AND
"${DARWIN_VERSION}" VERSION_GREATER "19")
execute_process(
COMMAND sw_vers -productVersion
RESULT_VARIABLE MACOS_VERSION_RESULT
OUTPUT_VARIABLE MACOS_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(MACOS_NAME "")
set(MACOS_LICENSE_FILE
"/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf"
)
if(EXISTS "${MACOS_LICENSE_FILE}")
execute_process(
COMMAND awk "/SOFTWARE LICENSE AGREEMENT FOR macOS/" "${MACOS_LICENSE_FILE}"
RESULT_VARIABLE MACOS_LICENSE_RESULT
OUTPUT_VARIABLE MACOS_LICENSE_LINE
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if("${MACOS_LICENSE_RESULT}" STREQUAL "0" AND
NOT "${MACOS_LICENSE_LINE}" STREQUAL "")
string(REGEX MATCH
"macOS[^\n\r}\\\\]*"
MACOS_NAME
"${MACOS_LICENSE_LINE}"
)
string(STRIP "${MACOS_NAME}" MACOS_NAME)
# The license heading may say, for instance, "macOS Tahoe 26".
# Keep the adaptive marketing name, but avoid printing the major
# version twice when appending sw_vers -productVersion below.
string(REGEX REPLACE
" [0-9]+$"
""
MACOS_NAME
"${MACOS_NAME}"
)
endif()
endif()
if("${MACOS_NAME}" STREQUAL "")
execute_process(
COMMAND sw_vers -productName
RESULT_VARIABLE MACOS_NAME_RESULT
OUTPUT_VARIABLE MACOS_NAME
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT "${MACOS_NAME_RESULT}" STREQUAL "0" OR
"${MACOS_NAME}" STREQUAL "")
set(MACOS_NAME "macOS")
endif()
endif()
if("${MACOS_VERSION_RESULT}" STREQUAL "0" AND
NOT "${MACOS_VERSION}" STREQUAL "")
set(MACOS_DISTRIBUTION
"${MACOS_NAME} ${MACOS_VERSION} (${CMAKE_SYSTEM_PROCESSOR})"
)
else()
set(MACOS_DISTRIBUTION
"${MACOS_NAME} (${CMAKE_SYSTEM_PROCESSOR})"
)
endif()
unset(MACOS_LICENSE_FILE)
unset(MACOS_LICENSE_LINE)
unset(MACOS_LICENSE_RESULT)
unset(MACOS_NAME_RESULT)
unset(MACOS_VERSION_RESULT)
elseif("${DARWIN_VERSION}" STREQUAL "19")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++17")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(MACOS_DISTRIBUTION "macOS Catalina 10.15")
elseif("${DARWIN_VERSION}" STREQUAL "18")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(MACOS_DISTRIBUTION "macOS Mojave 10.14")
elseif("${DARWIN_VERSION}" STREQUAL "17")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(MACOS_DISTRIBUTION "macOS High Sierra 10.13")
elseif("${DARWIN_VERSION}" STREQUAL "16")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(MACOS_DISTRIBUTION "macOS Sierra 10.12")
elseif("${DARWIN_VERSION}" STREQUAL "15")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(MACOS_DISTRIBUTION "Mac OS X 10.11 El Capitan")
elseif("${DARWIN_VERSION}" STREQUAL "14")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(MACOS_DISTRIBUTION "Mac OS X 10.10 Yosemite")
elseif("${DARWIN_VERSION}" STREQUAL "13")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION
"com.apple.compilers.llvm.clang.1_0"
)
set(MACOS_DISTRIBUTION "Mac OS X 10.9 Mavericks")
elseif("${DARWIN_VERSION}" STREQUAL "12")
set(MACOS_DISTRIBUTION "Mac OS X 10.8 Mountain Lion")
elseif("${DARWIN_VERSION}" STREQUAL "11")
set(MACOS_DISTRIBUTION "Mac OS X 10.7 Lion")
elseif("${DARWIN_VERSION}" STREQUAL "10")
set(MACOS_DISTRIBUTION "Mac OS X 10.6 Snow Leopard")
endif()
if(NOT MACOS_DISTRIBUTION)
set(MACOS_DISTRIBUTION "macOS (Unknown version)")
endif()
set(MACOS_PACKAGES_PREFIX "")
# Detect if MacPorts is installed on this system; if so, return base path
# and version.
find_program(MACPORTS_EXECUTABLE port)
if(MACPORTS_EXECUTABLE)
# "/opt/local/bin/port", so we get the parent directory.
get_filename_component(MACPORTS_PREFIX "${MACPORTS_EXECUTABLE}" DIRECTORY)
# "/opt/local/bin", so we get the parent directory.
get_filename_component(MACPORTS_PREFIX "${MACPORTS_PREFIX}" DIRECTORY)
execute_process(
COMMAND "${MACPORTS_EXECUTABLE}" version
RESULT_VARIABLE DETECT_MACPORTS_VERSION
OUTPUT_VARIABLE MACPORTS_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX MATCH
"[0-9]+\\.[0-9]+\\.[0-9]+"
MACPORTS_VERSION
"${MACPORTS_VERSION}"
)
set(MACOS_PACKAGES_PREFIX "${MACPORTS_PREFIX}")
endif()
# Detect if Homebrew is installed on this system; if so, return base path
# and version.
find_program(HOMEBREW_EXECUTABLE brew)
if(HOMEBREW_EXECUTABLE)
execute_process(
COMMAND "${HOMEBREW_EXECUTABLE}" --prefix
RESULT_VARIABLE DETECT_HOMEBREW
OUTPUT_VARIABLE HOMEBREW_PREFIX
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if("${DETECT_HOMEBREW}" STREQUAL "0")
execute_process(
COMMAND "${HOMEBREW_EXECUTABLE}" --version
RESULT_VARIABLE DETECT_HOMEBREW_VERSION
OUTPUT_VARIABLE HOMEBREW_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX MATCH
"[0-9]+\\.[0-9]+\\.[0-9]+"
HOMEBREW_VERSION
"${HOMEBREW_VERSION}"
)
set(MACOS_PACKAGES_PREFIX "${HOMEBREW_PREFIX}")
endif()
endif()