CMakeLists.txt revision 268896
1PROJECT(libucl C)
2
3SET(LIBUCL_VERSION_MAJOR 0)
4SET(LIBUCL_VERSION_MINOR 2)
5SET(LIBUCL_VERSION_PATCH 9)
6
7SET(LIBUCL_VERSION         "${LIBUCL_VERSION_MAJOR}.${LIBUCL_VERSION_MINOR}.${LIBUCL_VERSION_PATCH}")
8
9INCLUDE(CheckCCompilerFlag)
10INCLUDE(FindOpenSSL)
11CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
12
13OPTION(ENABLE_URL_INCLUDE  "Enable urls in ucl includes (requires libcurl or libfetch) [default: OFF]" OFF)
14OPTION(ENABLE_URL_SIGN  "Enable signatures check in ucl includes (requires openssl) [default: OFF]" OFF)
15OPTION(BUILD_SHARED_LIBS "Build Shared Libraries [default: OFF]" OFF)
16
17IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
18	LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt)
19ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
20
21IF(ENABLE_URL_INCLUDE MATCHES "ON")
22    FIND_LIBRARY(LIBFETCH_LIBRARY NAMES fetch PATHS	PATH_SUFFIXES lib64 lib
23                      PATHS
24                          ~/Library/Frameworks
25                          /Library/Frameworks
26                          /usr/local
27                          /usr
28                          /sw
29                          /opt/local
30                          /opt/csw
31                          /opt
32                     DOC "Path where the libfetch library can be found")
33    IF(LIBFETCH_LIBRARY)
34    	FIND_FILE(HAVE_FETCH_H NAMES fetch.h PATHS /usr/include
35    											   /opt/include
36    											   /usr/local/include
37    				DOC "Path to libfetch header")
38    ELSE(LIBFETCH_LIBRARY)
39    	# Try to find libcurl
40    	ProcessPackage(CURL libcurl)
41    	IF(NOT CURL_FOUND)
42    		MESSAGE(WARNING "Neither libcurl nor libfetch were found, no support of URL includes in configuration")
43    	ENDIF(NOT CURL_FOUND)
44    ENDIF(LIBFETCH_LIBRARY)
45ENDIF(ENABLE_URL_INCLUDE MATCHES "ON")
46
47SET(CMAKE_C_WARN_FLAGS "")
48CHECK_C_COMPILER_FLAG(-Wall SUPPORT_WALL)
49CHECK_C_COMPILER_FLAG(-W SUPPORT_W)
50CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WPARAM)
51CHECK_C_COMPILER_FLAG(-Wno-pointer-sign SUPPORT_WPOINTER_SIGN)
52CHECK_C_COMPILER_FLAG(-Wstrict-prototypes SUPPORT_WSTRICT_PROTOTYPES)
53IF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
54	CHECK_C_COMPILER_FLAG("-std=c99" SUPPORT_STD_FLAG)
55ENDIF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
56IF(SUPPORT_W)
57	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
58ENDIF(SUPPORT_W)
59IF(SUPPORT_WALL)
60	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wall")
61ENDIF(SUPPORT_WALL)
62IF(SUPPORT_WPARAM)
63	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
64ENDIF(SUPPORT_WPARAM)
65IF(SUPPORT_WPOINTER_SIGN)
66	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-pointer-sign")
67ENDIF(SUPPORT_WPOINTER_SIGN)
68IF(SUPPORT_WSTRICT_PROTOTYPES)
69	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wstrict-prototypes")
70ENDIF(SUPPORT_WSTRICT_PROTOTYPES)
71IF(SUPPORT_STD_FLAG)
72	SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -std=c99")
73ENDIF(SUPPORT_STD_FLAG)
74
75IF(ENABLE_URL_SIGN MATCHES "ON")
76	IF(OPENSSL_FOUND)
77		SET(HAVE_OPENSSL 1)
78		INCLUDE_DIRECTORIES("${OPENSSL_INCLUDE_DIR}")
79	ENDIF(OPENSSL_FOUND)
80ENDIF(ENABLE_URL_SIGN MATCHES "ON")
81
82INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../src")
83INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../include")
84INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../uthash")
85
86SET(UCLSRC            ../src/ucl_util.c
87                      ../src/ucl_parser.c
88                      ../src/ucl_emitter.c
89                      ../src/ucl_hash.c
90                      ../src/ucl_schema.c
91                      ../src/xxhash.c)
92
93
94SET (LIB_TYPE STATIC)
95IF (BUILD_SHARED_LIBS)
96  SET (LIB_TYPE SHARED)
97ENDIF (BUILD_SHARED_LIBS)
98ADD_LIBRARY(ucl ${LIB_TYPE} ${UCLSRC})
99SET_TARGET_PROPERTIES(ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
100
101IF(HAVE_FETCH_H)
102    TARGET_LINK_LIBRARIES(ucl fetch)
103ELSE(HAVE_FETCH_H)
104    IF(CURL_FOUND)
105        TARGET_LINK_LIBRARIES(ucl ${CURL_LIBRARIES})
106    ENDIF(CURL_FOUND)
107ENDIF(HAVE_FETCH_H)
108IF(ENABLE_URL_SIGN MATCHES "ON")
109	IF(OPENSSL_FOUND)
110		TARGET_LINK_LIBRARIES(ucl ${OPENSSL_LIBRARIES})
111	ENDIF(OPENSSL_FOUND)
112ENDIF(ENABLE_URL_SIGN MATCHES "ON")
113