SystemSpecificInformations.cmake 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. # define a set of string with may-be useful readable name
  2. # this file is meant to be included in a CMakeLists.txt
  3. # not as a standalone CMake script
  4. set(SPECIFIC_COMPILER_NAME "")
  5. set(SPECIFIC_SYSTEM_VERSION_NAME "")
  6. set(SPECIFIC_SYSTEM_PREFERED_CPACK_GENERATOR "")
  7. # In the WIN32 case try to guess a "readable system name"
  8. if(WIN32)
  9. set(SPECIFIC_SYSTEM_PREFERED_PACKAGE "NSIS")
  10. # information taken from
  11. # http://www.codeguru.com/cpp/w-p/system/systeminformation/article.php/c8973/
  12. # Win9x series
  13. if(CMAKE_SYSTEM_VERSION MATCHES "4.0")
  14. set(SPECIFIC_SYSTEM_VERSION_NAME "Win95")
  15. endif(CMAKE_SYSTEM_VERSION MATCHES "4.0")
  16. if(CMAKE_SYSTEM_VERSION MATCHES "4.10")
  17. set(SPECIFIC_SYSTEM_VERSION_NAME "Win98")
  18. endif(CMAKE_SYSTEM_VERSION MATCHES "4.10")
  19. if(CMAKE_SYSTEM_VERSION MATCHES "4.90")
  20. set(SPECIFIC_SYSTEM_VERSION_NAME "WinME")
  21. endif(CMAKE_SYSTEM_VERSION MATCHES "4.90")
  22. # WinNTyyy series
  23. if(CMAKE_SYSTEM_VERSION MATCHES "3.0")
  24. set(SPECIFIC_SYSTEM_VERSION_NAME "WinNT351")
  25. endif(CMAKE_SYSTEM_VERSION MATCHES "3.0")
  26. if(CMAKE_SYSTEM_VERSION MATCHES "4.1")
  27. set(SPECIFIC_SYSTEM_VERSION_NAME "WinNT4")
  28. endif(CMAKE_SYSTEM_VERSION MATCHES "4.1")
  29. # Win2000/XP series
  30. if(CMAKE_SYSTEM_VERSION MATCHES "5.0")
  31. set(SPECIFIC_SYSTEM_VERSION_NAME "Win2000")
  32. endif(CMAKE_SYSTEM_VERSION MATCHES "5.0")
  33. if(CMAKE_SYSTEM_VERSION MATCHES "5.1")
  34. set(SPECIFIC_SYSTEM_VERSION_NAME "WinXP")
  35. endif(CMAKE_SYSTEM_VERSION MATCHES "5.1")
  36. if(CMAKE_SYSTEM_VERSION MATCHES "5.2")
  37. set(SPECIFIC_SYSTEM_VERSION_NAME "Win2003")
  38. endif(CMAKE_SYSTEM_VERSION MATCHES "5.2")
  39. # WinVista/7 series
  40. if(CMAKE_SYSTEM_VERSION MATCHES "6.0")
  41. set(SPECIFIC_SYSTEM_VERSION_NAME "WinVISTA")
  42. endif(CMAKE_SYSTEM_VERSION MATCHES "6.0")
  43. if(CMAKE_SYSTEM_VERSION MATCHES "6.1")
  44. set(SPECIFIC_SYSTEM_VERSION_NAME "Win7")
  45. endif(CMAKE_SYSTEM_VERSION MATCHES "6.1")
  46. # Compilers
  47. # taken from http://predef.sourceforge.net/precomp.html#sec34
  48. if(MSVC)
  49. set(SPECIFIC_COMPILER_NAME "MSVC-Unknown-${MSVC_VERSION}")
  50. if(MSVC_VERSION EQUAL 1200)
  51. set(SPECIFIC_COMPILER_NAME "MSVC-6.0")
  52. endif(MSVC_VERSION EQUAL 1200)
  53. if(MSVC_VERSION EQUAL 1300)
  54. set(SPECIFIC_COMPILER_NAME "MSVC-7.0")
  55. endif(MSVC_VERSION EQUAL 1300)
  56. if(MSVC_VERSION EQUAL 1310)
  57. set(SPECIFIC_COMPILER_NAME "MSVC-7.1-2003") #Visual Studio 2003
  58. endif(MSVC_VERSION EQUAL 1310)
  59. if(MSVC_VERSION EQUAL 1400)
  60. set(SPECIFIC_COMPILER_NAME "MSVC-8.0-2005") #Visual Studio 2005
  61. endif(MSVC_VERSION EQUAL 1400)
  62. if(MSVC_VERSION EQUAL 1500)
  63. set(SPECIFIC_COMPILER_NAME "MSVC-9.0-2008") #Visual Studio 2008
  64. endif(MSVC_VERSION EQUAL 1500)
  65. if(MSVC_VERSION EQUAL 1600)
  66. set(SPECIFIC_COMPILER_NAME "MSVC-10.0-2010") #Visual Studio 2010
  67. endif(MSVC_VERSION EQUAL 1600)
  68. endif(MSVC)
  69. if(MINGW)
  70. set(SPECIFIC_COMPILER_NAME "MinGW")
  71. endif(MINGW)
  72. if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
  73. set(SPECIFIC_SYSTEM_VERSION_NAME "${SPECIFIC_SYSTEM_VERSION_NAME}-x86_64")
  74. endif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
  75. endif(WIN32)
  76. # In the Linux case try to guess the distro name/type
  77. # using either lsb_release program or fallback
  78. # to the content of the /etc/issue file
  79. if(UNIX)
  80. if(CMAKE_SYSTEM_NAME MATCHES "Linux")
  81. set(SPECIFIC_SYSTEM_VERSION_NAME "${CMAKE_SYSTEM_NAME}")
  82. set(SPECIFIC_SYSTEM_PREFERED_CPACK_GENERATOR "TGZ")
  83. find_program(LSB_RELEASE_EXECUTABLE lsb_release)
  84. if(LSB_RELEASE_EXECUTABLE)
  85. execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -i
  86. OUTPUT_VARIABLE _TMP_LSB_RELEASE_OUTPUT
  87. ERROR_QUIET
  88. OUTPUT_STRIP_TRAILING_WHITESPACE)
  89. string(REGEX MATCH "Distributor ID:(.*)" DISTRO_ID ${_TMP_LSB_RELEASE_OUTPUT})
  90. string(STRIP "${CMAKE_MATCH_1}" DISTRO_ID)
  91. # replace potential space with underscore
  92. string(REPLACE " " "_" DISTRO_ID "${DISTRO_ID}")
  93. execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -r
  94. OUTPUT_VARIABLE _TMP_LSB_RELEASE_OUTPUT
  95. ERROR_QUIET
  96. OUTPUT_STRIP_TRAILING_WHITESPACE)
  97. string(REGEX MATCH "Release:(.*)" DISTRO_RELEASE ${_TMP_LSB_RELEASE_OUTPUT})
  98. string(STRIP "${CMAKE_MATCH_1}" DISTRO_RELEASE)
  99. execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -c
  100. OUTPUT_VARIABLE _TMP_LSB_RELEASE_OUTPUT
  101. ERROR_QUIET
  102. OUTPUT_STRIP_TRAILING_WHITESPACE)
  103. string(REGEX MATCH "Codename:(.*)" DISTRO_CODENAME ${_TMP_LSB_RELEASE_OUTPUT})
  104. string(STRIP "${CMAKE_MATCH_1}" DISTRO_CODENAME)
  105. elseif (EXISTS "/etc/issue")
  106. set(LINUX_NAME "")
  107. file(READ "/etc/issue" LINUX_ISSUE)
  108. # Fedora case
  109. if(LINUX_ISSUE MATCHES "Fedora")
  110. string(REGEX MATCH "release ([0-9]+)" FEDORA "${LINUX_ISSUE}")
  111. set(DISTRO_ID "Fedora")
  112. set(DISTRO_RELEASE "${CMAKE_MATCH_1}")
  113. # FIXME can we find that in /etc/issue
  114. set(DISTRO_CODENAME "")
  115. endif(LINUX_ISSUE MATCHES "Fedora")
  116. # Ubuntu case
  117. if(LINUX_ISSUE MATCHES "Ubuntu")
  118. string(REGEX MATCH "buntu ([0-9]+\\.[0-9]+)" UBUNTU "${LINUX_ISSUE}")
  119. set(DISTRO_ID "Ubuntu")
  120. set(DISTRO_RELEASE "${CMAKE_MATCH_1}")
  121. # FIXME can we find that in /etc/issue
  122. set(DISTRO_CODENAME "")
  123. endif(LINUX_ISSUE MATCHES "Ubuntu")
  124. # Debian case
  125. if(LINUX_ISSUE MATCHES "Debian")
  126. string(REGEX MATCH "Debian .*ux ([0-9]+\\.[0-9]+)"
  127. DEBIAN "${LINUX_ISSUE}")
  128. set(DISTRO_ID "Debian")
  129. set(DISTRO_RELEASE "${CMAKE_MATCH_1}")
  130. set(DISTRO_CODENAME "")
  131. endif(LINUX_ISSUE MATCHES "Debian")
  132. # Open SuSE case
  133. if(LINUX_ISSUE MATCHES "SUSE")
  134. string(REGEX MATCH "SUSE ([0-9]+\\.[0-9]+)" SUSE "${LINUX_ISSUE}")
  135. set(DISTRO_ID "SUSE")
  136. set(DISTRO_RELEASE "${CMAKE_MATCH_1}")
  137. set(DISTRO_CODENAME "")
  138. endif(LINUX_ISSUE MATCHES "SUSE")
  139. # Mandriva case
  140. # TODO
  141. endif(LSB_RELEASE_EXECUTABLE)
  142. # Now mangle some names
  143. set(LINUX_NAME "${DISTRO_ID}_${DISTRO_RELEASE}")
  144. if(DISTRO_ID MATCHES "Fedora|Mandriva|SUSE|OpenSUSE")
  145. set(SPECIFIC_SYSTEM_PREFERED_CPACK_GENERATOR "RPM")
  146. endif(DISTRO_ID MATCHES "Fedora|Mandriva|SUSE|OpenSUSE")
  147. if(DISTRO_ID MATCHES "Debian|Ubuntu")
  148. set(SPECIFIC_SYSTEM_PREFERED_CPACK_GENERATOR "DEB")
  149. endif(DISTRO_ID MATCHES "Debian|Ubuntu")
  150. if(LINUX_NAME)
  151. set(SPECIFIC_SYSTEM_VERSION_NAME "${CMAKE_SYSTEM_NAME}-${LINUX_NAME}")
  152. endif(LINUX_NAME)
  153. endif(CMAKE_SYSTEM_NAME MATCHES "Linux")
  154. set(SPECIFIC_SYSTEM_VERSION_NAME
  155. "${SPECIFIC_SYSTEM_VERSION_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
  156. set(SPECIFIC_COMPILER_NAME "")
  157. endif(UNIX)