jsoncpp: enable static and USING_SECURE_MEMORY

This commit is contained in:
Jacek Galowicz 2022-03-30 14:52:18 +02:00
parent 0ae931fb87
commit 39cda6be99

View File

@ -1,4 +1,13 @@
{ lib, stdenv, fetchFromGitHub, cmake, python3, validatePkgConfig, fetchpatch }:
{ lib
, stdenv
, fetchFromGitHub
, cmake
, python3
, validatePkgConfig
, fetchpatch
, secureMemory ? false
, enableStatic ? stdenv.hostPlatform.isStatic
}:
stdenv.mkDerivation rec {
pname = "jsoncpp";
@ -30,6 +39,10 @@ stdenv.mkDerivation rec {
export sourceRoot=${src.name}
'';
postPatch = lib.optionalString secureMemory ''
sed -i 's/#define JSONCPP_USING_SECURE_MEMORY 0/#define JSONCPP_USING_SECURE_MEMORY 1/' include/json/version.h
'';
# Hack to be able to run the test, broken because we use
# CMAKE_SKIP_BUILD_RPATH to avoid cmake resetting rpath on install
preBuild = if stdenv.isDarwin then ''
@ -42,10 +55,21 @@ stdenv.mkDerivation rec {
cmakeFlags = [
"-DBUILD_SHARED_LIBS=ON"
"-DBUILD_STATIC_LIBS=OFF"
"-DBUILD_OBJECT_LIBS=OFF"
"-DJSONCPP_WITH_CMAKE_PACKAGE=ON"
] ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "-DJSONCPP_WITH_TESTS=OFF";
]
# the test's won't compile if secureMemory is used because there is no
# comparison operators and conversion functions between
# std::basic_string<..., Json::SecureAllocator<char>> vs.
# std::basic_string<..., [default allocator]>
++ lib.optional ((stdenv.buildPlatform != stdenv.hostPlatform) || secureMemory) "-DJSONCPP_WITH_TESTS=OFF"
++ lib.optional (!enableStatic) "-DBUILD_STATIC_LIBS=OFF";
# this is fixed and no longer necessary in 1.9.5 but there they use
# memset_s without switching to a different c++ standard in the cmake files
postInstall = lib.optionalString enableStatic ''
(cd $out/lib && ln -sf libjsoncpp_static.a libjsoncpp.a)
'';
meta = with lib; {
homepage = "https://github.com/open-source-parsers/jsoncpp";