GetDate.cmake 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. cmake_minimum_required(VERSION 2.8.11)
  2. macro(GET_DATE)
  3. #
  4. # All macro arguments are optional.
  5. # If there's an ARGV0, use it as GD_PREFIX. Default = 'GD_'
  6. # If there's an ARGV1, use it as ${GD_PREFIX}VERBOSE. Default = '0'
  7. #
  8. # If the date can be retrieved and parsed successfully, this macro
  9. # will set the following CMake variables:
  10. #
  11. # GD_PREFIX
  12. # ${GD_PREFIX}PREFIX (if '${GD_PREFIX}' is not 'GD_'...!)
  13. # ${GD_PREFIX}VERBOSE
  14. #
  15. # ${GD_PREFIX}OV
  16. #
  17. # ${GD_PREFIX}REGEX
  18. # ${GD_PREFIX}YEAR
  19. # ${GD_PREFIX}MONTH
  20. # ${GD_PREFIX}DAY
  21. # ${GD_PREFIX}HOUR
  22. # ${GD_PREFIX}MINUTE
  23. # ${GD_PREFIX}SECOND
  24. #
  25. # Caller can then use these variables to construct names based on
  26. # date and time stamps...
  27. #
  28. # If there's an ARGV0, use it as GD_PREFIX:
  29. #
  30. set(GD_PREFIX "GD_")
  31. if(NOT "${ARGV0}" STREQUAL "")
  32. set(GD_PREFIX "${ARGV0}")
  33. endif()
  34. if(NOT "${GD_PREFIX}" STREQUAL "GD_")
  35. set(${GD_PREFIX}PREFIX "${GD_PREFIX}")
  36. endif()
  37. # If there's an ARGV1, use it as ${GD_PREFIX}VERBOSE:
  38. #
  39. set(${GD_PREFIX}VERBOSE "0")
  40. if(NOT "${ARGV1}" STREQUAL "")
  41. set(${GD_PREFIX}VERBOSE "${ARGV1}")
  42. endif()
  43. # Retrieve the current date and time in the format:
  44. #
  45. # 01/12/2006 08:55:12
  46. # mm/dd/YYYY HH:MM:SS
  47. #
  48. unset(ENV{SOURCE_DATE_EPOCH})
  49. string(TIMESTAMP "${GD_PREFIX}OV" "%m/%d/%Y %H:%M:%S")
  50. if(${GD_PREFIX}VERBOSE)
  51. message(STATUS "")
  52. message(STATUS "<GET_DATE>")
  53. message(STATUS "")
  54. message(STATUS "GD_PREFIX='${GD_PREFIX}'")
  55. if(NOT "${GD_PREFIX}" STREQUAL "GD_")
  56. message(STATUS "${GD_PREFIX}PREFIX='${${GD_PREFIX}PREFIX}'")
  57. endif()
  58. message(STATUS "${GD_PREFIX}VERBOSE='${${GD_PREFIX}VERBOSE}'")
  59. message(STATUS "")
  60. message(STATUS "${GD_PREFIX}OV='${${GD_PREFIX}OV}'")
  61. message(STATUS "")
  62. endif()
  63. #
  64. # Extract six individual components by matching a regex with paren groupings.
  65. # Use the replace functionality and \\1 through \\6 to extract components.
  66. #
  67. set(${GD_PREFIX}REGEX "([^/]+)/([^/]+)/([^ ]+) +([^:]+):([^:]+):([^\\.]+)")
  68. string(REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\1" ${GD_PREFIX}MONTH "${${GD_PREFIX}OV}")
  69. string(REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\2" ${GD_PREFIX}DAY "${${GD_PREFIX}OV}")
  70. string(REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\3" ${GD_PREFIX}YEAR "${${GD_PREFIX}OV}")
  71. string(REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\4" ${GD_PREFIX}HOUR "${${GD_PREFIX}OV}")
  72. string(REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\5" ${GD_PREFIX}MINUTE "${${GD_PREFIX}OV}")
  73. string(REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\6" ${GD_PREFIX}SECOND "${${GD_PREFIX}OV}")
  74. if(${GD_PREFIX}VERBOSE)
  75. message(STATUS "${GD_PREFIX}REGEX='${${GD_PREFIX}REGEX}'")
  76. message(STATUS "${GD_PREFIX}YEAR='${${GD_PREFIX}YEAR}'")
  77. message(STATUS "${GD_PREFIX}MONTH='${${GD_PREFIX}MONTH}'")
  78. message(STATUS "${GD_PREFIX}DAY='${${GD_PREFIX}DAY}'")
  79. message(STATUS "${GD_PREFIX}HOUR='${${GD_PREFIX}HOUR}'")
  80. message(STATUS "${GD_PREFIX}MINUTE='${${GD_PREFIX}MINUTE}'")
  81. message(STATUS "${GD_PREFIX}SECOND='${${GD_PREFIX}SECOND}'")
  82. message(STATUS "")
  83. message(STATUS "Counters that change...")
  84. message(STATUS "")
  85. message(STATUS " every second : ${${GD_PREFIX}YEAR}${${GD_PREFIX}MONTH}${${GD_PREFIX}DAY}${${GD_PREFIX}HOUR}${${GD_PREFIX}MINUTE}${${GD_PREFIX}SECOND}")
  86. message(STATUS " daily : ${${GD_PREFIX}YEAR}${${GD_PREFIX}MONTH}${${GD_PREFIX}DAY}")
  87. message(STATUS " monthly : ${${GD_PREFIX}YEAR}${${GD_PREFIX}MONTH}")
  88. message(STATUS " annually : ${${GD_PREFIX}YEAR}")
  89. message(STATUS "")
  90. endif()
  91. if(${GD_PREFIX}VERBOSE)
  92. message(STATUS "</GET_DATE>")
  93. message(STATUS "")
  94. endif()
  95. endmacro()
  96. macro(ADD_SECONDS sec)
  97. set(new_min ${${GD_PREFIX}MINUTE})
  98. set(new_hr ${${GD_PREFIX}HOUR})
  99. math(EXPR new_sec "${sec} + ${${GD_PREFIX}SECOND}")
  100. while(${new_sec} GREATER_EQUAL 60)
  101. math(EXPR new_sec "${new_sec} - 60")
  102. math(EXPR new_min "${${GD_PREFIX}MINUTE} + 1")
  103. endwhile()
  104. while(${new_min} GREATER_EQUAL 60)
  105. math(EXPR new_min "${new_min} - 60")
  106. math(EXPR new_hr "${${GD_PREFIX}HOUR} + 1")
  107. endwhile()
  108. math(EXPR new_hr "${new_hr} % 24")
  109. # Pad the H, M, S if needed
  110. string(LENGTH ${new_sec} sec_len)
  111. string(LENGTH ${new_min} min_len)
  112. string(LENGTH ${new_hr} hr_len)
  113. if(${sec_len} EQUAL 1)
  114. set(new_sec "0${new_sec}")
  115. endif()
  116. if(${min_len} EQUAL 1)
  117. set(new_min "0${new_min}")
  118. endif()
  119. if(${hr_len} EQUAL 1)
  120. set(new_hr "0${new_hr}")
  121. endif()
  122. endmacro()