aboutsummaryrefslogtreecommitdiff
path: root/src/CMakeLists.txt
blob: d4d7d1985b9f2deabb2109aa805804344e241611 (plain)
  1. cmake_minimum_required(VERSION 2.8)
  2. set(LIBRARY "libcmark")
  3. set(HEADERS
  4. cmark.h
  5. ast.h
  6. buffer.h
  7. node.h
  8. chunk.h
  9. references.h
  10. debug.h
  11. bench.h
  12. utf8.h
  13. scanners.h
  14. inlines.h
  15. html/html_unescape.h
  16. html/houdini.h
  17. )
  18. set(LIBRARY_SOURCES
  19. cmark.c
  20. node.c
  21. blocks.c
  22. inlines.c
  23. print.c
  24. scanners.c
  25. scanners.re
  26. utf8.c
  27. buffer.c
  28. references.c
  29. html/html.c
  30. html/html_unescape.gperf
  31. html/houdini_href_e.c
  32. html/houdini_html_e.c
  33. html/houdini_html_u.c
  34. ${HEADERS}
  35. )
  36. set(PROGRAM "cmark")
  37. set(PROGRAM_SOURCES
  38. ${LIBRARY_SOURCES}
  39. main.c
  40. )
  41. include_directories(. html ${CMAKE_CURRENT_BINARY_DIR})
  42. set(RE2C re2c)
  43. if (MSVC)
  44. file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} DOS_CURRENT_SOURCE_DIR)
  45. add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/scanners.c
  46. DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/scanners.re
  47. COMMAND ${RE2C} --case-insensitive -b -i ${DOS_CURRENT_SOURCE_DIR}\\scanners.re >${DOS_CURRENT_SOURCE_DIR}\\scanners.c)
  48. else(MSVC)
  49. add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/scanners.c
  50. DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/scanners.re
  51. COMMAND ${RE2C} --case-insensitive -b -i ${CMAKE_CURRENT_SOURCE_DIR}/scanners.re >${CMAKE_CURRENT_SOURCE_DIR}/scanners.c)
  52. endif(MSVC)
  53. include (GenerateExportHeader)
  54. add_executable(${PROGRAM} ${PROGRAM_SOURCES})
  55. add_compiler_export_flags()
  56. # Disable the PUBLIC declarations when compiling the executable:
  57. set_target_properties(${PROGRAM} PROPERTIES
  58. COMPILE_FLAGS -DCMARK_STATIC_DEFINE)
  59. if (${CMAKE_MAJOR_VERSION} GREATER 1 AND ${CMAKE_MINOR_VERSION} GREATER 8)
  60. set(CMAKE_C_VISIBILITY_PRESET hidden)
  61. set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
  62. elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  63. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
  64. endif ()
  65. add_library(${LIBRARY} SHARED ${LIBRARY_SOURCES})
  66. set_target_properties(${LIBRARY}
  67. PROPERTIES OUTPUT_NAME "cmark")
  68. set_property(TARGET ${LIBRARY}
  69. APPEND PROPERTY MACOSX_RPATH true)
  70. generate_export_header(${LIBRARY}
  71. BASE_NAME ${PROJECT_NAME})
  72. if (MSVC)
  73. set_property(TARGET ${PROGRAM}
  74. APPEND PROPERTY LINK_FLAGS /INCREMENTAL:NO)
  75. endif(MSVC)
  76. install(TARGETS ${PROGRAM} ${LIBRARY}
  77. RUNTIME DESTINATION bin
  78. LIBRARY DESTINATION lib
  79. )
  80. install(FILES cmark.h ${CMAKE_CURRENT_BINARY_DIR}/cmark_export.h
  81. DESTINATION include
  82. )
  83. # Feature tests
  84. include(CheckIncludeFile)
  85. include(CheckCSourceCompiles)
  86. CHECK_INCLUDE_FILE(stdbool.h HAVE_STDBOOL_H)
  87. CHECK_C_SOURCE_COMPILES(
  88. "int main() { __builtin_expect(0,0); return 0; }"
  89. HAVE___BUILTIN_EXPECT)
  90. CHECK_C_SOURCE_COMPILES("
  91. int f(void) __attribute__ (());
  92. int main() { return 0; }
  93. " HAVE___ATTRIBUTE__)
  94. CONFIGURE_FILE(
  95. ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
  96. ${CMAKE_CURRENT_BINARY_DIR}/config.h)
  97. # Always compile with warnings
  98. if(MSVC)
  99. # Force to always compile with W4
  100. if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
  101. string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
  102. else()
  103. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
  104. endif()
  105. elseif(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  106. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c99 -pedantic")
  107. endif()
  108. # Compile as C++ under MSVC
  109. if(MSVC)
  110. set(CMAKE_C_FLAGS "/TP")
  111. endif()
  112. if($ENV{TIMER})
  113. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTIMER=1")
  114. endif($ENV{TIMER})