diff --git a/build_files/scons/config/Modules/FindPython.py b/build_files/scons/config/Modules/FindPython.py new file mode 100644 index 00000000000..969d9db92a4 --- /dev/null +++ b/build_files/scons/config/Modules/FindPython.py @@ -0,0 +1,32 @@ +import os + +def FindPython(): + all_abi_flags = ['m', 'mu', ''] + + python = "/usr" + abi_flags = "m" # Most common for linux distros + version = "3.2" + + # Determine ABI flags used on this system + include = os.path.join(python, "include") + for cur_flags in all_abi_flags: + inc = os.path.join(include, "python" + version + cur_flags, "Python.h") + if os.path.exists(inc): + abi_flags = cur_flags + break + + # Determine whether python is in /usr/lib or /usr/lib64 + lib32 = os.path.join(python, "lib", "python" + version, "sysconfig.py") + lib64 = os.path.join(python, "lib64", "python" + version, "sysconfig.py") + if os.path.exists(lib32): + libpath = "${BF_PYTHON}/lib" + elif os.path.exists(lib64): + libpath = "${BF_PYTHON}/lib64" + else: + # roll back to default value + libpath = "${BF_PYTHON}/lib" + + return {'PYTHON': python, + "VERSION": version, + 'LIBPATH': libpath, + 'ABI_FLAGS': abi_flags} diff --git a/build_files/scons/config/Modules/__init__.py b/build_files/scons/config/Modules/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/build_files/scons/config/linux-config.py b/build_files/scons/config/linux-config.py index fdef85655ec..63022bb1117 100644 --- a/build_files/scons/config/linux-config.py +++ b/build_files/scons/config/linux-config.py @@ -1,6 +1,8 @@ # find library directory import platform import os +from Modules.FindPython import FindPython + bitness = platform.architecture()[0] if bitness == '64bit': LCGDIR = '../lib/linux64' @@ -8,10 +10,12 @@ else: LCGDIR = '../lib/linux' LIBDIR = "#${LCGDIR}" -BF_PYTHON_ABI_FLAGS = 'm' # Most common for linux distros -BF_PYTHON = '/usr' -BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib' -BF_PYTHON_VERSION = '3.2' +py = FindPython() + +BF_PYTHON_ABI_FLAGS = py['ABI_FLAGS'] +BF_PYTHON = py['PYTHON'] +BF_PYTHON_LIBPATH = py['LIBPATH'] +BF_PYTHON_VERSION = py['VERSION'] WITH_BF_STATICPYTHON = False BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}${BF_PYTHON_ABI_FLAGS}' BF_PYTHON_BINARY = '${BF_PYTHON}/bin/python${BF_PYTHON_VERSION}' diff --git a/build_files/scons/tools/Blender.py b/build_files/scons/tools/Blender.py index afcae061dd0..5d6298adfe2 100644 --- a/build_files/scons/tools/Blender.py +++ b/build_files/scons/tools/Blender.py @@ -649,8 +649,11 @@ def UnixPyBundle(target=None, source=None, env=None): dir = os.path.join(env['BF_INSTALLDIR'], VERSION) + lib = env['BF_PYTHON_LIBPATH'].split(os.sep)[-1] + target_lib = "lib64" if lib == "lib64" else "lib" + py_src = env.subst( env['BF_PYTHON_LIBPATH'] + '/python'+env['BF_PYTHON_VERSION'] ) - py_target = env.subst( dir + '/python/lib/python'+env['BF_PYTHON_VERSION'] ) + py_target = env.subst( dir + '/python/' + target_lib + '/python'+env['BF_PYTHON_VERSION'] ) # This is a bit weak, but dont install if its been installed before, makes rebuilds quite slow. if os.path.exists(py_target):