CMakeLists.txt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. # Copyright 2015 The RE2 Authors. All Rights Reserved.
  2. # Use of this source code is governed by a BSD-style
  3. # license that can be found in the LICENSE file.
  4. # Old enough to support Ubuntu Xenial.
  5. cmake_minimum_required(VERSION 3.5.1)
  6. project(RE2 CXX)
  7. include(CTest)
  8. include(GNUInstallDirs)
  9. if(NOT CMAKE_CXX_STANDARD)
  10. set(CMAKE_CXX_STANDARD 11)
  11. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  12. endif()
  13. option(BUILD_SHARED_LIBS "build shared libraries" OFF)
  14. option(USEPCRE "use PCRE in tests and benchmarks" OFF)
  15. # CMake seems to have no way to enable/disable testing per subproject,
  16. # so we provide an option similar to BUILD_TESTING, but just for RE2.
  17. option(RE2_BUILD_TESTING "enable testing for RE2" ON)
  18. # ABI version
  19. # http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
  20. set(SONAME 9)
  21. set(EXTRA_TARGET_LINK_LIBRARIES)
  22. if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
  23. if(MSVC_VERSION LESS 1900)
  24. message(FATAL_ERROR "you need Visual Studio 2015 or later")
  25. endif()
  26. if(BUILD_SHARED_LIBS)
  27. # See http://www.kitware.com/blog/home/post/939 for details.
  28. set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
  29. endif()
  30. # CMake defaults to /W3, but some users like /W4 (or /Wall) and /WX,
  31. # so we disable various warnings that aren't particularly helpful.
  32. add_compile_options(/wd4100 /wd4201 /wd4456 /wd4457 /wd4702 /wd4815)
  33. # Without a byte order mark (BOM), Visual Studio assumes that the source
  34. # file is encoded using the current user code page, so we specify UTF-8.
  35. add_compile_options(/utf-8)
  36. endif()
  37. if(WIN32)
  38. add_definitions(-DUNICODE -D_UNICODE -DSTRICT -DNOMINMAX)
  39. add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS)
  40. elseif(UNIX)
  41. set(THREADS_PREFER_PTHREAD_FLAG ON)
  42. find_package(Threads REQUIRED)
  43. endif()
  44. if(USEPCRE)
  45. add_definitions(-DUSEPCRE)
  46. list(APPEND EXTRA_TARGET_LINK_LIBRARIES pcre)
  47. endif()
  48. set(RE2_SOURCES
  49. re2/bitstate.cc
  50. re2/compile.cc
  51. re2/dfa.cc
  52. re2/filtered_re2.cc
  53. re2/mimics_pcre.cc
  54. re2/nfa.cc
  55. re2/onepass.cc
  56. re2/parse.cc
  57. re2/perl_groups.cc
  58. re2/prefilter.cc
  59. re2/prefilter_tree.cc
  60. re2/prog.cc
  61. re2/re2.cc
  62. re2/regexp.cc
  63. re2/set.cc
  64. re2/simplify.cc
  65. re2/stringpiece.cc
  66. re2/tostring.cc
  67. re2/unicode_casefold.cc
  68. re2/unicode_groups.cc
  69. util/rune.cc
  70. util/strutil.cc
  71. )
  72. add_library(re2 ${RE2_SOURCES})
  73. target_include_directories(re2 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
  74. set_target_properties(re2 PROPERTIES SOVERSION ${SONAME} VERSION ${SONAME}.0.0)
  75. add_library(re2::re2 ALIAS re2)
  76. if(UNIX)
  77. target_link_libraries(re2 PUBLIC Threads::Threads)
  78. endif()
  79. if(RE2_BUILD_TESTING)
  80. set(TESTING_SOURCES
  81. re2/testing/backtrack.cc
  82. re2/testing/dump.cc
  83. re2/testing/exhaustive_tester.cc
  84. re2/testing/null_walker.cc
  85. re2/testing/regexp_generator.cc
  86. re2/testing/string_generator.cc
  87. re2/testing/tester.cc
  88. util/pcre.cc
  89. )
  90. add_library(testing STATIC ${TESTING_SOURCES})
  91. target_link_libraries(testing PUBLIC re2)
  92. set(TEST_TARGETS
  93. charclass_test
  94. compile_test
  95. filtered_re2_test
  96. mimics_pcre_test
  97. parse_test
  98. possible_match_test
  99. re2_test
  100. re2_arg_test
  101. regexp_test
  102. required_prefix_test
  103. search_test
  104. set_test
  105. simplify_test
  106. string_generator_test
  107. dfa_test
  108. exhaustive1_test
  109. exhaustive2_test
  110. exhaustive3_test
  111. exhaustive_test
  112. random_test
  113. )
  114. set(BENCHMARK_TARGETS
  115. regexp_benchmark
  116. )
  117. foreach(target ${TEST_TARGETS})
  118. add_executable(${target} re2/testing/${target}.cc util/test.cc)
  119. target_link_libraries(${target} testing ${EXTRA_TARGET_LINK_LIBRARIES})
  120. add_test(NAME ${target} COMMAND ${target})
  121. endforeach()
  122. foreach(target ${BENCHMARK_TARGETS})
  123. add_executable(${target} re2/testing/${target}.cc util/benchmark.cc)
  124. target_link_libraries(${target} testing ${EXTRA_TARGET_LINK_LIBRARIES})
  125. endforeach()
  126. endif()
  127. set(RE2_HEADERS
  128. re2/filtered_re2.h
  129. re2/re2.h
  130. re2/set.h
  131. re2/stringpiece.h
  132. )
  133. install(FILES ${RE2_HEADERS}
  134. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/re2)
  135. install(TARGETS re2 EXPORT re2Config
  136. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  137. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  138. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  139. INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
  140. install(EXPORT re2Config
  141. DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/re2 NAMESPACE re2::)