1import sys
2
3Import('env')
4Import('version')
5Import('revision')
6Import('debug')
7Import('sdl_cflags')
8Import('sdl_libs')
9Import('lib_dir')
10Import('smpeg_lib')
11
12venv = env.Clone()
13env = env.Clone()
14env.Append(CPPPATH=['#/engine', '#/engine/src'])
15bt_env = env.Clone()
16
17env.MergeFlags(sdl_cflags, sdl_libs)
18bt_env.MergeFlags(sdl_cflags, sdl_libs)
19
20venv.Append(CPPDEFINES=['VERSION="\\"' + version + '\\""'])
21venv.Append(CPPDEFINES=['REVISION=%d' % revision])
22
23venv.Append(CPPDEFINES=['BTANKSAPI=DLLEXPORT']);
24env.Append(CPPDEFINES=['BTANKSAPI=DLLEXPORT']);
25
26vobj = venv.SharedObject('src/version.cpp')
27bt_sources = 	[
28#networking
29	'net/message.cpp', 'net/server.cpp', 'net/client.cpp', 'net/connection.cpp', 'net/monitor.cpp', 'net/scanner.cpp',
30#menu
31	'menu/checkbox.cpp', 'menu/shop.cpp', 'menu/image_view.cpp', 'menu/shop_item.cpp', 'menu/popup_menu.cpp',
32	'menu/start_server_menu.cpp', 'menu/join_server_menu.cpp', 'menu/campaign_menu.cpp', 'menu/chat.cpp',
33	'menu/menu.cpp', 'menu/box.cpp', 'menu/upper_box.cpp', 'menu/container.cpp', 'menu/menu_item.cpp',
34	'menu/map_picker.cpp', 'menu/scroll_list.cpp', 'menu/control.cpp', 'menu/map_details.cpp', 'menu/player_picker.cpp',
35	'menu/chooser.cpp', 'menu/label.cpp', 'menu/button.cpp', 'menu/menu_config.cpp', 'menu/map_desc.cpp',
36	'menu/prompt.cpp', 'menu/text_control.cpp', 'menu/host_list.cpp', 'menu/options_menu.cpp', 'menu/control_picker.cpp',
37	'menu/slider.cpp', 'menu/redefine_keys.cpp', 'menu/tooltip.cpp', 'menu/player_name_control.cpp',
38	'menu/host_item.cpp', 'menu/number_control.cpp', 'menu/video_control.cpp', 'menu/network_status.cpp',
39	'menu/join_team.cpp', 'menu/mode_panel.cpp', 'menu/grid.cpp', 'menu/notepad.cpp', 'menu/video_control_disabled.cpp',
40	'menu/simple_gamepad_setup.cpp', 'menu/medals.cpp', 'menu/image.cpp', 'menu/main_menu.cpp', 'menu/profiles_menu.cpp',
41	'menu/new_profile_dialog.cpp',
42#end of menu
43
44	'src/finder.cpp', 'src/zbox.cpp', 'src/campaign.cpp', 'src/netstats.cpp',
45
46	'src/alarm.cpp', 'src/base_object.cpp', 'src/notifying_xml_parser.cpp', 'src/xml_parser.cpp',
47	'src/special_zone.cpp', 'src/game_monitor.cpp',
48	'src/player_manager.cpp', 'src/variants.cpp',
49
50	'ai/base.cpp', 'ai/buratino.cpp', 'ai/herd.cpp', 'ai/traits.cpp', 'ai/waypoints.cpp', 'ai/rush.cpp', 'ai/old_school.cpp', 'ai/trooper.cpp', 'ai/targets.cpp',
51
52	'src/player_state.cpp', 'controls/control_method.cpp', 'controls/simple_joy_bindings.cpp',
53	'controls/joyplayer.cpp', 'controls/keyplayer.cpp', 'controls/mouse_control.cpp',
54
55	'src/object.cpp', 'src/animation_model.cpp', 'src/rotating_object.cpp',
56	'src/resource_manager.cpp', 'src/world.cpp',
57
58	'tmx/generator_object.cpp', 'tmx/tileset.cpp', 'tmx/generator.cpp', 'tmx/tileset_list.cpp',
59	'tmx/map.cpp', 'tmx/layer.cpp',
60
61	'src/var.cpp', 'src/config.cpp', 'src/registrar.cpp', 'src/profiler.cpp',
62
63	'src/player_slot.cpp', 'src/hud.cpp', 'src/console.cpp',
64	'src/i18n.cpp', 'src/game.cpp', 'src/window.cpp', 'src/logo.cpp',
65	'src/credits.cpp', 'src/cheater.cpp',
66	'src/vehicle_traits.cpp', 'src/nickname.cpp',
67	'src/rt_config.cpp', 'src/team.cpp',
68
69	'sound/mixer.cpp', 'sound/ogg_ex.cpp', 'sound/ogg_stream.cpp',
70
71	vobj
72	]
73
74vorbis = 'vorbisfile'
75if debug and sys.platform == "win32":
76	vorbis = 'vorbisfile_d'
77
78bt_libs = ['mrt', 'sdlx', smpeg_lib, 'SDL', vorbis, 'clunk']
79
80if sys.platform != 'win32':
81	got_lua = False
82	for lua in ['lua-5.1', 'lua5.0', 'lua']:
83		try:
84			env.ParseConfig("pkg-config --cflags --libs %s 2>/dev/null" %lua);
85			got_lua = True
86			env.Append(CPPDEFINES=['ENABLE_LUA'])
87			bt_libs.append(lua)
88			break
89		except:
90			continue
91	if not got_lua:
92		raise Exception("Cannot find lua-5.1/lua5.0 or lua pkg-config information")
93
94env.Append(CPPDEFINES=['ENABLE_LUA'])
95bt_sources.append('luaxx/state.cpp')
96bt_sources.append('luaxx/lua_hooks.cpp')
97
98if sys.platform == "win32":
99	bt_libs.append('lua')
100	bt_libs.append('Ws2_32')
101	bt_libs.append('user32')
102	#bt_libs.append('gdi32')
103#	bt_libs.append('opengl32')
104#else:
105#	bt_libs.append('GL')
106
107if sys.platform != 'win32':
108	env.Append(LINKFLAGS=['-Wl,-rpath,'+ lib_dir])
109	env.Append(LINKFLAGS=['-Wl,-rpath-link,build/' + env['mode'] + '/mrt'])
110	env.Append(LINKFLAGS=['-Wl,-rpath-link,build/' + env['mode'] + '/sdlx'])
111	env.Append(LINKFLAGS=['-Wl,-rpath-link,build/' + env['mode'] + '/clunk'])
112
113
114bt = env.SharedLibrary('btanks_engine', bt_sources, LIBS=bt_libs)
115
116if sys.platform != 'win32' and len(env['prefix']) > 0:
117	Import('install_targets')
118	Import('lib_dir')
119	install_targets.append(Install(lib_dir, bt))
120else:
121	Install('#', bt[0])
122
123bt_main_sources = ['src/main.cpp']
124bt_main_libs =  ['mrt', 'btanks_engine', 'SDL', 'sdlx']
125
126if sys.platform == "win32":
127	bt_rc = env.RES('src/bt.rc')
128	bt_main_sources.append(bt_rc)
129	bt_main_libs.append('user32')
130	bt_main_libs.append('sdlx_main')
131
132if sys.platform != 'win32':
133	bt_env.Append(LINKFLAGS=['-Wl,-rpath,'+ lib_dir])
134	bt_env.Append(LINKFLAGS=['-Wl,-rpath-link,build/' + env['mode'] + '/mrt'])
135	bt_env.Append(LINKFLAGS=['-Wl,-rpath-link,build/' + env['mode'] + '/sdlx'])
136	bt_env.Append(LINKFLAGS=['-Wl,-rpath-link,build/' + env['mode'] + '/clunk'])
137
138bt_main = bt_env.Program('btanks', bt_main_sources, LIBS=bt_main_libs, RPATH=[lib_dir])
139
140if sys.platform == 'win32':
141	bt_env.AddPostAction(bt_main, 'mt.exe -nologo -manifest ${TARGET}.manifest -outputresource:$TARGET;2')
142
143if sys.platform != 'win32' and len(bt_env['prefix']) > 0:
144	Import('install_targets');
145	install_targets.append(Install(bt_env['prefix'] + '/bin', bt_main))
146else:
147	Install('#', bt_main)
148