cmake_minimum_required ( VERSION 2.8.11 )
macro ( GET_DATE )
#
# All macro arguments are optional.
# If there's an ARGV0, use it as GD_PREFIX. Default = 'GD_'
# If there's an ARGV1, use it as ${GD_PREFIX}VERBOSE. Default = '0'
#
# If the date can be retrieved and parsed successfully, this macro
# will set the following CMake variables:
#
# GD_PREFIX
# ${GD_PREFIX}PREFIX (if '${GD_PREFIX}' is not 'GD_'...!)
# ${GD_PREFIX}VERBOSE
#
# ${GD_PREFIX}OV
#
# ${GD_PREFIX}REGEX
# ${GD_PREFIX}YEAR
# ${GD_PREFIX}MONTH
# ${GD_PREFIX}DAY
# ${GD_PREFIX}HOUR
# ${GD_PREFIX}MINUTE
# ${GD_PREFIX}SECOND
#
# Caller can then use these variables to construct names based on
# date and time stamps...
#
# If there's an ARGV0, use it as GD_PREFIX:
#
set ( GD_PREFIX "GD_" )
if ( NOT "${ARGV0}" STREQUAL "" )
set ( GD_PREFIX "${ARGV0}" )
endif ( )
if ( NOT "${GD_PREFIX}" STREQUAL "GD_" )
set ( ${ GD_PREFIX } PREFIX "${GD_PREFIX}" )
endif ( )
# If there's an ARGV1, use it as ${GD_PREFIX}VERBOSE:
#
set ( ${ GD_PREFIX } VERBOSE "0" )
if ( NOT "${ARGV1}" STREQUAL "" )
set ( ${ GD_PREFIX } VERBOSE "${ARGV1}" )
endif ( )
# Retrieve the current date and time in the format:
#
# 01/12/2006 08:55:12
# mm/dd/YYYY HH:MM:SS
#
unset ( ENV{SOURCE_DATE_EPOCH} )
string ( TIMESTAMP "${GD_PREFIX}OV" "%m/%d/%Y %H:%M:%S" )
if ( ${ GD_PREFIX } VERBOSE )
message ( STATUS "" )
message ( STATUS "<GET_DATE>" )
message ( STATUS "" )
message ( STATUS "GD_PREFIX='${GD_PREFIX}'" )
if ( NOT "${GD_PREFIX}" STREQUAL "GD_" )
message ( STATUS "${GD_PREFIX}PREFIX='${${GD_PREFIX}PREFIX}'" )
endif ( )
message ( STATUS "${GD_PREFIX}VERBOSE='${${GD_PREFIX}VERBOSE}'" )
message ( STATUS "" )
message ( STATUS "${GD_PREFIX}OV='${${GD_PREFIX}OV}'" )
message ( STATUS "" )
endif ( )
#
# Extract six individual components by matching a regex with paren groupings.
# Use the replace functionality and \\1 through \\6 to extract components.
#
set ( ${ GD_PREFIX } REGEX "([^/]+)/([^/]+)/([^ ]+) +([^:]+):([^:]+):([^\\.]+)" )
string ( REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\1" ${ GD_PREFIX } MONTH "${${GD_PREFIX}OV}" )
string ( REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\2" ${ GD_PREFIX } DAY "${${GD_PREFIX}OV}" )
string ( REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\3" ${ GD_PREFIX } YEAR "${${GD_PREFIX}OV}" )
string ( REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\4" ${ GD_PREFIX } HOUR "${${GD_PREFIX}OV}" )
string ( REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\5" ${ GD_PREFIX } MINUTE "${${GD_PREFIX}OV}" )
string ( REGEX REPLACE "${${GD_PREFIX}REGEX}" "\\6" ${ GD_PREFIX } SECOND "${${GD_PREFIX}OV}" )
if ( ${ GD_PREFIX } VERBOSE )
message ( STATUS "${GD_PREFIX}REGEX='${${GD_PREFIX}REGEX}'" )
message ( STATUS "${GD_PREFIX}YEAR='${${GD_PREFIX}YEAR}'" )
message ( STATUS "${GD_PREFIX}MONTH='${${GD_PREFIX}MONTH}'" )
message ( STATUS "${GD_PREFIX}DAY='${${GD_PREFIX}DAY}'" )
message ( STATUS "${GD_PREFIX}HOUR='${${GD_PREFIX}HOUR}'" )
message ( STATUS "${GD_PREFIX}MINUTE='${${GD_PREFIX}MINUTE}'" )
message ( STATUS "${GD_PREFIX}SECOND='${${GD_PREFIX}SECOND}'" )
message ( STATUS "" )
message ( STATUS "Counters that change..." )
message ( STATUS "" )
message ( STATUS " every second : ${${GD_PREFIX}YEAR}${${GD_PREFIX}MONTH}${${GD_PREFIX}DAY}${${GD_PREFIX}HOUR}${${GD_PREFIX}MINUTE}${${GD_PREFIX}SECOND}" )
message ( STATUS " daily : ${${GD_PREFIX}YEAR}${${GD_PREFIX}MONTH}${${GD_PREFIX}DAY}" )
message ( STATUS " monthly : ${${GD_PREFIX}YEAR}${${GD_PREFIX}MONTH}" )
message ( STATUS " annually : ${${GD_PREFIX}YEAR}" )
message ( STATUS "" )
endif ( )
if ( ${ GD_PREFIX } VERBOSE )
message ( STATUS "</GET_DATE>" )
message ( STATUS "" )
endif ( )
endmacro ( )
macro ( ADD_SECONDS sec )
set ( new_min ${ ${GD_PREFIX } MINUTE} )
set ( new_hr ${ ${GD_PREFIX } HOUR} )
math ( EXPR new_sec "${sec} + ${${GD_PREFIX}SECOND}" )
while ( ${ new_sec } GREATER_EQUAL 60 )
math ( EXPR new_sec "${new_sec} - 60" )
math ( EXPR new_min "${${GD_PREFIX}MINUTE} + 1" )
endwhile ( )
while ( ${ new_min } GREATER_EQUAL 60 )
math ( EXPR new_min "${new_min} - 60" )
math ( EXPR new_hr "${${GD_PREFIX}HOUR} + 1" )
endwhile ( )
math ( EXPR new_hr "${new_hr} % 24" )
# Pad the H, M, S if needed
string ( LENGTH ${ new_sec } sec_len )
string ( LENGTH ${ new_min } min_len )
string ( LENGTH ${ new_hr } hr_len )
if ( ${ sec_len } EQUAL 1 )
set ( new_sec "0${new_sec}" )
endif ( )
if ( ${ min_len } EQUAL 1 )
set ( new_min "0${new_min}" )
endif ( )
if ( ${ hr_len } EQUAL 1 )
set ( new_hr "0${new_hr}" )
endif ( )
endmacro ( )