CMakeLists.txt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. project(subconverter LANGUAGES CXX)
  2. cmake_minimum_required(VERSION 3.4)
  3. SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
  4. INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include/")
  5. IF(NOT CMAKE_BUILD_TYPE)
  6. SET(CMAKE_BUILD_TYPE Release)
  7. ENDIF()
  8. SET(CMAKE_CXX_STANDARD 17)
  9. IF (NOT MSVC)
  10. ADD_COMPILE_OPTIONS(-Wall -Wextra -Wno-unused-parameter -Wno-unused-result)
  11. ELSE()
  12. ADD_COMPILE_OPTIONS(/W4)
  13. ENDIF()
  14. #remove std::regex support since it is not compatible with group modifiers and slow
  15. #OPTION(USING_STD_REGEX "Use std::regex from C++ library instead of PCRE2." OFF)
  16. OPTION(USING_MALLOC_TRIM "Call malloc_trim after processing request to lower memory usage (Your system must support malloc_trim)." OFF)
  17. #now using internal MD5 calculation
  18. #OPTION(USING_MBEDTLS "Use mbedTLS instead of OpenSSL for MD5 calculation." OFF)
  19. INCLUDE(CheckCXXSourceCompiles)
  20. CHECK_CXX_SOURCE_COMPILES(
  21. "
  22. #include<string>
  23. void main(){std::to_string(0);}
  24. " HAVE_TO_STRING)
  25. IF(HAVE_TO_STRING)
  26. ADD_DEFINITIONS(-DHAVE_TO_STRING)
  27. ENDIF()
  28. IF(USING_MALLOC_TRIM)
  29. ADD_DEFINITIONS(-DMALLOC_TRIM)
  30. ENDIF()
  31. ADD_EXECUTABLE(subconverter
  32. src/interfaces.cpp
  33. src/logger.cpp
  34. src/main.cpp
  35. src/md5.cpp
  36. src/misc.cpp
  37. src/multithread.cpp
  38. src/nodemanip.cpp
  39. src/script.cpp
  40. src/speedtestutil.cpp
  41. src/subexport.cpp
  42. src/templates.cpp
  43. src/upload.cpp
  44. src/webget.cpp
  45. src/webserver_libevent.cpp)
  46. INCLUDE_DIRECTORIES(src)
  47. LINK_DIRECTORIES(${CMAKE_SOURCE_DIR})
  48. FIND_PACKAGE(PkgConfig REQUIRED)
  49. SET(THREADS_PREFER_PTHREAD_FLAG ON)
  50. FIND_PACKAGE(Threads REQUIRED)
  51. TARGET_LINK_LIBRARIES(subconverter ${CMAKE_THREAD_LIBS_INIT})
  52. PKG_CHECK_MODULES(LIBEVENT libevent>=2.1.10 REQUIRED)
  53. FIND_PATH(LIBEVENT_INCLUDE_DIR NAMES event.h PATHS ${LIBEVENT_INCLUDE_DIRS})
  54. FIND_LIBRARY(LIBEVENT_LIBRARY NAMES event PATHS ${LIBEVENT_LIBRARY_DIRS})
  55. LINK_DIRECTORIES(${LIBEVENT_LIBRARY_DIRS})
  56. INCLUDE_DIRECTORIES(${LIBEVENT_INCLUDE_DIR})
  57. TARGET_LINK_LIBRARIES(subconverter ${LIBEVENT_LIBRARY})
  58. FIND_PACKAGE(CURL 7.54.0 REQUIRED)
  59. LINK_DIRECTORIES(${CURL_LIBRARY_DIRS})
  60. INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS})
  61. TARGET_LINK_LIBRARIES(subconverter CURL::libcurl)
  62. ADD_DEFINITIONS(-DCURL_STATICLIB)
  63. FIND_PACKAGE(Rapidjson REQUIRED)
  64. INCLUDE_DIRECTORIES(${RAPIDJSON_INCLUDE_DIRS})
  65. PKG_CHECK_MODULES(YAML_CPP yaml-cpp>=0.6.3 REQUIRED)
  66. FIND_LIBRARY(YAML_CPP_LIBRARY NAMES yaml-cpp yaml-cppd PATHS ${YAML_CPP_LIBRARY_DIRS})
  67. LINK_DIRECTORIES(${YAML_CPP_LIBRARY_DIRS})
  68. INCLUDE_DIRECTORIES(${YAML_CPP_INCLUDE_DIRS})
  69. TARGET_LINK_LIBRARIES(subconverter ${YAML_CPP_LIBRARY})
  70. #IF(USING_STD_REGEX STREQUAL "ON")
  71. # ADD_DEFINITIONS(-DUSE_STD_REGEX)
  72. #ELSE()
  73. FIND_PACKAGE(PCRE2 REQUIRED)
  74. INCLUDE_DIRECTORIES(${PCRE2_INCLUDE_DIRS})
  75. TARGET_LINK_LIBRARIES(subconverter ${PCRE2_LIBRARY})
  76. ADD_DEFINITIONS(-DPCRE2_STATIC)
  77. #ENDIF()
  78. FIND_PACKAGE(Duktape REQUIRED)
  79. INCLUDE_DIRECTORIES(${DUKTAPE_INCLUDE_DIRS})
  80. TARGET_LINK_LIBRARIES(subconverter ${DUKTAPE_LIBRARIES})
  81. IF(WIN32)
  82. TARGET_LINK_LIBRARIES(subconverter wsock32 ws2_32)
  83. ELSE()
  84. INCLUDE(GNUInstallDirs)
  85. INSTALL(TARGETS subconverter DESTINATION ${CMAKE_INSTALL_BINDIR}/subconverter)
  86. INSTALL(DIRECTORY base/ DESTINATION ${CMAKE_INSTALL_BINDIR}/subconverter FILES_MATCHING PATTERN "*")
  87. ENDIF()