#! /usr/bin/env python
# encoding: utf-8

from waflib import Utils
import os

top = '.'
PROJECT_NAME = 'client'

def options(opt):
	# stub
	return

def configure(conf):
	conf.env.append_unique('DEFINES',[
		'NO_STRING_T',
		'CLIENT_DLL',
		'VECTOR',
		'VERSION_SAFE_STEAM_API_INTERFACES',
		'strncpy=use_Q_strncpy_instead',
		'strncpy=use_Q_strncpy_instead',
		'USE_WEBM_FOR_REPLAY', # LINUXALL
		'HL2_CLIENT_DLL'
	])

def build(bld):
	source = [
		#'replay/replayyoutubeapi_key_sdk.cpp', [$SOURCESDK]
		'game_controls/slideshowpanel.cpp',
		'../../common/movieobjects/timeutils.cpp',
		'hl2/C_Func_Monitor.cpp',
		'geiger.cpp',
		'history_resource.cpp',
		'hud_weapon.cpp',
		'train.cpp',
		'../shared/weapon_parse_default.cpp',
		'../shared/achievement_saverestore.cpp',
		'../shared/achievementmgr.cpp',
		'../shared/achievements_hlx.cpp',
		'achievement_notification_panel.cpp',
		'../shared/activitylist.cpp',
		'alphamaterialproxy.cpp',
		'../shared/ammodef.cpp',
		'animatedentitytextureproxy.cpp',
		'animatedoffsettextureproxy.cpp',
		'animatedtextureproxy.cpp',
		'AnimateSpecificTextureProxy.cpp',
		'../shared/animation.cpp',
		'../shared/base_playeranimstate.cpp',
		'../shared/baseachievement.cpp',
		'baseanimatedtextureproxy.cpp',
		'baseclientrendertargets.cpp',
		'../shared/basecombatcharacter_shared.cpp',
		'../shared/basecombatweapon_shared.cpp',
		'../shared/baseentity_shared.cpp',
		'../shared/basegrenade_shared.cpp',
		'../shared/baseparticleentity.cpp',
		'../shared/baseplayer_shared.cpp',
		'../shared/baseprojectile.cpp',
		'../shared/baseviewmodel_shared.cpp',
		'beamdraw.cpp',
		'../shared/beam_shared.cpp',
		'../../public/bone_accessor.cpp',
		'bone_merge_cache.cpp',
		'c_ai_basehumanoid.cpp',
		'c_ai_basenpc.cpp',
		'c_baseanimating.cpp',
		'c_baseanimatingoverlay.cpp',
		'c_basecombatcharacter.cpp',
		'c_basecombatweapon.cpp',
		'c_basedoor.cpp',
		'c_baseentity.cpp',
		'c_baseflex.cpp',
		'c_baseplayer.cpp',
		'c_baseviewmodel.cpp',
		'c_breakableprop.cpp',
		'c_colorcorrection.cpp',
		'c_colorcorrectionvolume.cpp',
		'c_dynamiclight.cpp',
		'c_entitydissolve.cpp',
		'c_entityparticletrail.cpp',
		'c_env_fog_controller.cpp',
		'c_env_particlescript.cpp',
		'c_env_projectedtexture.cpp',
		'c_env_screenoverlay.cpp',
		'c_env_tonemap_controller.cpp',
		'c_fire_smoke.cpp',
		'c_fish.cpp',
		'c_func_areaportalwindow.cpp',
		'c_func_breakablesurf.cpp',
		'c_func_conveyor.cpp',
		'c_func_dust.cpp',
		'c_func_lod.cpp',
		'c_func_occluder.cpp',
		'c_func_reflective_glass.cpp',
		'c_func_rotating.cpp',
		'c_func_smokevolume.cpp',
		'c_func_tracktrain.cpp',
		'c_gib.cpp',
		'c_hairball.cpp',
		'c_info_overlay_accessor.cpp',
		'c_lightglow.cpp',
		'C_MaterialModifyControl.cpp',
		'c_particle_system.cpp',
		'c_physbox.cpp',
		'c_physicsprop.cpp',
		'c_physmagnet.cpp',
		'c_pixel_visibility.cpp',
		'c_plasma.cpp',
		'c_playerresource.cpp',
		'c_point_camera.cpp',
		'c_point_commentary_node.cpp',
		'c_props.cpp',
		'c_ragdoll_manager.cpp',
		'c_rope.cpp',
		'c_rumble.cpp',
		'c_sceneentity.cpp',
		'c_shadowcontrol.cpp',
		'c_slideshow_display.cpp',
		'c_soundscape.cpp',
		'c_spotlight_end.cpp',
		'c_sprite.cpp',
		'c_sprite_perfmonitor.cpp',
		'c_sun.cpp',
		'c_team.cpp',
		'c_tesla.cpp',
		'c_test_proxytoggle.cpp',
		'c_user_message_register.cpp',
		'c_vehicle_choreo_generic.cpp',
		'c_vehicle_jeep.cpp',
		'c_vguiscreen.cpp',
		'hl2/c_waterbullet.cpp',
		'hl2/hud_autoaim.cpp',
		'C_WaterLODControl.cpp',
		'c_world.cpp',
		'../shared/cam_thirdperson.cpp',
		'camomaterialproxy.cpp',
		'cdll_client_int.cpp',
		'cdll_bounded_cvars.cpp',
		'cdll_util.cpp',
		'cl_mat_stub.cpp',
		'classmap.cpp',
		'client_factorylist.cpp',
		'client_thinklist.cpp',
		'client_virtualreality.cpp',
		'clienteffectprecachesystem.cpp',
		'cliententitylist.cpp',
		'clientleafsystem.cpp',
		'clientmode_shared.cpp',
		'clientshadowmgr.cpp',
		'clientsideeffects.cpp',
		'clientsideeffects_test.cpp',
		'clientsteamcontext.cpp',
		'colorcorrectionmgr.cpp',
		'commentary_modelviewer.cpp',
		'../shared/collisionproperty.cpp',
		'../shared/death_pose.cpp',
		'../shared/debugoverlay_shared.cpp',
		'../shared/decals.cpp',
		'detailobjectsystem.cpp',
		'dummyproxy.cpp',
		'../shared/effect_dispatch_data.cpp',
		'EffectsClient.cpp',
		'../shared/ehandle.cpp',
		'../shared/entitylist_base.cpp',
		'entityoriginmaterialproxy.cpp',
		'../shared/EntityParticleTrail_Shared.cpp',
		'../shared/env_detail_controller.cpp',
		'../shared/env_wind_shared.cpp',
		'../shared/eventlist.cpp',
		'flashlighteffect.cpp',
		'../shared/func_ladder.cpp',
		'functionproxy.cpp',
		'fx_blood.cpp',
		'fx_cube.cpp',
		'fx_explosion.cpp',
		'fx_fleck.cpp',
		'fx_impact.cpp',
		'fx_interpvalue.cpp',
		'fx_quad.cpp',
		'fx_shelleject.cpp',
		'fx_staticline.cpp',
		'fx_tracer.cpp',
		'fx_trail.cpp',
		'fx_water.cpp',
		'../shared/gamemovement.cpp',
		'../shared/gamerules.cpp',
		'../shared/gamerules_register.cpp',
		'../shared/GameStats.cpp',
		'../shared/gamestringpool.cpp',
		'gametrace_client.cpp',
		'../shared/gamevars_shared.cpp',
		'glow_outline_effect.cpp',
		'glow_overlay.cpp',
		'../shared/hintmessage.cpp',
		'../shared/hintsystem.cpp',
		'hltvcamera.cpp',
		'hud.cpp',
		'hud_animationinfo.cpp',
		'hud_basechat.cpp',
		'hud_basetimer.cpp',
		'hud_bitmapnumericdisplay.cpp',
		'hud_closecaption.cpp',
		'hud_crosshair.cpp',
		'hud_element_helper.cpp',
		'hl2/hud_filmdemo.cpp',
		'hl2/hud_hdrdemo.cpp',
		'hud_hintdisplay.cpp',
		'hud_msg.cpp',
		'hud_numericdisplay.cpp',
		'hud_pdump.cpp',
		'hud_redraw.cpp',
		'hud_vehicle.cpp',
		'../shared/igamesystem.cpp',
		'in_camera.cpp',
		'in_joystick.cpp',
		'in_main.cpp',
		'in_steamcontroller.cpp',
		'initializer.cpp',
		'interpolatedvar.cpp',
		'IsNPCProxy.cpp',
		'lampbeamproxy.cpp',
		'lamphaloproxy.cpp',
		'../shared/mapentities_shared.cpp',
		'mathproxy.cpp',
		'matrixproxy.cpp',
		'menu.cpp',
		'message.cpp',
		'movehelper_client.cpp',
		'../shared/movevars_shared.cpp',
		'../shared/multiplay_gamerules.cpp',
		'../shared/obstacle_pushaway.cpp',
		'panelmetaclassmgr.cpp',
		'particle_collision.cpp',
		'particle_litsmokeemitter.cpp',
		'../shared/particle_parse.cpp',
		'../shared/particle_property.cpp',
		'particle_proxies.cpp',
		'particle_simple3d.cpp',
		'particlemgr.cpp',
		'particles_attractor.cpp',
		'particles_ez.cpp',
		'particles_localspace.cpp',
		'particles_new.cpp',
		'particles_simple.cpp',
		'../shared/particlesystemquery.cpp',
		'perfvisualbenchmark.cpp',
		'physics.cpp',
		'physics_main_client.cpp',
		'../shared/physics_main_shared.cpp',
		'../shared/physics_saverestore.cpp',
		'../shared/physics_shared.cpp',
		'physpropclientside.cpp',
		'playerandobjectenumerator.cpp',
		'playerspawncache.cpp',
		'../shared/point_bonusmaps_accessor.cpp',
		'../shared/point_posecontroller.cpp',
		'../shared/precache_register.cpp',
		'../shared/predictableid.cpp',
		'prediction.cpp',
		'../shared/predictioncopy.cpp',
		'../shared/props_shared.cpp',
		'proxyentity.cpp',
		'ProxyHealth.cpp',
		'proxyplayer.cpp',
		'proxypupil.cpp',
		'ragdoll.cpp',
		'../shared/ragdoll_shared.cpp',
		'recvproxy.cpp',
		'basepresence.cpp',		#[$WIN32||$POSIX]
		#'basepresence_xbox.cpp',		[$X360]
		'../shared/rope_helpers.cpp',
		'../shared/saverestore.cpp',
		'../shared/sceneentity_shared.cpp',
		'ScreenSpaceEffects.cpp',
		'../shared/sequence_Transitioner.cpp',
		'simple_keys.cpp',
		'../shared/simtimer.cpp',
		'../shared/singleplay_gamerules.cpp',
		'../shared/SoundEmitterSystem.cpp',
		'../shared/soundenvelope.cpp',
		'../../public/SoundParametersInternal.cpp',
		'splinepatch.cpp',
		'../shared/Sprite.cpp',
		'spritemodel.cpp',
		'../shared/SpriteTrail.cpp',
		'../shared/studio_shared.cpp',
		'studio_stats.cpp',
		'../shared/takedamageinfo.cpp',
		'../shared/teamplay_gamerules.cpp',
		'../shared/teamplayroundbased_gamerules.cpp',
		'../shared/test_ehandle.cpp',
		'text_message.cpp',
		'texturescrollmaterialproxy.cpp',
		'timematerialproxy.cpp',
		'toggletextureproxy.cpp',
		'../shared/usercmd.cpp',
		'../shared/usermessages.cpp',
		'../shared/util_shared.cpp',
		'../shared/vehicle_viewblend_shared.cpp',
		'vgui_avatarimage.cpp',
		'vgui_basepanel.cpp',
		'vgui_bitmapbutton.cpp',
		'vgui_bitmapimage.cpp',
		'vgui_bitmappanel.cpp',
		'vgui_schemevisualizer.cpp',
		'vgui_centerstringpanel.cpp',
		'vgui_consolepanel.cpp',
		'vgui_debugoverlaypanel.cpp',
		'vgui_fpspanel.cpp',
		'vgui_game_viewport.cpp',
		'vgui_grid.cpp',
		'vgui_int.cpp',
		'vgui_loadingdiscpanel.cpp',
		'vgui_messagechars.cpp',
		'vgui_netgraphpanel.cpp',
		'vgui_slideshow_display_screen.cpp',
		'view.cpp',
		'view_beams.cpp',
		'view_effects.cpp',
		'view_scene.cpp',
		'viewangleanim.cpp',
		'ViewConeImage.cpp',
		'viewdebug.cpp',
		'viewpostprocess.cpp',
		'viewrender.cpp',
		'../shared/voice_banmgr.cpp',
		'../shared/voice_status.cpp',
		'warp_overlay.cpp',
		'WaterLODMaterialProxy.cpp',
		'../shared/weapon_parse.cpp',
		'weapon_selection.cpp',
		'weapons_resource.cpp',
		'WorldDimsProxy.cpp',
		'vgui_video.cpp',
		'vgui_video_player.cpp',
		'../shared/mp_shareddefs.cpp',
		'../client/c_vote_controller.cpp',
		'../../public/haptics/haptic_msgs.cpp',	#[!$X360]
		#'../../public/haptics/haptic_utils.cpp',	[$WIN32&&!$X360]
		'sixense/in_sixense.cpp',
		'sixense/in_sixense_gesture_bindings.cpp',
		'../shared/sixense/sixense_convars.cpp',
		'../../public/bone_setup.cpp',
		'../../public/posedebugger.cpp',
		'../../public/client_class.cpp',
		'../../common/compiledcaptionswap.cpp',
		'../../public/collisionutils.cpp',
		'../../public/crtmemdebug.cpp',
		'../../public/dt_recv.cpp',
		'../../public/dt_utlvector_common.cpp',
		'../../public/dt_utlvector_recv.cpp',
		'../../public/filesystem_helpers.cpp',
		'../../public/interpolatortypes.cpp',
		'../shared/interval.cpp',
		'../../common/language.cpp',
		'../../public/networkvar.cpp',
		'../../common/randoverride.cpp',
		'../../common/steamid.cpp',
		'../../public/rope_physics.cpp',
		'../../public/scratchpad3d.cpp',
		'../../public/ScratchPadUtils.cpp',
		'../../public/sentence.cpp',
		'../shared/sheetsimulator.cpp',
		'../../public/simple_physics.cpp',
		'../../public/stringregistry.cpp',
		'../../public/studio.cpp',
		'../../public/vallocator.cpp',
		'../../public/vgui_controls/vgui_controls.cpp',
		'../../public/jigglebones.cpp',
		'hud_lcd.cpp',
		'in_mouse.cpp',
		'mumble.cpp',
		'../../public/renamed_recvtable_compat.cpp',
		'rendertexture.cpp',
		'c_basetempentity.cpp',
		'c_effects.cpp',
		'c_impact_effects.cpp',
		'c_movie_explosion.cpp',
		'c_particle_fire.cpp',
		'c_particle_smokegrenade.cpp',
		'c_prop_vehicle.cpp',
		'c_recipientfilter.cpp',
		'c_smoke_trail.cpp',
		'c_smokestack.cpp',
		'c_steamjet.cpp',
		'c_stickybolt.cpp',
		'c_te.cpp',
		'c_te_armorricochet.cpp',
		'c_te_basebeam.cpp',
		'c_te_beamentpoint.cpp',
		'c_te_beaments.cpp',
		'c_te_beamfollow.cpp',
		'c_te_beamlaser.cpp',
		'c_te_beampoints.cpp',
		'c_te_beamring.cpp',
		'c_te_beamringpoint.cpp',
		'c_te_beamspline.cpp',
		'c_te_bloodsprite.cpp',
		'c_te_bloodstream.cpp',
		'c_te_breakmodel.cpp',
		'c_te_bspdecal.cpp',
		'c_te_bubbles.cpp',
		'c_te_bubbletrail.cpp',
		'c_te_clientprojectile.cpp',
		'c_te_decal.cpp',
		'c_te_dynamiclight.cpp',
		'c_te_effect_dispatch.cpp',
		'c_te_energysplash.cpp',
		'c_te_explosion.cpp',
		'c_te_fizz.cpp',
		'c_te_footprint.cpp',
		'c_te_glassshatter.cpp',
		'c_te_glowsprite.cpp',
		'c_te_impact.cpp',
		'c_te_killplayerattachments.cpp',
		'c_te_largefunnel.cpp',
		'c_te_legacytempents.cpp',
		'c_te_muzzleflash.cpp',
		'c_te_particlesystem.cpp',
		'c_te_physicsprop.cpp',
		'c_te_playerdecal.cpp',
		'c_te_projecteddecal.cpp',
		'c_te_showline.cpp',
		'c_te_smoke.cpp',
		'c_te_sparks.cpp',
		'c_te_sprite.cpp',
		'c_te_spritespray.cpp',
		'c_te_worlddecal.cpp',
		'c_testtraceline.cpp',
		'c_tracer.cpp',
		'fx.cpp',
		'fx_discreetline.cpp',
		'fx_envelope.cpp',
		'fx_line.cpp',
		'fx_sparks.cpp',
		'particlesphererenderer.cpp',
		'smoke_fog_overlay.cpp',
		'game_controls/baseviewport.cpp',
		'game_controls/basemodelpanel.cpp',
		'game_controls/basemodel_panel.cpp',
		'game_controls/ClientScoreBoardDialog.cpp',
		'game_controls/commandmenu.cpp',
		'game_controls/intromenu.cpp',
		'game_controls/MapOverview.cpp',
		'game_controls/NavProgress.cpp',
		'game_controls/SpectatorGUI.cpp',
		'game_controls/teammenu.cpp',
		'game_controls/vguitextwindow.cpp',
		'game_controls/IconPanel.cpp',
		'mp3player.cpp',
		'../../public/tools/bonelist.cpp',
		'entity_client_tools.cpp',
		'toolframework_client.cpp',
		'hud_chat.cpp',
		'c_team_objectiveresource.cpp',
		'../shared/hl2/basehlcombatweapon_shared.cpp',
		'../shared/hl2/achievements_hl2.cpp',
		'hl2/c_antlion_dust.cpp',
		'hl2/c_ar2_explosion.cpp',
		'hl2/c_barnacle.cpp',
		'hl2/c_barney.cpp',
		'hl2/c_basehelicopter.cpp',
		'hl2/c_basehlcombatweapon.cpp',
		'hl2/c_basehlplayer.cpp',
		'hl2/c_citadel_effects.cpp',
		'hl2/c_corpse.cpp',
		'hl2/c_env_alyxtemp.cpp',
		'hl2/c_env_headcrabcanister.cpp',
		'hl2/c_env_starfield.cpp',
		'hl2/c_func_tankmortar.cpp',
		'hl2/c_hl2_playerlocaldata.cpp',
		'hl2/c_info_teleporter_countdown.cpp',
		'hl2/c_npc_antlionguard.cpp',
		'hl2/c_npc_combinegunship.cpp',
		'hl2/c_npc_manhack.cpp',
		'hl2/c_npc_rollermine.cpp',
		'hl2/c_plasma_beam_node.cpp',
		'hl2/c_prop_combine_ball.cpp',
		'hl2/c_rotorwash.cpp',
		'hl2/c_script_intro.cpp',
		'../shared/script_intro_shared.cpp',
		'hl2/c_strider.cpp',
		'hl2/c_te_concussiveexplosion.cpp',
		'hl2/c_te_flare.cpp',
		'hl2/c_thumper_dust.cpp',
		'hl2/c_vehicle_airboat.cpp',
		'hl2/c_vehicle_cannon.cpp',
		'hl2/c_vehicle_crane.cpp',
		'hl2/c_vehicle_prisoner_pod.cpp',
		'hl2/c_weapon__stubs_hl2.cpp',
		'hl2/c_weapon_crossbow.cpp',
		'hl2/c_weapon_physcannon.cpp',
		'hl2/c_weapon_stunstick.cpp',
		'hl2/clientmode_hlnormal.cpp',
		'death.cpp',
		'../shared/hl2/env_headcrabcanister_shared.cpp',
		'hl2/fx_antlion.cpp',
		'hl2/fx_bugbait.cpp',
		'hl2/fx_hl2_impacts.cpp',
		'hl2/fx_hl2_tracers.cpp',
		'hl2/hl2_clientmode.cpp',
		'../shared/hl2/hl2_gamerules.cpp',
		'../shared/hl2/hl2_usermessages.cpp',
		'../shared/hl2/hl_gamemovement.cpp',
		'hl2/hl_in_main.cpp',
		'hl2/hl_prediction.cpp',
		'hl2/hud_ammo.cpp',
		'hl2/hud_battery.cpp',
		'hl2/hud_blood.cpp',
		'hl2/hud_credits.cpp',
		'hl2/hud_damageindicator.cpp',
		'hl2/hud_flashlight.cpp',
		'hl2/hud_health.cpp',
		'hl2/hud_poisondamageindicator.cpp',
		'hud_posture.cpp',
		'hl2/hud_quickinfo.cpp',
		'hud_squadstatus.cpp',
		'hl2/hud_suitpower.cpp',
		'hl2/hud_weaponselection.cpp',
		'hl2/hud_zoom.cpp',
		'hl2/shieldproxy.cpp',
		'hl2/vgui_rootpanel_hl2.cpp',
		'episodic/c_vort_charge_token.cpp'
	]

	includes = [
		'.',
		'game_controls',
		'hl2',
		'hl2/elements',
		'../shared/hl2',
		'../../common',
		'../../public',
		'../../public/tier0',
		'../../public/tier1',
		'../../vgui2/include',
		'../../vgui2/controls',
		'../shared'
	]

	defines = []

	libs = [
		'tier0',
		'particles',
		'dmxloader',
		'vgui_controls',
		'matsys_controls',
		'tier1',
		'tier2',
		'tier3',
		'mathlib',
		'vstdlib',
		'choreoobjects',
		'steam_api',
		'bitmap',
		'vtf',
		'RT'
	]

	install_path = bld.env.PREFIX
	if bld.env.DEST_OS != 'android':
		install_path += '/hl2/bin'

	bld.shlib(
		source   = source,
		target   = PROJECT_NAME,
		name     = PROJECT_NAME,
		features = 'c cxx',
		includes = includes,
		defines  = defines,
		use      = libs,
		install_path = install_path,
		subsystem = bld.env.MSVC_SUBSYSTEM,
		idx      = bld.get_taskgen_count()
	)