Add ability to build with system installed jsoncpp#1178
Open
lubosz wants to merge 2 commits intoValveSoftware:masterfrom
Open
Add ability to build with system installed jsoncpp#1178lubosz wants to merge 2 commits intoValveSoftware:masterfrom
lubosz wants to merge 2 commits intoValveSoftware:masterfrom
Conversation
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.
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.
ChristophHaag
added a commit
to ChristophHaag/openvr
that referenced
this pull request
Mar 31, 2020
std::istringstream requires this include. Currently it is accidentally pulled in by including json.h. Other jsoncpp versions don't provide that include, for example with ValveSoftware#1178 the build breaks on debian stable.
|
@lubosz Could you rebase this PR on current master? Else I will just open an updated one. |
|
Rebased: #1716. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This first patch in this patch set adds the build option
USE_SYSTEM_JSONCPP, which instead of using the internal version ofjsoncpp.cpplinks to a system installed one.Even though I didn't need the second patch to make it work for me, it removes the local
json.hfrom the CMake include path, which could cause problems on certain systems when building withUSE_SYSTEM_JSONCPP. The second patch moves jsoncpp to athirdpartydirectory and includes it when the system version should not be used.This is an attempt to solve #1176 in a upstreamable fashion, keeping the previous behavior when the build flag is not set.
The problem was discovered during the packaging process of xrdesktop for Debian. This patch set will enable conformance with the Debian policy "embedded-library", as seen in https://lintian.debian.org/tags/embedded-library.html
I was able to build the examples (after applying #1177), as well as run xrdesktop in a system wide installation with these patches.