[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43992] trunk/blender/build_files/scons: Fix for hardcoded to scons rules python abi flags and wrong behavior

Sergey Sharybin sergey.vfx at gmail.com
Wed Feb 8 18:17:21 CET 2012


Revision: 43992
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43992
Author:   nazgul
Date:     2012-02-08 17:17:19 +0000 (Wed, 08 Feb 2012)
Log Message:
-----------
Fix for hardcoded to scons rules python abi flags and wrong behavior
of python bundling on systems where python is installed to /usr/lib64

Now ABI flags are automatically detecting (by checking all available flags
and checking if there's include directory exists for flag).
Also, automatically set PYTHON_LIBPATH to /usr/lib64 if python
scripts are stored in this folder.
Bundling python on *nix platforms is now checks if python is installed
to lib64 directory and if it is, python will be bundled to lib64
folder instead of lib.

This will make building on openSUSE a bit less annoying

Modified Paths:
--------------
    trunk/blender/build_files/scons/config/linux-config.py
    trunk/blender/build_files/scons/tools/Blender.py

Added Paths:
-----------
    trunk/blender/build_files/scons/config/Modules/
    trunk/blender/build_files/scons/config/Modules/FindPython.py
    trunk/blender/build_files/scons/config/Modules/__init__.py

Added: trunk/blender/build_files/scons/config/Modules/FindPython.py
===================================================================
--- trunk/blender/build_files/scons/config/Modules/FindPython.py	                        (rev 0)
+++ trunk/blender/build_files/scons/config/Modules/FindPython.py	2012-02-08 17:17:19 UTC (rev 43992)
@@ -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, "lib64", "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}

Added: trunk/blender/build_files/scons/config/Modules/__init__.py
===================================================================
Modified: trunk/blender/build_files/scons/config/linux-config.py
===================================================================
--- trunk/blender/build_files/scons/config/linux-config.py	2012-02-08 17:09:30 UTC (rev 43991)
+++ trunk/blender/build_files/scons/config/linux-config.py	2012-02-08 17:17:19 UTC (rev 43992)
@@ -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 @@
     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}'

Modified: trunk/blender/build_files/scons/tools/Blender.py
===================================================================
--- trunk/blender/build_files/scons/tools/Blender.py	2012-02-08 17:09:30 UTC (rev 43991)
+++ trunk/blender/build_files/scons/tools/Blender.py	2012-02-08 17:17:19 UTC (rev 43992)
@@ -649,8 +649,11 @@
 
     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):




More information about the Bf-blender-cvs mailing list