Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 332abefa authored by hhakim's avatar hhakim
Browse files

Compile and test for python2 even if python3 is found and likewise search the...

Compile and test for python2 even if python3 is found and likewise search the two versions of python and cython.

Consistently, we do not ask for RPM dependency on dynamic libraries for Python. It should be tested at installation and the user be warned of it if no python's found.
parent 0e7ad113
Branches
Tags 2.2-rc4
No related merge requests found
Pipeline #833824 skipped
......@@ -57,84 +57,110 @@ if(UNIX)
if ($ENV{PYTHON_PATH}} MATCHES python)
set(PYTHON_EXE $ENV{PYTHON_PATH})
message(STATUS "PYTHON_EXE=$ENV{PYTHON_PATH} defined from environment variable")
set(PYTHON_EXES ${PYTHON_EXE})
elseif (${PYTHON_PATH} MATCHES python)
set(PYTHON_EXE ${PYTHON_PATH})
message(STATUS "PYTHON_EXE=${PYTHON_EXE} defined from local input variable")
else() # PYTHON_EXE_DIR
#set(Python_ADDITIONAL_VERSIONS 3)
find_package(PythonInterp 3)# REQUIRED)
find_package(PythonLibs 3)# REQUIRED)
if(NOT PYTHONINTERP_FOUND)
find_package(PythonInterp 2)
find_package(PythonInterp 2)
if(NOT PYTHONINTERP_FOUND)
message(FATAL_ERROR "python is not installed or at least not present in your PATH ; Please insert in the PATH environment.")
endif()
endif(NOT PYTHONINTERP_FOUND)
set(PYTHON_EXE ${PYTHON_EXECUTABLE})
set(PYTHON_EXES ${PYTHON_EXE})
else() # auto-find pythons 2 and 3
#set(Python_ADDITIONAL_VERSIONS 3)
set(Python_ADDITIONAL_VERSIONS 3)
find_package(PythonInterp 3 EXACT)# REQUIRED)
find_package(PythonLibs 3)# REQUIRED)
if(PYTHONINTERP_FOUND)
set(PYTHON3_EXE ${PYTHON_EXECUTABLE})
endif(PYTHONINTERP_FOUND)
# search python2 anyway (even if we found python3)
# cmake fails to find py2 if py3 was found
# try to find python2 in same path as python3
set(Python_ADDITIONAL_VERSIONS 2)
find_package(PythonInterp 2 EXACT)# REQUIRED)
find_package(PythonLibs 2 REQUIRED)
if(PYTHONINTERP_FOUND AND NOT PYTHON3_EXE)
set(PYTHON2_EXE ${PYTHON_EXECUTABLE})
else()
string(REGEX REPLACE "(.*)/python.*" "\\1/python2" TMP_PYTHON2_EXE ${PYTHON3_EXE})
#message(STATUS "PYTHON3_EXE=${PYTHON3_EXE} "TMP_PYTHON2_EXE=${TMP_PYTHON2_EXE})
if(EXISTS ${TMP_PYTHON2_EXE})
execute_process(COMMAND ${TMP_PYTHON2_EXE} "--version" OUTPUT_VARIABLE PY2_VER ERROR_VARIABLE PY2_VER2 RESULT_VARIABLE RES)
# message(STATUS PY2_VER=${PY2_VER} PY2_VER2=${PY2_VER2})
if(${RES} EQUAL 0 AND ("${PY2_VER}" MATCHES "Python 2\\.7\\..*" OR "${PY2_VER2}" MATCHES "Python 2\\.7\\..*") )
SET(PYTHON2_EXE ${TMP_PYTHON2_EXE})
endif()
endif()
endif()
if(NOT PYTHON2_EXE)
message(FATAL_ERROR "python is not installed or at least not present in your PATH ; Please insert in the PATH environment.")
endif()
set(PYTHON_EXES ${PYTHON2_EXE};${PYTHON3_EXE})
endif()
else(UNIX)
message(FATAL_ERROR "Python wrapper Unsupported OS (only compatible with Unix System (Linux or Mac Os X)")
endif()
message(STATUS PYTHON_EXES=${PYTHON_EXES})
foreach(PYTHON_EXE IN LISTS PYTHON_EXES)
string(REGEX REPLACE "[a-zA-Z0-9_/:.]+/p(ython.?)" "c\\1" CYTHON_BIN_NAME "${PYTHON_EXE}")
message(STATUS "------------------------------------------------")
message(STATUS "PYTHON_EXE has been found : ${PYTHON_EXE}")
message(STATUS "Probed cython program name: ${CYTHON_BIN_NAME}")
message(STATUS "------------------------------------------------")
message(STATUS " ")
message(STATUS "------------------------------------------------------")
message(STATUS "--- Looking for Python module (cython,numpy,scipy) ---")
message(STATUS "------------------------------------------------------")
exec_program("${PYTHON_EXE} ${PROJECT_SOURCE_DIR}/CMake/check_python.py" OUTPUT_VARIABLE LIST_PYTHON_MODULE RETURN_VALUE PYTHON_MODULE_MISSING)
message("${LIST_PYTHON_MODULE}")
set(PYTHON_MODULE_SCIPY ON)
if(${PYTHON_MODULE_MISSING} EQUAL -1)
message(FATAL_ERROR "necessary python module (numpy or cython) are missing !!!")
elseif(${PYTHON_MODULE_MISSING} EQUAL 1)
message(STATUS "optional python module scipy is missing, no time comparison with scipy will be made")
set(PYTHON_MODULE_SCIPY OFF)
else(${PYTHON_MODULE_MISSING})
message(STATUS "all the python modules are installed (numpy,cython and scipy)")
endif()
message(STATUS "------------------------------------------------")
message(STATUS " ")
##################################################################
message(STATUS "------------------------------------------------")
message(STATUS "------------ Looking for Cython PATH -----------")
message(STATUS "------------------------------------------------")
string(REGEX REPLACE "[a-zA-Z0-9_/:.]+/p(ython.?)" "c\\1" CYTHON_BIN_NAME "${PYTHON_EXE}")
string(REGEX REPLACE "(.*)/.*" "\\1" PYTHON_PARENT_PATH ${PYTHON_EXE})
if(NOT EXISTS ${PYTHON_PARENT_PATH}/${CYTHON_BIN_NAME})
set(CYTHON_BIN_NAME cython)
endif()
if(UNIX)
message(STATUS "INFO- If you want to choose an other version of Cython,")
message(STATUS "INFO- please add an environment variable CYTHON_PATH. ")
message(STATUS "INFO- Example : CYTHON_PATH=/usr/bin/cython")
if ($ENV{CYTHON_PATH}} MATCHES ${CYTHON_BIN_NAME})
set(CYTHON_TMP $ENV{CYTHON_PATH})
message(STATUS "CYTHON_PATH=$ENV{CYTHON_PATH} defined from environment variable")
elseif (${CYTHON_PATH} MATCHES ${CYTHON_BIN_NAME})
set(CYTHON_TMP ${CYTHON_PATH})
message(STATUS "CYTHON_PATH=${CYTHON_PATH} defined from local input variable")
else() # PYTHON_EXE_DIR
find_program(CYTHON_TMP ${CYTHON_BIN_NAME})
if(${CYTHON_TMP} MATCHES ".*-NOTFOUND")
message(FATAL_ERROR "Cython is not present in your PATH ; Please insert in the PATH environment.")
else()
message(STATUS "Cython path: ${CYTHON_TMP}")
endif()
message(STATUS "------------------------------------------------")
message(STATUS "PYTHON_EXE has been found : ${PYTHON_EXE}")
message(STATUS "Probed cython program name: ${CYTHON_BIN_NAME}")
message(STATUS "------------------------------------------------")
message(STATUS " ")
message(STATUS "------------------------------------------------------")
message(STATUS "--- Looking for Python module (cython,numpy,scipy) ---")
message(STATUS "------------------------------------------------------")
exec_program("${PYTHON_EXE} ${PROJECT_SOURCE_DIR}/CMake/check_python.py" OUTPUT_VARIABLE LIST_PYTHON_MODULE RETURN_VALUE PYTHON_MODULE_MISSING)
message("${LIST_PYTHON_MODULE}")
set(PYTHON_MODULE_SCIPY ON)
if(${PYTHON_MODULE_MISSING} EQUAL -1)
message(FATAL_ERROR "necessary python module (numpy or cython) are missing !!!")
elseif(${PYTHON_MODULE_MISSING} EQUAL 1)
message(STATUS "optional python module scipy is missing, no time comparison with scipy will be made")
set(PYTHON_MODULE_SCIPY OFF)
else(${PYTHON_MODULE_MISSING})
message(STATUS "all the python modules are installed (numpy,cython and scipy)")
endif()
string(REGEX REPLACE "([a-zA-Z0-9_/:.]+)/${CYTHON_BIN_NAME}.?" "\\1" CYTHON_BIN_DIR "${CYTHON_TMP}")
else(UNIX)
message(FATAL_ERROR "Cython wrapper Unsupported OS (only compatible with Unix System (Linux or Mac Os X)")
endif()
message(STATUS "CYTHON_BIN_DIR has been found : ${CYTHON_BIN_DIR}")
message(STATUS "------------------------------------------------")
message(STATUS "------------------------------------------------")
message(STATUS " ")
##################################################################
message(STATUS "------------------------------------------------")
message(STATUS "------------ Looking for Cython PATH -----------")
message(STATUS "------------------------------------------------")
if(UNIX)
message(STATUS "INFO- If you want to choose an other version of Cython,")
message(STATUS "INFO- please add an environment variable CYTHON_PATH. ")
message(STATUS "INFO- Example : CYTHON_PATH=/usr/bin/cython")
if ($ENV{CYTHON_PATH}} MATCHES ${CYTHON_BIN_NAME})
set(CYTHON_TMP $ENV{CYTHON_PATH})
message(STATUS "CYTHON_PATH=$ENV{CYTHON_PATH} defined from environment variable")
elseif (${CYTHON_PATH} MATCHES ${CYTHON_BIN_NAME})
set(CYTHON_TMP ${CYTHON_PATH})
message(STATUS "CYTHON_PATH=${CYTHON_PATH} defined from local input variable")
else() # PYTHON_EXE_DIR
find_program(CYTHON_TMP ${CYTHON_BIN_NAME})
if(${CYTHON_TMP} MATCHES ".*-NOTFOUND")
message(FATAL_ERROR "Cython is not present in your PATH ; Please insert in the PATH environment.")
else()
message(STATUS "Cython path: ${CYTHON_TMP}")
endif()
endif()
string(REGEX REPLACE "([a-zA-Z0-9_/:.]+)/${CYTHON_BIN_NAME}.?" "\\1" CYTHON_BIN_DIR "${CYTHON_TMP}")
else(UNIX)
message(FATAL_ERROR "Cython wrapper Unsupported OS (only compatible with Unix System (Linux or Mac Os X)")
endif()
message(STATUS "CYTHON_BIN_DIR has been found : ${CYTHON_BIN_DIR}")
message(STATUS "------------------------------------------------")
endforeach()
......@@ -875,12 +875,12 @@ set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST "/opt")
set(CPACK_RPM_PACKAGE_REQUIRES "matio >= 1.5.7")
#TODO: set(CPACK_DEBIAN_PACKAGE_DEPENDS "matio")
if(BUILD_WRAPPER_PYTHON)
set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, python3 >= 3.6.5, python3-numpy >= 1.13.3, python3-scipy >= 1.0.0")
#set(CPACK_RPM_PACKAGE_REQUIRES "${CPACK_RPM_PACKAGE_REQUIRES}, python3 >= 3.6.5, python3-numpy >= 1.13.3, python3-scipy >= 1.0.0")
#TODO: set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, python3, python3-numpy, python3-scipy)
endif()
if(BUILD_WRAPPER_MATLAB)
#TODO: for debian package also ?
set(CPACK_RPM_SPEC_MORE_DEFINE "%define __requires_exclude ^libmex[.]so.*|libmat[.]so.*|libmx[.]so.*$ ")
set(CPACK_RPM_SPEC_MORE_DEFINE "%define __requires_exclude ^libmex[.]so.*|libmat[.]so.*|libmx[.]so.*|libpython.*[.]so.*$ ")
endif()
set(CPACK_RPM_PACKAGE_RELEASE "1")
......
......@@ -226,15 +226,21 @@ endif(BUILD_WRAPPER_MATLAB)
#PYTHON WRAPPER
if (BUILD_WRAPPER_PYTHON)
add_test(NAME PYTHON_FAUST COMMAND ${PYTHON_EXE} ${FAUST_SRC_TEST_SRC_PYTHON_DIR}/test_pyFaust.py ${FAUST_PYTHON_BIN_DIR})
if(PYTHON_MODULE_SCIPY)
add_test(NAME PYTHON_FAUST_TIME COMMAND ${PYTHON_EXE} ${FAUST_SRC_TEST_SRC_PYTHON_DIR}/test_pyFaust_time.py ${FAUST_PYTHON_BIN_DIR} ${FAUST_BIN_TEST_FIG_DIR})
add_test(NAME PYTHON_FAUST_DEMO_INSTALL COMMAND ${PYTHON_EXE} ${FAUST_PYTHON_BIN_DIR}/quickstart.py)
add_test(NAME PYTHON_FAUST_UNIT_TESTS COMMAND ${PYTHON_EXE} ${FAUST_SRC_TEST_SRC_PYTHON_DIR}/test_FaustPy.py ${FAUST_PYTHON_BIN_DIR}) # second arg. is the FaustPy's dir. to add to PYTHONPATH
endif(PYTHON_MODULE_SCIPY)
foreach(PY_VER RANGE 2 3)
math(EXPR PY_INDEX "${PY_VER}-2")
list(LENGTH PYTHON_EXES NUM_PY_EXES)
if(${NUM_PY_EXES} GREATER ${PY_INDEX})
list(GET PYTHON_EXES ${PY_INDEX} PYTHON_EXE)
add_test(NAME PYTHON${PY_VER}_FAUST COMMAND ${PYTHON_EXE} ${FAUST_SRC_TEST_SRC_PYTHON_DIR}/test_pyFaust.py ${FAUST_PYTHON_BIN_DIR})
if(PYTHON_MODULE_SCIPY)
add_test(NAME PYTHON${PY_VER}_FAUST_TIME COMMAND ${PYTHON_EXE} ${FAUST_SRC_TEST_SRC_PYTHON_DIR}/test_pyFaust_time.py ${FAUST_PYTHON_BIN_DIR} ${FAUST_BIN_TEST_FIG_DIR})
add_test(NAME PYTHON${PY_VER}_FAUST_DEMO_INSTALL COMMAND ${PYTHON_EXE} ${FAUST_PYTHON_BIN_DIR}/quickstart.py)
add_test(NAME PYTHON${PY_VER}_FAUST_UNIT_TESTS COMMAND ${PYTHON_EXE} ${FAUST_SRC_TEST_SRC_PYTHON_DIR}/test_FaustPy.py ${FAUST_PYTHON_BIN_DIR}) # second arg. is the FaustPy's dir. to add to PYTHONPATH
endif(PYTHON_MODULE_SCIPY)
endif()
endforeach()
endif(BUILD_WRAPPER_PYTHON)
......
......@@ -37,14 +37,14 @@ configure_file(${FAUST_PYTHON_SRC_SRC_DIR}/FaustCorePy.pyx ${FAUST_PYTHON_BIN_DI
configure_file(${FAUST_PYTHON_SRC_SRC_DIR}/FaustCoreCy.pxd ${FAUST_PYTHON_BIN_DIR}/FaustCoreCy.pxd COPYONLY)
configure_file(${FAUST_PYTHON_SRC_DIR}/FaustPy.py ${FAUST_PYTHON_BIN_DIR}/FaustPy.py COPYONLY)
add_custom_target(${FAUST_PYTHON_TARGET} ALL DEPENDS ${FAUST_TARGET} )
add_custom_command(TARGET ${FAUST_PYTHON_TARGET}
COMMAND ${PYTHON_EXE}
ARGS "${FAUST_PYTHON_BIN_DIR}/setup.py" "build_ext" "--inplace"
COMMENT "Creating PyFaust")
add_custom_target(${FAUST_PYTHON_TARGET} ALL DEPENDS ${FAUST_TARGET})
foreach(PYTHON_EXE IN LISTS PYTHON_EXES)
add_custom_command(TARGET ${FAUST_PYTHON_TARGET}
COMMAND ${PYTHON_EXE}
ARGS "${FAUST_PYTHON_BIN_DIR}/setup.py" "build_ext" "--inplace"
COMMENT "Creating PyFaust")
endforeach()
#install the python wrapper
install(DIRECTORY ${FAUST_PYTHON_BIN_DIR}/ DESTINATION ${CMAKE_INSTALL_PYTHON_PREFIX} FILE_PERMISSIONS ${INSTALL_FILE_PERMISSION} DIRECTORY_PERMISSIONS ${INSTALL_DIR_PERMISSION} FILES_MATCHING PATTERN "*.${MEX_EXT}" PATTERN "*.py" PATTERN "*.so" PATTERN "build" EXCLUDE PATTERN "setup*" EXCLUDE PATTERN "CMakeFiles*" EXCLUDE)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment