|
4 | 4 | # SPDX-License-Identifier: MIT |
5 | 5 | # |
6 | 6 |
|
7 | | -macro(_is_leap_year year result) |
8 | | - math(EXPR _mod400 "${year} % 400") |
9 | | - math(EXPR _mod100 "${year} % 100") |
10 | | - math(EXPR _mod4 "${year} % 4") |
11 | | - if(_mod400 EQUAL 0 OR(_mod4 EQUAL 0 AND NOT _mod100 EQUAL 0)) |
12 | | - set(${result} TRUE) |
13 | | - else() |
14 | | - set(${result} FALSE) |
15 | | - endif() |
16 | | -endmacro() |
17 | | - |
18 | | -function(neo_ww_calculator EPOCH OUT_VAR) |
19 | | - set(SECONDS_PER_DAY 86400) |
20 | | - |
21 | | - math(EXPR total_days "${EPOCH} / ${SECONDS_PER_DAY}") |
22 | | - |
23 | | - math(EXPR year "1970 + ${total_days} / 365") |
24 | | - |
25 | | - set(days_to_year 0) |
26 | | - set(y 1970) |
27 | | - while(y LESS year) |
28 | | - _is_leap_year(${y} leap) |
29 | | - if(leap) |
30 | | - math(EXPR days_to_year "${days_to_year} + 366") |
31 | | - else() |
32 | | - math(EXPR days_to_year "${days_to_year} + 365") |
33 | | - endif() |
34 | | - math(EXPR y "${y} + 1") |
35 | | - endwhile() |
36 | | - |
37 | | - while(days_to_year GREATER total_days) |
38 | | - math(EXPR year "${year} - 1") |
39 | | - _is_leap_year(${year} leap) |
40 | | - if(leap) |
41 | | - math(EXPR days_to_year "${days_to_year} - 366") |
42 | | - else() |
43 | | - math(EXPR days_to_year "${days_to_year} - 365") |
44 | | - endif() |
45 | | - endwhile() |
46 | | - |
47 | | - math(EXPR doy "${total_days} - ${days_to_year} + 1") |
48 | | - |
49 | | - math(EXPR yr "${year} % 100") |
50 | | - |
51 | | - math(EXPR y "${year} - 1") |
52 | | - math(EXPR dow1 "(1 + 5*(${y} % 4) + 4*(${y} % 100) + 6*(${y} % 400)) % 7") |
53 | | - |
54 | | - _is_leap_year(${year} leap) |
55 | | - if(leap) |
56 | | - set(y_days 366) |
57 | | - else() |
58 | | - set(y_days 365) |
59 | | - endif() |
60 | | - |
61 | | - math(EXPR _doy "${doy} - 1 + ${dow1}") # shift day of year to simulate Jan 1st as Sunday |
62 | | - math(EXPR _ww "${_doy} / 7 + 1") # get workweek |
63 | | - math(EXPR _wd "${_doy} % 7") # get days of week |
64 | | - math(EXPR _y_days "${y_days} + ${dow1}") # adjusted number of days in year |
65 | | - math(EXPR _w_days "${_y_days} - ${_doy} + ${_wd}") # number of week days to end of year |
66 | | - |
67 | | - if(_w_days LESS 7) |
68 | | - # last week has less than 7 days |
69 | | - math(EXPR yr "(${yr} + 1) % 100") |
70 | | - set(_ww 1) |
71 | | - endif() |
72 | | - |
73 | | - string(LENGTH "${yr}" yr_len) |
74 | | - string(LENGTH "${_ww}" ww_len) |
75 | | - if(yr_len LESS 2) |
76 | | - set(yr "0${yr}") |
77 | | - endif() |
78 | | - if(ww_len LESS 2) |
79 | | - set(_ww "0${_ww}") |
80 | | - endif() |
81 | | - |
82 | | - set(${OUT_VAR} "${yr}.${_ww}" PARENT_SCOPE) |
83 | | -endfunction() |
84 | | - |
85 | 7 | if(CMAKE_SCRIPT_MODE_FILE AND CMAKE_ARGC GREATER 3) |
86 | | - neo_ww_calculator(${CMAKE_ARGV3} _result) |
87 | | - execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${_result}") |
| 8 | + execute_process(COMMAND ${CMAKE_COMMAND} -E echo "26.05") |
88 | 9 | endif() |
0 commit comments