Skip to content

Commit 9c60d63

Browse files
hidmicwep21
authored andcommitted
Make ament_python_install_package() install console_scripts (ament#328)
Signed-off-by: Michel Hidalgo <[email protected]>
1 parent a803f85 commit 9c60d63

File tree

1 file changed

+39
-7
lines changed

1 file changed

+39
-7
lines changed

ament_cmake_python/cmake/ament_python_install_package.cmake

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@
2525
# :param SETUP_CFG: the path to a setup.cfg file (default:
2626
# setup.cfg file at CMAKE_CURRENT_LIST_DIR root, if any)
2727
# :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
2834
# :param SKIP_COMPILE: if set do not byte-compile the installed package
2935
# :type SKIP_COMPILE: option
3036
#
@@ -34,7 +40,8 @@ macro(ament_python_install_package)
3440
endmacro()
3541

3642
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})
3845
if(ARG_UNPARSED_ARGUMENTS)
3946
message(FATAL_ERROR "ament_python_install_package() called with unused "
4047
"arguments: ${ARG_UNPARSED_ARGUMENTS}")
@@ -68,9 +75,12 @@ function(_ament_cmake_python_install_package package_name)
6875
set(ARG_SETUP_CFG "${CMAKE_CURRENT_LIST_DIR}/${ARG_SETUP_CFG}")
6976
endif()
7077

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})
7484
endif()
7585

7686
set(build_dir "${CMAKE_CURRENT_BINARY_DIR}/ament_cmake_python/${package_name}")
@@ -136,12 +146,34 @@ setup(
136146

137147
install(
138148
DIRECTORY "${build_dir}/${package_name}.egg-info"
139-
DESTINATION "${PYTHON_INSTALL_DIR}/"
149+
DESTINATION "${ARG_DESTINATION}/"
140150
)
141151

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+
142174
install(
143175
DIRECTORY "${ARG_PACKAGE_DIR}/"
144-
DESTINATION "${PYTHON_INSTALL_DIR}/${package_name}"
176+
DESTINATION "${ARG_DESTINATION}/${package_name}"
145177
PATTERN "*.pyc" EXCLUDE
146178
PATTERN "__pycache__" EXCLUDE
147179
)
@@ -152,7 +184,7 @@ setup(
152184
"execute_process(
153185
COMMAND
154186
\"${PYTHON_EXECUTABLE}\" \"-m\" \"compileall\"
155-
\"${CMAKE_INSTALL_PREFIX}/${PYTHON_INSTALL_DIR}/${package_name}\"
187+
\"${CMAKE_INSTALL_PREFIX}/${ARG_DESTINATION}/${package_name}\"
156188
)"
157189
)
158190
endif()

0 commit comments

Comments
 (0)