openvr/openvr-2.5.1-pr-use-system-jsoncpp.patch

111 lines
3.9 KiB
Diff

From 54a58e479f4d63e62e9118637cd92a2013a4fb95 Mon Sep 17 00:00:00 2001
From: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Date: Thu, 15 Aug 2019 16:07:01 +0200
Subject: [PATCH 1/2] cmake: Add option to build with system jsoncpp.
This patch adds the CMake build option `USE_SYSTEM_JSONCPP`,
which instead of using the internal `jsoncpp.cpp` links against
the system installed jsoncpp library.
This results in a `libopenvr_api.so` that is only 115K instead of 301K
on my system.
Distributions like Debian will prefer this behaviour, since it will give
them the possibility to maintain version and security issues for jsoncpp
in one place.
This behaviour can be enabled by
```
cmake -DUSE_SYSTEM_JSONCPP=True .
```
When the flag is not set, the build will behave like it did before.
I tested this patch using the system wide jsoncpp successfully
with xrdesktop.
---
CMakeLists.txt | 1 +
src/CMakeLists.txt | 12 +++++++++++-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8956cdad..1150c53d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -28,6 +28,7 @@ option(BUILD_UNIVERSAL "Builds the shared or framework as a universal (fat, 32-
option(BUILD_OSX_I386 "Builds the shared or framework as a 32-bit binary, even on a 64-bit platform" OFF)
option(USE_LIBCXX "Uses libc++ instead of libstdc++" ON)
option(USE_CUSTOM_LIBCXX "Uses a custom libc++" OFF)
+option(USE_SYSTEM_JSONCPP "Uses the system installed jsoncpp." OFF)
add_definitions( -DVR_API_PUBLIC )
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b83710af..a7b64db9 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -34,8 +34,14 @@ endif()
# Set the source group and files.
set(CORE_FILES
openvr_api_public.cpp
- jsoncpp.cpp
)
+
+if(NOT USE_SYSTEM_JSONCPP)
+ set(JSON_CPP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/jsoncpp)
+ include_directories(${JSON_CPP_DIR})
+ list(APPEND CORE_FILES ${JSON_CPP_DIR}/jsoncpp.cpp)
+endif()
+
set(VRCORE_FILES
vrcore/dirtools_public.cpp
vrcore/envvartools_public.cpp
@@ -100,6 +106,10 @@ if(USE_CUSTOM_LIBCXX)
set(EXTRA_LIBS ${EXTRA_LIBS} c++ c++abi)
endif()
+if(USE_SYSTEM_JSONCPP)
+ list(APPEND EXTRA_LIBS jsoncpp)
+endif()
+
target_link_libraries(${LIBNAME} ${EXTRA_LIBS} ${CMAKE_DL_LIBS})
target_include_directories(${LIBNAME} PUBLIC ${OPENVR_HEADER_DIR})
From a7a6995d1d6f9ee1a17a3741661156f9706c40ce Mon Sep 17 00:00:00 2001
From: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Date: Thu, 15 Aug 2019 15:05:34 +0200
Subject: [PATCH 2/2] thirdparty: Move jsoncpp to thridparty directory.
Even though the previous patch in this patch set enabled the build with
a system wide jsoncpp and worked for me, it still left the internal
jsoncpp includes in the include path, since the includes were placed
in `CMAKE_CURRENT_SOURCE_DIR`. This could cause problems on other systems
when trying to build with a system wide jsoncpp.
In order to remove the internal json.h from the include path,
I moved all jsoncpp files into a thridparty directory amd include
it in the case of `USE_SYSTEM_JSONCPP` not being set.
---
{src => thirdparty/jsoncpp}/json/json-forwards.h | 0
{src => thirdparty/jsoncpp}/json/json.h | 0
{src => thirdparty/jsoncpp}/jsoncpp.cpp | 0
3 files changed, 0 insertions(+), 0 deletions(-)
rename {src => thirdparty/jsoncpp}/json/json-forwards.h (100%)
rename {src => thirdparty/jsoncpp}/json/json.h (100%)
rename {src => thirdparty/jsoncpp}/jsoncpp.cpp (100%)
diff --git a/src/json/json-forwards.h b/thirdparty/jsoncpp/json/json-forwards.h
similarity index 100%
rename from src/json/json-forwards.h
rename to thirdparty/jsoncpp/json/json-forwards.h
diff --git a/src/json/json.h b/thirdparty/jsoncpp/json/json.h
similarity index 100%
rename from src/json/json.h
rename to thirdparty/jsoncpp/json/json.h
diff --git a/src/jsoncpp.cpp b/thirdparty/jsoncpp/jsoncpp.cpp
similarity index 100%
rename from src/jsoncpp.cpp
rename to thirdparty/jsoncpp/jsoncpp.cpp