@@ -22,6 +22,12 @@ if (OPENASSETIO_MEDIACREATION_GENERATE_PYTHON)
22
22
""
23
23
CACHE STRING
24
24
"Override default Python module install directory, relative to CMAKE_INSTALL_PREFIX" )
25
+
26
+ set (OPENASSETIO_MEDIACREATION_ENABLE_PYTHON_INSTALL_DIST_INFO_desc
27
+ "Create a dist-info metadata directory alongside Python installation to provide"
28
+ " discoverability and prevent overwrite by package managers such as pip" )
29
+ option (OPENASSETIO_MEDIACREATION_ENABLE_PYTHON_INSTALL_DIST_INFO
30
+ "${OPENASSETIO_MEDIACREATION_ENABLE_PYTHON_INSTALL_DIST_INFO_desc} " ON )
25
31
endif ()
26
32
27
33
message (STATUS "Test enabled = ${OPENASSETIO_MEDIACREATION_ENABLE_TEST} " )
@@ -130,7 +136,7 @@ write_basic_package_version_file(${_version_config_file}
130
136
COMPATIBILITY SameMajorVersion)
131
137
132
138
configure_package_config_file(
133
- cmake/Config.cmake.in
139
+ cmake/packaging/ Config.cmake.in
134
140
${_project_config_file}
135
141
INSTALL_DESTINATION ${_config_install_dir}
136
142
)
@@ -152,6 +158,36 @@ if (OPENASSETIO_MEDIACREATION_GENERATE_PYTHON)
152
158
DESTINATION "${OPENASSETIO_MEDIACREATION_PYTHON_SITEDIR} "
153
159
FILES_MATCHING PATTERN "*.py"
154
160
)
161
+
162
+ #-------------------------------------------------------------------
163
+ # Install dist-info into the Python environment, to prevent
164
+ # accidental overwrite, e.g. pip.
165
+
166
+ if (OPENASSETIO_MEDIACREATION_ENABLE_PYTHON_INSTALL_DIST_INFO)
167
+ file (READ pyproject.toml _pyproject_toml)
168
+ string (REGEX MATCH [[version *= *"([^"]+)"]] _unused "${_pyproject_toml} " )
169
+ set (OPENASSETIO_MEDIACREATION_PYTHON_PKG_VERSION ${CMAKE_MATCH_1} )
170
+ if (NOT OPENASSETIO_MEDIACREATION_PYTHON_PKG_VERSION)
171
+ message (FATAL_ERROR "Failed to parse version from pyproject.toml" )
172
+ endif ()
173
+ set (_dist_info_dir_name
174
+ openassetio_mediacreation-${OPENASSETIO_MEDIACREATION_PYTHON_PKG_VERSION} .dist-info)
175
+ file (
176
+ COPY
177
+ "${PROJECT_SOURCE_DIR} /cmake/packaging/python.dist-info/INSTALLER"
178
+ "${PROJECT_SOURCE_DIR} /cmake/packaging/python.dist-info/REQUESTED"
179
+ "${PROJECT_SOURCE_DIR} /cmake/packaging/python.dist-info/top_level.txt"
180
+ DESTINATION "${_dist_info_dir_name} "
181
+ )
182
+ configure_file (
183
+ "${PROJECT_SOURCE_DIR} /cmake/packaging/python.dist-info/METADATA.in"
184
+ "${_dist_info_dir_name} /METADATA"
185
+ )
186
+ install (
187
+ DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /${_dist_info_dir_name} "
188
+ DESTINATION "${OPENASSETIO_MEDIACREATION_PYTHON_SITEDIR} "
189
+ )
190
+ endif ()
155
191
endif ()
156
192
157
193
#-----------------------------------------------------------------------
0 commit comments