FindPythonQt.cmake 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. # Find PythonQt
  2. #
  3. # Sets PYTHONQT_FOUND, PYTHONQT_INCLUDE_DIR, PYTHONQT_LIBRARY, PYTHONQT_LIBRARIES
  4. #
  5. # Python is required
  6. find_package(PythonLibs)
  7. if(NOT PYTHONLIBS_FOUND)
  8. message(FATAL_ERROR "error: Python is required to build PythonQt")
  9. endif()
  10. # Cut X.Y[.Z] down to just X.Y
  11. string(REGEX REPLACE
  12. "^([0-9][0-9]*)\.([0-9][0-9]*)"
  13. "\\1.\\2@"
  14. _PYTHONLIBS_MAJMIN
  15. ${PYTHONLIBS_VERSION_STRING}
  16. )
  17. string(REGEX REPLACE
  18. "@.*"
  19. ""
  20. PYTHONLIBS_MAJMIN
  21. ${_PYTHONLIBS_MAJMIN}
  22. )
  23. if(NOT EXISTS "${PYTHONQT_INSTALL_DIR}")
  24. find_path(PYTHONQT_INSTALL_DIR include/PythonQt/PythonQt.h DOC "Directory where PythonQt was installed.")
  25. endif()
  26. # XXX Since PythonQt 3.0 is not yet cmakeified, depending
  27. # on how PythonQt is built, headers will not always be
  28. # installed in "include/PythonQt". That is why "src"
  29. # is added as an option. See [1] for more details.
  30. # [1] https://github.com/commontk/CTK/pull/538#issuecomment-86106367
  31. find_path(PYTHONQT_INCLUDE_DIR PythonQt.h
  32. PATHS "${PYTHONQT_INSTALL_DIR}/include/PythonQt"
  33. "${PYTHONQT_INSTALL_DIR}/src"
  34. DOC "Path to the PythonQt include directory")
  35. if ( NOT PythonQt_FIND_QUIETLY )
  36. message( STATUS "Searching for PythonQt (PythonLibs ${PYTHONLIBS_MAJMIN}) .." )
  37. if ( PYTHONQT_INCLUDE_DIR )
  38. message( STATUS " .. found include ${PYTHONQT_INCLUDE_DIR}" )
  39. endif()
  40. endif()
  41. # Minimum v3.1 is needed
  42. find_library(PYTHONQT_LIBRARY_RELEASE
  43. NAMES
  44. PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN}
  45. PythonQt-Qt5-Python3
  46. PythonQt
  47. PATHS "${PYTHONQT_INSTALL_DIR}/lib"
  48. DOC "The PythonQt library."
  49. )
  50. find_library(PYTHONQT_LIBRARY_DEBUG
  51. NAMES
  52. PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN}JMIN${CTK_CMAKE_DEBUG_POSTFIX}
  53. PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN}${CMAKE_DEBUG_POSTFIX}
  54. PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN}
  55. PythonQt-Qt5-Python3${CTK_CMAKE_DEBUG_POSTFIX}
  56. PythonQt-Qt5-Python3${CMAKE_DEBUG_POSTFIX}
  57. PythonQt-Qt5-Python3
  58. PythonQt${CTK_CMAKE_DEBUG_POSTFIX}
  59. PythonQt${CMAKE_DEBUG_POSTFIX}
  60. PythonQt
  61. PATHS "${PYTHONQT_INSTALL_DIR}/lib"
  62. DOC "The PythonQt library (debug build)."
  63. )
  64. find_library(PYTHONQT_QTALL_LIBRARY_RELEASE
  65. NAMES
  66. PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN}
  67. PythonQt_QtAll-Qt5-Python3
  68. PythonQt_QtAll
  69. PATHS "${PYTHONQT_INSTALL_DIR}/lib"
  70. DOC "Full Qt bindings for the PythonQt library."
  71. )
  72. find_library(PYTHONQT_QTALL_LIBRARY_DEBUG
  73. NAMES
  74. PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN}${CTK_CMAKE_DEBUG_POSTFIX}
  75. PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN}${CMAKE_DEBUG_POSTFIX}
  76. PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN}
  77. PythonQt_QtAll-Qt5-Python3${CTK_CMAKE_DEBUG_POSTFIX}
  78. PythonQt_QtAll-Qt5-Python3${CMAKE_DEBUG_POSTFIX}
  79. PythonQt_QtAll-Qt5-Python3
  80. PythonQt_QtAll${CTK_CMAKE_DEBUG_POSTFIX}
  81. PythonQt_QtAll${CMAKE_DEBUG_POSTFIX}
  82. PythonQt_QtAll
  83. PATHS "${PYTHONQT_INSTALL_DIR}/lib"
  84. DOC "Full Qt bindings for the PythonQt library (debug build)."
  85. )
  86. set(PYTHONQT_LIBRARY)
  87. if(PYTHONQT_LIBRARY_RELEASE)
  88. list(APPEND PYTHONQT_LIBRARY optimized ${PYTHONQT_LIBRARY_RELEASE})
  89. endif()
  90. if(PYTHONQT_LIBRARY_DEBUG)
  91. list(APPEND PYTHONQT_LIBRARY debug ${PYTHONQT_LIBRARY_DEBUG})
  92. endif()
  93. set(PYTHONQT_QTALL_LIBRARY)
  94. if(PYTHONQT_QTALL_LIBRARY_RELEASE)
  95. list(APPEND PYTHONQT_QTALL_LIBRARY optimized ${PYTHONQT_QTALL_LIBRARY_RELEASE})
  96. endif()
  97. if(PYTHONQT_QTALL_LIBRARY_DEBUG)
  98. list(APPEND PYTHONQT_QTALL_LIBRARY debug ${PYTHONQT_QTALL_LIBRARY_DEBUG})
  99. endif()
  100. if ( NOT PythonQt_FIND_QUIETLY )
  101. if ( PYTHONQT_LIBRARY )
  102. message( STATUS " .. found library ${PYTHONQT_LIBRARY}" )
  103. endif()
  104. if ( PYTHONQT_QTALL_LIBRARY )
  105. message( STATUS " .. found qtall ${PYTHONQT_QTALL_LIBRARY}" )
  106. endif()
  107. endif()
  108. mark_as_advanced(PYTHONQT_INSTALL_DIR)
  109. mark_as_advanced(PYTHONQT_INCLUDE_DIR)
  110. mark_as_advanced(PYTHONQT_LIBRARY_RELEASE)
  111. mark_as_advanced(PYTHONQT_LIBRARY_DEBUG)
  112. mark_as_advanced(PYTHONQT_QTALL_LIBRARY_RELEASE)
  113. mark_as_advanced(PYTHONQT_QTALL_LIBRARY_DEBUG)
  114. # On linux, also find libutil
  115. if(UNIX AND NOT APPLE)
  116. find_library(PYTHONQT_LIBUTIL util)
  117. mark_as_advanced(PYTHONQT_LIBUTIL)
  118. endif()
  119. # All upper case _FOUND variable is maintained for backwards compatibility.
  120. set(PYTHONQT_FOUND 0)
  121. set(PythonQt_FOUND 0)
  122. if(PYTHONQT_INCLUDE_DIR AND PYTHONQT_LIBRARY AND PYTHONQT_QTALL_LIBRARY)
  123. # Currently CMake'ified PythonQt only supports building against a python Release build.
  124. # This applies independently of CTK build type (Release, Debug, ...)
  125. add_definitions(-DPYTHONQT_USE_RELEASE_PYTHON_FALLBACK)
  126. set(PYTHONQT_FOUND 1)
  127. set(PythonQt_FOUND ${PYTHONQT_FOUND})
  128. set(PYTHONQT_LIBRARIES ${PYTHONQT_LIBRARY} ${PYTHONQT_LIBUTIL} ${PYTHONQT_QTALL_LIBRARY})
  129. endif()