ChipMaster's trial hacks on C++CMS starting with v1.2.1. Not sure I'll follow on with the v2 since it looks to be breaking and mostly frivolous.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1108 lines
31 KiB

  1. cmake_minimum_required(VERSION 2.6)
  2. set(CMAKE_LEGACY_CYGWIN_WIN32 0)
  3. project(cppcms)
  4. set(CPPCMS_PACKAGE_NAME "CppCMS")
  5. set(CPPCMS_PACKAGE_STRING "CppCMS/1.2.1")
  6. set(CPPCMS_PACKAGE_VERSION "1.2.1")
  7. set(CPPCMS_VERSION "1.2.1")
  8. set(CPPCMS_SOVERSION "1")
  9. set(BOOSTER_SOVERSION "0")
  10. set(BOOSTER_VERSION "0.2.0")
  11. include(CheckFunctionExists)
  12. include(CheckCXXSourceCompiles)
  13. include(CheckLibraryExists)
  14. include(CPack)
  15. enable_testing()
  16. #############################################################################
  17. #
  18. # Setup default build options
  19. #
  20. #############################################################################
  21. if(NOT LIBDIR)
  22. set(LIBDIR lib CACHE STRING "Library installation directory" FORCE)
  23. endif()
  24. option(DISABLE_SHARED "Disable shared libraries build" OFF)
  25. option(DISABLE_STATIC "Disable static libraries build" OFF)
  26. option(DISABLE_GCRYPT "Disable usage of gcrypt library" OFF)
  27. option(DISABLE_OPENSSL "Disable usage of openssl library" OFF)
  28. option(DISABLE_FCGI "Disable fastcgi web server api" OFF)
  29. option(DISABLE_SCGI "Disable scgi web server api" OFF)
  30. option(DISABLE_HTTP "Disable http web server" OFF)
  31. option(DISABLE_CACHE "Disable cache beckend" OFF)
  32. option(DISABLE_TCPCACHE "Disable distributed cache beckend" OFF)
  33. option(DISABLE_GZIP "Disable support of gzip output compression" OFF)
  34. option(USE_STLPORT "Build with STLPort library" OFF)
  35. if(USE_STLPORT)
  36. find_path(STLPORT_INCLUDE stlport/iostream)
  37. find_library(STLPORT_LIB stlport)
  38. if(NOT STLPORT_INCLUDE OR NOT STLPORT_LIB)
  39. message(FATAL_ERROR "Can't find stlport include or library")
  40. else()
  41. include_directories(${STLPORT_INCLUDE}/stlport)
  42. endif()
  43. endif()
  44. if(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
  45. option(DISABLE_PREFORK_CACHE "Disable prefork-cache beckend" ON)
  46. else()
  47. option(DISABLE_PREFORK_CACHE "Disable prefork-cache beckend" OFF)
  48. endif()
  49. add_subdirectory(booster)
  50. include_directories(booster)
  51. include_directories(src)
  52. include_directories(private)
  53. include_directories(cppcms_boost)
  54. include_directories(${CMAKE_BINARY_DIR})
  55. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  56. include_directories(${CMAKE_CURRENT_BINARY_DIR}/booster)
  57. include_directories(${CMAKE_SOURCE_DIR})
  58. if(DISABLE_CACHE)
  59. set(DISABLE_PREFORK_CACHE ON)
  60. set(DISABLE_TCPCACHE ON)
  61. endif()
  62. if(WIN32 OR CYGWIN)
  63. set(IS_WINDOWS TRUE)
  64. else()
  65. set(IS_WINDOWS FALSE)
  66. endif()
  67. if(WIN32 AND NOT CYGWIN)
  68. set(WINDOWS_NATIVE TRUE)
  69. else()
  70. set(WINDOWS_NATIVE FALSE)
  71. endif()
  72. if(CYGWIN)
  73. set(IS_CYGWIN TRUE)
  74. else()
  75. set(IS_CYGWIN FALSE)
  76. endif()
  77. #############################################################################
  78. #
  79. # Setup various build flags for different supported compilers and systems
  80. #
  81. #############################################################################
  82. if(CMAKE_COMPILER_IS_GNUCXX)
  83. check_cxx_source_compiles(
  84. "#if __GNUC__ < 4
  85. #error
  86. #endif
  87. int main() {}"
  88. GCC_IS_GCC4)
  89. set(CXX_FLAGS "-Wall -Wextra")
  90. set(C_FLAGS "-Wall -Wextra")
  91. if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  92. set(CXX_FLAGS "${CXX_FLAGS} -pthreads")
  93. endif()
  94. if(NOT GCC_IS_GCC4)
  95. # Uninitalized checks are bogous under gcc-3.4
  96. set(CXX_FLAGS "${CXX_FLAGS} -Wno-uninitialized")
  97. endif()
  98. if(IS_WINDOWS)
  99. if(GCC_IS_GCC4)
  100. # Very important, otherwise process would not start under cygwin
  101. set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -Wl,--enable-auto-import")
  102. else()
  103. # gcc-3 does not have shared library for libstdc++ -- cause dll faitures with locale
  104. set(DISABLE_SHARED ON)
  105. endif()
  106. endif()
  107. if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
  108. message("Addign rdynamic")
  109. set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -rdynamic")
  110. endif()
  111. elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  112. set(CXX_FLAGS "-Wall -Wextra")
  113. if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  114. set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -rdynamic")
  115. endif()
  116. elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
  117. set(CXX_FLAGS "-Wall")
  118. set(C_FLAGS "-Wall")
  119. elseif(MSVC)
  120. set(CXX_FLAGS "/EHsc /W3")
  121. set(C_FLAGS "/W3")
  122. elseif(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
  123. #
  124. # We use STL port under Sun Studio, standard library is broken
  125. #
  126. set(CXX_FLAGS "-library=stlport4 -xannotate=no")
  127. if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  128. set(CXX_FLAGS "${CXX_FLAGS} -mt")
  129. endif()
  130. endif()
  131. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAGS}")
  132. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${C_FLAGS}")
  133. #############################################################################
  134. #
  135. # Set default RelWithDebInfo build
  136. #
  137. #############################################################################
  138. if(NOT CMAKE_BUILD_TYPE)
  139. set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
  140. "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
  141. FORCE)
  142. endif(NOT CMAKE_BUILD_TYPE)
  143. if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
  144. if(MSVC)
  145. set(ZLIB_SUFFIX "d")
  146. if(NOT CPPCMS_SUFFIX)
  147. set(CPPCMS_SUFFIX "-d")
  148. else()
  149. set(CPPCMS_SUFFIX "${CPPCMS_SUFFIX}d")
  150. endif()
  151. endif()
  152. endif()
  153. check_cxx_source_compiles(
  154. "#include <stdint.h>
  155. int main(){int32_t x; int64_t y; return 0; }"
  156. CPPCMS_HAVE_STDINT_H)
  157. check_cxx_source_compiles(
  158. "#include <inttypes.h>
  159. int main(){int32_t x; int64_t y; return 0; }"
  160. CPPCMS_HAVE_INTTYPES_H)
  161. check_function_exists(atoll CPPCMS_HAVE_ATOLL)
  162. check_function_exists(_atoi64 CPPCMS_HAVE_ATOI64)
  163. check_function_exists(snprintf CPPCMS_HAVE_SNPRINTF)
  164. check_function_exists(stat CPPCMS_HAVE_STAT)
  165. check_function_exists(_stat CPPCMS_HAVE__STAT)
  166. set(CPPCMS_LIBRARY_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
  167. set(CPPCMS_LIBRARY_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX})
  168. #
  169. # Atomic API tests
  170. #
  171. check_cxx_source_compiles(
  172. "#include <string>
  173. int main() { std::wstring s; }"
  174. CPPCMS_HAVE_STD_WSTRING)
  175. check_cxx_source_compiles(
  176. "#include <time.h>
  177. int main() { struct tm t; char const *p=t.tm_zone; long o=t.tm_gmtoff; }"
  178. CPPCMS_HAVE_BSD_TM)
  179. check_cxx_source_compiles(
  180. "#include <string>
  181. int main() { std::u16string s16; std::u32string s32; }"
  182. CPPCMS_HAVE_CPP0X_UXSTRING)
  183. check_cxx_source_compiles(
  184. "#include <list>
  185. int main(){std::list<int> l; auto p=l.begin();}"
  186. CPPCMS_HAVE_CPP_0X_AUTO)
  187. check_cxx_source_compiles(
  188. "#include <list>
  189. int main(){std::list<int> l; decltype(l.begin()) p=l.begin();}"
  190. CPPCMS_HAVE_CPP_0X_DECLTYPE)
  191. check_cxx_source_compiles(
  192. "#include <list>
  193. int main(){std::list<int> l; typeof(l.begin()) p=l.begin();}"
  194. CPPCMS_HAVE_GCC_TYPEOF)
  195. check_cxx_source_compiles(
  196. "#include <list>
  197. int main(){std::list<int> l; __typeof__(l.begin()) p=l.begin();}"
  198. CPPCMS_HAVE_UNDERSCORE_TYPEOF)
  199. check_cxx_source_compiles(
  200. "#ifndef _FILE_OFFSET_BITS
  201. #define _FILE_OFFSET_BITS 64
  202. #endif
  203. #include <stdio.h>
  204. #include <stdlib.h>
  205. int main()
  206. {
  207. char is_big[sizeof(off_t) >= 8 ? 1 : -1];
  208. fseeko(0,0,0);
  209. }"
  210. CPPCMS_HAVE_FSEEKO
  211. )
  212. check_cxx_source_compiles(
  213. "#include <stdio.h>
  214. int main()
  215. { _fseeki64(0,0,0); }"
  216. CPPCMS_HAVE_FSEEKI64
  217. )
  218. if(NOT DISABLE_GZIP)
  219. find_library(ZLIB NAMES z zdll zlib${ZLIB_SUFFIX} zlib)
  220. find_path(ZLIB_INCLUDE_DIR zlib.h)
  221. if(NOT ZLIB OR NOT ZLIB_INCLUDE_DIR)
  222. message(FATAL_ERROR "Can't fild zlib")
  223. endif()
  224. include_directories(${ZLIB_INCLUDE_DIR})
  225. endif()
  226. if(IS_WINDOWS)
  227. set(WS2_32 ws2_32)
  228. set(WSOCK32 wsock32)
  229. else()
  230. check_function_exists(dlopen CPPCMS_HAVE_DLOPEN)
  231. if(NOT CPPCMS_HAVE_DLOPEN)
  232. check_library_exists(dl dlopen "" CPPCMS_HAVE_LIB_DL)
  233. if(NOT CPPCMS_HAVE_LIB_DL)
  234. message(FATAL_ERROR " No library with dlopen found")
  235. else(NOT CPPCMS_HAVE_LIB_DL)
  236. find_library(LIB_DL dl)
  237. endif(NOT CPPCMS_HAVE_LIB_DL)
  238. endif(NOT CPPCMS_HAVE_DLOPEN)
  239. check_function_exists(socket CPPCMS_HAVE_SOCKET)
  240. if(NOT CPPCMS_HAVE_SOCKET)
  241. check_library_exists(socket socket "" CPPCMS_HAVE_LIB_SOCKET)
  242. if(NOT CPPCMS_HAVE_LIB_SOCKET)
  243. message(FATAL_ERROR " No library with socket found")
  244. else(NOT CPPCMS_HAVE_LIB_SOCKET)
  245. find_library(LIB_SOCKET socket)
  246. endif(NOT CPPCMS_HAVE_LIB_SOCKET)
  247. endif(NOT CPPCMS_HAVE_SOCKET)
  248. check_function_exists(gethostbyname CPPCMS_HAVE_GETHOSTBYNAME)
  249. if(NOT CPPCMS_HAVE_GETHOSTBYNAME)
  250. check_library_exists(socket gethostbyname "" LIB_SOCKGETHOSTBYNAME)
  251. if(NOT LIB_SOCKGETHOSTBYNAME)
  252. check_library_exists(nsl gethostbyname "" CPPCMS_HAVE_LIB_NSL)
  253. if(NOT CPPCMS_HAVE_LIB_NSL)
  254. message(FATAL_ERROR " No library with gethostbyname found")
  255. else(NOT CPPCMS_HAVE_LIB_NSL)
  256. find_library(LIB_NSL nsl)
  257. endif(NOT CPPCMS_HAVE_LIB_NSL)
  258. endif(NOT LIB_SOCKGETHOSTBYNAME)
  259. endif(NOT CPPCMS_HAVE_GETHOSTBYNAME)
  260. endif()
  261. check_function_exists(canonicalize_file_name CPPCMS_HAVE_CANONICALIZE_FILE_NAME)
  262. check_function_exists(pthread_mutexattr_setpshared CPPCMS_HAS_THREAD_PSHARED_LIBC)
  263. if(NOT CPPCMS_HAS_THREAD_PSHARED_LIBC AND LIB_PTHREAD)
  264. check_library_exists(${LIB_PTHREAD} pthread_mutexattr_setpshared "" CPPCMS_HAS_THREAD_PSHARED_PTHREAD)
  265. endif()
  266. if(CPPCMS_HAS_THREAD_PSHARED_LIBC OR CPPCMS_HAS_THREAD_PSHARED_PTHREAD)
  267. set(CPPCMS_HAS_THREAD_PSHARED ON)
  268. else()
  269. set(CPPCMS_HAS_THREAD_PSHARED OFF)
  270. endif()
  271. add_definitions(-DCPPCMS_BOOST_ALL_NO_LIB)
  272. if(DISABLE_TCPCACHE)
  273. set(CPPCMS_NO_TCP_CACHE 1)
  274. endif()
  275. if(DISABLE_CACHE)
  276. set(CPPCMS_NO_CACHE 1)
  277. endif()
  278. if(DISABLE_PREFORK_CACHE)
  279. set(CPPCMS_NO_PREFOK_CACHE 1)
  280. endif()
  281. if(DISABLE_GZIP)
  282. set(CPPCMS_NO_GZIP 1)
  283. endif()
  284. set(CPPCMS_PUBLIC_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/cppcms/config.h)
  285. set(CPPCMS_SOURCES
  286. src/service.cpp
  287. src/cgi_api.cpp
  288. src/http_request.cpp
  289. src/http_response.cpp
  290. src/http_context.cpp
  291. src/cppcms_error.cpp
  292. src/cppcms_error_category.cpp
  293. src/thread_pool.cpp
  294. src/applications_pool.cpp
  295. src/application.cpp
  296. src/url_dispatcher.cpp
  297. src/url_mapper.cpp
  298. src/http_cookie.cpp
  299. src/http_file.cpp
  300. src/http_content_type.cpp
  301. src/util.cpp
  302. src/base64.cpp
  303. src/base_view.cpp
  304. src/base_content.cpp
  305. src/views_pool.cpp
  306. src/internal_file_server.cpp
  307. src/json.cpp
  308. src/encoding.cpp
  309. src/form.cpp
  310. src/filters.cpp
  311. src/cache_pool.cpp
  312. src/cache_interface.cpp
  313. src/cache_storage.cpp
  314. src/forwarder.cpp
  315. src/session_pool.cpp
  316. src/hmac_encryptor.cpp
  317. src/aes_encryptor.cpp
  318. src/md5.cpp
  319. src/urandom.cpp
  320. src/aes.cpp
  321. src/session_cookies.cpp
  322. src/session_dual.cpp
  323. src/session_sid.cpp
  324. src/session_interface.cpp
  325. src/session_memory_storage.cpp
  326. src/rpc_json.cpp
  327. src/mount_point.cpp
  328. src/archive.cpp
  329. src/crypto.cpp
  330. src/xss.cpp
  331. src/copy_filter.cpp
  332. src/send_timeout.cpp
  333. src/http_content_filter.cpp
  334. src/plugin.cpp
  335. src/capi/session.cpp
  336. )
  337. if(NOT DISABLE_TCPCACHE)
  338. set(CPPCMS_SOURCES ${CPPCMS_SOURCES}
  339. src/tcp_cache_client.cpp
  340. src/cache_over_ip.cpp
  341. src/tcp_messenger.cpp
  342. src/tcp_connector.cpp
  343. src/tcp_cache_server.cpp
  344. src/session_tcp_storage.cpp
  345. )
  346. endif()
  347. if(NOT DISABLE_GCRYPT)
  348. find_path(GCRYPT_INCLUDE_DIR gcrypt.h)
  349. find_library(LIB_GCRYPT gcrypt)
  350. endif()
  351. if(NOT DISABLE_OPENSSL)
  352. find_path(OPENSSL_INCLUDE_DIR openssl/aes.h)
  353. find_library(LIB_OPENSSL NAMES crypto libcrypto libeay32)
  354. endif()
  355. if (OPENSSL_INCLUDE_DIR AND LIB_OPENSSL)
  356. set(LIB_CRYPT ${LIB_OPENSSL})
  357. set(CPPCMS_HAVE_OPENSSL 1)
  358. include_directories(${OPENSSL_INCLUDE_DIR})
  359. elseif(GCRYPT_INCLUDE_DIR AND LIB_GCRYPT)
  360. set(LIB_CRYPT ${LIB_GCRYPT})
  361. set(CPPCMS_HAVE_GCRYPT 1)
  362. include_directories(${GCRYPT_INCLUDE_DIR})
  363. endif()
  364. if(NOT LIB_CRYPT)
  365. message("GNU-TLS Gcrypt or OpenSSL librarys are not found, disabling AES encryption support")
  366. endif()
  367. if(NOT DISABLE_FCGI)
  368. set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/fastcgi_api.cpp)
  369. set(CPPCMS_HAS_FCGI 1)
  370. endif()
  371. if(NOT DISABLE_SCGI)
  372. set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/scgi_api.cpp)
  373. set(CPPCMS_HAS_SCGI 1)
  374. endif()
  375. if(NOT DISABLE_HTTP)
  376. set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/http_api.cpp)
  377. set(CPPCMS_HAS_HTTP 1)
  378. endif()
  379. if(WINDOWS_NATIVE)
  380. if(NOT DISABLE_GZIP)
  381. set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/session_win32_file_storage.cpp)
  382. endif()
  383. set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/winservice.cpp)
  384. else()
  385. if(NOT DISABLE_GZIP)
  386. set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/session_posix_file_storage.cpp)
  387. endif()
  388. set(CPPCMS_SOURCES ${CPPCMS_SOURCES} src/daemonize.cpp)
  389. endif()
  390. if(NOT DISABLE_SHARED)
  391. add_library(cppcms SHARED ${CPPCMS_SOURCES})
  392. set(CPPCMS_LIB cppcms)
  393. else(NOT DISABLE_SHARED)
  394. set(CPPCMS_LIB cppcms-static)
  395. endif(NOT DISABLE_SHARED)
  396. if(NOT DISABLE_STATIC)
  397. add_library(cppcms-static STATIC ${CPPCMS_SOURCES})
  398. endif(NOT DISABLE_STATIC)
  399. if(DISABLE_SHARED OR DISABLE_STATIC)
  400. set(CPPCMS_LIBS ${CPPCMS_LIB})
  401. else(DISABLE_SHARED OR DISABLE_STATIC)
  402. set(CPPCMS_LIBS cppcms; cppcms-static)
  403. endif(DISABLE_SHARED OR DISABLE_STATIC)
  404. foreach(ALIB ${CPPCMS_LIBS})
  405. if(DISABLE_SHARED)
  406. target_link_libraries(${ALIB} booster-static)
  407. else(DISABLE_SHARED)
  408. target_link_libraries(${ALIB} booster)
  409. endif(DISABLE_SHARED)
  410. if(LIB_CRYPT)
  411. target_link_libraries(${ALIB} ${LIB_CRYPT})
  412. endif(LIB_CRYPT)
  413. if(WS2_32 AND WSOCK32)
  414. target_link_libraries(${ALIB} ${WS2_32})
  415. target_link_libraries(${ALIB} ${WSOCK32})
  416. endif(WS2_32 AND WSOCK32)
  417. if(LIB_SOCKGETHOSTBYNAME)
  418. target_link_libraries(${ALIB} ${LIB_SOCKGETHOSTBYNAME})
  419. endif(LIB_SOCKGETHOSTBYNAME)
  420. if(LIB_NSL)
  421. target_link_libraries(${ALIB} ${LIB_NSL})
  422. endif(LIB_NSL)
  423. if(LIB_SOCKET)
  424. target_link_libraries(${ALIB} ${LIB_SOCKET})
  425. endif(LIB_SOCKET)
  426. if(LIB_DL)
  427. target_link_libraries(${ALIB} ${LIB_DL})
  428. endif(LIB_DL)
  429. if(NOT DISABLE_GZIP)
  430. target_link_libraries(${ALIB} ${ZLIB})
  431. endif()
  432. if(USE_STLPORT AND STLPORT_LIB)
  433. target_link_libraries(${ALIB} ${STLPORT_LIB})
  434. endif()
  435. endforeach(ALIB)
  436. find_program(PYTHON NAMES python2 python)
  437. if(NOT PYTHON)
  438. message(FATAL_ERROR "Can't build without Python interpreter")
  439. endif(NOT PYTHON)
  440. # Templates builds
  441. add_custom_command(
  442. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/skin1.cpp
  443. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  444. -s skin1
  445. -o ${CMAKE_CURRENT_BINARY_DIR}/skin1.cpp
  446. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_skin1.tmpl
  447. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_view1.tmpl
  448. DEPENDS
  449. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  450. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_skin1.tmpl
  451. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_view1.tmpl)
  452. add_custom_command(
  453. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/skin2.cpp
  454. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  455. -s skin2
  456. -o ${CMAKE_CURRENT_BINARY_DIR}/skin2.cpp
  457. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_skin2.tmpl
  458. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_view1.tmpl
  459. DEPENDS
  460. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  461. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_skin2.tmpl
  462. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_view1.tmpl)
  463. add_custom_command(
  464. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tc_skin_a.cpp
  465. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  466. -o ${CMAKE_CURRENT_BINARY_DIR}/tc_skin_a.cpp
  467. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin_a.tmpl
  468. DEPENDS
  469. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  470. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin_a.tmpl)
  471. add_custom_command(
  472. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tc_skin_b.cpp
  473. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  474. -o ${CMAKE_CURRENT_BINARY_DIR}/tc_skin_b.cpp
  475. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin_b.tmpl
  476. DEPENDS
  477. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  478. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin_b.tmpl)
  479. add_custom_command(
  480. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tc_skin.cpp
  481. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  482. -o ${CMAKE_CURRENT_BINARY_DIR}/tc_skin.cpp
  483. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin.tmpl
  484. DEPENDS
  485. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  486. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin.tmpl)
  487. add_custom_command(
  488. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin_a.cpp ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin_a.h
  489. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  490. -o ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin_a.cpp -H ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin_a.h
  491. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin_a.tmpl
  492. DEPENDS
  493. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  494. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin_a.tmpl)
  495. add_custom_command(
  496. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin_b.cpp ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin_b.h
  497. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  498. -o ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin_b.cpp -H ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin_b.h
  499. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin_b.tmpl
  500. DEPENDS
  501. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  502. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin_b.tmpl)
  503. add_custom_command(
  504. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin.cpp ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin.h
  505. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  506. -o ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin.cpp -H ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin.h
  507. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin.tmpl
  508. DEPENDS
  509. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  510. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin.tmpl)
  511. add_custom_command(
  512. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tc_plugin.cpp
  513. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  514. -o ${CMAKE_CURRENT_BINARY_DIR}/tc_plugin.cpp
  515. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_plugin.tmpl
  516. DEPENDS
  517. ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin.h
  518. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  519. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin.tmpl
  520. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_plugin.tmpl
  521. )
  522. add_custom_command(
  523. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/tc_plugin2.cpp
  524. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  525. -o ${CMAKE_CURRENT_BINARY_DIR}/tc_plugin2.cpp
  526. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_plugin2.tmpl
  527. DEPENDS
  528. ${CMAKE_CURRENT_BINARY_DIR}/tc_sep_skin.h
  529. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  530. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_skin.tmpl
  531. ${CMAKE_CURRENT_SOURCE_DIR}/tests/tc_plugin2.tmpl
  532. )
  533. if(NOT DISABLE_SHARED)
  534. add_custom_command(
  535. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/skin3.cpp
  536. COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  537. -s skin3
  538. -o ${CMAKE_CURRENT_BINARY_DIR}/skin3.cpp
  539. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_skin2.tmpl
  540. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_view1.tmpl
  541. DEPENDS
  542. ${CMAKE_CURRENT_SOURCE_DIR}/bin/cppcms_tmpl_cc
  543. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_skin2.tmpl
  544. ${CMAKE_CURRENT_SOURCE_DIR}/src/hello_world_view1.tmpl)
  545. add_library(skin3 SHARED skin3.cpp)
  546. set(SKIN3_DEFS DLL_EXPORT)
  547. set_target_properties(skin3 PROPERTIES
  548. COMPILE_DEFINITIONS "${SKIN3_DEFS}")
  549. target_link_libraries(skin3 ${CPPCMS_LIB})
  550. foreach(SKIN tc_skin_a tc_skin_b tc_skin tc_sep_skin_a tc_sep_skin_b tc_sep_skin tc_plugin tc_plugin2)
  551. add_library(${SKIN} SHARED ${CMAKE_CURRENT_BINARY_DIR}/${SKIN}.cpp)
  552. target_link_libraries(${SKIN} ${CPPCMS_LIB})
  553. if(IS_WINDOWS)
  554. set_target_properties(${SKIN} PROPERTIES COMPILE_DEFINITIONS DLL_EXPORT)
  555. endif()
  556. endforeach()
  557. target_link_libraries(tc_plugin2 tc_sep_skin)
  558. add_library(plugin SHARED tests/test_plugin_so.cpp)
  559. target_link_libraries(plugin ${CPPCMS_LIB})
  560. if(IS_WINDOWS)
  561. set_target_properties(plugin PROPERTIES COMPILE_DEFINITIONS DLL_EXPORT)
  562. endif()
  563. endif(NOT DISABLE_SHARED)
  564. add_executable(hello_world src/hello_world.cpp skin1.cpp skin2.cpp)
  565. target_link_libraries(hello_world ${CPPCMS_LIB})
  566. if(NOT DISABLE_TCPCACHE)
  567. add_executable(cppcms_scale src/cache_server_main.cpp)
  568. target_link_libraries(cppcms_scale ${CPPCMS_LIB})
  569. if(WIN32 OR CYGWIN)
  570. set_target_properties(cppcms_scale PROPERTIES COMPILE_DEFINITIONS DLL_EXPORT)
  571. endif()
  572. endif()
  573. add_executable(cppcms_make_key src/make_key.cpp)
  574. target_link_libraries(cppcms_make_key ${CPPCMS_LIB})
  575. add_executable(cppcms_config_find_param src/cppcms_config_find_param.cpp src/json.cpp)
  576. if(DISABLE_SHARED)
  577. target_link_libraries(cppcms_config_find_param booster-static)
  578. else(DISABLE_SHARED)
  579. target_link_libraries(cppcms_config_find_param booster)
  580. endif(DISABLE_SHARED)
  581. #########################################
  582. # Tests
  583. #########################################
  584. set(ALL_TESTS
  585. form_test
  586. proto_test
  587. pool_test
  588. disco_test
  589. http_timeouts_test
  590. file_server_test
  591. encryptor_test
  592. storage_test
  593. json_test
  594. base64_test
  595. forwarder_test
  596. jsonrpc_test
  597. cookie_test
  598. multipart_parser_test
  599. content_type_parser_test
  600. serialization_test
  601. status_test
  602. xss_test
  603. rewrite_test
  604. url_mapper_test
  605. copy_filter_test
  606. gzip_test
  607. session_interface_test
  608. secure_post_test
  609. mount_point_test
  610. todec_test
  611. hash_map_test
  612. response_test
  613. file_buffer_test
  614. filter_test
  615. plugin_test
  616. )
  617. if(NOT DISABLE_PREFORK_CACHE AND NOT IS_WINDOWS)
  618. set(ALL_TESTS ${ALL_TESTS} allocator_test)
  619. endif()
  620. if(NOT DISABLE_TCPCACHE)
  621. set(ALL_TESTS ${ALL_TESTS} cache_backend_test cache_frontend_test)
  622. endif()
  623. if(NOT DISABLE_SHARED)
  624. set(ALL_TESTS ${ALL_TESTS}
  625. tc_test
  626. loadable_storage_test
  627. )
  628. endif()
  629. if(NOT IS_WINDOWS)
  630. set(ALL_TESTS ${ALL_TESTS} cppcms_service_test)
  631. endif()
  632. foreach(TEST ${ALL_TESTS})
  633. add_executable(${TEST} tests/${TEST}.cpp)
  634. target_link_libraries(${TEST} ${CPPCMS_LIB})
  635. endforeach()
  636. add_executable(external_session_test tests/external_session_test.c)
  637. target_link_libraries(external_session_test ${CPPCMS_LIB})
  638. set(ALL_TESTS ${ALL_TESTS} external_session_test)
  639. if(NOT DISABLE_GZIP)
  640. target_link_libraries(response_test ${ZLIB})
  641. endif()
  642. #####################################
  643. # End of tests
  644. #####################################
  645. # These are use export
  646. if(IS_WINDOWS AND NOT DISABLE_SHARED)
  647. set_target_properties(${ALL_TESTS} hello_world cppcms PROPERTIES
  648. COMPILE_DEFINITIONS DLL_EXPORT)
  649. endif()
  650. set_target_properties(${CPPCMS_LIBS} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
  651. set_target_properties(${CPPCMS_LIBS} PROPERTIES OUTPUT_NAME "cppcms${CPPCMS_SUFFIX}")
  652. if(IS_WINDOWS)
  653. set_target_properties(${CPPCMS_LIBS} PROPERTIES VERSION ${CPPCMS_SOVERSION} SOVERSION ${CPPCMS_SOVERSION})
  654. else()
  655. set_target_properties(${CPPCMS_LIBS} PROPERTIES VERSION ${CPPCMS_VERSION} SOVERSION ${CPPCMS_SOVERSION})
  656. endif()
  657. set_target_properties(${CPPCMS_LIBS} PROPERTIES
  658. PUBLIC_HEADER "${CPPCMS_PUBLIC_HEADERS}")
  659. if(MSVC AND NOT DISABLE_STATIC)
  660. set_target_properties(cppcms-static PROPERTIES PREFIX "lib")
  661. endif(MSVC AND NOT DISABLE_STATIC)
  662. configure_file(config.cmake.h cppcms/config.h)
  663. set(CPPCMS_INSTALL_TARGETS ${CPPCMS_LIBS} cppcms_config_find_param cppcms_make_key)
  664. if(NOT DISABLE_TCPCACHE)
  665. set(CPPCMS_INSTALL_TARGETS ${CPPCMS_INSTALL_TARGETS} cppcms_scale)
  666. endif()
  667. #################
  668. # Installation
  669. #################
  670. install(TARGETS ${CPPCMS_INSTALL_TARGETS}
  671. RUNTIME DESTINATION bin
  672. LIBRARY DESTINATION ${LIBDIR}
  673. ARCHIVE DESTINATION ${LIBDIR}
  674. PUBLIC_HEADER DESTINATION include/cppcms)
  675. install(PROGRAMS bin/cppcms_tmpl_cc bin/cppcms_run
  676. DESTINATION bin)
  677. install(DIRECTORY cppcms DESTINATION include
  678. PATTERN ".svn" EXCLUDE)
  679. #############
  680. # TESTS
  681. #############
  682. set(CNF "${CMAKE_CURRENT_SOURCE_DIR}/tests")
  683. add_test(base64_test base64_test)
  684. add_test(todec_test todec_test)
  685. add_test(response_test response_test)
  686. add_test(encryptor_test encryptor_test "${CNF}")
  687. add_test(storage_test storage_test)
  688. add_test(json_test json_test)
  689. add_test(hash_map_test hash_map_test)
  690. if(NOT DISABLE_PREFORK_CACHE AND NOT IS_WINDOWS)
  691. add_test(allocator_test allocator_test)
  692. endif()
  693. add_test(multipart_parser_test multipart_parser_test "${CNF}")
  694. add_test(content_type_parser_test content_type_parser_test)
  695. if(NOT DISABLE_TCPCACHE)
  696. add_test(cache_backend_test cache_backend_test)
  697. endif()
  698. add_test(serialization_test serialization_test)
  699. add_test(xss_test xss_test)
  700. add_test(rewrite_test rewrite_test)
  701. add_test(url_mapper_test url_mapper_test)
  702. add_test(copy_filter_test copy_filter_test)
  703. add_test(mount_point_test mount_point_test)
  704. add_test(file_buffer_test file_buffer_test)
  705. if(NOT DISABLE_SHARED)
  706. add_test(tc_test_shared tc_test "--shared" "${CNF}")
  707. add_test(tc_test_separate tc_test "--separate" "${CNF}")
  708. add_test(plugin_test plugin_test "${CMAKE_CURRENT_BINARY_DIR}")
  709. endif()
  710. add_test(status_test
  711. status_test "-c" "${CNF}/status_test.js"
  712. "--test-exec=${PYTHON} ${CNF}/status_test.py")
  713. add_test(pool_test
  714. pool_test "-c" "${CNF}/pool_test.js"
  715. "--test-exec=${PYTHON} ${CNF}/pool_test.py")
  716. add_test(filter_test
  717. filter_test "-c" "${CNF}/filter_test.js"
  718. "--test-exec=${PYTHON} ${CNF}/filter_test.py")
  719. add_test(async_status_test
  720. status_test "-c" "${CNF}/status_test.js" "--test-async=async"
  721. "--test-exec=${PYTHON} ${CNF}/status_test.py async")
  722. add_test(form_test
  723. form_test "-c" "${CNF}/form_test.js"
  724. "--test-exec=${PYTHON} ${CNF}/form_test.py")
  725. add_test(cookie_test
  726. cookie_test "-c" "${CNF}/cookie_test.js"
  727. "--test-exec=${PYTHON} ${CNF}/cookie_test.py")
  728. add_test(internal_forwarder_test
  729. forwarder_test "-c" "${CNF}/forwarder_test.js"
  730. "--test-exec=${PYTHON} ${CNF}/forwarder_test.py"
  731. "--test-internal=true")
  732. add_test(forwarder_test
  733. forwarder_test "-c" "${CNF}/forwarder_test.js"
  734. "--test-exec=${PYTHON} ${CNF}/forwarder_test.py"
  735. "--test-internal=false")
  736. add_test(jsonrpc_test
  737. jsonrpc_test "-c" "${CNF}/jsonrpc_test.js"
  738. "--test-exec=${PYTHON} ${CNF}/jsonrpc_test.py")
  739. add_test(http_timeouts_test_read
  740. http_timeouts_test "-c" "${CNF}/proto_test.js"
  741. "--service-api=http" "--service-port=8080" "--service-ip=127.0.0.1" "--http-timeout=5" "--logging-level=debug"
  742. "--test-write=false"
  743. "--test-exec=${PYTHON} ${CNF}/http_timeouts_test.py read")
  744. #
  745. # In future maybe
  746. #
  747. #if(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
  748. # set(HTTP_TIMEOUT 15)
  749. #else()
  750. # set(HTTP_TIMEOUT 5)
  751. #endif()
  752. #
  753. set(HTTP_TIMEOUT 15)
  754. add_test(http_timeouts_test_write
  755. http_timeouts_test "-c" "${CNF}/proto_test.js"
  756. "--service-api=http" "--service-port=8080" "--service-ip=127.0.0.1" "--http-timeout=${HTTP_TIMEOUT}" "--logging-level=debug" "--service-sndbuf=32786" "--service-rcvbuf=32768"
  757. "--test-write=true"
  758. "--test-exec=${PYTHON} ${CNF}/http_timeouts_test.py write ${HTTP_TIMEOUT}")
  759. add_test(file_server_test
  760. file_server_test "-c" "${CNF}/file_server_test.js"
  761. "--test-exec=${PYTHON} ${CNF}/file_server_test.py"
  762. "-U" "${CNF}"
  763. )
  764. add_test(file_server_test_no_links
  765. file_server_test "-c" "${CNF}/file_server_test.js" "--file_server-check_symlink=false"
  766. "--test-exec=${PYTHON} ${CNF}/file_server_test.py no_links"
  767. "-U" "${CNF}"
  768. )
  769. add_test(file_server_with_listing_test
  770. file_server_test "-c" "${CNF}/file_server_test.js"
  771. "--file_server-listing=true"
  772. "--test-exec=${PYTHON} ${CNF}/file_server_test.py listing"
  773. "-U" "${CNF}"
  774. )
  775. add_test(file_server_test_async
  776. file_server_test "-c" "${CNF}/file_server_test.js" "--file_server-async=true"
  777. "--test-exec=${PYTHON} ${CNF}/file_server_test.py"
  778. "-U" "${CNF}"
  779. )
  780. add_test(file_server_test_no_links_async
  781. file_server_test "-c" "${CNF}/file_server_test.js" "--file_server-check_symlink=false" "--file_server-async=true"
  782. "--test-exec=${PYTHON} ${CNF}/file_server_test.py no_links"
  783. "-U" "${CNF}"
  784. )
  785. add_test(file_server_with_listing_test_async
  786. file_server_test "-c" "${CNF}/file_server_test.js" "--file_server-async=true"
  787. "--file_server-listing=true"
  788. "--test-exec=${PYTHON} ${CNF}/file_server_test.py listing"
  789. "-U" "${CNF}"
  790. )
  791. add_test(disco_test_http
  792. disco_test "-c" "${CNF}/proto_test.js"
  793. "--service-api=http" "--service-port=8080" "--service-ip=127.0.0.1"
  794. "--test-exec=${PYTHON} ${CNF}/disco_test.py http")
  795. add_test(disco_test_fastcgi_tcp
  796. disco_test "-c" "${CNF}/proto_test.js"
  797. "--service-api=fastcgi" "--service-port=8080" "--service-ip=127.0.0.1"
  798. "--test-exec=${PYTHON} ${CNF}/disco_test.py fastcgi_tcp")
  799. add_test(disco_test_scgi_tcp
  800. disco_test "-c" "${CNF}/proto_test.js"
  801. "--service-api=scgi" "--service-port=8080" "--service-ip=127.0.0.1"
  802. "--test-exec=${PYTHON} ${CNF}/disco_test.py scgi_tcp")
  803. add_test(secure_post_test
  804. secure_post_test "-c" "${CNF}/secure_post_test.js"
  805. "--test-exec=${PYTHON} ${CNF}/secure_post_test.py"
  806. )
  807. if(NOT IS_WINDOWS)
  808. add_test(disco_test_fastcgi_unix
  809. disco_test "-c" "${CNF}/proto_test.js"
  810. "--service-api=fastcgi" "--service-socket=/tmp/cppcms_test_socket"
  811. "--test-exec=${PYTHON} ${CNF}/disco_test.py fastcgi_unix")
  812. add_test(disco_test_scgi_unix
  813. disco_test "-c" "${CNF}/proto_test.js"
  814. "--service-api=scgi" "--service-socket=/tmp/cppcms_test_socket"
  815. "--test-exec=${PYTHON} ${CNF}/disco_test.py scgi_unix")
  816. endif()
  817. if(NOT DISABLE_GZIP)
  818. add_test(gzip_test
  819. gzip_test "--service-api=http" "--http-script=/test"
  820. "--test-exec=${PYTHON} ${CNF}/gzip_test.py")
  821. if(NOT DISABLE_TCPCACHE)
  822. add_test(cache_frontend_test cache_frontend_test)
  823. endif()
  824. endif()
  825. if(NOT IS_WINDOWS)
  826. add_test(cppcms_service_test "${CNF}/service_test" "${PYTHON}" "${CMAKE_CURRENT_BINARY_DIR}")
  827. endif()
  828. add_test(external_session_test external_session_test "${CNF}/external_session_test.js")
  829. foreach(LOC client server both)
  830. foreach(EXP renew browser fixed)
  831. add_test(session_interface_test_${LOC}_${EXP}
  832. session_interface_test -c "${CNF}/session_interface_test.js"
  833. "--session-expire=${EXP}" "--session-location=${LOC}"
  834. "--test-exec=${PYTHON} ${CNF}/session_interface_test.py ${LOC} ${EXP}")
  835. endforeach()
  836. endforeach()
  837. foreach(TYPE async sync nonblocking)
  838. add_test(proto_test_${TYPE}_http
  839. proto_test "-c" "${CNF}/proto_test.js"
  840. "--test-async=${TYPE}" "--service-api=http" "--service-port=8080" "--service-ip=127.0.0.1"
  841. "--test-exec=${PYTHON} ${CNF}/proto_test.py http")
  842. add_test(proto_test_${TYPE}_scgi
  843. proto_test "-c" "${CNF}/proto_test.js"
  844. "--test-async=${TYPE}" "--service-api=scgi" "--service-port=8080" "--service-ip=127.0.0.1"
  845. "--test-exec=${PYTHON} ${CNF}/proto_test.py scgi_tcp")
  846. add_test(proto_test_${TYPE}_fastcgi
  847. proto_test "-c" "${CNF}/proto_test.js"
  848. "--test-async=${TYPE}" "--service-api=fastcgi" "--service-port=8080" "--service-ip=127.0.0.1"
  849. "--test-exec=${PYTHON} ${CNF}/proto_test.py fastcgi_tcp")
  850. if(NOT IS_WINDOWS)
  851. add_test(proto_test_${TYPE}_scgi_unix
  852. proto_test "-c" "${CNF}/proto_test.js"
  853. "--test-async=${TYPE}" "--service-api=scgi" "--service-socket=/tmp/cppcms_test_socket"
  854. "--test-exec=${PYTHON} ${CNF}/proto_test.py scgi_unix")
  855. add_test(proto_test_${TYPE}_fastcgi_unix
  856. proto_test "-c" "${CNF}/proto_test.js"
  857. "--test-async=${TYPE}" "--service-api=fastcgi" "--service-socket=/tmp/cppcms_test_socket"
  858. "--test-exec=${PYTHON} ${CNF}/proto_test.py fastcgi_unix")
  859. endif()
  860. endforeach()
  861. if(NOT DISABLE_SHARED)
  862. add_library(loadable_storage SHARED tests/loadable_storage.cpp)
  863. target_link_libraries(loadable_storage ${CPPCMS_LIB})
  864. if(WIN32 OR CYGWIN)
  865. set_target_properties(loadable_storage PROPERTIES COMPILE_DEFINITIONS DLL_EXPORT)
  866. endif()
  867. add_test(loadable_storage_pass
  868. loadable_storage_test
  869. --service-api=http
  870. --session-location=server
  871. --session-server-storage=external
  872. "--session-server-shared_object=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}loadable_storage${CMAKE_SHARED_LIBRARY_SUFFIX}"
  873. --session-server-entry_point=my_sessions_generator
  874. --session-server-settings-must_be_set=false
  875. )
  876. add_test(loadable_storage_fail
  877. loadable_storage_test
  878. --service-api=http
  879. --session-location=server
  880. --session-server-storage=external
  881. "--session-server-shared_object=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}loadable_storage${CMAKE_SHARED_LIBRARY_SUFFIX}"
  882. --session-server-entry_point=my_sessions_generator
  883. --session-server-settings-must_be_set_incorrect=false
  884. )
  885. set_tests_properties(loadable_storage_fail PROPERTIES WILL_FAIL TRUE)
  886. endif()
  887. set(TESTS_WITH_TIMEOUT
  888. forwarder_test
  889. jsonrpc_test
  890. proto_test_sync_http
  891. proto_test_async_http
  892. proto_test_sync_scgi
  893. proto_test_async_scgi)
  894. if(NOT DISABLE_TCPCACHE)
  895. set(TESTS_WITH_TIMEOUT ${TESTS_WITH_TIMEOUT} cache_backend_test)
  896. endif()
  897. set_tests_properties(
  898. ${TESTS_WITH_TIMEOUT}
  899. PROPERTIES TIMEOUT 120)
  900. if(NOT IS_WINDOWS)
  901. set_tests_properties(
  902. proto_test_sync_scgi_unix
  903. proto_test_async_scgi_unix
  904. PROPERTIES TIMEOUT 120)
  905. endif()