From b47f6a50925efb8c8707b1faed5561a4b66ffdb1 Mon Sep 17 00:00:00 2001
From: Samuel Martin <s.martin49@gmail.com>
Date: Sun, 24 Apr 2016 18:45:27 +0200
Subject: [PATCH] Link libyajl{,_s} with libm when isnan is not brought by the
 libc

Check whether isnan is provided by the libc library, otherwise make sure
yajl libraries are link against libm.

Note that setting libm as PUBLIC link libraries enable the transitivity
[1, 2]; therefore it will be automatically passed to target linking
against libyajl{,_s}.

This patch also makes sure the link libraries will appear in the yajl.pc
file.

[1] https://cmake.org/cmake/help/v3.5/command/target_link_libraries.html
[2] https://cmake.org/cmake/help/v3.5/manual/cmake-buildsystem.7.html#target-usage-requirements

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
---
 src/CMakeLists.txt | 10 ++++++++++
 src/yajl.pc.cmake  |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b487bfd..a88698f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -35,11 +35,21 @@ SET (shareDir ${CMAKE_CURRENT_BINARY_DIR}/../${YAJL_DIST_NAME}/share/pkgconfig)
 # set the output path for libraries
 SET(LIBRARY_OUTPUT_PATH ${libDir})
 
+SET(yajl_lib_link)
+INCLUDE(CheckLibraryExists)
+CHECK_LIBRARY_EXISTS(c isnan "" HAVE_LIBC_ISNAN)
+
+IF(NOT HAVE_LIBC_ISNAN)
+  LIST(APPEND yajl_lib_link "-lm")
+ENDIF(NOT HAVE_LIBC_ISNAN)
+
 ADD_LIBRARY(yajl_s STATIC ${SRCS} ${HDRS} ${PUB_HDRS})
 SET_TARGET_PROPERTIES(yajl_s PROPERTIES OUTPUT_NAME yajl)
+TARGET_LINK_LIBRARIES(yajl_s PUBLIC ${yajl_lib_link})
 
 IF(BUILD_SHARED_LIBS)
 ADD_LIBRARY(yajl SHARED ${SRCS} ${HDRS} ${PUB_HDRS})
+TARGET_LINK_LIBRARIES(yajl PUBLIC ${yajl_lib_link})
 
 #### setup shared library version number
 SET_TARGET_PROPERTIES(yajl PROPERTIES
diff --git a/src/yajl.pc.cmake b/src/yajl.pc.cmake
index 6eaca14..4681dd4 100644
--- a/src/yajl.pc.cmake
+++ b/src/yajl.pc.cmake
@@ -6,4 +6,4 @@ Name: Yet Another JSON Library
 Description: A Portable JSON parsing and serialization library in ANSI C
 Version: ${YAJL_MAJOR}.${YAJL_MINOR}.${YAJL_MICRO}
 Cflags: -I${dollar}{includedir}
-Libs: -L${dollar}{libdir} -lyajl
+Libs: -L${dollar}{libdir} -lyajl ${yajl_lib_link}
-- 
2.8.0

