From 39cda6be9908275bd5daee82818a675547833c3e Mon Sep 17 00:00:00 2001 From: Jacek Galowicz Date: Wed, 30 Mar 2022 14:52:18 +0200 Subject: [PATCH] jsoncpp: enable static and USING_SECURE_MEMORY --- .../development/libraries/jsoncpp/default.nix | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/jsoncpp/default.nix b/pkgs/development/libraries/jsoncpp/default.nix index 9adf509f8aa..77d49c70003 100644 --- a/pkgs/development/libraries/jsoncpp/default.nix +++ b/pkgs/development/libraries/jsoncpp/default.nix @@ -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> 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";