From d6c749a49ffd7b924680585bd0b25dc7fc00c1e2 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Thu, 6 Jan 2022 14:42:25 +0100 Subject: [PATCH 1/7] Always use USE_SOURCE_PERMISSIONS The scripts are generated into a build folder and thus *always* need to be copied. No need to distinguish between symlink and other installs. Signed-off-by: Robert Haschke --- .../cmake/ament_python_install_package.cmake | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/ament_cmake_python/cmake/ament_python_install_package.cmake b/ament_cmake_python/cmake/ament_python_install_package.cmake index d035ff9a..d61072e7 100644 --- a/ament_cmake_python/cmake/ament_python_install_package.cmake +++ b/ament_cmake_python/cmake/ament_python_install_package.cmake @@ -166,15 +166,10 @@ setup( DEPENDS ${egg_dependencies} ) - if(NOT AMENT_CMAKE_SYMLINK_INSTALL) - # Not needed for nor supported by symlink installs - set(_extra_install_args USE_SOURCE_PERMISSIONS) - endif() - install( DIRECTORY "${build_dir}/scripts/" DESTINATION "${ARG_SCRIPTS_DESTINATION}/" - ${_extra_install_args} + USE_SOURCE_PERMISSIONS ) endif() From a786aa240f88cbbdaefeeab7ba120bdabd4a6858 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Thu, 6 Jan 2022 15:02:27 +0100 Subject: [PATCH 2/7] Make SCRIPTS_DESTINATION argument optional Signed-off-by: Robert Haschke --- .../cmake/ament_python_install_package.cmake | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/ament_cmake_python/cmake/ament_python_install_package.cmake b/ament_cmake_python/cmake/ament_python_install_package.cmake index d61072e7..574d0caa 100644 --- a/ament_cmake_python/cmake/ament_python_install_package.cmake +++ b/ament_cmake_python/cmake/ament_python_install_package.cmake @@ -29,7 +29,7 @@ # directory (default: PYTHON_INSTALL_DIR) # :type DESTINATION: string # :param SCRIPTS_DESTINATION: the path to the Python package scripts' -# installation directory, scripts (if any) will be ignored if not set +# installation directory (default: lib/${PROJECT_NAME}) # :type SCRIPTS_DESTINATION: string # :param SKIP_COMPILE: if set do not byte-compile the installed package # :type SKIP_COMPILE: option @@ -83,6 +83,10 @@ function(_ament_cmake_python_install_package package_name) set(ARG_DESTINATION ${PYTHON_INSTALL_DIR}) endif() + if(NOT ARG_SCRIPTS_DESTINATION) + set(ARG_SCRIPTS_DESTINATION "lib/${PROJECT_NAME}") + endif() + set(build_dir "${CMAKE_CURRENT_BINARY_DIR}/ament_cmake_python/${package_name}") string(CONFIGURE "\ @@ -156,22 +160,25 @@ setup( DESTINATION "${ARG_DESTINATION}/${egg_install_name}.egg-info" ) - if(ARG_SCRIPTS_DESTINATION) - file(MAKE_DIRECTORY "${build_dir}/scripts") # setup.py may or may not create it - - add_custom_target( - ament_cmake_python_build_${package_name}_scripts ALL - COMMAND ${python_interpreter} setup.py install_scripts -d scripts - WORKING_DIRECTORY "${build_dir}" - DEPENDS ${egg_dependencies} - ) - - install( - DIRECTORY "${build_dir}/scripts/" - DESTINATION "${ARG_SCRIPTS_DESTINATION}/" - USE_SOURCE_PERMISSIONS - ) - endif() + # generate entry-point console scripts + set(_scripts_dir "${build_dir}/scripts") + add_custom_target( + ament_cmake_python_build_${package_name}_scripts ALL + # cleanup any scripts from a previous run + COMMAND ${CMAKE_COMMAND} -E remove_directory "${_scripts_dir}" + # (re)create scripts build directory + COMMAND ${CMAKE_COMMAND} -E make_directory "${_scripts_dir}" + # generate scripts + COMMAND ${python_interpreter} setup.py install_scripts -d scripts + WORKING_DIRECTORY "${build_dir}" + DEPENDS ${egg_dependencies} + COMMENT "Generating python console scripts" + ) + install( + DIRECTORY "${build_dir}/scripts/" + DESTINATION "${ARG_SCRIPTS_DESTINATION}/" + USE_SOURCE_PERMISSIONS + ) install( DIRECTORY "${ARG_PACKAGE_DIR}/" From 321105dd371dce5d72903056e48c9f630f272a20 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Thu, 6 Jan 2022 15:27:37 +0100 Subject: [PATCH 3/7] Directly generate scripts into install location This avoids the problem of empty install folders as setup.py generates the target folder only if needed. Signed-off-by: Robert Haschke --- .../cmake/ament_python_install_package.cmake | 23 ++++--------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/ament_cmake_python/cmake/ament_python_install_package.cmake b/ament_cmake_python/cmake/ament_python_install_package.cmake index 574d0caa..7bd5e2eb 100644 --- a/ament_cmake_python/cmake/ament_python_install_package.cmake +++ b/ament_cmake_python/cmake/ament_python_install_package.cmake @@ -160,25 +160,10 @@ setup( DESTINATION "${ARG_DESTINATION}/${egg_install_name}.egg-info" ) - # generate entry-point console scripts - set(_scripts_dir "${build_dir}/scripts") - add_custom_target( - ament_cmake_python_build_${package_name}_scripts ALL - # cleanup any scripts from a previous run - COMMAND ${CMAKE_COMMAND} -E remove_directory "${_scripts_dir}" - # (re)create scripts build directory - COMMAND ${CMAKE_COMMAND} -E make_directory "${_scripts_dir}" - # generate scripts - COMMAND ${python_interpreter} setup.py install_scripts -d scripts - WORKING_DIRECTORY "${build_dir}" - DEPENDS ${egg_dependencies} - COMMENT "Generating python console scripts" - ) - install( - DIRECTORY "${build_dir}/scripts/" - DESTINATION "${ARG_SCRIPTS_DESTINATION}/" - USE_SOURCE_PERMISSIONS - ) + # generate/install entry-point console scripts + get_filename_component(ABS_SCRIPTS_DESTINATION "${ARG_SCRIPTS_DESTINATION}" ABSOLUTE BASE_DIR "${CMAKE_INSTALL_PREFIX}") + install(CODE "execute_process(COMMAND ${python_interpreter} setup.py install_scripts --install-dir \"${ABS_SCRIPTS_DESTINATION}\" + WORKING_DIRECTORY \"${build_dir}\")") install( DIRECTORY "${ARG_PACKAGE_DIR}/" From fe6b3a38ad1391c13baca24912867753b2210e30 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Thu, 6 Jan 2022 15:39:58 +0100 Subject: [PATCH 4/7] Silence policy CMP0087 warning Signed-off-by: Robert Haschke --- ament_cmake_python/cmake/ament_python_install_package.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ament_cmake_python/cmake/ament_python_install_package.cmake b/ament_cmake_python/cmake/ament_python_install_package.cmake index 7bd5e2eb..6eeb46be 100644 --- a/ament_cmake_python/cmake/ament_python_install_package.cmake +++ b/ament_cmake_python/cmake/ament_python_install_package.cmake @@ -160,6 +160,11 @@ setup( DESTINATION "${ARG_DESTINATION}/${egg_install_name}.egg-info" ) + if(POLICY CMP0087) + # Allow generator expressions in install(CODE...) + cmake_policy(SET CMP0087 NEW) + endif() + # generate/install entry-point console scripts get_filename_component(ABS_SCRIPTS_DESTINATION "${ARG_SCRIPTS_DESTINATION}" ABSOLUTE BASE_DIR "${CMAKE_INSTALL_PREFIX}") install(CODE "execute_process(COMMAND ${python_interpreter} setup.py install_scripts --install-dir \"${ABS_SCRIPTS_DESTINATION}\" From d29798e006f77c66f0369b6846c82ac70248e615 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Thu, 6 Jan 2022 16:06:21 +0100 Subject: [PATCH 5/7] Support multiple SCRIPTS_DESTINATIONs For example, xacro is install into lib/xacro/xacro and bin/xacro. Signed-off-by: Robert Haschke --- .../cmake/ament_python_install_package.cmake | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ament_cmake_python/cmake/ament_python_install_package.cmake b/ament_cmake_python/cmake/ament_python_install_package.cmake index 6eeb46be..2a401e2c 100644 --- a/ament_cmake_python/cmake/ament_python_install_package.cmake +++ b/ament_cmake_python/cmake/ament_python_install_package.cmake @@ -41,7 +41,7 @@ endmacro() function(_ament_cmake_python_install_package package_name) cmake_parse_arguments( - ARG "SKIP_COMPILE" "PACKAGE_DIR;VERSION;SETUP_CFG;DESTINATION;SCRIPTS_DESTINATION" "" ${ARGN}) + ARG "SKIP_COMPILE" "PACKAGE_DIR;VERSION;SETUP_CFG;DESTINATION" "SCRIPTS_DESTINATION" ${ARGN}) if(ARG_UNPARSED_ARGUMENTS) message(FATAL_ERROR "ament_python_install_package() called with unused " "arguments: ${ARG_UNPARSED_ARGUMENTS}") @@ -166,9 +166,11 @@ setup( endif() # generate/install entry-point console scripts - get_filename_component(ABS_SCRIPTS_DESTINATION "${ARG_SCRIPTS_DESTINATION}" ABSOLUTE BASE_DIR "${CMAKE_INSTALL_PREFIX}") - install(CODE "execute_process(COMMAND ${python_interpreter} setup.py install_scripts --install-dir \"${ABS_SCRIPTS_DESTINATION}\" - WORKING_DIRECTORY \"${build_dir}\")") + foreach(_dest ${ARG_SCRIPTS_DESTINATION}) + get_filename_component(ABS_SCRIPTS_DESTINATION "${_dest}" ABSOLUTE BASE_DIR "${CMAKE_INSTALL_PREFIX}") + install(CODE "execute_process(COMMAND ${python_interpreter} setup.py install_scripts --install-dir \"${ABS_SCRIPTS_DESTINATION}\" + WORKING_DIRECTORY \"${build_dir}\")") + endforeach() install( DIRECTORY "${ARG_PACKAGE_DIR}/" From cc7ad4e70310c4596e0da97bf8f263b76e7b8a13 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Tue, 8 Feb 2022 15:35:59 +0100 Subject: [PATCH 6/7] Revert "Silence policy CMP0087 warning" This reverts commit fe6b3a38ad1391c13baca24912867753b2210e30. Signed-off-by: Robert Haschke --- ament_cmake_python/cmake/ament_python_install_package.cmake | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ament_cmake_python/cmake/ament_python_install_package.cmake b/ament_cmake_python/cmake/ament_python_install_package.cmake index 2a401e2c..fc7e2cc9 100644 --- a/ament_cmake_python/cmake/ament_python_install_package.cmake +++ b/ament_cmake_python/cmake/ament_python_install_package.cmake @@ -160,11 +160,6 @@ setup( DESTINATION "${ARG_DESTINATION}/${egg_install_name}.egg-info" ) - if(POLICY CMP0087) - # Allow generator expressions in install(CODE...) - cmake_policy(SET CMP0087 NEW) - endif() - # generate/install entry-point console scripts foreach(_dest ${ARG_SCRIPTS_DESTINATION}) get_filename_component(ABS_SCRIPTS_DESTINATION "${_dest}" ABSOLUTE BASE_DIR "${CMAKE_INSTALL_PREFIX}") From 30db87978449da43e0d0d6734c3357e7628e6325 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Sat, 10 Sep 2022 12:12:17 +0200 Subject: [PATCH 7/7] Use python_interpreter_config to silence CMP0087 warning Signed-off-by: Robert Haschke --- ament_cmake_python/cmake/ament_python_install_package.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ament_cmake_python/cmake/ament_python_install_package.cmake b/ament_cmake_python/cmake/ament_python_install_package.cmake index fc7e2cc9..c2a44b45 100644 --- a/ament_cmake_python/cmake/ament_python_install_package.cmake +++ b/ament_cmake_python/cmake/ament_python_install_package.cmake @@ -161,9 +161,10 @@ setup( ) # generate/install entry-point console scripts + get_executable_path(python_interpreter_config Python3::Interpreter CONFIGURE) foreach(_dest ${ARG_SCRIPTS_DESTINATION}) get_filename_component(ABS_SCRIPTS_DESTINATION "${_dest}" ABSOLUTE BASE_DIR "${CMAKE_INSTALL_PREFIX}") - install(CODE "execute_process(COMMAND ${python_interpreter} setup.py install_scripts --install-dir \"${ABS_SCRIPTS_DESTINATION}\" + install(CODE "execute_process(COMMAND \"${python_interpreter_config}\" setup.py install_scripts --install-dir \"${ABS_SCRIPTS_DESTINATION}\" WORKING_DIRECTORY \"${build_dir}\")") endforeach() @@ -175,7 +176,6 @@ setup( ) if(NOT ARG_SKIP_COMPILE) - get_executable_path(python_interpreter_config Python3::Interpreter CONFIGURE) # compile Python files install(CODE "execute_process(