No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 

135 líneas
5.1 KiB

  1. # This cmake module is used to set pedantic flags for the C and C++ compiler of your system
  2. If ( __PEDANTIC_INCLUDED )
  3. Return ( )
  4. EndIf ( )
  5. set ( __PEDANTIC_INCLUDED TRUE )
  6. Include (CheckCCompilerFlag)
  7. Include (CheckCXXCompilerFlag)
  8. # Macro to replace the '-Wno' perfix of a flag with '-W'
  9. # VAR_IN - Input variable
  10. # VAR_OUT - Output variable
  11. Macro (__PEDANTIC_INVERT_WNO_FLAG VAR_IN VAR_OUT)
  12. If (${VAR_IN} MATCHES "-Wno")
  13. String (REPLACE "-Wno-" "-W" ${VAR_OUT} ${VAR_IN})
  14. Else ()
  15. Set (${VAR_OUT} ${VAR_IN})
  16. EndIf ()
  17. EndMacro ()
  18. # Macro to create a unique name for the given flag.
  19. # PREFIX - Prefix to add to the name
  20. # FLAG - Flag to convert to a valid variable name
  21. # OUTPUT - Variable to store output in
  22. Macro (__PEDANTIC_MAKE_UNIQUE_NAME PREFIX FLAG OUTPUT)
  23. String (REGEX REPLACE "[^0-9a-zA-Z]" "_" TMP_NAME ${FLAG})
  24. String (SUBSTRING ${TMP_NAME} 1 -1 TMP_NAME)
  25. String (TOUPPER ${TMP_NAME} TMP_NAME)
  26. Set (TMP_NAME "${PREFIX}_${TMP_NAME}")
  27. Set (${OUTPUT} ${TMP_NAME})
  28. EndMacro ()
  29. # Macro to check if the C compiler supports the given flag.
  30. # If so the flag is added to the PEDANTIC_C_FLAGS variable.
  31. # FLAG - Compiler flag to check
  32. Macro (__PEDANTIC_CHECK_AND_ADD_C_FLAG FLAG)
  33. __PEDANTIC_MAKE_UNIQUE_NAME("HAVE_C_FLAG" ${FLAG} FLAG_NAME)
  34. __PEDANTIC_INVERT_WNO_FLAG(${FLAG} TEST_FLAG)
  35. Set (OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
  36. Set (CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${TEST_FLAG} -Werror")
  37. CHECK_CXX_COMPILER_FLAG(${TEST_FLAG} ${FLAG_NAME})
  38. Set (CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
  39. If (${FLAG_NAME})
  40. Set (PEDANTIC_C_FLAGS "${PEDANTIC_C_FLAGS} ${FLAG}")
  41. EndIf ( )
  42. EndMacro ()
  43. # Macro to check if the C++ compiler supports the given flag.
  44. # If so the flag is added to the PEDANTIC_C_FLAGS variable.
  45. # FLAG - Compiler flag to check
  46. Macro (__PEDANTIC_CHECK_AND_ADD_CXX_FLAG FLAG)
  47. __PEDANTIC_MAKE_UNIQUE_NAME("HAVE_CXX_FLAG" ${FLAG} FLAG_NAME)
  48. __PEDANTIC_INVERT_WNO_FLAG(${FLAG} TEST_FLAG)
  49. Set (OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
  50. Set (CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${TEST_FLAG} -Werror")
  51. CHECK_CXX_COMPILER_FLAG(${TEST_FLAG} ${FLAG_NAME})
  52. Set (CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
  53. If (${FLAG_NAME})
  54. Set (PEDANTIC_CXX_FLAGS "${PEDANTIC_CXX_FLAGS} ${FLAG}")
  55. EndIf ( )
  56. EndMacro ( )
  57. Set (PEDANTIC_C_FLAGS "")
  58. Set (PEDANTIC_CXX_FLAGS "")
  59. # Function to apply all pedantic flags to the compiler flags
  60. # C - only add C compiler flags
  61. # CXX - only add C++ compiler flags
  62. # ALL - add all compiler flags
  63. Function ( Pedantic_Apply_Flags )
  64. Set ( OPTIONS C CXX ALL )
  65. Set ( ONE_VALUE_ARGS )
  66. Set ( MULTI_VALUE_ARGS )
  67. CMake_Parse_Arguments ( ARG "${OPTIONS}" "${ONE_VALUE_ARGS}" "${MULTI_VALUE_ARGS}" ${ARGN} )
  68. If ( ARG_C OR ARG_ALL )
  69. Set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PEDANTIC_C_FLAGS}" PARENT_SCOPE )
  70. EndIf ( )
  71. If ( ARG_CXX OR ARG_ALL )
  72. Set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PEDANTIC_CXX_FLAGS}" PARENT_SCOPE )
  73. EndIf ( )
  74. EndFunction ( )
  75. Enable_Language ( C )
  76. Enable_Language ( CXX )
  77. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-g)
  78. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wall)
  79. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wextra)
  80. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wconversion)
  81. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Werror)
  82. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wno-unused-parameter)
  83. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wbad-function-cast)
  84. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wcast-align)
  85. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wcast-qual)
  86. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wconversion)
  87. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wdouble-promotion)
  88. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wfloat-equal)
  89. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wnested-externs)
  90. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wno-attributes)
  91. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wno-builtin-macro-redefined)
  92. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wno-vla)
  93. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wno-pragmas)
  94. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wno-unknown-pragmas)
  95. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wold-style-definition)
  96. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Woverlength-strings)
  97. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wshadow)
  98. __PEDANTIC_CHECK_AND_ADD_C_FLAG(-Wwrite-strings)
  99. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-ftemplate-depth=2000)
  100. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-g)
  101. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wall)
  102. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wextra)
  103. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wconversion)
  104. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Werror)
  105. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wno-reorder)
  106. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wno-unused-parameter)
  107. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wcast-align)
  108. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wcast-qual)
  109. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wconversion)
  110. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wdouble-promotion)
  111. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wfloat-equal)
  112. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wno-attributes)
  113. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wno-builtin-macro-redefined)
  114. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wno-vla)
  115. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wno-pragmas)
  116. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wno-unknown-pragmas)
  117. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Woverlength-strings)
  118. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wshadow)
  119. __PEDANTIC_CHECK_AND_ADD_CXX_FLAG(-Wwrite-strings)