make quicky wrapper for cmake.
authorCampbell Barton <ideasman42@gmail.com>
Tue, 24 Aug 2010 05:24:37 +0000 (05:24 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 24 Aug 2010 05:24:37 +0000 (05:24 +0000)
works like scons where using a subset of the targets name is enough.

  make_quicky.py py
...expands into
  make  bf_python bf_python_ext blender/fast

arguments like -j4 are passed on.

build_files/cmake/example_scripts/make_quicky.py [new file with mode: 0755]
source/blender/python/generic/mathutils_vector.c

diff --git a/build_files/cmake/example_scripts/make_quicky.py b/build_files/cmake/example_scripts/make_quicky.py
new file mode 100755 (executable)
index 0000000..69f7604
--- /dev/null
@@ -0,0 +1,119 @@
+#! /usr/bin/env python
+
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+def print_help(targets):
+    print("CMake quicky wrapper, no valid targets given.")
+    print(" * targets can contain a subset of the full target name.")
+    print(" * arguments with a '-' prefix are passed onto make.")
+    print(" * this must run from the cmake build dir")
+    print(" * alias this with a short command for speedy access, in bash:")
+    print("   alias mk='../blender/build_files/cmake/example_scripts/make_quicky.py'")
+    print("")
+    print(" eg: make_quicky.py -j3 extern python")
+    print(" ...will execute")
+    print(" make -j3 extern_binreloc extern_glew bf_python bf_python_ext blender/fast")
+    print("")
+    print("Target List:")
+    for t in targets:
+        print("    %s" % t)
+    print("...exiting")
+    
+
+def main():
+    targets = set()
+    
+    # collect targets
+    file = open("Makefile", "r")
+    for line in file:
+        line = line.rstrip()
+        if not line or line[0] in ". \t@$#":
+            continue
+
+        line = line.split("#", 1)[0]
+        if ":" not in line:
+            continue
+
+        line = line.split(":", 1)[0]
+
+        if "/" in line: # cmake terget options, dont need these
+            continue
+
+        targets.add(line)
+    file.close()
+
+
+    # remove cmake targets
+    bad = set([
+        "help",
+        "clean",
+        "all",
+        "preinstall",
+        "install",
+        "default_target",
+        "edit_cache",
+        "cmake_force",
+        "rebuild_cache",
+        "depend",
+        "cmake_check_build_system",
+        ])
+        
+    targets -= set(bad)
+
+
+    # parse args
+    targets = list(targets)
+    targets.sort()
+
+    import sys
+    if len(sys.argv) == 1:
+        print_help(targets)
+        return
+
+    targets_new = []
+    args = []
+    for arg in sys.argv[1:]:
+        if arg[0] in "/-":
+            args.append(arg)
+        else:
+            found = False
+            for t in targets:
+                if arg in t and t not in targets_new:
+                    targets_new.append(t)
+                    found = True
+
+            if not found:
+                print("Error '%s' not found in...")
+                for t in targets:
+                    print("    %s" % t)
+                print("...aborting.")
+                return
+    
+    # execute
+    cmd = "make %s %s blender/fast" % (" ".join(args), " ".join(targets_new))
+    print("cmake building with targets: %s" % " ".join(targets_new))
+    print("executing: %s" % cmd)
+
+    import os
+    os.system(cmd)
+
+if __name__ == "__main__":
+    main()
index 6cfb5bb207ebd309b865295a793485ae0243e927..7b73a7501bb0388d7044055dd1e5558eb2d94ed6 100644 (file)
@@ -1004,8 +1004,8 @@ static PyObject *Vector_mul(PyObject * v1, PyObject * v2)
        
        /* swap so vec1 is always the vector */
        /* note: it would seem from this code that the matrix multiplication below
-        * is non-communicative. however the matrix object will always handle the
-        * (matrix * vector) case.
+        * is communicative. however the matrix class will always handle the
+        * (matrix * vector) case so we can ignore it here.
         * This is NOT so for Quaternions: TODO, check if communicative (vec * quat) is correct */
        if (vec2) {
                vec1= vec2;