pep8 checker, mostly pedantic style changes but also found an error in mesh_utils...
[blender.git] / build_files / cmake / example_scripts / make_quicky.py
1 #! /usr/bin/env python
2
3 # ##### BEGIN GPL LICENSE BLOCK #####
4 #
5 #  This program is free software; you can redistribute it and/or
6 #  modify it under the terms of the GNU General Public License
7 #  as published by the Free Software Foundation; either version 2
8 #  of the License, or (at your option) any later version.
9 #
10 #  This program is distributed in the hope that it will be useful,
11 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #  GNU General Public License for more details.
14 #
15 #  You should have received a copy of the GNU General Public License
16 #  along with this program; if not, write to the Free Software Foundation,
17 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 #
19 # ##### END GPL LICENSE BLOCK #####
20
21 # <pep8 compliant>
22
23
24 def print_help(targets):
25     print("CMake quicky wrapper, no valid targets given.")
26     print(" * targets can contain a subset of the full target name.")
27     print(" * arguments with a '-' prefix are passed onto make.")
28     print(" * this must run from the cmake build dir")
29     print(" * alias this with a short command for speedy access, in bash:")
30     print("   alias mk='../blender/build_files/cmake/example_scripts/make_quicky.py'")
31     print("")
32     print(" eg: make_quicky.py -j3 extern python")
33     print(" ...will execute")
34     print(" make -j3 extern_binreloc extern_glew bf_python bf_python_ext blender/fast")
35     print("")
36     print("Target List:")
37     for t in targets:
38         print("    %s" % t)
39     print("...exiting")
40
41
42 def main():
43     targets = set()
44
45     # collect targets
46     makefile = open("Makefile", "r")
47     for line in makefile:
48         line = line.rstrip()
49         if not line or line[0] in ". \t@$#":
50             continue
51
52         line = line.split("#", 1)[0]
53         if ":" not in line:
54             continue
55
56         line = line.split(":", 1)[0]
57
58         if "/" in line:  # cmake terget options, dont need these
59             continue
60
61         targets.add(line)
62     makefile.close()
63
64     # remove cmake targets
65     bad = set([
66         "help",
67         "clean",
68         "all",
69         "preinstall",
70         "install",
71         "default_target",
72         "edit_cache",
73         "cmake_force",
74         "rebuild_cache",
75         "depend",
76         "cmake_check_build_system",
77         ])
78
79     targets -= set(bad)
80
81     # parse args
82     targets = list(targets)
83     targets.sort()
84
85     import sys
86     if len(sys.argv) == 1:
87         print_help(targets)
88         return
89
90     targets_new = []
91     args = []
92     for arg in sys.argv[1:]:
93         if arg[0] in "/-":
94             args.append(arg)
95         else:
96             found = False
97             for t in targets:
98                 if arg in t and t not in targets_new:
99                     targets_new.append(t)
100                     found = True
101
102             if not found:
103                 print("Error '%s' not found in...")
104                 for t in targets:
105                     print("    %s" % t)
106                 print("...aborting.")
107                 return
108
109     # execute
110     cmd = "make %s %s blender/fast" % (" ".join(args), " ".join(targets_new))
111     print("cmake building with targets: %s" % " ".join(targets_new))
112     print("executing: %s" % cmd)
113
114     import os
115     os.system(cmd)
116
117 if __name__ == "__main__":
118     main()