|
35 | 35 | # :type SKIP_COMPILE: option |
36 | 36 | # |
37 | 37 | macro(ament_python_install_package) |
| 38 | + _ament_cmake_python_register_extension_hook() |
38 | 39 | _ament_cmake_python_register_environment_hook() |
39 | 40 | _ament_cmake_python_install_package(${ARGN}) |
40 | 41 | endmacro() |
@@ -83,129 +84,35 @@ function(_ament_cmake_python_install_package package_name) |
83 | 84 | set(ARG_DESTINATION ${PYTHON_INSTALL_DIR}) |
84 | 85 | endif() |
85 | 86 |
|
86 | | - set(build_dir "${CMAKE_CURRENT_BINARY_DIR}/ament_cmake_python/${package_name}") |
87 | | - |
88 | | - string(CONFIGURE "\ |
89 | | -from setuptools import find_packages |
90 | | -from setuptools import setup |
91 | | -
|
92 | | -setup( |
93 | | - name='${package_name}', |
94 | | - version='${ARG_VERSION}', |
95 | | - packages=find_packages( |
96 | | - include=('${package_name}', '${package_name}.*')), |
97 | | -) |
98 | | -" setup_py_content) |
99 | | - |
100 | | - file(GENERATE |
101 | | - OUTPUT "${build_dir}/setup.py" |
102 | | - CONTENT "${setup_py_content}" |
103 | | - ) |
104 | | - |
105 | | - if(AMENT_CMAKE_SYMLINK_INSTALL) |
106 | | - add_custom_target( |
107 | | - ament_cmake_python_symlink_${package_name} |
108 | | - COMMAND ${CMAKE_COMMAND} -E create_symlink |
109 | | - "${ARG_PACKAGE_DIR}" "${build_dir}/${package_name}" |
110 | | - ) |
111 | | - set(egg_dependencies ament_cmake_python_symlink_${package_name}) |
112 | | - |
113 | | - if(ARG_SETUP_CFG) |
114 | | - add_custom_target( |
115 | | - ament_cmake_python_symlink_${package_name}_setup |
116 | | - COMMAND ${CMAKE_COMMAND} -E create_symlink |
117 | | - "${ARG_SETUP_CFG}" "${build_dir}/setup.cfg" |
118 | | - ) |
119 | | - list(APPEND egg_dependencies ament_cmake_python_symlink_${package_name}_setup) |
120 | | - endif() |
| 87 | + get_property(_pkgs GLOBAL PROPERTY AMENT_CMAKE_PYTHON_PKGS) |
| 88 | + list(FIND _pkgs "${package_name}" _idx) |
| 89 | + if(_idx EQUAL -1) |
| 90 | + set_property(GLOBAL APPEND PROPERTY AMENT_CMAKE_PYTHON_PKGS "${package_name}") |
121 | 91 | else() |
122 | | - add_custom_target( |
123 | | - ament_cmake_python_copy_${package_name} |
124 | | - COMMAND ${CMAKE_COMMAND} -E copy_directory |
125 | | - "${ARG_PACKAGE_DIR}" "${build_dir}/${package_name}" |
126 | | - ) |
127 | | - set(egg_dependencies ament_cmake_python_copy_${package_name}) |
128 | | - |
129 | | - if(ARG_SETUP_CFG) |
130 | | - add_custom_target( |
131 | | - ament_cmake_python_copy_${package_name}_setup |
132 | | - COMMAND ${CMAKE_COMMAND} -E copy |
133 | | - "${ARG_SETUP_CFG}" "${build_dir}/setup.cfg" |
134 | | - ) |
135 | | - list(APPEND egg_dependencies ament_cmake_python_copy_${package_name}_setup) |
136 | | - endif() |
| 92 | + message(STATUS "ament_python_install_package: extending '${package_name}'") |
137 | 93 | endif() |
138 | 94 |
|
139 | | - # Technically, we should call find_package(Python3) first to ensure that Python3::Interpreter |
140 | | - # is available. But we skip this here because this macro requires ament_cmake, and ament_cmake |
141 | | - # calls find_package(Python3) for us. |
142 | | - get_executable_path(python_interpreter Python3::Interpreter BUILD) |
143 | | - |
144 | | - add_custom_target( |
145 | | - ament_cmake_python_build_${package_name}_egg ALL |
146 | | - COMMAND ${python_interpreter} setup.py egg_info |
147 | | - WORKING_DIRECTORY "${build_dir}" |
148 | | - DEPENDS ${egg_dependencies} |
149 | | - ) |
150 | | - |
151 | | - set(python_version "py${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}") |
152 | | - |
153 | | - set(egg_name "${package_name}") |
154 | | - set(egg_install_name "${egg_name}-${ARG_VERSION}") |
155 | | - set(egg_install_name "${egg_install_name}-${python_version}") |
156 | | - |
157 | | - install( |
158 | | - DIRECTORY "${build_dir}/${egg_name}.egg-info/" |
159 | | - DESTINATION "${ARG_DESTINATION}/${egg_install_name}.egg-info" |
160 | | - ) |
161 | | - |
162 | | - if(ARG_SCRIPTS_DESTINATION) |
163 | | - file(MAKE_DIRECTORY "${build_dir}/scripts") # setup.py may or may not create it |
164 | | - |
165 | | - add_custom_target( |
166 | | - ament_cmake_python_build_${package_name}_scripts ALL |
167 | | - COMMAND ${python_interpreter} setup.py install_scripts -d scripts |
168 | | - WORKING_DIRECTORY "${build_dir}" |
169 | | - DEPENDS ${egg_dependencies} |
170 | | - ) |
171 | | - |
172 | | - if(NOT AMENT_CMAKE_SYMLINK_INSTALL) |
173 | | - # Not needed for nor supported by symlink installs |
174 | | - set(_extra_install_args USE_SOURCE_PERMISSIONS) |
175 | | - endif() |
176 | | - |
177 | | - install( |
178 | | - DIRECTORY "${build_dir}/scripts/" |
179 | | - DESTINATION "${ARG_SCRIPTS_DESTINATION}/" |
180 | | - ${_extra_install_args} |
181 | | - ) |
| 95 | + get_property(_dirs GLOBAL PROPERTY AMENT_CMAKE_PYTHON_${package_name}_PACKAGE_DIRS) |
| 96 | + list(FIND _dirs "${ARG_PACKAGE_DIR}" _didx) |
| 97 | + if(_didx EQUAL -1) |
| 98 | + set_property(GLOBAL APPEND PROPERTY AMENT_CMAKE_PYTHON_${package_name}_PACKAGE_DIRS "${ARG_PACKAGE_DIR}") |
| 99 | + else() |
| 100 | + message(WARNING "duplicate PACKAGE_DIR for '${package_name}', skipping") |
182 | 101 | endif() |
183 | 102 |
|
184 | | - install( |
185 | | - DIRECTORY "${ARG_PACKAGE_DIR}/" |
186 | | - DESTINATION "${ARG_DESTINATION}/${package_name}" |
187 | | - PATTERN "*.pyc" EXCLUDE |
188 | | - PATTERN "__pycache__" EXCLUDE |
189 | | - ) |
190 | | - |
191 | | - if(NOT ARG_SKIP_COMPILE) |
192 | | - get_executable_path(python_interpreter_config Python3::Interpreter CONFIGURE) |
193 | | - # compile Python files |
194 | | - install(CODE |
195 | | - "execute_process( |
196 | | - COMMAND |
197 | | - \"${python_interpreter_config}\" \"-m\" \"compileall\" |
198 | | - \"${CMAKE_INSTALL_PREFIX}/${ARG_DESTINATION}/${package_name}\" |
199 | | - )" |
200 | | - ) |
201 | | - endif() |
| 103 | + _ament_cmake_python_override(SKIP_COMPILE) |
| 104 | + _ament_cmake_python_override(VERSION) |
| 105 | + _ament_cmake_python_override(SETUP_CFG) |
| 106 | + _ament_cmake_python_override(DESTINATION) |
| 107 | + _ament_cmake_python_override(SCRIPTS_DESTINATION) |
| 108 | +endfunction() |
202 | 109 |
|
203 | | - if(package_name IN_LIST AMENT_CMAKE_PYTHON_INSTALL_INSTALLED_NAMES) |
204 | | - message(FATAL_ERROR |
205 | | - "ament_python_install_package() a Python module file or package with " |
206 | | - "the same name '${package_name}' has been installed before") |
| 110 | +macro(_ament_cmake_python_override param) |
| 111 | + set(_prop "AMENT_CMAKE_PYTHON_${package_name}_${param}") |
| 112 | + set(_val "${ARG_${param}}") |
| 113 | + get_property(_old_val GLOBAL PROPERTY ${_prop}) |
| 114 | + if(_old_val AND NOT _old_val STREQUAL "${_val}") |
| 115 | + message(WARNING "${param} for '${package_name}' changed from '${_old_val}' to '${_val}'") |
207 | 116 | endif() |
208 | | - list(APPEND AMENT_CMAKE_PYTHON_INSTALL_INSTALLED_NAMES "${package_name}") |
209 | | - set(AMENT_CMAKE_PYTHON_INSTALL_INSTALLED_NAMES |
210 | | - "${AMENT_CMAKE_PYTHON_INSTALL_INSTALLED_NAMES}" PARENT_SCOPE) |
211 | | -endfunction() |
| 117 | + set_property(GLOBAL PROPERTY ${_prop} "${_val}") |
| 118 | +endmacro() |
0 commit comments