source: 2011/24/build_games.py @ 2139

Revision 2139, 2.3 KB checked in by tekrjant, 8 years ago (diff)

The games are copied to a new directory for easier access.

Line 
1import sys
2import os
3from os.path import *
4import shutil
5from shutil import *
6from glob import *
7from subprocess import *
8
9output_dir = abspath("pelit")
10lib_dir_x86 = abspath('lib\\x86')
11personal_dirs = [d for d in os.listdir(".") if isdir(d) and d not in ("lib", basename(output_dir), ".svn")]
12projects_that_did_not_build = []
13
14def check_requirements():
15        if not exists("lib\\x86\\Jypeli4.dll"):
16                raise Exception("lib\\x86\\Jypeli4.dll expected")
17
18
19def create_output_directory():
20        if not exists(output_dir):
21                os.mkdir(output_dir)
22        for d in personal_dirs:
23                if not exists(join(output_dir, d)):
24                        os.mkdir(join(output_dir, d))
25
26def build_games():
27        for d in personal_dirs:
28                build_games_in_personal_dir(abspath(d))
29
30
31def build_games_in_personal_dir(personal_dir):
32        for root, dirs, files in os.walk(personal_dir):
33                if '.svn' in dirs:
34                        dirs.remove('.svn')
35                projects = glob(join(root, '*.csproj'))
36                if projects:
37                        if len(projects) > 1:
38                                print "NOTE: There is more than one project file in", root
39                        if build(projects[0]):
40                                project_name = splitext(basename(projects[0]))[0]
41                                dst_dir = join(output_dir, basename(personal_dir))
42                                copy_game(project_name, root, dst_dir)
43                                print basename(personal_dir) + ": " + project_name
44                        else:
45                                projects_that_did_not_build.append(projects[0])
46
47
48def build(project_file_path):
49        build_cmd = 'msbuild /nologo /verbosity:quiet /p:Configuration=Release /p:"ReferencePath={0}" /t:Build "{1}"'.format(lib_dir_x86, project_file_path)
50        return call(build_cmd, shell=True) == 0
51
52
53def copy_game(project_name, project_dir, dst_dir):
54        bin = join(project_dir, "bin\\x86\\Release")
55        if not exists(bin):
56                print "NO BIN DIR FOUND IN", project_dir
57        dst = join(dst_dir, project_name)
58        if exists(dst):
59                rmtree(dst)
60        copytree(bin, dst, ignore=shutil.ignore_patterns('.svn', '*.pdb', 'jypeli4.xml'))
61
62
63def main():
64        try:
65                check_requirements()
66                create_output_directory()
67                build_games()
68        except KeyboardInterrupt:
69                print "BUILD CANCELLED"
70        except Exception as e:
71                print
72                print "NOT SUCCESSFUL:", e
73                return 1
74
75        print
76        print 'Projects that did not build ({0}):'.format(len(projects_that_did_not_build))
77        for p in projects_that_did_not_build:
78                print p
79
80
81if __name__ == '__main__':
82        sys.exit(main())
Note: See TracBrowser for help on using the repository browser.