openxr: update to 1.0.22

This commit is contained in:
مهدي شينون (Mehdi Chinoune)
2022-04-08 15:17:59 +01:00
committed by GitHub
parent 251bc530ae
commit 2bbc5f3059
2 changed files with 2 additions and 460 deletions

View File

@@ -1,452 +0,0 @@
From 66690965385fcc9f71fbb3caccfdeb123dfca688 Mon Sep 17 00:00:00 2001
From: Ryan Pavlik <ryan.pavlik@collabora.com>
Date: Fri, 13 Aug 2021 11:21:50 -0500
Subject: [PATCH 1/5] Split the filesystem conditionals into a separate header
to share with detection.
---
src/common/filesystem_utils.cpp | 35 +------------------------
src/common/stdfs_conditions.h | 45 +++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+), 34 deletions(-)
create mode 100644 src/common/stdfs_conditions.h
diff --git a/src/common/filesystem_utils.cpp b/src/common/filesystem_utils.cpp
index 3b0685de..d3d4182f 100644
--- a/src/common/filesystem_utils.cpp
+++ b/src/common/filesystem_utils.cpp
@@ -20,40 +20,7 @@
#define USE_FINAL_FS 0
#else
-// If the C++ macro is set to the version containing C++17, it must support
-// the final C++17 package
-#if __cplusplus >= 201703L
-#define USE_EXPERIMENTAL_FS 0
-#define USE_FINAL_FS 1
-
-#elif defined(_MSC_VER) && _MSC_VER >= 1900
-
-#if defined(_HAS_CXX17) && _HAS_CXX17
-// When MSC supports c++17 use <filesystem> package.
-#define USE_EXPERIMENTAL_FS 0
-#define USE_FINAL_FS 1
-#endif // !_HAS_CXX17
-
-// Right now, GCC still only supports the experimental filesystem items starting in GCC 6
-#elif (__GNUC__ >= 6)
-#define USE_EXPERIMENTAL_FS 1
-#define USE_FINAL_FS 0
-
-// If Clang, check for feature support
-#elif defined(__clang__) && (__cpp_lib_filesystem || __cpp_lib_experimental_filesystem)
-#if __cpp_lib_filesystem
-#define USE_EXPERIMENTAL_FS 0
-#define USE_FINAL_FS 1
-#else
-#define USE_EXPERIMENTAL_FS 1
-#define USE_FINAL_FS 0
-#endif
-
-// If all above fails, fall back to standard C++ and OS-specific items
-#else
-#define USE_EXPERIMENTAL_FS 0
-#define USE_FINAL_FS 0
-#endif
+#include "stdfs_conditions.h"
#endif
#if USE_FINAL_FS == 1
diff --git a/src/common/stdfs_conditions.h b/src/common/stdfs_conditions.h
new file mode 100644
index 00000000..52e8a1df
--- /dev/null
+++ b/src/common/stdfs_conditions.h
@@ -0,0 +1,45 @@
+// Copyright (c) 2017-2021 The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
+#ifndef _STDFS_CONDITIONS_H
+#define _STDFS_CONDITIONS_H
+
+// If the C++ macro is set to the version containing C++17, it must support
+// the final C++17 package
+#if __cplusplus >= 201703L
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 1
+
+#elif defined(_MSC_VER) && _MSC_VER >= 1900
+
+#if defined(_HAS_CXX17) && _HAS_CXX17
+// When MSC supports c++17 use <filesystem> package.
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 1
+#endif // !_HAS_CXX17
+
+// GCC supports the experimental filesystem items starting in GCC 6
+#elif (__GNUC__ >= 6)
+#define USE_EXPERIMENTAL_FS 1
+#define USE_FINAL_FS 0
+
+// If Clang, check for feature support
+#elif defined(__clang__) && (__cpp_lib_filesystem || __cpp_lib_experimental_filesystem)
+#if __cpp_lib_filesystem
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 1
+#else
+#define USE_EXPERIMENTAL_FS 1
+#define USE_FINAL_FS 0
+#endif
+
+// If all above fails, fall back to standard C++ and OS-specific items
+#else
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 0
+#endif
+
+#endif // !_STDFS_CONDITIONS_H
From 0eec6af8fd08c4e0e5f63d3e4d4381fa41634ac3 Mon Sep 17 00:00:00 2001
From: Ryan Pavlik <ryan.pavlik@collabora.com>
Date: Fri, 13 Aug 2021 11:30:01 -0500
Subject: [PATCH 2/5] build: Port StdFilesystemFlags.cmake to use that same
header.
Better than including the code in this file.
---
src/cmake/StdFilesystemFlags.cmake | 44 ++++++++----------------------
1 file changed, 12 insertions(+), 32 deletions(-)
diff --git a/src/cmake/StdFilesystemFlags.cmake b/src/cmake/StdFilesystemFlags.cmake
index b3e5c14b..0eb1e1d5 100644
--- a/src/cmake/StdFilesystemFlags.cmake
+++ b/src/cmake/StdFilesystemFlags.cmake
@@ -2,6 +2,8 @@
#
# SPDX-License-Identifier: BSL-1.0
+set(_FILESYSTEM_UTILS_DIR "${PROJECT_SOURCE_DIR}/src/common")
+
if(MSVC AND MSVC_VERSION GREATER 1890)
set(HAVE_FILESYSTEM_WITHOUT_LIB
ON
@@ -26,37 +28,13 @@ else()
}
"
)
- set(_stdfs_conditions
- "// If the C++ macro is set to the version containing C++17, it must support
- // the final C++17 package
- #if __cplusplus >= 201703L
- #define USE_FINAL_FS 1
-
- #elif defined(_MSC_VER) && _MSC_VER >= 1900
-
- #if defined(_HAS_CXX17) && _HAS_CXX17
- // When MSC supports c++17 use <filesystem> package.
- #define USE_FINAL_FS 1
- #endif // !_HAS_CXX17
-
- // Right now, GCC still only supports the experimental filesystem items starting in GCC 6
- #elif (__GNUC__ >= 6)
- #define USE_EXPERIMENTAL_FS 1
- // If Clang, check for feature support
- #elif defined(__clang__) && (__cpp_lib_filesystem || __cpp_lib_experimental_filesystem)
- #if __cpp_lib_filesystem
- #define USE_FINAL_FS 1
- #else
- #define USE_EXPERIMENTAL_FS 1
- #endif
+ set(_stdfs_conditions "#include <stdfs_conditions.h>
+ ")
- #endif
- "
- )
set(_stdfs_source
"${_stdfs_conditions}
- #ifdef USE_FINAL_FS
+ #if defined(USE_FINAL_FS) && USE_FINAL_FS
#include <filesystem>
using namespace std::filesystem;
#endif
@@ -65,7 +43,7 @@ else()
)
set(_stdfs_experimental_source
"${_stdfs_conditions}
- #ifdef USE_EXPERIMENTAL_FS
+ #if defined(USE_EXPERIMENTAL_FS) && USE_EXPERIMENTAL_FS
#include <experimental/filesystem>
using namespace std::experimental::filesystem;
#endif
@@ -74,11 +52,11 @@ else()
)
set(_stdfs_needlib_source
"${_stdfs_conditions}
- #ifdef USE_FINAL_FS
+ #if defined(USE_FINAL_FS) && USE_FINAL_FS
#include <filesystem>
using namespace std::filesystem;
#endif
- #ifdef USE_EXPERIMENTAL_FS
+ #if defined(USE_EXPERIMENTAL_FS) && USE_EXPERIMENTAL_FS
#include <experimental/filesystem>
using namespace std::experimental::filesystem;
#endif
@@ -88,8 +66,10 @@ else()
# First, just look for the include.
# We're checking if it compiles, not if the include exists,
- # because the source code uses similar conditionals to decide.
+ # because the source code uses the same conditionals to decide.
+ # (Static libraries are just object files, they don't get linked)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+ set(CMAKE_REQUIRED_INCLUDES "${_FILESYSTEM_UTILS_DIR}")
unset(CMAKE_REQUIRED_LIBRARIES)
unset(CMAKE_REQUIRED_FLAGS)
check_cxx_source_compiles("${_stdfs_source}" HAVE_FILESYSTEM_IN_STD)
@@ -121,7 +101,7 @@ else()
check_cxx_source_compiles("${_stdfs_needlib_source}" HAVE_FILESYSTEM_NEEDING_LIBCXXFS)
unset(CMAKE_REQUIRED_LIBRARIES)
unset(CMAKE_TRY_COMPILE_TARGET_TYPE)
-
+ unset(CMAKE_REQUIRED_INCLUDES)
endif()
function(openxr_add_filesystem_utils TARGET_NAME)
From 288ab9228c866fefb50254f29f6925422df1580a Mon Sep 17 00:00:00 2001
From: Ryan Pavlik <ryan.pavlik@collabora.com>
Date: Fri, 13 Aug 2021 11:30:16 -0500
Subject: [PATCH 3/5] build: Clean up and document StdFilesystemFlags.cmake
---
src/cmake/StdFilesystemFlags.cmake | 62 ++++++++++++++++++++++++++++--
1 file changed, 58 insertions(+), 4 deletions(-)
diff --git a/src/cmake/StdFilesystemFlags.cmake b/src/cmake/StdFilesystemFlags.cmake
index 0eb1e1d5..35af972c 100644
--- a/src/cmake/StdFilesystemFlags.cmake
+++ b/src/cmake/StdFilesystemFlags.cmake
@@ -20,7 +20,14 @@ if(MSVC AND MSVC_VERSION GREATER 1890)
else()
include(CheckCXXSourceCompiles)
- # This is just example code that is known to not compile if std::filesystem isn't working right
+ ###
+ # Test Sources
+ ###
+
+ # This is just example code that is known to not compile if std::filesystem isn't working right.
+ # It depends on having the proper includes and `using namespace` so it can use the `is_regular_file`
+ # function unqualified.
+ # It is at the end of every test file below.
set(_stdfs_test_source
"int main() {
(void)is_regular_file(\"/\");
@@ -29,9 +36,23 @@ else()
"
)
+ # This is preprocessor code included in all test compiles, which pulls in the conditions
+ # originally found in filesystem_utils.cpp.
+ #
+ # It defines:
+ # USE_FINAL_FS = 1 if it thinks we have the full std::filesystem in <filesystem> as in C++17
+ # USE_EXPERIMENTAL_FS = 1 if it thinks we don't have the full c++17 filesystem, but should have
+ # std::experimental::filesystem and <experimental/filesystem>
+ #
+ # Ideally the first condition (__cplusplus >= 201703L) would handle most cases,
+ # however you're not supposed to report that unless you're fully conformant with all
+ # of c++17, so you might have a c++17 build flag and the final filesystem library but
+ # a lower __cplusplus value if some other part of the standard is missing.
set(_stdfs_conditions "#include <stdfs_conditions.h>
")
+ # This should only compile if our common detection code decides on the
+ # **final** (non-experimental) filesystem library.
set(_stdfs_source
"${_stdfs_conditions}
#if defined(USE_FINAL_FS) && USE_FINAL_FS
@@ -41,6 +62,9 @@ else()
${_stdfs_test_source}
"
)
+
+ # This should only compile if our common detection code decides on the
+ # **experimental** filesystem library.
set(_stdfs_experimental_source
"${_stdfs_conditions}
#if defined(USE_EXPERIMENTAL_FS) && USE_EXPERIMENTAL_FS
@@ -50,6 +74,11 @@ else()
${_stdfs_test_source}
"
)
+
+ # This should compile if the common detection code decided that either
+ # the experimental or final filesystem library is available.
+ # We use this when trying to detect what library to link, if any:
+ # earlier checks are the ones that care about how we include the headers.
set(_stdfs_needlib_source
"${_stdfs_conditions}
#if defined(USE_FINAL_FS) && USE_FINAL_FS
@@ -64,6 +93,10 @@ else()
"
)
+ ###
+ # Identifying header/namespace and standards flags
+ ###
+
# First, just look for the include.
# We're checking if it compiles, not if the include exists,
# because the source code uses the same conditionals to decide.
@@ -75,15 +108,20 @@ else()
check_cxx_source_compiles("${_stdfs_source}" HAVE_FILESYSTEM_IN_STD)
check_cxx_source_compiles("${_stdfs_experimental_source}" HAVE_FILESYSTEM_IN_STDEXPERIMENTAL)
+ # See if the "final" version builds if we try to specify C++17 explicitly
+ # TODO I think this should actually be compiler flags, not cmake flags...
set(CMAKE_REQUIRED_FLAGS "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=TRUE")
check_cxx_source_compiles("${_stdfs_source}" HAVE_FILESYSTEM_IN_STD_17)
unset(CMAKE_REQUIRED_FLAGS)
+ # If we found the final version of filesystem when specifying c++17 explicitly,
+ # but found it no other way, then we record that we must use C++17 flags.
if(HAVE_FILESYSTEM_IN_STD_17 AND NOT HAVE_FILESYSTEM_IN_STD)
set(HAVE_FILESYSTEM_NEEDS_17
ON
CACHE INTERNAL ""
)
+ # TODO I think this should actually be compiler flags, not cmake flags...
set(CMAKE_REQUIRED_FLAGS "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=TRUE")
else()
set(HAVE_FILESYSTEM_NEEDS_17
@@ -92,21 +130,37 @@ else()
)
endif()
- # Now, see if we need libstdc++fs
+ ###
+ # Identifying library to link
+ ###
+
+ # Now, see if we need to link against libstdc++fs, and what it's called
+ # If we needed c++17 standard flags to find it, they've already been set above.
set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE)
+
+ # Try with no lib specified
check_cxx_source_compiles("${_stdfs_needlib_source}" HAVE_FILESYSTEM_WITHOUT_LIB)
+
+ # Try with stdc++fs
set(CMAKE_REQUIRED_LIBRARIES stdc++fs)
check_cxx_source_compiles("${_stdfs_needlib_source}" HAVE_FILESYSTEM_NEEDING_LIBSTDCXXFS)
+
+ # Try with c++fs (from clang's libc++)
set(CMAKE_REQUIRED_LIBRARIES c++fs)
check_cxx_source_compiles("${_stdfs_needlib_source}" HAVE_FILESYSTEM_NEEDING_LIBCXXFS)
+
+ # Clean up these variables before the next user.
unset(CMAKE_REQUIRED_LIBRARIES)
unset(CMAKE_TRY_COMPILE_TARGET_TYPE)
unset(CMAKE_REQUIRED_INCLUDES)
endif()
+# Use the observations of the code above to add the filesystem_utils.cpp
+# file to a target, along with any required compiler settings and libraries.
+# Also handles our BUILD_WITH_STD_FILESYSTEM option.
function(openxr_add_filesystem_utils TARGET_NAME)
- target_sources(${TARGET_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/src/common/filesystem_utils.cpp)
- target_include_directories(${TARGET_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/src/common)
+ target_sources(${TARGET_NAME} PRIVATE ${_FILESYSTEM_UTILS_DIR}/filesystem_utils.cpp)
+ target_include_directories(${TARGET_NAME} PRIVATE ${_FILESYSTEM_UTILS_DIR})
if(NOT BUILD_WITH_STD_FILESYSTEM)
target_compile_definitions(${TARGET_NAME} PRIVATE DISABLE_STD_FILESYSTEM)
else()
From bbef2219ecfae31bc67962d945146cf4f8f9d4fc Mon Sep 17 00:00:00 2001
From: Ryan Pavlik <ryan.pavlik@collabora.com>
Date: Mon, 25 Oct 2021 12:26:02 -0500
Subject: [PATCH 4/5] build: Update to handle GCC 11 explicitly.
---
src/cmake/StdFilesystemFlags.cmake | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/src/cmake/StdFilesystemFlags.cmake b/src/cmake/StdFilesystemFlags.cmake
index 35af972c..e80d3919 100644
--- a/src/cmake/StdFilesystemFlags.cmake
+++ b/src/cmake/StdFilesystemFlags.cmake
@@ -104,24 +104,28 @@ else()
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(CMAKE_REQUIRED_INCLUDES "${_FILESYSTEM_UTILS_DIR}")
unset(CMAKE_REQUIRED_LIBRARIES)
- unset(CMAKE_REQUIRED_FLAGS)
- check_cxx_source_compiles("${_stdfs_source}" HAVE_FILESYSTEM_IN_STD)
- check_cxx_source_compiles("${_stdfs_experimental_source}" HAVE_FILESYSTEM_IN_STDEXPERIMENTAL)
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.0)
+ # GCC 11+ defaults to C++17 mode and acts badly in these tests if we tell it to use a different version.
+ set(HAVE_FILESYSTEM_IN_STD_17 ON)
+ set(HAVE_FILESYSTEM_IN_STD OFF)
+ else()
+ set(CMAKE_REQUIRED_FLAGS "-DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_STANDARD_REQUIRED=TRUE")
+ check_cxx_source_compiles("${_stdfs_source}" HAVE_FILESYSTEM_IN_STD)
+ check_cxx_source_compiles("${_stdfs_experimental_source}" HAVE_FILESYSTEM_IN_STDEXPERIMENTAL)
- # See if the "final" version builds if we try to specify C++17 explicitly
- # TODO I think this should actually be compiler flags, not cmake flags...
- set(CMAKE_REQUIRED_FLAGS "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=TRUE")
- check_cxx_source_compiles("${_stdfs_source}" HAVE_FILESYSTEM_IN_STD_17)
- unset(CMAKE_REQUIRED_FLAGS)
+ # See if the "final" version builds if we try to specify C++17 explicitly
+ set(CMAKE_REQUIRED_FLAGS "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=TRUE")
+ check_cxx_source_compiles("${_stdfs_source}" HAVE_FILESYSTEM_IN_STD_17)
+ unset(CMAKE_REQUIRED_FLAGS)
+ endif()
- # If we found the final version of filesystem when specifying c++17 explicitly,
+ # If we found the final version of filesystem when specifying C++17 explicitly,
# but found it no other way, then we record that we must use C++17 flags.
if(HAVE_FILESYSTEM_IN_STD_17 AND NOT HAVE_FILESYSTEM_IN_STD)
set(HAVE_FILESYSTEM_NEEDS_17
ON
CACHE INTERNAL ""
)
- # TODO I think this should actually be compiler flags, not cmake flags...
set(CMAKE_REQUIRED_FLAGS "-DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=TRUE")
else()
set(HAVE_FILESYSTEM_NEEDS_17
@@ -135,7 +139,7 @@ else()
###
# Now, see if we need to link against libstdc++fs, and what it's called
- # If we needed c++17 standard flags to find it, they've already been set above.
+ # If we needed C++17 standard flags to find it, they've already been set above.
set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE)
# Try with no lib specified
From 6b8f48bb6413b447f2b420f89121e1244a43f0d5 Mon Sep 17 00:00:00 2001
From: Ryan Pavlik <ryan.pavlik@collabora.com>
Date: Thu, 28 Oct 2021 17:27:44 -0500
Subject: [PATCH 5/5] Changelog fragment
---
changes/sdk/pr.276.gh.OpenXR-SDK-Source.md | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 changes/sdk/pr.276.gh.OpenXR-SDK-Source.md
diff --git a/changes/sdk/pr.276.gh.OpenXR-SDK-Source.md b/changes/sdk/pr.276.gh.OpenXR-SDK-Source.md
new file mode 100644
index 00000000..63086223
--- /dev/null
+++ b/changes/sdk/pr.276.gh.OpenXR-SDK-Source.md
@@ -0,0 +1,5 @@
+---
+- issue.260.gh.OpenXR-SDK-Source
+- issue.1571.gl
+---
+- Fix detection of std::filesystem options on GCC 11 and newer.

View File

@@ -3,7 +3,7 @@
_realname=openxr-sdk
pkgbase=mingw-w64-${_realname}
pkgname=${MINGW_PACKAGE_PREFIX}-${_realname}
pkgver=1.0.20
pkgver=1.0.22
pkgrel=1
pkgdesc='OpenXR is a royalty-free, open standard that provides high-performance access to Augmented Reality (AR) and Virtual Reality (VR) (mingw-w64)'
arch=('any')
@@ -23,15 +23,13 @@ source=(${_realname}-${pkgver}.tar.gz::https://github.com/KhronosGroup/OpenXR-SD
003-disable-version-script.patch
004-fix-cmake-install-dir.patch
005-no-pdb-file-for-mingw-w64.patch
006-cmake-gcc-11-fixes.patch
libopenxr_loader_32.def)
sha256sums=('b32703d30b4f40f5cb1a16e7242e3587ad5b3b47893c90dce884b162c5ca0e02'
sha256sums=('fe84446c0e8d87f0bea0bfec20c6b38d8eb7de811006eada1f50f43b2d5b8f59'
'b3deca2f23e535b40bd25d76adf907075373d9616b9bb6dc009209ab895569fb'
'da99914487a7c27137a13ff6ae39344cb9276a8cee41eeffc34b688deceff1a9'
'66f71a382a27c82d17ea5425e61b18503cecc2a52b9b8c6561344d7a562c070e'
'a03fc2adf3a3f083c92bb44e76511d22c6ad0ac5ab212ebce68e6dcbb01c72e7'
'6acfe285e771e750fc2ac6dbcbf4142c3b7d86f660dd80e228ca4a2a90ff0e4a'
'b0e025f6f7bd81a0c254d1b0d6836a08c78b60051d1e262e4575d4e3de5c8034'
'c268c94efe7ec8cfb83eccc506a8035869dd42eebfb5037537ecf642b08f25cc')
validpgpkeys=(F029455EAB70F520FF4A03BD7F534CD56F00321E)
@@ -54,10 +52,6 @@ prepare() {
004-fix-cmake-install-dir.patch \
005-no-pdb-file-for-mingw-w64.patch
# https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/276
apply_patch_with_msg \
006-cmake-gcc-11-fixes.patch
# For stdcall fixup, generated from upstream released DLLs
if [ "${CARCH}" = "i686" ]; then
cp ${srcdir}/libopenxr_loader_32.def src/loader/openxr-loader.def