-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
138 lines (115 loc) · 4.88 KB
/
CMakeLists.txt
File metadata and controls
138 lines (115 loc) · 4.88 KB
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# Set delimiter for environment variables with multiple path values based on OS
if (WIN32)
set(ENV_PATH_DELIMITER ";")
else()
set(ENV_PATH_DELIMITER ":")
endif()
set(executable_name "gz")
if(WIN32)
set(executable_name "gz.rb")
endif()
if(MSVC)
# We always want this flag to be specified so we get standard-compliant
# exception handling.
# EHsc: Use standard-compliant exception handling
add_compile_options("/EHsc")
endif()
cmake_policy(PUSH)
cmake_policy(SET CMP0042 NEW)
add_library(backward SHARED backward.cc)
target_link_libraries(backward PUBLIC Backward::Backward)
set_target_properties(backward PROPERTIES OUTPUT_NAME ${PROJECT_NAME}-backward)
set_target_properties(backward PROPERTIES CXX_STANDARD 14)
cmake_policy(POP)
if(MSVC)
# Suppress warning from vendored package
target_compile_options(backward PUBLIC /wd4267)
target_compile_options(backward PUBLIC /wd4996)
endif()
install (TARGETS backward
LIBRARY DESTINATION ${LIB_INSTALL_DIR}
ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
RUNTIME DESTINATION ${GZ_BIN_INSTALL_DIR})
#===============================================================================
# Used for the installed version.
if(APPLE)
# On macOS, the full path to the library since DYLD_LIBRARY_PATH may not work.
set(backward_library_name ${CMAKE_INSTALL_FULL_LIBDIR}/$<TARGET_FILE_NAME:backward>)
else()
set(backward_library_name $<TARGET_FILE_NAME:backward>)
endif()
# Two steps to create `gz`, First using `configure_file`, to interpolate cmake variables. Then
# use `file(GENERATE ...)` to use generator expressions
set(gz_script_configured ${PROJECT_BINARY_DIR}/${executable_name}_before_gen)
set(gz_script_generated ${PROJECT_BINARY_DIR}/$<CONFIG>/${executable_name})
configure_file(gz.in ${gz_script_configured})
file(GENERATE OUTPUT ${gz_script_generated} INPUT ${gz_script_configured})
install (PROGRAMS ${gz_script_generated} DESTINATION ${GZ_BIN_INSTALL_DIR})
if(WIN32)
# On Windows also install the executable as gz
# to permit to invoke gz via Git Bash
# see https://github.com/gazebosim/gz-tools/issues/70
install(PROGRAMS ${gz_script_generated} DESTINATION ${GZ_BIN_INSTALL_DIR} RENAME gz)
# On Windows also install the gz.bat wrapper script to permit to
# invoke gz via Command Prompt or Powershell
install(PROGRAMS gz.bat DESTINATION ${GZ_BIN_INSTALL_DIR})
# TODO(chapulina) tick-tock ign on Windows if someone actually needs it. It's
# complicated to symlink / copy files on Windows.
else()
# TODO(CH3): Deprecated. Tick-tock the ign executable with symlink
# This is exceptionally scuffed
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
${CMAKE_INSTALL_PREFIX}/${GZ_BIN_INSTALL_DIR}/gz
${PROJECT_BINARY_DIR}/ign)")
install(PROGRAMS ${PROJECT_BINARY_DIR}/ign DESTINATION ${GZ_BIN_INSTALL_DIR})
endif()
#===============================================================================
# BEGIN TEST gz command
# Generate the ruby script for internal testing.
if(BUILD_TESTING)
set(backward_library_name $<TARGET_FILE:backward>)
set(gz_script_configured_test ${PROJECT_BINARY_DIR}/test/bin/${executable_name}_before_gen)
set(gz_script_generated_test ${PROJECT_BINARY_DIR}/$<CONFIG>/test/bin/${executable_name})
# Two steps to create `gz`, First using `configure_file`, to interpolate cmake variables. Then
# use `file(GENERATE ...)` to use generator expressions
configure_file(gz.in ${gz_script_configured_test})
file(GENERATE OUTPUT ${gz_script_generated_test} INPUT ${gz_script_configured_test})
set(TEST_NAME UNIT_gz_TEST)
set(gz_library_path "${PROJECT_SOURCE_DIR}/src/cmd${TEST_NAME}.rb")
set(yaml_output_dir "${PROJECT_BINARY_DIR}/test/conf" )
set(yaml_output_configured_test "${yaml_output_dir}/${TEST_NAME}.yaml.configured")
set(yaml_output_generated_test "${yaml_output_dir}/$<CONFIG>/${TEST_NAME}.yaml")
configure_file(
"${TEST_NAME}.yaml.in"
"${yaml_output_configured_test}" @ONLY)
file(GENERATE
OUTPUT "${yaml_output_generated_test}"
INPUT "${yaml_output_configured_test}")
configure_file(
"${PROJECT_SOURCE_DIR}/tools/junit_pass.xml.in"
"${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}_pass.xml"
@ONLY)
configure_file(
"${PROJECT_SOURCE_DIR}/tools/junit_fail.xml.in"
"${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}_fail.xml"
@ONLY)
# This simply executes gz. The output will be tested in the check_* test
add_test(
NAME ${TEST_NAME}
COMMAND ${CMAKE_COMMAND}
-DTEST_NAME=${TEST_NAME}
-DGZ_SCRIPT=${gz_script_generated_test}
-P ${PROJECT_SOURCE_DIR}/cmake/run_test.cmake
)
set_tests_properties(
${TEST_NAME}
PROPERTIES
ENVIRONMENT "GZ_CONFIG_PATH=${yaml_output_dir}/$<CONFIG>"
)
if (RUBOCOP_PROGRAM)
add_test(NAME rubocop
COMMAND ${RUBOCOP_PROGRAM} -E -c ${CMAKE_CURRENT_SOURCE_DIR}/../tools/.rubocop.yml ${CMAKE_CURRENT_SOURCE_DIR})
endif()
endif()
# END TEST
#==============================