Changeset: 344c27cb75f9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=344c27cb75f9 Modified Files: CMakeLists.txt Branch: cmake-fun Log Message:
Find python libraries on Windows via the conventional way. diffs (169 lines): diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -661,8 +661,8 @@ if(NOT ${PYTHON2} STREQUAL "NO") if(HAVE_PYTHON2) string(LENGTH "${PY2_OUPUT_RES}" PY2_OUPUT_LENGTH) - string(SUBSTRING "${PY2_OUPUT_RES}" 7 ${PY2_OUPUT_LENGTH} PY2_VERSION) # Remove "Python " - if(PY2_VERSION LESS 2.6) + string(SUBSTRING "${PY2_OUPUT_RES}" 9 ${PY2_OUPUT_LENGTH} PY2_VERSION) # Remove "Python 2." + if(PY2_VERSION LESS 6) set(HAVE_PYTHON2 NO) if(${PYTHON2} STREQUAL "YES") message(FATAL_ERROR "Python 2 executable is too old (<2.6)") @@ -742,8 +742,8 @@ if(NOT ${PYTHON3} STREQUAL "NO") if(HAVE_PYTHON3) string(LENGTH "${PY3_OUPUT_RES}" PY3_OUPUT_LENGTH) - string(SUBSTRING "${PY3_OUPUT_RES}" 7 PY3_OUPUT_LENGTH PY3_VERSION) # Remove "Python " - if(PY3_VERSION LESS 3.5) + string(SUBSTRING "${PY3_OUPUT_RES}" 9 PY3_OUPUT_LENGTH PY3_VERSION) # Remove "Python 3." + if(PY3_VERSION LESS 5) set(HAVE_PYTHON3 NO) if(${PYTHON3} STREQUAL "YES") message(FATAL_ERROR "Python 3 executable is too old (<3.5)") @@ -1315,28 +1315,30 @@ if(NOT ${ENABLE_RINTEGRATION} STREQUAL " endif() endif() -function(testPythonIntegration HAVE_NUMPY PY_INCLUDE_DIR PY_LIBRARIES PY_VERSION INTEGRATION_ENABLED INTERPRETER_PATH INTERPRETER_CONFIG) - if(NOT HAVE_PYTHON${PY_VERSION}) - if(${INTEGRATION_ENABLED} STREQUAL "AUTO") - message(WARNING "A valid python${PY_VERSION} interpreter is required for Python${PY_VERSION} integration") +function(testPythonIntegration HAVE_NUMPY PY_INCLUDE_DIR PY_LIBRARIES PY_MAJOR_VERSION PY_MINOR_VERSION INTEGRATION_ENABLED INTERPRETER_PATH INTERPRETER_CONFIG) + if(WIN32) + find_library(PYTHON_LIBRARY "python${PY_MAJOR_VERSION}${PY_MINOR_VERSION}") + if(PYTHON_LIBRARY) + set(${PY_LIBRARIES} "${PYTHON_LIBRARY}" PARENT_SCOPE) + elseif(${INTEGRATION_ENABLED} STREQUAL "AUTO") + message(WARNING "Python library (python${PY_MAJOR_VERSION}${PY_MINOR_VERSION}) not found") else() - message(FATAL_ERROR "A valid python${PY_VERSION} interpreter is required for Python${PY_VERSION} integration") + message(FATAL_ERROR "Python library (python${PY_MAJOR_VERSION}${PY_MINOR_VERSION}) not found") endif() - endif() - - if(${INTERPRETER_CONFIG} STREQUAL "AUTO") - set(PY_CONFIG_FILE "python${PY_VERSION}-config") else() - set(PY_CONFIG_FILE "${INTERPRETER_CONFIG}") - endif() - - message(STATUS "Checking python${PY_VERSION}-config program") - exec_program("${PY_CONFIG_FILE}" ARGS "--ldflags" OUTPUT_VARIABLE PC_OUTPUT RETURN_VALUE PC_RETURN_CODE) - if(NOT PC_RETURN_CODE EQUAL 0) - if(${INTEGRATION_ENABLED} STREQUAL "AUTO") - message(WARNING "python${PY_VERSION}-config library required for Python ${PY_VERSION} integration support") + if(${INTERPRETER_CONFIG} STREQUAL "AUTO") + set(PY_CONFIG_FILE "python${PY_MAJOR_VERSION}-config") else() - message(FATAL_ERROR "python${PY_VERSION}-config library required for Python ${PY_VERSION} integration support") + set(PY_CONFIG_FILE "${INTERPRETER_CONFIG}") + endif() + message(STATUS "Checking python${PY_MAJOR_VERSION}-config program") + exec_program("${PY_CONFIG_FILE}" ARGS "--ldflags" OUTPUT_VARIABLE PYTHON_LD_FLAGS RETURN_VALUE PYTHON_LD_RC) + if(PYTHON_LD_RC EQUAL 0) + set(${PY_LIBRARIES} "${PYTHON_LD_FLAGS}" PARENT_SCOPE) + elseif(${INTEGRATION_ENABLED} STREQUAL "AUTO") + message(WARNING "python${PY_MAJOR_VERSION}-config library required for Python ${PY_MAJOR_VERSION} integration support (does not exist or returned an error)") + else() + message(FATAL_ERROR "python${PY_MAJOR_VERSION}-config library required for Python ${PY_MAJOR_VERSION} integration support (does not exist or returned an error)") endif() endif() @@ -1354,12 +1356,10 @@ function(testPythonIntegration HAVE_NUMP endif() if(NUMPY_HEADERS) exec_program("${INTERPRETER_PATH}" ARGS "-c \"import distutils.sysconfig, os; print(os.path.isfile(os.path.join(distutils.sysconfig.get_python_inc(), 'Python.h')))\"" OUTPUT_VARIABLE PYTHON_HEADERS RETURN_VALUE PYTHON_HEADERS_RC) - exec_program("${INTERPRETER_PATH}" ARGS "-c \"from distutils.sysconfig import get_python_inc; import numpy; print(';' + get_python_inc() + ';' + numpy.get_include());\"" OUTPUT_VARIABLE PYTHON_CPP_FLAGS RETURN_VALUE PYTHON_CPP_RC) - exec_program("${PY_CONFIG_FILE}" ARGS "--ldflags" OUTPUT_VARIABLE PYTHON_LD_FLAGS RETURN_VALUE PYTHON_LD_RC) - if(PYTHON_HEADERS_RC EQUAL 0 AND PYTHON_HEADERS STREQUAL "True" AND PYTHON_HEADERS_RC EQUAL 0 AND PYTHON_CPP_RC EQUAL 0 AND PYTHON_LD_RC EQUAL 0) + exec_program("${INTERPRETER_PATH}" ARGS "-c \"from distutils.sysconfig import get_python_inc; import numpy; print(get_python_inc() + ';' + numpy.get_include())\"" OUTPUT_VARIABLE PYTHON_CPP_FLAGS RETURN_VALUE PYTHON_CPP_RC) + if(PYTHON_HEADERS_RC EQUAL 0 AND PYTHON_HEADERS STREQUAL "True" AND PYTHON_HEADERS_RC EQUAL 0 AND PYTHON_CPP_RC EQUAL 0) set(${HAVE_NUMPY} YES PARENT_SCOPE) set(${PY_INCLUDE_DIR} "${PYTHON_CPP_FLAGS}" PARENT_SCOPE) - set(${PY_LIBRARIES} "${PYTHON_LD_FLAGS}" PARENT_SCOPE) elseif(${INTEGRATION_ENABLED} STREQUAL "AUTO") message(WARNING "Python.h not found") else() @@ -1371,26 +1371,29 @@ function(testPythonIntegration HAVE_NUMP message(FATAL_ERROR "(numpy/arrayobject.h not found)") endif() elseif(${INTEGRATION_ENABLED} STREQUAL "AUTO") - message(WARNING "numpy version >= 1.7.0 required for Python ${PY_VERSION} integration support") + message(WARNING "numpy version >= 1.7.0 required for Python ${PY_MAJOR_VERSION} integration support") else() - message(FATAL_ERROR "numpy version >= 1.7.0 required for Python ${PY_VERSION} integration support") + message(FATAL_ERROR "numpy version >= 1.7.0 required for Python ${PY_MAJOR_VERSION} integration support") endif() endfunction() +if(NOT WIN32) + set(PYTHON2_CONFIG "AUTO" CACHE FILEPATH "python2-config is installed as FILE") + set(PYTHON3_CONFIG "AUTO" CACHE FILEPATH "python3-config is installed as FILE") +endif() + set(PY2_INCLUDE_DIR "") set(PY2_LIBRARIES "") -set(PYTHON2_CONFIG "AUTO" CACHE FILEPATH "python2-config is installed as FILE") set(ENABLE_PY2INTEGRATION "AUTO" CACHE STRING "Enable support for Python 2 integration into MonetDB (default=AUTO)") # Check with HAVE_LIBPY -if(NOT ${ENABLE_PY2INTEGRATION} STREQUAL "NO") - testPythonIntegration(HAVE_LIBPY PY2_INCLUDE_DIR PY2_LIBRARIES "2" ${ENABLE_PY2INTEGRATION} ${PYTHON2_INTERPRETER} ${PYTHON2_CONFIG}) +if(HAVE_PYTHON2 AND NOT ${ENABLE_PY2INTEGRATION} STREQUAL "NO") + testPythonIntegration(HAVE_LIBPY PY2_INCLUDE_DIR PY2_LIBRARIES "2" PY2_VERSION ${ENABLE_PY2INTEGRATION} ${PYTHON2_INTERPRETER} "${PYTHON2_CONFIG}") endif() set(PY3_INCLUDE_DIR "") set(PY3_LIBRARIES "") -set(PYTHON3_CONFIG "AUTO" CACHE FILEPATH "python3-config is installed as FILE") set(ENABLE_PY3INTEGRATION "AUTO" CACHE STRING "enable support for Python 3 integration into MonetDB (default=AUTO)") # Check with HAVE_LIBPY3 -if(NOT ${ENABLE_PY3INTEGRATION} STREQUAL "NO") - testPythonIntegration(HAVE_LIBPY3 PY3_INCLUDE_DIR PY3_LIBRARIES "3" ${ENABLE_PY3INTEGRATION} ${PYTHON3_INTERPRETER} ${PYTHON3_CONFIG}) +if(HAVE_PYTHON3 AND NOT ${ENABLE_PY3INTEGRATION} STREQUAL "NO") + testPythonIntegration(HAVE_LIBPY3 PY3_INCLUDE_DIR PY3_LIBRARIES "3" PY3_VERSION ${ENABLE_PY3INTEGRATION} ${PYTHON3_INTERPRETER} "${PYTHON3_CONFIG}") endif() set(ODBC_INCLUDE_DIR "") @@ -1411,7 +1414,7 @@ if(NOT ${ENABLE_ODBC} STREQUAL "NO") find_path(ODBCINST_INCLUDE odbcinst.h) if(ODBCINST_INCLUDE) set(HAVE_ODBCINST_H YES) - find_library(ODBCCP32_LIBRARY NAMES odbccp32) + find_library(ODBCCP32_LIBRARY odbccp32) if(ODBCCP32_LIBRARY) set(ODBCINST_LIBRARIES "${ODBCINST_LIBRARIES};odbccp32") endif() @@ -1419,12 +1422,12 @@ if(NOT ${ENABLE_ODBC} STREQUAL "NO") if(USER32_LIBRARY) set(ODBCINST_LIBRARIES "${ODBCINST_LIBRARIES};${USER32_LIBRARY}") endif() - find_library(LEGACY_STDIO_LIBRARY NAMES legacy_stdio_definitions) + find_library(LEGACY_STDIO_LIBRARY legacy_stdio_definitions) if(LEGACY_STDIO_LIBRARY) set(ODBCINST_LIBRARIES "${ODBCINST_LIBRARIES};legacy_stdio_definitions") endif() - find_library(ODBC32_LIBRARY NAMES odbc32) + find_library(ODBC32_LIBRARY odbc32) if(ODBC32_LIBRARY) set(ODBC_LIBRARIES odbc32) endif() @@ -1462,7 +1465,7 @@ if(NOT ${ENABLE_ODBC} STREQUAL "NO") endif() endif() - find_library(ODBCINST_LIBRARY NAMES odbcinst) + find_library(ODBCINST_LIBRARY odbcinst) if(ODBCINST_LIBRARY) set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};odbcinst") check_symbol_exists("SQLGetPrivateProfileString" "odbcinst.h" HAVE_SQLGETPRIVATEPROFILESTRING) @@ -1477,7 +1480,7 @@ if(NOT ${ENABLE_ODBC} STREQUAL "NO") endif() endif() - find_library(ODBC_LIBRARY NAMES odbc) + find_library(ODBC_LIBRARY odbc) if(ODBC_LIBRARY) set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};odbc") check_symbol_exists("SQLGetDiagRec" "odbcinst.h" HAVE_SQLGETDIAGREC) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list