@@ -41,7 +41,7 @@ function(search_python_module)
41
41
OUTPUT_VARIABLE MODULE_VERSION
42
42
ERROR_QUIET
43
43
OUTPUT_STRIP_TRAILING_WHITESPACE
44
- )
44
+ )
45
45
endif ()
46
46
if (${_RESULT} STREQUAL "0" )
47
47
message (STATUS "Found python module: \" ${MODULE_NAME} \" (found version \" ${MODULE_VERSION} \" )" )
@@ -51,7 +51,8 @@ function(search_python_module)
51
51
execute_process (
52
52
COMMAND ${Python3_EXECUTABLE} -m pip install --user ${MODULE_PACKAGE}
53
53
OUTPUT_STRIP_TRAILING_WHITESPACE
54
- )
54
+ COMMAND_ERROR_IS_FATAL ANY
55
+ )
55
56
else ()
56
57
message (FATAL_ERROR "Can't find python module: \" ${MODULE_NAME} \" , please install it using your system package manager." )
57
58
endif ()
@@ -88,6 +89,47 @@ function(search_python_internal_module)
88
89
endif ()
89
90
endfunction ()
90
91
92
+ ###################
93
+ ## Python Test ##
94
+ ###################
95
+ if (BUILD_TESTING)
96
+ #search_python_module(NAME virtualenv PACKAGE virtualenv)
97
+ # venv not working on github windows runners
98
+ search_python_internal_module(NAME venv)
99
+ # Testing using a vitual environment
100
+ #set(VENV_EXECUTABLE ${Python3_EXECUTABLE} -m virtualenv)
101
+ set (VENV_EXECUTABLE ${Python3_EXECUTABLE} -m venv)
102
+ set (VENV_DIR ${CMAKE_CURRENT_BINARY_DIR} /python/venv)
103
+ if (WIN32 )
104
+ set (VENV_Python3_EXECUTABLE ${VENV_DIR} /Scripts/python.exe)
105
+ else ()
106
+ set (VENV_Python3_EXECUTABLE ${VENV_DIR} /bin/python)
107
+ endif ()
108
+ endif ()
109
+
110
+ if (BUILD_TESTING)
111
+ # add_python_test()
112
+ # CMake function to generate and build python test.
113
+ # Parameters:
114
+ # the python filename
115
+ # e.g.:
116
+ # add_python_test(foo.py)
117
+ function (add_python_test FILE_NAME)
118
+ message (STATUS "Configuring test ${FILE_NAME} ..." )
119
+ get_filename_component (TEST_NAME ${FILE_NAME} NAME_WE )
120
+ add_test (
121
+ NAME python_test_${TEST_NAME}
122
+ COMMAND ${VENV_Python3_EXECUTABLE} -m pytest ${FILE_NAME}
123
+ WORKING_DIRECTORY ${VENV_DIR} )
124
+ message (STATUS "Configuring test ${FILE_NAME} done" )
125
+ endfunction ()
126
+ endif ()
127
+
128
+ #######################
129
+ ## PYTHON WRAPPERS ##
130
+ #######################
131
+ list (APPEND CMAKE_SWIG_FLAGS "-I${PROJECT_SOURCE_DIR} " )
132
+
91
133
set (PYTHON_PROJECT cmakepybind11)
92
134
message (STATUS "Python project: ${PYTHON_PROJECT} " )
93
135
set (PYTHON_PROJECT_DIR ${PROJECT_BINARY_DIR} /python/${PYTHON_PROJECT} )
@@ -103,6 +145,7 @@ endforeach()
103
145
#######################
104
146
#file(MAKE_DIRECTORY python/${PYTHON_PROJECT})
105
147
file (GENERATE OUTPUT ${PYTHON_PROJECT_DIR} /__init__.py CONTENT "__version__ = \" ${PROJECT_VERSION} \"\n " )
148
+
106
149
file (GENERATE OUTPUT ${PYTHON_PROJECT_DIR} /foo/__init__.py CONTENT "" )
107
150
file (GENERATE OUTPUT ${PYTHON_PROJECT_DIR} /bar/__init__.py CONTENT "" )
108
151
file (GENERATE OUTPUT ${PYTHON_PROJECT_DIR} /foobar/__init__.py CONTENT "" )
@@ -123,7 +166,7 @@ file(GENERATE
123
166
# COMMAND ${CMAKE_COMMAND} -E copy setup.py setup.py
124
167
# WORKING_DIRECTORY python)
125
168
126
- # Look for python module wheel
169
+ # Look for python modules
127
170
search_python_module(
128
171
NAME setuptools
129
172
PACKAGE setuptools)
@@ -132,7 +175,7 @@ search_python_module(
132
175
PACKAGE wheel)
133
176
134
177
add_custom_command (
135
- OUTPUT python/dist/timestamp
178
+ OUTPUT python/dist_timestamp
136
179
COMMAND ${CMAKE_COMMAND} -E remove_directory dist
137
180
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTHON_PROJECT} /.libs
138
181
# Don't need to copy static lib on Windows.
@@ -150,7 +193,7 @@ add_custom_command(
150
193
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pyFooBar> ${PYTHON_PROJECT} /foobar
151
194
#COMMAND ${Python3_EXECUTABLE} setup.py bdist_egg bdist_wheel
152
195
COMMAND ${Python3_EXECUTABLE} setup.py bdist_wheel
153
- COMMAND ${CMAKE_COMMAND} -E touch ${PROJECT_BINARY_DIR} /python/dist/timestamp
196
+ COMMAND ${CMAKE_COMMAND} -E touch ${PROJECT_BINARY_DIR} /python/dist_timestamp
154
197
MAIN_DEPENDENCY
155
198
python/setup.py.in
156
199
DEPENDS
@@ -170,59 +213,34 @@ add_custom_command(
170
213
# Main Target
171
214
add_custom_target (python_package ALL
172
215
DEPENDS
173
- python/dist/timestamp
216
+ python/dist_timestamp
174
217
WORKING_DIRECTORY python)
175
218
176
- ###################
177
- ## Python Test ##
178
- ###################
179
219
if (BUILD_TESTING)
180
- search_python_module(NAME virtualenv PACKAGE virtualenv)
181
- # venv not working on github windows runners
182
- # search_python_internal_module(NAME venv)
183
- # Testing using a vitual environment
184
- set (VENV_EXECUTABLE ${Python3_EXECUTABLE} -m virtualenv)
185
- #set(VENV_EXECUTABLE ${Python3_EXECUTABLE} -m venv)
186
- set (VENV_DIR ${CMAKE_CURRENT_BINARY_DIR} /python/venv)
187
- if (WIN32 )
188
- set (VENV_Python3_EXECUTABLE ${VENV_DIR} /Scripts/python.exe)
189
- else ()
190
- set (VENV_Python3_EXECUTABLE ${VENV_DIR} /bin/python)
191
- endif ()
192
220
# make a virtualenv to install our python package in it
193
221
add_custom_command (TARGET python_package POST_BUILD
194
222
# Clean previous install otherwise pip install may do nothing
195
223
COMMAND ${CMAKE_COMMAND} -E remove_directory ${VENV_DIR}
196
- COMMAND ${VENV_EXECUTABLE} -p ${Python3_EXECUTABLE} ${VENV_DIR}
224
+ #COMMAND ${VENV_EXECUTABLE} -p ${Python3_EXECUTABLE}
225
+ COMMAND ${VENV_EXECUTABLE}
226
+ $<$<BOOL :${VENV_USE_SYSTEM_SITE_PACKAGES} >:--system -site-packages>
227
+ ${VENV_DIR}
197
228
#COMMAND ${VENV_EXECUTABLE} ${VENV_DIR}
198
229
# Must NOT call it in a folder containing the setup.py otherwise pip call it
199
230
# (i.e. "python setup.py bdist") while we want to consume the wheel package
200
- COMMAND ${VENV_Python3_EXECUTABLE} -m pip install --find -links=${CMAKE_CURRENT_BINARY_DIR} /python/dist ${PYTHON_PROJECT}
231
+ COMMAND ${VENV_Python3_EXECUTABLE} -m pip install
232
+ --find -links=${CMAKE_CURRENT_BINARY_DIR} /python/dist ${PYTHON_PROJECT} ==${PROJECT_VERSION}
233
+ # install modules only required to run examples
234
+ COMMAND ${VENV_Python3_EXECUTABLE} -m pip install pytest
201
235
BYPRODUCTS ${VENV_DIR}
202
236
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
203
237
COMMENT "Create venv and install ${PYTHON_PROJECT} "
204
238
VERBATIM )
205
239
endif ()
206
240
207
- # add_python_test()
208
- # CMake function to generate and build python test.
209
- # Parameters:
210
- # the python filename
211
- # e.g.:
212
- # add_python_test(foo.py)
213
- function (add_python_test FILE_NAME)
214
- message (STATUS "Configuring test ${FILE_NAME} ..." )
215
- get_filename_component (EXAMPLE_NAME ${FILE_NAME} NAME_WE )
216
-
217
- if (BUILD_TESTING)
218
- add_test (
219
- NAME python_test_${EXAMPLE_NAME}
220
- COMMAND ${VENV_Python3_EXECUTABLE} ${FILE_NAME}
221
- WORKING_DIRECTORY ${VENV_DIR} )
222
- endif ()
223
- message (STATUS "Configuring test ${FILE_NAME} done" )
224
- endfunction ()
225
-
241
+ ######################
242
+ ## Python Example ##
243
+ ######################
226
244
# add_python_example()
227
245
# CMake function to generate and build python example.
228
246
# Parameters:
0 commit comments