Fix for building blender as a Python module

Installation didn't work on debian distro's
now install into PYTHON_SITE_PACKAGES (which is detected and can be configured).
This commit is contained in:
Campbell Barton 2015-03-24 17:02:34 +11:00
parent 3bb7e14618
commit 4560570f8a
3 changed files with 39 additions and 32 deletions

@ -201,7 +201,7 @@ set(WITH_PYTHON_SECURITY ON CACHE BOOL "ON" FORCE) # temp force on.
option(WITH_PYTHON_SAFETY "Enable internal API error checking to track invalid data to prevent crash on access (at the expense of some effeciency, only enable for development)." OFF) option(WITH_PYTHON_SAFETY "Enable internal API error checking to track invalid data to prevent crash on access (at the expense of some effeciency, only enable for development)." OFF)
mark_as_advanced(WITH_PYTHON_SAFETY) mark_as_advanced(WITH_PYTHON_SAFETY)
option(WITH_PYTHON_MODULE "Enable building as a python module which runs without a user interface, like running regular blender in background mode (experimental, only enable for development)" OFF) option(WITH_PYTHON_MODULE "Enable building as a python module which runs without a user interface, like running regular blender in background mode (experimental, only enable for development), installs to PYTHON_SITE_PACKAGES" OFF)
if(APPLE) if(APPLE)
option(WITH_PYTHON_FRAMEWORK "Enable building using the Python available in the framework (OSX only)" OFF) option(WITH_PYTHON_FRAMEWORK "Enable building using the Python available in the framework (OSX only)" OFF)
endif() endif()
@ -617,6 +617,8 @@ endif()
# may as well build python module without a UI # may as well build python module without a UI
if(WITH_PYTHON_MODULE) if(WITH_PYTHON_MODULE)
set(WITH_HEADLESS ON) set(WITH_HEADLESS ON)
# building as a Python module wont use /usr/shared
set(WITH_INSTALL_PORTABLE ON)
endif() endif()
if(NOT WITH_PYTHON) if(NOT WITH_PYTHON)

@ -14,6 +14,7 @@
# PYTHON_INCLUDE_CONFIG_DIRS # PYTHON_INCLUDE_CONFIG_DIRS
# PYTHON_LIBRARIES # PYTHON_LIBRARIES
# PYTHON_LIBPATH, Used for installation # PYTHON_LIBPATH, Used for installation
# PYTHON_SITE_PACKAGES, Used for installation (as a Python module)
# PYTHON_LINKFLAGS # PYTHON_LINKFLAGS
# PYTHON_ROOT_DIR, The base directory to search for Python. # PYTHON_ROOT_DIR, The base directory to search for Python.
# This can also be an environment variable. # This can also be an environment variable.
@ -187,6 +188,15 @@ IF(PYTHONLIBSUNIX_FOUND)
SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR} ${PYTHON_INCLUDE_CONFIG_DIR}) SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR} ${PYTHON_INCLUDE_CONFIG_DIR})
SET(PYTHON_LIBRARIES ${PYTHON_LIBRARY}) SET(PYTHON_LIBRARIES ${PYTHON_LIBRARY})
FIND_FILE(PYTHON_SITE_PACKAGES
NAMES
# debian specific
dist-packages
site-packages
HINTS
${PYTHON_LIBPATH}/python${PYTHON_VERSION}
)
# we need this for installation # we need this for installation
# XXX No more valid with debian-like py3.4 packages... # XXX No more valid with debian-like py3.4 packages...
# GET_FILENAME_COMPONENT(PYTHON_LIBPATH ${PYTHON_LIBRARY} PATH) # GET_FILENAME_COMPONENT(PYTHON_LIBPATH ${PYTHON_LIBRARY} PATH)
@ -200,4 +210,5 @@ MARK_AS_ADVANCED(
PYTHON_INCLUDE_CONFIG_DIR PYTHON_INCLUDE_CONFIG_DIR
PYTHON_LIBRARY PYTHON_LIBRARY
PYTHON_LIBPATH PYTHON_LIBPATH
PYTHON_SITE_PACKAGES
) )

@ -261,11 +261,11 @@ endif()
# Platform Specific Var: TARGETDIR_VER # Platform Specific Var: TARGETDIR_VER
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
if(WITH_PYTHON_MODULE)
set(TARGETDIR_VER ${PYTHON_SITE_PACKAGES}/${BLENDER_VERSION})
else()
if(WITH_INSTALL_PORTABLE) if(WITH_INSTALL_PORTABLE)
set(TARGETDIR_VER ${BLENDER_VERSION}) set(TARGETDIR_VER ${BLENDER_VERSION})
else()
if(WITH_PYTHON_MODULE)
set(TARGETDIR_VER ${PYTHON_LIBPATH}/python${PYTHON_VERSION}/site-packages/${BLENDER_VERSION})
else() else()
set(TARGETDIR_VER share/blender/${BLENDER_VERSION}) set(TARGETDIR_VER share/blender/${BLENDER_VERSION})
endif() endif()
@ -407,22 +407,24 @@ if(UNIX AND NOT APPLE)
endif() endif()
# there are a few differences between portable and system install # there are a few differences between portable and system install
if(WITH_INSTALL_PORTABLE)
if(WITH_PYTHON_MODULE) if(WITH_PYTHON_MODULE)
# pass install(
else() TARGETS blender
LIBRARY DESTINATION ${PYTHON_SITE_PACKAGES}
)
# none of the other files are needed currently
elseif(WITH_INSTALL_PORTABLE)
install(
TARGETS blender
DESTINATION "."
)
if(WITH_DOC_MANPAGE) if(WITH_DOC_MANPAGE)
install( install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/blender.1 FILES ${CMAKE_CURRENT_BINARY_DIR}/blender.1
DESTINATION "." DESTINATION "."
) )
endif() endif()
endif()
install(
TARGETS blender
DESTINATION "."
)
install( install(
FILES FILES
${CMAKE_SOURCE_DIR}/release/freedesktop/blender.desktop ${CMAKE_SOURCE_DIR}/release/freedesktop/blender.desktop
@ -437,15 +439,8 @@ if(UNIX AND NOT APPLE)
) )
set(BLENDER_TEXT_FILES_DESTINATION ".") set(BLENDER_TEXT_FILES_DESTINATION ".")
else() else()
# main blender binary # main blender binary
if(WITH_PYTHON_MODULE)
install(
TARGETS blender
LIBRARY DESTINATION ${PYTHON_LIBPATH}/python${PYTHON_VERSION}/site-packages
)
else()
install( install(
TARGETS blender TARGETS blender
DESTINATION bin DESTINATION bin
@ -457,7 +452,6 @@ if(UNIX AND NOT APPLE)
DESTINATION share/man/man1 DESTINATION share/man/man1
) )
endif() endif()
endif()
# misc files # misc files
install( install(