aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Astals Cid <aacid@kde.org>2022-02-16 14:06:56 +0100
committerAlbert Astals Cid <aacid@kde.org>2022-03-06 12:31:01 +0000
commit935c2abff7bf531a9758bf2fbdc6b0d8abe636e8 (patch)
tree78623e8ee04c5de68d123ab07d9f0d72daebe603
parentcc882b1cff773c4e97eccd29ca3dae8a5aeb4e52 (diff)
downloadextra-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.cmake3
-rw-r--r--kde-modules/KDEMetaInfoPlatformCheck.cmake71
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()