PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/CMakeLists.txt

http://github.com/bengardner/uncrustify
CMake | 297 lines | 242 code | 24 blank | 31 comment | 15 complexity | a3c18986f3126e5aa185324ec9a8e54b MD5 | raw file
Possible License(s): GPL-2.0
  1. cmake_minimum_required(VERSION 2.8)
  2. project(uncrustify)
  3. if("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}")
  4. message(FATAL_ERROR "
  5. In-source builds are not supported, please remove the `CMakeFiles'
  6. folder and `CMakeCache.txt', and create a folder for the build:
  7. mkdir build; cd build; cmake ..
  8. ")
  9. endif()
  10. include(CheckCXXCompilerFlag)
  11. include(CheckIncludeFileCXX)
  12. include(CheckSymbolExists)
  13. include(CheckCXXSymbolExists)
  14. include(CheckTypeSize)
  15. include(CTest)
  16. #
  17. # Check compiler flags
  18. #
  19. if(MSVC)
  20. add_definitions(/D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS /wd4267)
  21. elseif(CMAKE_COMPILER_IS_GNUCXX)
  22. add_definitions(-std=gnu++0x)
  23. set(gcc_warning_flags
  24. -Wall
  25. -Wextra
  26. -Wshadow
  27. -Wpointer-arith
  28. -Wcast-qual
  29. -Wcast-align
  30. -Wc++11-extensions
  31. )
  32. foreach(flag ${gcc_warning_flags})
  33. string(REGEX REPLACE "[^a-zA-Z0-9]+" "_" flag_var "CXXFLAG_${flag}")
  34. CHECK_CXX_COMPILER_FLAG("${flag}" ${flag_var})
  35. if(${flag_var})
  36. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
  37. endif()
  38. unset(flag_var)
  39. endforeach()
  40. unset(gcc_warning_flags)
  41. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  42. add_definitions(-std=gnu++0x)
  43. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
  44. endif()
  45. if(ENABLE_SANITIZER)
  46. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1 -fno-omit-frame-pointer -fsanitize=${ENABLE_SANITIZER}")
  47. endif()
  48. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  49. #
  50. # Determine config
  51. #
  52. if(WIN32)
  53. # Windows builds use src/windows_compat.h instead of config.h
  54. else()
  55. # Generate config.h
  56. set(avail_headers "")
  57. set(headers
  58. inttypes.h
  59. memory.h
  60. stdint.h
  61. stdlib.h
  62. strings.h
  63. string.h
  64. sys/stat.h
  65. sys/types.h
  66. unistd.h
  67. utime.h
  68. )
  69. foreach(header ${headers})
  70. string(TOUPPER "${header}" header_uc)
  71. string(REGEX REPLACE "[^A-Z0-9_]" "_" include_var "HAVE_${header_uc}")
  72. check_include_file_cxx("${header}" ${include_var})
  73. if(${include_var})
  74. list(APPEND avail_headers ${header})
  75. endif()
  76. unset(include_var)
  77. unset(header_uc)
  78. endforeach()
  79. unset(headers)
  80. check_include_file("stdbool.h" HAVE_STDBOOL_H)
  81. set(symbols
  82. memset
  83. strcasecmp
  84. strchr
  85. strdup
  86. strerror
  87. strtol
  88. strtoul
  89. )
  90. foreach(symbol ${symbols})
  91. string(TOUPPER "${symbol}" symbol_uc)
  92. string(REGEX REPLACE "[^A-Z0-9_]" "_" symbol_var "HAVE_${symbol_uc}")
  93. check_cxx_symbol_exists("${symbol}" "${avail_headers}" ${symbol_var})
  94. unset(symbol_var)
  95. unset(symbol_uc)
  96. endforeach()
  97. unset(symbols)
  98. unset(avail_headers)
  99. check_type_size(_Bool _BOOL LANGUAGE C)
  100. configure_file(src/config.h.in config.h @ONLY)
  101. endif()
  102. #
  103. # Generate uncrustify_version.h
  104. #
  105. set(PACKAGE_VERSION "0.64")
  106. if (MAKE_VERSION)
  107. find_package(PythonInterp REQUIRED)
  108. execute_process(
  109. COMMAND ${PYTHON_EXECUTABLE} scripts/make_version.py
  110. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  111. RESULT_VARIABLE make_version_error
  112. OUTPUT_VARIABLE make_version_output
  113. )
  114. if (make_version_error)
  115. message(WARNING ${make_version_output})
  116. else()
  117. if (${make_version_output} MATCHES "full version: (.*)\n tag version: (.*)")
  118. set(full_version ${CMAKE_MATCH_1})
  119. set(tag_version ${CMAKE_MATCH_2})
  120. message(STATUS "Uncrustify full version: ${full_version}")
  121. message(STATUS "Uncrustify tag version: ${tag_version}")
  122. endif()
  123. set(PACKAGE_VERSION "${full_version}")
  124. endif()
  125. endif()
  126. configure_file(src/uncrustify_version.h.in uncrustify_version.h @ONLY)
  127. #
  128. # Generate token_names.h
  129. #
  130. add_custom_command(
  131. OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/token_names.h"
  132. COMMAND ${CMAKE_COMMAND}
  133. "-Dsrc_file=${PROJECT_SOURCE_DIR}/src/token_enum.h"
  134. "-Ddst_file=${CMAKE_CURRENT_BINARY_DIR}/token_names.h"
  135. -P "${PROJECT_SOURCE_DIR}/cmake/GenerateTokenNames.cmake"
  136. MAIN_DEPENDENCY src/token_enum.h
  137. COMMENT "Generating token_names.h"
  138. )
  139. #
  140. # Uncrustify
  141. #
  142. add_executable(uncrustify
  143. src/align.cpp
  144. src/align_stack.cpp
  145. src/args.cpp
  146. src/backup.cpp
  147. src/braces.cpp
  148. src/brace_cleanup.cpp
  149. src/ChunkStack.cpp
  150. src/chunk_list.cpp
  151. src/combine.cpp
  152. src/compat_posix.cpp
  153. src/compat_win32.cpp
  154. src/defines.cpp
  155. src/detect.cpp
  156. src/indent.cpp
  157. src/keywords.cpp
  158. src/lang_pawn.cpp
  159. src/logger.cpp
  160. src/logmask.cpp
  161. src/md5.cpp
  162. src/newlines.cpp
  163. src/options.cpp
  164. src/options_for_QT.cpp
  165. src/output.cpp
  166. src/parens.cpp
  167. src/parse_frame.cpp
  168. src/punctuators.cpp
  169. src/semicolons.cpp
  170. src/sorting.cpp
  171. src/space.cpp
  172. src/tokenize.cpp
  173. src/tokenize_cleanup.cpp
  174. src/uncrustify.cpp
  175. src/unc_text.cpp
  176. src/unc_tools.cpp
  177. src/unicode.cpp
  178. src/universalindentgui.cpp
  179. src/width.cpp
  180. src/align_stack.h
  181. src/args.h
  182. src/backup.h
  183. src/base_types.h
  184. src/char_table.h
  185. src/ChunkStack.h
  186. src/chunk_list.h
  187. src/ListManager.h
  188. src/logger.h
  189. src/logmask.h
  190. src/log_levels.h
  191. src/md5.h
  192. src/options.h
  193. src/options_for_QT.h
  194. src/prototypes.h
  195. src/punctuators.h
  196. src/token_enum.h
  197. src/uncrustify_types.h
  198. src/unc_ctype.h
  199. src/unc_text.h
  200. src/unc_tools.h
  201. )
  202. if(CMAKE_VERSION VERSION_LESS 2.8.10)
  203. if(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
  204. # Multi-configuration or build type set
  205. set_property(TARGET uncrustify APPEND PROPERTY
  206. COMPILE_DEFINITIONS_DEBUG DEBUG
  207. )
  208. else()
  209. # Single-configuration with no build type set
  210. set_property(TARGET uncrustify APPEND PROPERTY
  211. COMPILE_DEFINITIONS DEBUG
  212. )
  213. endif()
  214. else()
  215. set_property(TARGET uncrustify APPEND PROPERTY
  216. COMPILE_DEFINITIONS $<$<OR:$<CONFIG:Debug>,$<CONFIG:>>:DEBUG>
  217. )
  218. endif()
  219. #
  220. # Generate uncrustify.1
  221. #
  222. configure_file(man/uncrustify.1.in uncrustify.1 @ONLY)
  223. #
  224. # Tests
  225. #
  226. if(BUILD_TESTING)
  227. enable_testing()
  228. add_subdirectory(tests)
  229. endif()
  230. #
  231. # Package
  232. #
  233. set(CPACK_PACKAGE_NAME "uncrustify")
  234. set(CPACK_PACKAGE_VERSION "${PACKAGE_VERSION}")
  235. set(CPACK_PACKAGE_VENDOR "Ben Gardner")
  236. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Code beautifier")
  237. set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.md")
  238. set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/COPYING")
  239. set(CPACK_RESOURCE_FILE_README "${PROJECT_SOURCE_DIR}/README.md")
  240. set(CPACK_SOURCE_IGNORE_FILES "/\\\\.git/;/\\\\.hg/;/tests/results/;/build.*/")
  241. if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
  242. set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY FALSE)
  243. set(CPACK_GENERATOR "ZIP")
  244. endif()
  245. include(CPack)
  246. #
  247. # Install
  248. #
  249. if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
  250. install(TARGETS uncrustify DESTINATION ".")
  251. install(
  252. FILES
  253. "${PROJECT_SOURCE_DIR}/README.md"
  254. "${PROJECT_SOURCE_DIR}/BUGS"
  255. "${PROJECT_SOURCE_DIR}/ChangeLog"
  256. DESTINATION "."
  257. )
  258. install(FILES "${PROJECT_SOURCE_DIR}/documentation/htdocs/index.html"
  259. DESTINATION "doc"
  260. )
  261. install(DIRECTORY "${PROJECT_SOURCE_DIR}/etc/"
  262. DESTINATION "cfg"
  263. FILES_MATCHING PATTERN "*.cfg"
  264. )
  265. else()
  266. include(GNUInstallDirs)
  267. install(TARGETS uncrustify
  268. RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
  269. )
  270. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/uncrustify.1"
  271. DESTINATION "${CMAKE_INSTALL_MANDIR}/man1"
  272. )
  273. endif()