CMakeLists.txt 2.4 KB

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