@@ -161,28 +161,48 @@ macro (setup_python_module)
161161 install (FILES __init__.py DESTINATION ${PYTHON_SITE_DIR} COMPONENT user)
162162
163163 # Create the __init__.pyi stub file
164-
165- # Run stub generation process
166- set (_stub_file "${CMAKE_BINARY_DIR} /lib/python/site-packages/OpenImageIO.pyi" )
167- # FIXME: is this the right location to use? the source gets copied to build/src
168- set (_stub_gen "${CMAKE_SOURCE_DIR} /src/python/generate_stubs.py" )
169- add_custom_command (
170- COMMAND pipx run ${_stub_gen} ${PYTHON_BUILD_SITE}
171- OUTPUT ${_stub_file}
172- DEPENDS ${_stub_gen}
173- COMMENT "Creating python stubs"
174- )
175- install (FILES ${_stub_file} DESTINATION ${PYTHON_SITE_DIR} RENAME __init__.pyi COMPONENT user)
176- # install the marker file
177- file (WRITE "${CMAKE_BINARY_DIR} /lib/python/site-packages/py.typed" "" )
178- install (FILES "${CMAKE_BINARY_DIR} /lib/python/site-packages/py.typed" DESTINATION ${PYTHON_SITE_DIR} COMPONENT user)
179-
180- # Ensure this runs after PyOpenImageIO
181- add_custom_target (
182- PyOpenImageIO_stubs ALL
183- DEPENDS ${_stub_file} "${CMAKE_BINARY_DIR} /lib/python/site-packages/py.typed"
184- )
185- add_dependencies (PyOpenImageIO_stubs PyOpenImageIO )
164+ if (PYTHON_VERSION_FOUND VERSION_GREATER_EQUAL "3.9" )
165+ # A modern version of python is required for the necessary version of mypy
166+
167+ # Run stub generation process
168+ set (_stub_file "${CMAKE_BINARY_DIR} /lib/python/site-packages/OpenImageIO.pyi" )
169+ # FIXME: is this the right location to use? the source gets copied to build/src
170+ set (_stub_gen "${CMAKE_SOURCE_DIR} /src/python/generate_stubs.py" )
171+
172+ find_program (UV_EXE NAMES uv uv.exe )
173+
174+ if (NOT UV_EXE)
175+ # add_custom_command (
176+ # COMMAND ${Python3_EXECUTABLE} -m venv "${PYTHON_VENV_DIR}"
177+ # COMMAND ${PYTHON_VENV_EXE} -m pip install uv
178+ # OUTPUT "${PYTHON_VENV_DIR}/bin/activate"
179+ # COMMENT "Creating virtualenv at ${PYTHON_VENV_DIR}"
180+ # )
181+ execute_process (
182+ COMMAND ${Python3_EXECUTABLE} -m venv "${PYTHON_VENV_DIR} "
183+ COMMAND ${PYTHON_VENV_EXE} -m pip install uv
184+ COMMAND_ERROR_IS_FATAL ANY
185+ )
186+ find_program (UV_EXE NAMES uv uv.exe )
187+ endif ()
188+
189+ add_custom_command (
190+ COMMAND ${UV_EXE} run --python=${Python3_EXECUTABLE} ${_stub_gen} ${PYTHON_BUILD_SITE}
191+ OUTPUT ${_stub_file}
192+ DEPENDS ${_stub_gen}
193+ COMMENT "Creating python stubs" )
194+ install (FILES ${_stub_file} DESTINATION ${PYTHON_SITE_DIR} RENAME __init__.pyi COMPONENT user)
195+ # install the marker file
196+ file (WRITE "${CMAKE_BINARY_DIR} /lib/python/site-packages/py.typed" "" )
197+ install (FILES "${CMAKE_BINARY_DIR} /lib/python/site-packages/py.typed"
198+ DESTINATION ${PYTHON_SITE_DIR} COMPONENT user)
199+
200+ # Ensure this runs after PyOpenImageIO
201+ add_custom_target (
202+ PyOpenImageIO_stubs ALL
203+ DEPENDS ${_stub_file} "${CMAKE_BINARY_DIR} /lib/python/site-packages/py.typed" )
204+ add_dependencies (PyOpenImageIO_stubs PyOpenImageIO )
205+ endif ()
186206
187207endmacro ()
188208
0 commit comments