1
- # Add a python test from a python file
1
+ # Add a python test from a python file # One cannot simply do:
2
+ # SET(ENV{PYTHONPATH} ${LIBRARY_OUTPUT_PATH})
3
+ # SET(my_test "from test_mymodule import *\;test_mymodule()")
4
+ # ADD_TEST(PYTHON-TEST-MYMODULE python -c ${my_test})
5
+ # Since cmake is only transmitting the ADD_TEST line to ctest thus you are loosing
6
+ # the env var. The only way to store the env var is to physically write in the cmake script
7
+ # whatever PYTHONPATH you want and then add the test as 'cmake -P python_test.cmake'
2
8
#
3
9
# Usage:
4
10
# ADD_PYTHON_TEST(PYTHON-TEST test.py)
@@ -19,34 +25,54 @@ MARK_AS_ADVANCED(PYTHON_EXECUTABLE)
19
25
20
26
MACRO (ADD_PYTHON_TEST TESTNAME FILENAME )
21
27
GET_SOURCE_FILE_PROPERTY (loc ${FILENAME} LOCATION )
22
- SET ( EXTRA_ENVIRONMENT ${ARGN} )
28
+ GET_SOURCE_FILE_PROPERTY ( pyenv ${FILENAME} PYTHONPATH )
23
29
24
- IF (CMAKE_CONFIGURATION_TYPES )
25
- ADD_TEST (NAME ${TESTNAME} COMMAND ${PYTHON_EXECUTABLE} ${loc} -D CMAKE_BUILD_TYPE =$<CONFIGURATION> )
26
- ELSE (CMAKE_CONFIGURATION_TYPES )
27
- ADD_TEST (NAME ${TESTNAME} COMMAND ${PYTHON_EXECUTABLE} ${loc} )
28
- ENDIF (CMAKE_CONFIGURATION_TYPES )
29
-
30
- SET (UNIX_TEST_PYTHONPATH "${QGIS_OUTPUT_DIRECTORY} /python:${QGIS_OUTPUT_DIRECTORY} /python/plugins:${CMAKE_SOURCE_DIR} /tests/src/python:$ENV{PYTHONPATH} " )
31
30
IF (WIN32 )
32
- # Separate Windows PATHs with semicolons
33
- STRING (REGEX REPLACE ":" "\\\; " TEST_PYTHONPATH ${UNIX_TEST_PYTHONPATH} )
34
- SET (TEST_QGIS_PREFIX_PATH "${QGIS_OUTPUT_DIRECTORY} /bin/${CMAKE_BUILD_TYPE} " )
35
- SET (TEST_PATH "${QGIS_OUTPUT_DIRECTORY} /bin/${CMAKE_BUILD_TYPE} ;$ENV{PATH} " )
36
- SET (ENVIRONMENT_VARS "PYTHONPATH=${TEST_PYTHONPATH} " "QGIS_PREFIX_PATH=${TEST_QGIS_PREFIX_PATH} " "PATH=${TEST_PATH} " )
31
+ STRING (REGEX REPLACE ":" " " wo_semicolon "${ARGN} " )
37
32
ELSE (WIN32 )
38
- SET (TEST_PYTHONPATH ${UNIX_TEST_PYTHONPATH} )
39
- SET (TEST_QGIS_PREFIX_PATH "${QGIS_OUTPUT_DIRECTORY} " )
40
- SET (TEST_LD_LIBRARY_PATH "${QGIS_OUTPUT_DIRECTORY} /lib:$ENV{LD_LIBRARY_PATH} " )
41
- SET (ENVIRONMENT_VARS "PYTHONPATH=${TEST_PYTHONPATH} " "QGIS_PREFIX_PATH=${TEST_QGIS_PREFIX_PATH} " "LD_LIBRARY_PATH=${TEST_LD_LIBRARY_PATH} " )
33
+ STRING (REGEX REPLACE ";" " " wo_semicolon "${ARGN} " )
42
34
ENDIF (WIN32 )
43
- SET (TEST_ENVIRONMENT_VARS ${ENVIRONMENT_VARS} ${EXTRA_ENVIRONMENT} )
44
35
45
- SET_PROPERTY (TEST ${TESTNAME} PROPERTY ENVIRONMENT ${TEST_ENVIRONMENT_VARS} )
46
- # For Debug
47
- #FOREACH(arg ${TEST_ENVIRONMENT_VARS})
48
- # MESSAGE("Test ENV: ${arg}")
49
- #ENDFOREACH()
36
+ FILE (WRITE ${CMAKE_CURRENT_BINARY_DIR} /${TESTNAME}.cmake "
37
+ IF(WIN32)
38
+ SET(ENV{QGIS_PREFIX_PATH} \" ${QGIS_OUTPUT_DIRECTORY} /bin/\$ {CMAKE_BUILD_TYPE}\" )
39
+ SET(ENV{PATH} \" ${QGIS_OUTPUT_DIRECTORY} /bin/\$ {CMAKE_BUILD_TYPE};\$ ENV{PATH}\" )
40
+ SET(ENV{PYTHONPATH} \" ${QGIS_OUTPUT_DIRECTORY} /python/;${QGIS_OUTPUT_DIRECTORY} /python/plugins;${CMAKE_SOURCE_DIR} /tests/src/python;\$ ENV{PYTHONPATH}\" )
41
+ MESSAGE(\" PATH:\$ ENV{PATH}\" )
42
+ ELSE(WIN32)
43
+ SET(ENV{QGIS_PREFIX_PATH} \" ${QGIS_OUTPUT_DIRECTORY} \" )
44
+ SET(ENV{LD_LIBRARY_PATH} \" ${pyenv} :${QGIS_OUTPUT_DIRECTORY} /lib:\$ ENV{LD_LIBRARY_PATH}\" )
45
+ SET(ENV{PYTHONPATH} \" ${QGIS_OUTPUT_DIRECTORY} /python/:${QGIS_OUTPUT_DIRECTORY} /python/plugins;${CMAKE_SOURCE_DIR} /tests/src/python:\$ ENV{PYTHONPATH}\" )
46
+ MESSAGE(\" LD_LIBRARY_PATH:\$ ENV{LD_LIBRARY_PATH}\" )
47
+ ENDIF(WIN32)
48
+ " )
49
+
50
+ FOREACH (_in ${ARGN} )
51
+ STRING (REGEX MATCH "^([^=]+)=(.*)$" _out ${_in} )
52
+ MESSAGE (STATUS "ENV: SET(ENV{${CMAKE_MATCH_1} } \" ${CMAKE_MATCH_2} \" )" )
53
+ FILE (APPEND ${CMAKE_CURRENT_BINARY_DIR} /${TESTNAME}.cmake "
54
+ SET(ENV{${CMAKE_MATCH_1} } \" ${CMAKE_MATCH_2} \" )
55
+ " )
56
+ ENDFOREACH (_in )
57
+
58
+ FILE (APPEND ${CMAKE_CURRENT_BINARY_DIR} /${TESTNAME}.cmake "
59
+ MESSAGE(\" PYTHONPATH:\$ ENV{PYTHONPATH}\" )
60
+ MESSAGE(STATUS \" Running ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolon} \" )
61
+ EXECUTE_PROCESS(
62
+ COMMAND ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolon}
63
+ RESULT_VARIABLE import_res
64
+ )
65
+ # Pass the output back to ctest
66
+ IF(import_res)
67
+ MESSAGE(FATAL_ERROR \" Test failed: \$ {import_res}\" )
68
+ ENDIF(import_res)
69
+ "
70
+ )
71
+ IF (CMAKE_CONFIGURATION_TYPES )
72
+ ADD_TEST (NAME ${TESTNAME} COMMAND ${CMAKE_COMMAND} -D CMAKE_BUILD_TYPE =$<CONFIGURATION> -P ${CMAKE_CURRENT_BINARY_DIR} /${TESTNAME}.cmake )
73
+ ELSE (CMAKE_CONFIGURATION_TYPES )
74
+ ADD_TEST (NAME ${TESTNAME} COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR} /${TESTNAME}.cmake )
75
+ ENDIF (CMAKE_CONFIGURATION_TYPES )
50
76
ENDMACRO (ADD_PYTHON_TEST )
51
77
52
78
# Byte compile recursively a directory (DIRNAME)
0 commit comments