IF(PYTHONLIBS_FOUND) IF(SIP_OK) SET(TULIP_OGL_SIP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Camera.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlGraphInputData.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlLayer.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlScene.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlTools.sip ${CMAKE_CURRENT_SOURCE_DIR}/Glyph.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlSimpleEntity.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlComposite.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlSceneVisitor.sip ${CMAKE_CURRENT_SOURCE_DIR}/Module.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlSceneObserver.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlAbstractPolygon.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlPolygon.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlRegularPolygon.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlComplexPolygon.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlCircle.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlRect.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlGraphRenderingParameters.sip ${CMAKE_CURRENT_SOURCE_DIR}/GlGraphComposite.sip ${CMAKE_CURRENT_SOURCE_DIR}/ParametricCurves.sip CACHE INTERNAL "" ) SET(TULIP_OGL_PYTHON_BINDINGS_SRC sip_tulipoglpart0.cpp sip_tulipoglpart1.cpp sip_tulipoglpart2.cpp ) ADD_CUSTOM_COMMAND(OUTPUT ${TULIP_OGL_PYTHON_BINDINGS_SRC} COMMAND ${SIP_EXE} -o -I ${CMAKE_CURRENT_BINARY_DIR} -I ${CMAKE_CURRENT_BINARY_DIR}/../tulip-core -I ${CMAKE_CURRENT_SOURCE_DIR}/../tulip-core -c ${CMAKE_CURRENT_BINARY_DIR} -j3 ${CMAKE_CURRENT_SOURCE_DIR}/Module.sip COMMENT "Generating Python Bindings for libtulip-ogl" DEPENDS ${TULIP_OGL_SIP_FILES} ${TULIP_SIP_FILES} ${STL_SIP_FILES} VERBATIM) DISABLE_COMPILER_WARNINGS() # Force to use SIP headers located in thirdparty # instead of those installed in the system INCLUDE_DIRECTORIES(BEFORE ${SIP_INCLUDE_DIR}) INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIR} ${PYTHON_INCLUDE_PATH} ${TulipCoreInclude} ${TulipCoreBuildInclude} ${TulipOGLInclude}) ADD_LIBRARY(${LibTulipOGLPythonBindingsName} SHARED ${TULIP_OGL_PYTHON_BINDINGS_SRC}) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${TULIPOGL_PYTHON_NATIVE_FOLDER}) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TULIPOGL_PYTHON_NATIVE_FOLDER}) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE ${TULIPOGL_PYTHON_NATIVE_FOLDER}) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${TULIPOGL_PYTHON_NATIVE_FOLDER}) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${TULIPOGL_PYTHON_NATIVE_FOLDER}) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG ${TULIPOGL_PYTHON_NATIVE_FOLDER}) ADD_CUSTOM_TARGET(copyTulipOglInitPy ALL ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${TULIPOGL_PYTHON_FOLDER}/__init__.py) IF(ACTIVATE_PYTHON_WHEELS_TARGETS) ADD_DEPENDENCIES(tulip-gui-wheel copyTulipOglInitPy) ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS) IF(NOT SYSTEM_SIP) ADD_DEPENDENCIES(${LibTulipOGLPythonBindingsName} ${SIP_LIB}) ENDIF(NOT SYSTEM_SIP) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES OUTPUT_NAME tulipogl PREFIX "_") IF(WIN32) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES SUFFIX ".pyd") ELSE(WIN32) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES SUFFIX ".so") ENDIF(WIN32) # On MacOS, add the paths of dependencies dylibs in install rpaths of the _tulipogl.so binary # That way, the tulipogl module can be imported in a classical Python shell without having to # modify the content of the DYLD_LIBRARY_PATH environment variable IF(APPLE AND NOT ACTIVATE_PYTHON_WHEELS_TARGETS) GET_TARGET_PROPERTY(CURRENT_INSTALL_RPATHS ${LibTulipOGLPythonBindingsName} INSTALL_RPATH) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES INSTALL_RPATH "${CURRENT_INSTALL_RPATHS};@loader_path/../../../;@loader_path/../../../../Frameworks") ENDIF(APPLE AND NOT ACTIVATE_PYTHON_WHEELS_TARGETS) TARGET_LINK_LIBRARIES(${LibTulipOGLPythonBindingsName} ${LibTulipCoreName} ${LibTulipOglName}) # When building Python wheel for MacOS, don't link the C extension module with the Python library # and use dynamic lookup for retrieving its symbols. # That way, we can produce a C extension module that can be imported through the Python interpreter # provided by Apple with the System and the one provided by Python.org IF(APPLE AND ACTIVATE_PYTHON_WHEELS_TARGETS) SET_TARGET_PROPERTIES(${LibTulipOGLPythonBindingsName} PROPERTIES LINK_FLAGS "-undefined dynamic_lookup") ELSE(APPLE AND ACTIVATE_PYTHON_WHEELS_TARGETS) TARGET_LINK_LIBRARIES(${LibTulipOGLPythonBindingsName} ${PYTHON_LIBRARY}) ENDIF(APPLE AND ACTIVATE_PYTHON_WHEELS_TARGETS) IF(NOT PYTHON_DIST_PACKAGE) INSTALL(TARGETS ${LibTulipOGLPythonBindingsName} RUNTIME DESTINATION ${TulipBinInstallDir}/python/tulipogl/native COMPONENT tulip_python LIBRARY DESTINATION ${TulipLibInstallDir}/python/tulipogl/native COMPONENT tulip_python ARCHIVE DESTINATION ${TulipLibInstallDir}/python/tulipogl/native COMPONENT tulip_python) IF(WIN32) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py DESTINATION ${TulipBinInstallDir}/python/tulipogl COMPONENT tulip_python) ELSE(WIN32) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py DESTINATION ${TulipLibInstallDir}/python/tulipogl COMPONENT tulip_python) ENDIF(WIN32) ELSE(NOT PYTHON_DIST_PACKAGE) INSTALL(TARGETS ${LibTulipOGLPythonBindingsName} RUNTIME DESTINATION ${TulipBinInstallDir}/../lib/python${PYTHON_VERSION}/dist-packages/tulipogl/native COMPONENT tulip_python LIBRARY DESTINATION ${TulipLibInstallDir}/python${PYTHON_VERSION}/dist-packages/tulipogl/native COMPONENT tulip_python ARCHIVE DESTINATION ${TulipLibInstallDir}/python${PYTHON_VERSION}/dist-packages/tulipogl/native COMPONENT tulip_python) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py DESTINATION ${TulipLibInstallDir}/python${PYTHON_VERSION}/dist-packages/tulipogl COMPONENT tulip_python) ENDIF(NOT PYTHON_DIST_PACKAGE) ADD_CUSTOM_COMMAND( TARGET ${LibTulipOGLPythonBindingsName} POST_BUILD COMMAND ${SIP_EXE} -I ${CMAKE_CURRENT_BINARY_DIR}/../tulip-core -I ${CMAKE_CURRENT_SOURCE_DIR}/../tulip-core -a ${CMAKE_CURRENT_BINARY_DIR}/tulipogl.api ${CMAKE_CURRENT_SOURCE_DIR}/Module.sip COMMENT "Generating API file for Tulip OpenGL Python bindings" VERBATIM) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/tulipogl.api DESTINATION ${TulipShareInstallDir}/apiFiles COMPONENT tulip_python) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "tulipogl.api;sipAPI_tulipogl.h;tulipogl_module") ENDIF(SIP_OK) ENDIF(PYTHONLIBS_FOUND)