diff options
author | Albert Astals Cid <aacid@kde.org> | 2022-02-16 14:06:56 +0100 |
---|---|---|
committer | Albert Astals Cid <aacid@kde.org> | 2022-03-06 12:31:01 +0000 |
commit | 935c2abff7bf531a9758bf2fbdc6b0d8abe636e8 (patch) | |
tree | 78623e8ee04c5de68d123ab07d9f0d72daebe603 | |
parent | cc882b1cff773c4e97eccd29ca3dae8a5aeb4e52 (diff) | |
download | extra-cmake-modules-935c2abff7bf531a9758bf2fbdc6b0d8abe636e8.tar.gz extra-cmake-modules-935c2abff7bf531a9758bf2fbdc6b0d8abe636e8.tar.bz2 |
Check that you're building the framework in a supported platform
-rw-r--r-- | kde-modules/KDEFrameworkCompilerSettings.cmake | 3 | ||||
-rw-r--r-- | kde-modules/KDEMetaInfoPlatformCheck.cmake | 71 |
2 files changed, 74 insertions, 0 deletions
diff --git a/kde-modules/KDEFrameworkCompilerSettings.cmake b/kde-modules/KDEFrameworkCompilerSettings.cmake index de700d7e..3eb640ef 100644 --- a/kde-modules/KDEFrameworkCompilerSettings.cmake +++ b/kde-modules/KDEFrameworkCompilerSettings.cmake @@ -66,3 +66,6 @@ add_definitions( include(KDEClangFormat) file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c) kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) + +# add the metainfo platform check +include(KDEMetaInfoPlatformCheck) diff --git a/kde-modules/KDEMetaInfoPlatformCheck.cmake b/kde-modules/KDEMetaInfoPlatformCheck.cmake new file mode 100644 index 00000000..7efcdb7c --- /dev/null +++ b/kde-modules/KDEMetaInfoPlatformCheck.cmake @@ -0,0 +1,71 @@ +# SPDX-FileCopyrightText: 2022 Albert Astals Cid <aacid@kde.org> +# +# SPDX-License-Identifier: BSD-3-Clause + +#[=======================================================================[.rst: +KDEMetaInfoPlatformCheck +-------------------- + +By including this module there will be an automatic check between the supported +platforms listed in the metainfo.yaml file and the current platform +that is the target of the build + +If the current platform that is the target of the build is not supported +a cmake FATAL_ERROR will be issued + +The check can be ignored by setting KF_IGNORE_PLATFORM_CHECK to ON + +Since 5.93 +#]=======================================================================] + +option(KF_IGNORE_PLATFORM_CHECK "Ignore the supported platform check against metainfo.yaml" OFF) + +if (NOT "${KF_IGNORE_PLATFORM_CHECK}") + file(STRINGS metainfo.yaml MetaInfoContents) + set(_MetainfoParserInPlatforms false) + set(_MetainfoFoundSupportedPlatform false) + set(_MetainfoSupportedPlatforms "") + foreach(MetaInfoString IN LISTS MetaInfoContents) + if ("${MetaInfoString}" STREQUAL "platforms:") + set(_MetainfoParserInPlatforms true) + elseif(_MetainfoParserInPlatforms AND "${MetaInfoString}" MATCHES ".*name:[ \t\r\n]*(.*)") + list(APPEND _MetainfoSupportedPlatforms ${CMAKE_MATCH_1}) + if (${CMAKE_MATCH_1} STREQUAL "Linux") + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + set(_MetainfoFoundSupportedPlatform true) + endif() + elseif (${CMAKE_MATCH_1} STREQUAL "FreeBSD") + if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + set(_MetainfoFoundSupportedPlatform true) + endif() + elseif (${CMAKE_MATCH_1} STREQUAL "Windows") + if (WIN32) + set(_MetainfoFoundSupportedPlatform true) + endif() + elseif (${CMAKE_MATCH_1} STREQUAL "macOS") + if (CMAKE_SYSTEM_NAME MATCHES "Darwin") + set(_MetainfoFoundSupportedPlatform true) + endif() + elseif (${CMAKE_MATCH_1} STREQUAL "Android") + if (ANDROID) + set(_MetainfoFoundSupportedPlatform true) + endif() + elseif (${CMAKE_MATCH_1} STREQUAL "iOS") + if (IOS) + set(_MetainfoFoundSupportedPlatform true) + endif() + elseif (${CMAKE_MATCH_1} STREQUAL "All") + set(_MetainfoFoundSupportedPlatform true) + else() + list(POP_BACK _MetainfoSupportedPlatforms) + message(WARNING "Found platform not recognized by the metainfo platform parser: ${CMAKE_MATCH_1}") + endif() + elseif("${MetaInfoString}" MATCHES "^[A-Za-z0-9_]+:") + set(_MetainfoParserInPlatforms false) + endif() + endforeach() + + if (NOT _MetainfoFoundSupportedPlatform) + message(FATAL_ERROR "Your current platform '${CMAKE_SYSTEM_NAME}' is not supported. The list of supported platorms is '${_MetainfoSupportedPlatforms}'.If you think this is a mistake or you are working on enabling the platform please build with the KF_IGNORE_PLATFORM_CHECK variable set to true") + endif() +endif() |