-
Notifications
You must be signed in to change notification settings - Fork 460
/
UseSlicerMacros.cmake
123 lines (110 loc) · 4.25 KB
/
UseSlicerMacros.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
cmake_minimum_required(VERSION 2.8.4)
# Given a variable name, this function will display messages indicating what the current
# value of the variable.
# For example:
#
# slicer_check_variable(bar bar_set)
# message("bar_set: ${bar_set}")
#
# set(bar "")
# slicer_check_variable(bar bar_set)
# message("bar_set: ${bar_set}")
#
# set(bar "This is bar")
# slicer_check_variable(bar bar_set)
# message("bar_set: ${bar_set}")
#
# will output:
# -- Checking bar variable
# -- Checking bar variable - NOTDEFINED
# bar_set: FALSE
# -- Checking bar variable
# -- Checking bar variable - EMPTY
# bar_set: FALSE
# -- Checking bar variable
# -- Checking bar variable - This is bar
# bar_set: TRUE
#
function(slicer_check_variable name resultvar)
message(STATUS "Checking ${name} variable")
set(result FALSE)
if(NOT DEFINED ${name})
message(STATUS "Checking ${name} variable - NOTDEFINED")
elseif("${${name}}" STREQUAL "")
message(STATUS "Checking ${name} variable - EMPTY")
else()
message(STATUS "Checking ${name} variable - ${${name}}")
set(result TRUE)
endif()
set(${resultvar} ${result} PARENT_SCOPE)
endfunction()
# Given a variable name, this function will display the text
# "-- Setting <varname> ........: ${<varname>}"
# and will ensure that the message is consistenly padded.
#
# If the optional argument 'SKIP_TRUNCATE' is provided, the
# text will NOT be truncated it too long.
#
# In the current implementation, the padding is hardcoded to a length of 40
# and the total text will be truncated if longer than 120 characters.
#
# For example:
# set(SHORTNAME "This is short variable name")
# slicer_setting_variable_message("SHORTNAME")
# set(LONGLONGNAME "This is a longer variable name")
# slicer_setting_variable_message("LONGLONGNAME")
#
# will output:
# -- Setting SHORTNAME ........: This is short variable name
# -- Setting LONGLONGNAME .....: This is a longer variable name
#
function(slicer_setting_variable_message varname)
set(truncate TRUE)
if("${ARGV1}" STREQUAL "SKIP_TRUNCATE")
set(truncate FALSE)
endif()
set(pretext_right_jusitfy_length 45)
set(fill_char ".")
set(truncated_text_length 120)
set(pretext "Setting ${varname}")
string(LENGTH ${pretext} pretext_length)
math(EXPR pad_length "${pretext_right_jusitfy_length} - ${pretext_length} - 1")
if(pad_length GREATER 0)
string(RANDOM LENGTH ${pad_length} ALPHABET ${fill_char} pretext_dots)
set(text "${pretext} ${pretext_dots}: ${${varname}}")
elseif(pad_length EQUAL 0)
set(text "${pretext} : ${${varname}}")
else()
set(text "${pretext}: ${${varname}}")
endif()
string(LENGTH ${text} text_length)
if(${truncate} AND ${text_length} GREATER ${truncated_text_length})
string(SUBSTRING ${text} 0 ${truncated_text_length} text)
set(text "${text} [...]")
endif()
message(STATUS ${text})
endfunction()
################################################################################
# Testing
################################################################################
#
# cmake -DTEST_slicer_setting_variable_message_test:BOOL=ON -P UseSlicerMacros.cmake
#
function(slicer_setting_variable_message_test)
set(SHORTNAME "This is short variable name")
slicer_setting_variable_message("SHORTNAME")
set(LONGLONGNAME "This is a longer variable name")
slicer_setting_variable_message("LONGLONGNAME")
set(VARIABLE_NAME_WITH_FORTY_FOUR_CHARS "This is a variable name where len('Setting ') + len(varname) is just 44 characters")
slicer_setting_variable_message("VARIABLE_NAME_WITH_FORTY_FOUR_CHARS")
set(A_VARIABLE_NAME_JUST_WITH_FORTY_FIVE "This is a variable name where len('Setting ') + len(varname) is just 45 characters")
slicer_setting_variable_message("A_VARIABLE_NAME_JUST_WITH_FORTY_FIVE")
set(VARNAME_WITH_JUST_FORTY_SIX_CHARACTER "This is a variable name where len('Setting ') + len(varname) is just 46 characters")
slicer_setting_variable_message("VARNAME_WITH_JUST_FORTY_SIX_CHARACTER")
set(THIS_IS_A_LONG_VARIABLE_NAME_OVER_FORTY_FIVE_CHARS "This is a long variable name over forty five characters")
slicer_setting_variable_message("THIS_IS_A_LONG_VARIABLE_NAME_OVER_FORTY_FIVE_CHARS")
message("SUCCESS")
endfunction()
if(TEST_slicer_setting_variable_message_test)
slicer_setting_variable_message_test()
endif()