25
25
# :param SETUP_CFG: the path to a setup.cfg file (default:
26
26
# setup.cfg file at CMAKE_CURRENT_LIST_DIR root, if any)
27
27
# :param SETUP_CFG: string
28
+ # :param DESTINATION: the path to the Python package installation
29
+ # directory (default: PYTHON_INSTALL_DIR)
30
+ # :type DESTINATION: string
31
+ # :param SCRIPTS_DESTINATION: the path to the Python package scripts'
32
+ # installation directory, scripts (if any) will be ignored if not set
33
+ # :type SCRIPTS_DESTINATION: string
28
34
# :param SKIP_COMPILE: if set do not byte-compile the installed package
29
35
# :type SKIP_COMPILE: option
30
36
#
@@ -34,7 +40,8 @@ macro(ament_python_install_package)
34
40
endmacro ()
35
41
36
42
function (_ament_cmake_python_install_package package_name )
37
- cmake_parse_arguments (ARG "SKIP_COMPILE" "PACKAGE_DIR;VERSION;SETUP_CFG" "" ${ARGN} )
43
+ cmake_parse_arguments (
44
+ ARG "SKIP_COMPILE" "PACKAGE_DIR;VERSION;SETUP_CFG;DESTINATION;SCRIPTS_DESTINATION" "" ${ARGN} )
38
45
if (ARG_UNPARSED_ARGUMENTS )
39
46
message (FATAL_ERROR "ament_python_install_package() called with unused "
40
47
"arguments: ${ARG_UNPARSED_ARGUMENTS} " )
@@ -68,9 +75,12 @@ function(_ament_cmake_python_install_package package_name)
68
75
set (ARG_SETUP_CFG "${CMAKE_CURRENT_LIST_DIR} /${ARG_SETUP_CFG} " )
69
76
endif ()
70
77
71
- if (NOT PYTHON_INSTALL_DIR )
72
- message (FATAL_ERROR "ament_python_install_package() variable "
73
- "'PYTHON_INSTALL_DIR' must not be empty" )
78
+ if (NOT ARG_DESTINATION )
79
+ if (NOT PYTHON_INSTALL_DIR )
80
+ message (FATAL_ERROR "ament_python_install_package() variable "
81
+ "'PYTHON_INSTALL_DIR' must not be empty" )
82
+ endif ()
83
+ set (ARG_DESTINATION ${PYTHON_INSTALL_DIR} )
74
84
endif ()
75
85
76
86
set (build_dir "${CMAKE_CURRENT_BINARY_DIR} /ament_cmake_python/${package_name} " )
@@ -136,12 +146,34 @@ setup(
136
146
137
147
install (
138
148
DIRECTORY "${build_dir} /${package_name} .egg-info"
139
- DESTINATION "${PYTHON_INSTALL_DIR } /"
149
+ DESTINATION "${ARG_DESTINATION } /"
140
150
)
141
151
152
+ if (ARG_SCRIPTS_DESTINATION )
153
+ file (MAKE_DIRECTORY "${build_dir} /scripts" ) # setup.py may or may not create it
154
+
155
+ add_custom_target (
156
+ ament_cmake_python_build_${package_name}_scripts ALL
157
+ COMMAND ${PYTHON_EXECUTABLE} setup.py install_scripts -d scripts
158
+ WORKING_DIRECTORY "${build_dir} "
159
+ DEPENDS ${egg_dependencies}
160
+ )
161
+
162
+ if (NOT AMENT_CMAKE_SYMLINK_INSTALL )
163
+ # Not needed for nor supported by symlink installs
164
+ set (_extra_install_args USE_SOURCE_PERMISSIONS )
165
+ endif ()
166
+
167
+ install (
168
+ DIRECTORY "${build_dir} /scripts/"
169
+ DESTINATION "${ARG_SCRIPTS_DESTINATION} /"
170
+ ${_extra_install_args}
171
+ )
172
+ endif ()
173
+
142
174
install (
143
175
DIRECTORY "${ARG_PACKAGE_DIR} /"
144
- DESTINATION "${PYTHON_INSTALL_DIR } /${package_name} "
176
+ DESTINATION "${ARG_DESTINATION } /${package_name} "
145
177
PATTERN "*.pyc" EXCLUDE
146
178
PATTERN "__pycache__" EXCLUDE
147
179
)
@@ -152,7 +184,7 @@ setup(
152
184
"execute_process(
153
185
COMMAND
154
186
\" ${PYTHON_EXECUTABLE} \" \" -m\" \" compileall\"
155
- \" ${CMAKE_INSTALL_PREFIX} /${PYTHON_INSTALL_DIR } /${package_name} \"
187
+ \" ${CMAKE_INSTALL_PREFIX} /${ARG_DESTINATION } /${package_name} \"
156
188
)"
157
189
)
158
190
endif ()
0 commit comments