uhttpd/file: fix string out of buffer range on uh_defer_script
[project/uhttpd.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.6)
2
3 PROJECT(uhttpd C)
4
5 INCLUDE (CheckFunctionExists)
6
7 SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
8 ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64 -Os -Wall -Werror -Wmissing-declarations --std=gnu99 -g3)
9
10 OPTION(TLS_SUPPORT "TLS support" ON)
11 OPTION(LUA_SUPPORT "Lua support" ON)
12 OPTION(UBUS_SUPPORT "ubus support" ON)
13 OPTION(UCODE_SUPPORT "ucode support" ON)
14
15 IF(APPLE)
16 INCLUDE_DIRECTORIES(/opt/local/include)
17 LINK_DIRECTORIES(/opt/local/lib)
18 ENDIF()
19
20 FIND_LIBRARY(LIBS crypt)
21 IF(LIBS STREQUAL "LIBS-NOTFOUND")
22 SET(LIBS "")
23 ENDIF()
24
25 FIND_PATH(ubox_include_dir libubox/usock.h)
26 INCLUDE_DIRECTORIES(${ubox_include_dir})
27
28 SET(SOURCES main.c listen.c client.c utils.c file.c auth.c cgi.c relay.c proc.c plugin.c handler.c)
29 IF(TLS_SUPPORT)
30 SET(SOURCES ${SOURCES} tls.c)
31 ADD_DEFINITIONS(-DHAVE_TLS)
32 ENDIF()
33
34 CHECK_FUNCTION_EXISTS(getspnam HAVE_SHADOW)
35 IF(HAVE_SHADOW)
36 ADD_DEFINITIONS(-DHAVE_SHADOW)
37 ENDIF()
38
39 FIND_LIBRARY(ubox NAMES ubox)
40 FIND_LIBRARY(json_script NAMES json_script)
41 FIND_LIBRARY(blobmsg_json NAMES blobmsg_json)
42
43 ADD_EXECUTABLE(uhttpd ${SOURCES})
44 FIND_LIBRARY(libjson NAMES json-c json)
45 TARGET_LINK_LIBRARIES(uhttpd ${ubox} dl ${json_script} ${blobmsg_json} ${libjson} ${LIBS})
46
47 SET(PLUGINS "")
48 IF(LUA_SUPPORT)
49 FIND_PROGRAM(PKG_CONFIG pkg-config)
50
51 IF(NOT LUA_CFLAGS AND PKG_CONFIG)
52 EXECUTE_PROCESS(
53 COMMAND pkg-config --silence-errors --cflags lua5.1
54 OUTPUT_VARIABLE LUA_CFLAGS
55 OUTPUT_STRIP_TRAILING_WHITESPACE
56 )
57 ENDIF()
58
59 IF(NOT LUA_LIBS AND PKG_CONFIG)
60 EXECUTE_PROCESS(
61 COMMAND pkg-config --silence-errors --libs lua5.1
62 OUTPUT_VARIABLE LUA_LIBS
63 OUTPUT_STRIP_TRAILING_WHITESPACE
64 )
65 ENDIF()
66
67 IF(NOT LUA_LIBS)
68 SET(LUA_LIBS "lua")
69 ENDIF()
70
71 SET(PLUGINS ${PLUGINS} uhttpd_lua)
72 ADD_DEFINITIONS(-DHAVE_LUA ${LUA_CFLAGS})
73 ADD_LIBRARY(uhttpd_lua MODULE lua.c)
74 TARGET_LINK_LIBRARIES(uhttpd_lua ${LUA_LIBS} m dl)
75 ENDIF()
76
77 IF(UCODE_SUPPORT)
78 SET(PLUGINS ${PLUGINS} uhttpd_ucode)
79 ADD_DEFINITIONS(-DHAVE_UCODE)
80 ADD_LIBRARY(uhttpd_ucode MODULE ucode.c)
81 TARGET_LINK_LIBRARIES(uhttpd_ucode ucode ${libjson})
82 ENDIF()
83
84 IF(UBUS_SUPPORT)
85 FIND_LIBRARY(ubus NAMES ubus)
86 SET(PLUGINS ${PLUGINS} uhttpd_ubus)
87 ADD_DEFINITIONS(-DHAVE_UBUS)
88 ADD_LIBRARY(uhttpd_ubus MODULE ubus.c)
89 TARGET_LINK_LIBRARIES(uhttpd_ubus ${ubus} ${ubox} ${blobmsg_json} ${libjson})
90 ENDIF()
91
92 IF(PLUGINS)
93 SET_TARGET_PROPERTIES(${PLUGINS} PROPERTIES
94 PREFIX ""
95 )
96 ENDIF()
97
98 INSTALL(TARGETS uhttpd ${PLUGINS}
99 RUNTIME DESTINATION bin
100 LIBRARY DESTINATION lib
101 )