forked from bartvdbraak/blender
d3c3f07133
This script will install all packages from the repositories and will compile missing in repositories libraries. It is supposed to replace pre-compiled libraries from our svn. Tested script on Fedora 14 and 17, Ubuntu 10.04 and 12.10. All the dependencies and manually built libraries seems to be fine. However, it's really annoying to build blender in virtual machine to ensure there's no linking errors, i would hope community will help testing and making needed tweaks to the script :) To use the script, simple run it from your user name. It'll run installation commands from a sudo, so you would likely be requested to type a password. I've made tweaks to CMake FindLibs, so it should find OIIO, OCIO and python libraries compiled by this script. Boost and FFmpeg would need to be specified manually. SCons currently would require manual paths specifications as well. Perhaps we could make SCons smarter in the future. All the parameters you need to pass to CMake/SCons would be printed when script finishes to run. Pretty much sure it's not production-ready script, but we need to start testing at some point :)
201 lines
5.9 KiB
CMake
201 lines
5.9 KiB
CMake
# - Find Python libraries
|
|
# Find the native Python includes and library
|
|
#
|
|
# Note:, This is not _yet_ intended to be a general python module for other
|
|
# projects to use since its hard coded to python 3.2 as blender only supports
|
|
# a single python version.
|
|
# This is for blender/unix python only.
|
|
#
|
|
# This module defines
|
|
# PYTHON_VERSION
|
|
# PYTHON_INCLUDE_DIRS
|
|
# PYTHON_INCLUDE_CONFIG_DIRS
|
|
# PYTHON_LIBRARIES
|
|
# PYTHON_LIBPATH, Used for installation
|
|
# PYTHON_LINKFLAGS
|
|
# PYTHON_ROOT_DIR, The base directory to search for Python.
|
|
# This can also be an environment variable.
|
|
#
|
|
# also defined, but not for general use are
|
|
# PYTHON_LIBRARY, where to find the python library.
|
|
|
|
#=============================================================================
|
|
# Copyright 2011 Blender Foundation.
|
|
#
|
|
# Distributed under the OSI-approved BSD License (the "License");
|
|
# see accompanying file Copyright.txt for details.
|
|
#
|
|
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
# See the License for more information.
|
|
#=============================================================================
|
|
|
|
# If PYTHON_ROOT_DIR was defined in the environment, use it.
|
|
IF(NOT PYTHON_ROOT_DIR AND NOT $ENV{PYTHON_ROOT_DIR} STREQUAL "")
|
|
SET(PYTHON_ROOT_DIR $ENV{PYTHON_ROOT_DIR})
|
|
ENDIF()
|
|
|
|
SET(PYTHON_VERSION 3.3 CACHE STRING "Python Version (major and minor only)")
|
|
MARK_AS_ADVANCED(PYTHON_VERSION)
|
|
|
|
|
|
# See: http://docs.python.org/extending/embedding.html#linking-requirements
|
|
# for why this is needed
|
|
SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic" CACHE STRING "Linker flags for python")
|
|
MARK_AS_ADVANCED(PYTHON_LINKFLAGS)
|
|
|
|
|
|
# if the user passes these defines as args, we dont want to overwrite
|
|
SET(_IS_INC_DEF OFF)
|
|
SET(_IS_INC_CONF_DEF OFF)
|
|
SET(_IS_LIB_DEF OFF)
|
|
SET(_IS_LIB_PATH_DEF OFF)
|
|
IF(DEFINED PYTHON_INCLUDE_DIR)
|
|
SET(_IS_INC_DEF ON)
|
|
ENDIF()
|
|
IF(DEFINED PYTHON_INCLUDE_CONFIG_DIR)
|
|
SET(_IS_INC_CONF_DEF ON)
|
|
ENDIF()
|
|
IF(DEFINED PYTHON_LIBRARY)
|
|
SET(_IS_LIB_DEF ON)
|
|
ENDIF()
|
|
IF(DEFINED PYTHON_LIBPATH)
|
|
SET(_IS_LIB_PATH_DEF ON)
|
|
ENDIF()
|
|
|
|
|
|
# only search for the dirs if we havn't already
|
|
IF((NOT _IS_INC_DEF) OR (NOT _IS_INC_CONF_DEF) OR (NOT _IS_LIB_DEF) OR (NOT _IS_LIB_PATH_DEF))
|
|
|
|
SET(_python_ABI_FLAGS
|
|
"m;mu;u; " # release
|
|
"md;mud;ud;d" # debug
|
|
)
|
|
|
|
STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
|
|
|
|
SET(_python_SEARCH_DIRS
|
|
${PYTHON_ROOT_DIR}
|
|
"$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}"
|
|
"/opt/py${_PYTHON_VERSION_NO_DOTS}"
|
|
"/opt/lib/python-${PYTHON_VERSION}"
|
|
)
|
|
|
|
FOREACH(_CURRENT_ABI_FLAGS ${_python_ABI_FLAGS})
|
|
#IF(CMAKE_BUILD_TYPE STREQUAL Debug)
|
|
# SET(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}")
|
|
#ENDIF()
|
|
STRING(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS})
|
|
|
|
IF(NOT DEFINED PYTHON_INCLUDE_DIR)
|
|
FIND_PATH(PYTHON_INCLUDE_DIR
|
|
NAMES
|
|
Python.h
|
|
HINTS
|
|
${_python_SEARCH_DIRS}
|
|
PATH_SUFFIXES
|
|
include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}
|
|
include/${CMAKE_LIBRARY_ARCHITECTURE}/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}
|
|
)
|
|
ENDIF()
|
|
|
|
IF(NOT DEFINED PYTHON_INCLUDE_CONFIG_DIR)
|
|
FIND_PATH(PYTHON_INCLUDE_CONFIG_DIR
|
|
NAMES
|
|
pyconfig.h
|
|
HINTS
|
|
${_python_SEARCH_DIRS}
|
|
PATH_SUFFIXES
|
|
include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}
|
|
include/${CMAKE_LIBRARY_ARCHITECTURE}/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}
|
|
)
|
|
IF((NOT PYTHON_INCLUDE_CONFIG_DIR) AND PYTHON_INCLUDE_DIR)
|
|
# Fallback...
|
|
UNSET(PYTHON_INCLUDE_CONFIG_DIR CACHE)
|
|
SET(PYTHON_INCLUDE_CONFIG_DIR ${PYTHON_INCLUDE_DIR} CACHE PATH "")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
IF(NOT DEFINED PYTHON_LIBRARY)
|
|
FIND_LIBRARY(PYTHON_LIBRARY
|
|
NAMES
|
|
"python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}"
|
|
HINTS
|
|
${_python_SEARCH_DIRS}
|
|
PATH_SUFFIXES
|
|
lib64 lib
|
|
)
|
|
ENDIF()
|
|
|
|
IF(NOT DEFINED PYTHON_LIBPATH)
|
|
FIND_PATH(PYTHON_LIBPATH
|
|
NAMES
|
|
"python${PYTHON_VERSION}/abc.py" # This is a bit hackish! :/
|
|
HINTS
|
|
${_python_SEARCH_DIRS}
|
|
PATH_SUFFIXES
|
|
lib64 lib
|
|
)
|
|
IF((NOT PYTHON_LIBPATH) AND PYTHON_LIBRARY)
|
|
# Fallback...
|
|
UNSET(PYTHON_LIBPATH CACHE)
|
|
GET_FILENAME_COMPONENT(PYTHON_LIBPATH ${PYTHON_LIBRARY} PATH)
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
IF(PYTHON_LIBRARY AND PYTHON_LIBPATH AND PYTHON_INCLUDE_DIR AND PYTHON_INCLUDE_CONFIG_DIR)
|
|
break()
|
|
ELSE()
|
|
# ensure we dont find values from 2 different ABI versions
|
|
IF(NOT _IS_INC_DEF)
|
|
UNSET(PYTHON_INCLUDE_DIR CACHE)
|
|
ENDIF()
|
|
IF(NOT _IS_INC_CONF_DEF)
|
|
UNSET(PYTHON_INCLUDE_CONFIG_DIR CACHE)
|
|
ENDIF()
|
|
IF(NOT _IS_LIB_DEF)
|
|
UNSET(PYTHON_LIBRARY CACHE)
|
|
ENDIF()
|
|
IF(NOT _IS_LIB_PATH_DEF)
|
|
UNSET(PYTHON_LIBPATH CACHE)
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
|
|
UNSET(_CURRENT_ABI_FLAGS)
|
|
UNSET(_CURRENT_PATH)
|
|
|
|
UNSET(_python_ABI_FLAGS)
|
|
UNSET(_python_SEARCH_DIRS)
|
|
ENDIF()
|
|
|
|
UNSET(_IS_INC_DEF)
|
|
UNSET(_IS_INC_CONF_DEF)
|
|
UNSET(_IS_LIB_DEF)
|
|
UNSET(_IS_LIB_PATH_DEF)
|
|
|
|
# handle the QUIETLY and REQUIRED arguments and SET PYTHONLIBSUNIX_FOUND to TRUE IF
|
|
# all listed variables are TRUE
|
|
INCLUDE(FindPackageHandleStandardArgs)
|
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonLibsUnix DEFAULT_MSG
|
|
PYTHON_LIBRARY PYTHON_LIBPATH PYTHON_INCLUDE_DIR PYTHON_INCLUDE_CONFIG_DIR)
|
|
|
|
IF(PYTHONLIBSUNIX_FOUND)
|
|
# Assign cache items
|
|
SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR} ${PYTHON_INCLUDE_CONFIG_DIR})
|
|
SET(PYTHON_LIBRARIES ${PYTHON_LIBRARY})
|
|
|
|
# we need this for installation
|
|
# XXX No more valid with debian-like py3.3 packages...
|
|
# GET_FILENAME_COMPONENT(PYTHON_LIBPATH ${PYTHON_LIBRARY} PATH)
|
|
|
|
# not used
|
|
# SET(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "")
|
|
ENDIF()
|
|
|
|
MARK_AS_ADVANCED(
|
|
PYTHON_INCLUDE_DIR
|
|
PYTHON_INCLUDE_CONFIG_DIR
|
|
PYTHON_LIBRARY
|
|
)
|