03c9d5487d055e3f70dc587f733e24126fdb4874
[blender.git] / build_files / scons / config / Modules / FindPython.py
1 import os
2
3 def FindPython():
4     all_abi_flags = ['m', 'mu', '']
5
6     python = "/usr"
7     abi_flags = "m"  # Most common for linux distros
8     version = "3.3"
9
10     _arch = "x86_64-linux-gnu"
11
12     # Determine ABI flags used on this system
13     include = os.path.join(python, "include")
14     for cur_flags in all_abi_flags:
15         inc = os.path.join(include, "python" + version + cur_flags, "Python.h")
16         if os.path.exists(inc):
17             abi_flags = cur_flags
18             break
19
20     # Find config.h. In some distros, such as ubuntu 12.10 they are not in standard include dir.
21     incconf = os.path.join(include, _arch, "python" + version + cur_flags)
22     if not os.path.exists(os.path.join(incconf, "pyconfig.h")):
23         incconf = ''
24
25     # Determine whether python is in /usr/lib or /usr/lib64
26     lib32 = os.path.join(python, "lib", "python" + version, "sysconfig.py")
27     lib64 = os.path.join(python, "lib64", "python" + version, "sysconfig.py")
28     if os.path.exists(lib32):
29         libpath = "${BF_PYTHON}/lib"
30     elif os.path.exists(lib64):
31         libpath = "${BF_PYTHON}/lib64"
32     else:
33         # roll back to default value
34         libpath = "${BF_PYTHON}/lib"
35
36     libpath_arch = libpath
37     _libpath_arch = os.path.join(python, "lib", _arch)  # No lib64 stuff with recent deb-like distro afaik...
38     _libs = ["libpython" + version + abi_flags + ext for ext in (".so", ".a")]
39     for l in _libs:
40         if not os.path.exists(os.path.join(libpath, l)) and os.path.exists(os.path.join(_libpath_arch, l)):
41             libpath_arch = os.path.join(libpath, _arch)
42             break
43
44     return {"PYTHON": python,
45             "VERSION": version,
46             "LIBPATH": libpath,
47             "LIBPATH_ARCH": libpath_arch,
48             "ABI_FLAGS": abi_flags,
49             "CONFIG": incconf}