AUTOGENERATED_MAKEFILES=@OUTPUT_FILES@
BIN_DIRS=	\
	xbmc/guilib \
	lib/tinyXML \
	xbmc \
	xbmc/addons \
	xbmc/cdrip \
	xbmc/cores \
	xbmc/cores/DllLoader \
	xbmc/cores/DllLoader/exports \
	xbmc/cores/DllLoader/exports/util \
	xbmc/cores/dvdplayer \
	xbmc/cores/dvdplayer/DVDCodecs \
	xbmc/cores/dvdplayer/DVDCodecs/Audio \
	xbmc/cores/dvdplayer/DVDCodecs/Overlay \
	xbmc/cores/dvdplayer/DVDCodecs/Video \
	xbmc/cores/dvdplayer/DVDDemuxers/ \
	xbmc/cores/dvdplayer/DVDInputStreams/ \
	xbmc/cores/dvdplayer/DVDSubtitles/ \
	xbmc/cores/paplayer \
	xbmc/cores/AudioRenderers \
	xbmc/cores/VideoRenderers \
	xbmc/cores/VideoRenderers/VideoShaders \
	xbmc/cores/ExternalPlayer \
	xbmc/cores/playercorefactory \
	xbmc/filesystem \
	xbmc/filesystem/MusicDatabaseDirectory \
	xbmc/filesystem/VideoDatabaseDirectory \
	xbmc/dialogs \
	xbmc/music \
	xbmc/music/dialogs \
	xbmc/music/infoscanner \
	xbmc/music/karaoke \
	xbmc/music/tags \
	xbmc/music/windows \
	xbmc/pictures \
	xbmc/programs \
	xbmc/video \
	xbmc/video/dialogs \
	xbmc/video/windows \
	xbmc/windows \
	xbmc/network \
	xbmc/network/libscrobbler \
	xbmc/network/linux \
	xbmc/network/osx \
	xbmc/playlists \
	xbmc/powermanagement \
        xbmc/powermanagement/linux \
	xbmc/rendering \
	xbmc/storage \
	xbmc/storage/linux \
	xbmc/storage/osx \
	lib/libhts \
	xbmc/interfaces \
	xbmc/interfaces/http-api \
	xbmc/interfaces/json-rpc \
	xbmc/interfaces/python \
	xbmc/interfaces/python/xbmcmodule \
	lib/libRTV \
	lib/libUPnP \
	lib/libXDAAP \
	xbmc/dbwrappers \
	lib/UnrarXLib \
	lib/libsquish \
	lib/SlingboxLib \
	xbmc/visualizations \
	xbmc/screensavers \
	xbmc/utils \
	xbmc/settings \
	xbmc/linux \
        xbmc/input \
	xbmc/input/linux \
	xbmc/osx \
	xbmc/threads \
	xbmc/windowing \

ifeq (@USE_OPENGL@,1)
BIN_DIRS += xbmc/rendering/gl
endif
ifeq (@USE_OPENGLES@,1)
BIN_DIRS += xbmc/rendering/gles
BIN_DIRS += xbmc/windowing/egl
endif

ifeq ($(findstring osx,@ARCH@),osx)
BIN_DIRS += xbmc/windowing/osx
BIN_DIRS += xbmc/network/osx
BIN_DIRS += xbmc/storage/osx
BIN_DIRS += xbmc/powermanagement/osx
else
BIN_DIRS += xbmc/windowing/X11
endif

EC_DIRS= \
	tools/EventClients

XBMCTEX_DIRS= \
	tools/TexturePacker

DVDPCODECS_DIRS= \
	lib \
	lib/libdvd \

PAPCODECS_DIRS= \
	lib/xbadpcm \
	lib/nosefart \
	lib/timidity \
	lib/libsidplay2 \
	lib/stsound/StSoundLibrary \
	lib/snesapu/SNES/SNESAPU \
	lib/vgmstream \

ifeq (@USE_ASAP_CODEC@,1)
PAPCODEC_DIRS+= \
	lib/asap
endif

LIB_DIRS=\
	lib/cximage-6.0 \
	lib/libexif \
	lib/cmyth \
	lib/libhdhomerun \
	lib/libid3tag \
	lib/libapetag \
	lib/cpluff \
	lib/xbmc-dll-symbols

SS_DIRS=\
	xbmc/screensavers/rsxs-0.9/xbmc

VIS_DIRS=
ifeq (@USE_OPENGL@,1)
VIS_DIRS+=\
	xbmc/visualizations/OpenGLSpectrum \
	xbmc/visualizations/WaveForm \
	xbmc/visualizations/XBMCProjectM \

endif
ifeq (($(findstring osx,@ARCH@), osx),(@USE_OPENGL@,1)) 
VIS_DIRS+=xbmc/visualizations/iTunes
endif
ifneq (@DISABLE_GOOM@,1)
VIS_DIRS+=xbmc/visualizations/Goom \

endif

CONFLUENCE_MEDIA=addons/skin.confluence/media

SKIN_DIRS=\
	$(CONFLUENCE_MEDIA)

DIRS= $(BIN_DIRS) $(EC_DIRS) $(XBMCTEX_DIRS) $(DVDPCODECS_DIRS) $(PAPCODECS_DIRS) \
	$(LIB_DIRS) $(SS_DIRS) $(VIS_DIRS) $(SKIN_DIRS)

LIBS=@LIBS@
CFLAGS=@CFLAGS@
CXXFLAGS=@CXXFLAGS@
LDFLAGS=@LDFLAGS@
INCLUDES=$(sort @INCLUDES@)

CLEAN_FILES=xbmc.bin xbmc-xrandr

DISTCLEAN_FILES=config.h config.log config.status tools/Linux/xbmc.sh \
        tools/Linux/xbmc-standalone.sh autom4te.cache config.h.in~ \
        system/libcpluff-@ARCH@.so

all : Makefile externals xbmc.bin xbmc-xrandr skins

include Makefile.include

.PHONY : dllloader exports visualizations screensavers eventclients papcodecs \
	dvdpcodecs imagelib codecs externals force skins

# hack targets to keep build system up to date
Makefile : config.status $(addsuffix .in, $(AUTOGENERATED_MAKEFILES))
	@echo "Regenerating Makefiles..."
	@./config.status &> /dev/null
	@echo "done"

config.status: configure
	@echo "Build system configuration is stale."
	@echo "Please (re)run configure."
	@test -n "$$XBMC_IGNORE_STALE"

configure: configure.in
	@echo 'configure is outdated, regenerating...'
	@./bootstrap

# skin textures
ifeq (@USE_TEXTUREPACKER@,1)
skins: tools/TexturePacker/TexturePacker force
	 $(MAKE) -C $(CONFLUENCE_MEDIA)
else
skins:
endif


xbmc/guilib/guilib.a: force
	$(MAKE) -C xbmc/guilib
lib/tinyXML/tinyxml.a: force
	$(MAKE) -C lib/tinyXML
xbmc/xbmc.a: force
	$(MAKE) -C xbmc
xbmc/cdrip/cdrip.a: force
	$(MAKE) -C xbmc/cdrip
xbmc/cores/cores.a: force
	$(MAKE) -C xbmc/cores
xbmc/cores/DllLoader/dllloader.a: force
	$(MAKE) -C xbmc/cores/DllLoader/
xbmc/cores/DllLoader/exports/exports.a: force
	$(MAKE) -C xbmc/cores/DllLoader/exports
xbmc/cores/DllLoader/exports/util/exports_utils.a: force
	$(MAKE) -C xbmc/cores/DllLoader/exports/util
xbmc/cores/dvdplayer/DVDPlayer.a: force
	$(MAKE) -C xbmc/cores/dvdplayer
xbmc/cores/dvdplayer/DVDCodecs/DVDCodecs.a: force
	$(MAKE) -C xbmc/cores/dvdplayer/DVDCodecs
xbmc/cores/dvdplayer/DVDCodecs/Audio/Audio.a: force
	$(MAKE) -C xbmc/cores/dvdplayer/DVDCodecs/Audio
xbmc/cores/dvdplayer/DVDCodecs/Overlay/Overlay.a: force
	$(MAKE) -C xbmc/cores/dvdplayer/DVDCodecs/Overlay
xbmc/cores/dvdplayer/DVDCodecs/Video/Video.a: force
	$(MAKE) -C xbmc/cores/dvdplayer/DVDCodecs/Video
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxers.a: force
	$(MAKE) -C xbmc/cores/dvdplayer/DVDDemuxers
xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreams.a: force
	$(MAKE) -C xbmc/cores/dvdplayer/DVDInputStreams
xbmc/cores/dvdplayer/DVDSubtitles/DVDSubtitles.a: force
	$(MAKE) -C xbmc/cores/dvdplayer/DVDSubtitles
xbmc/cores/paplayer/paplayer.a: force papcodecs
	$(MAKE) -C xbmc/cores/paplayer
xbmc/cores/AudioRenderers/audiorenderers.a: force
	$(MAKE) -C xbmc/cores/AudioRenderers
xbmc/cores/VideoRenderers/VideoRenderer.a: force
	$(MAKE) -C xbmc/cores/VideoRenderers
xbmc/cores/VideoRenderers/VideoShaders/VideoShaders.a: force
	$(MAKE) -C xbmc/cores/VideoRenderers/VideoShaders
xbmc/cores/ExternalPlayer/ExternalPlayer.a: force
	$(MAKE) -C xbmc/cores/ExternalPlayer
xbmc/cores/playercorefactory/playercorefactory.a: force
	$(MAKE) -C xbmc/cores/playercorefactory
xbmc/filesystem/filesystem.a: force
	$(MAKE) -C xbmc/filesystem
xbmc/filesystem/MusicDatabaseDirectory/musicdatabasedirectory.a: force
	$(MAKE) -C xbmc/filesystem/MusicDatabaseDirectory
xbmc/filesystem/VideoDatabaseDirectory/videodatabasedirectory.a: force
	$(MAKE) -C xbmc/filesystem/VideoDatabaseDirectory
xbmc/input/input.a: force
	$(MAKE) -C xbmc/input
xbmc/input/linux/input_linux.a: force
	$(MAKE) -C xbmc/input/linux
xbmc/music/karaoke/karaoke.a: force
	$(MAKE) -C xbmc/music/karaoke
xbmc/network/network.a: force
	$(MAKE) -C xbmc/network
xbmc/network/osx/network.a: force
	$(MAKE) -C xbmc/network/osx
xbmc/pictures/pictures.a: force
	$(MAKE) -C xbmc/pictures
xbmc/programs/programs.a: force
	$(MAKE) -C xbmc/programs
xbmc/network/linux/network_linux.a: force
	$(MAKE) -C xbmc/network/linux
xbmc/playlists/playlists.a: force
	$(MAKE) -C xbmc/playlists
xbmc/powermanagement/powermanagement.a: force
	$(MAKE) -C xbmc/powermanagement
xbmc/powermanagement/linux/powermanagement_linux.a: force
	$(MAKE) -C xbmc/powermanagement/linux
xbmc/powermanagement/osx/powermanagement.a: force
	$(MAKE) -C xbmc/powermanagement/osx
xbmc/windowing/X11/windowing_X11.a: force
	$(MAKE) -C xbmc/windowing/X11
xbmc/rendering/rendering.a: force
	$(MAKE) -C xbmc/rendering
xbmc/rendering/gl/rendering_gl.a: force
	$(MAKE) -C xbmc/rendering/gl
xbmc/rendering/gles/rendering_gles.a: force
	$(MAKE) -C xbmc/rendering/gles
xbmc/windowing/windowing.a: force
	$(MAKE) -C xbmc/windowing
xbmc/windowing/egl/windowing_egl.a: force
	$(MAKE) -C xbmc/windowing/egl
xbmc/windowing/osx/windowing_osx.a: force
	$(MAKE) -C xbmc/windowing/osx
xbmc/storage/storage.a: force
	$(MAKE) -C xbmc/storage
xbmc/storage/linux/storage_linux.a: force
	$(MAKE) -C xbmc/storage/linux
xbmc/storage/osx/storage.a: force
	$(MAKE) -C xbmc/storage/osx
xbmc/threads/threads.a: force
	$(MAKE) -C xbmc/threads
xbmc/music/music.a: force
	$(MAKE) -C xbmc/music
xbmc/music/tags/musictags.a: force
	$(MAKE) -C xbmc/music/tags
xbmc/music/dialogs/musicdialogs.a: force
	$(MAKE) -C xbmc/music/dialogs
xbmc/music/windows/musicwindows.a: force
	$(MAKE) -C xbmc/music/windows
xbmc/music/infoscanner/musicscanner.a: force
	$(MAKE) -C xbmc/music/infoscanner
xbmc/video/video.a: force
	$(MAKE) -C xbmc/video
xbmc/video/dialogs/videodialogs.a: force
	$(MAKE) -C xbmc/video/dialogs
xbmc/video/windows/videowindows.a: force
	$(MAKE) -C xbmc/video/windows
xbmc/dialogs/dialogs.a: force
	$(MAKE) -C xbmc/dialogs
xbmc/windows/windows.a: force
	$(MAKE) -C xbmc/windows
lib/libhts/libhts.a: force
	$(MAKE) -C lib/libhts
xbmc/interfaces/interfaces.a: force
	$(MAKE) -C xbmc/interfaces
xbmc/interfaces/python/python.a: force
	$(MAKE) -C xbmc/interfaces/python
xbmc/interfaces/python/xbmcmodule/xbmcmodule.a: force
	$(MAKE) -C xbmc/interfaces/python/xbmcmodule
xbmc/network/libscrobbler/scrobbler.a: force
	$(MAKE) -C xbmc/network/libscrobbler
lib/libRTV/librtv.a: force
	$(MAKE) -C lib/libRTV
lib/libUPnP/libupnp.a: force
	$(MAKE) -C lib/libUPnP
lib/libXDAAP/libxdaap.a: force
	$(MAKE) -C lib/libXDAAP
xbmc/interfaces/http-api/http-api.a: force
	$(MAKE) -C xbmc/interfaces/http-api
xbmc/interfaces/json-rpc/json-rpc.a: force
	$(MAKE) -C xbmc/interfaces/json-rpc
xbmc/dbwrappers/dbwrappers.a: force
	$(MAKE) -C xbmc/dbwrappers
lib/UnrarXLib/UnrarXLib.a: force
	$(MAKE) -C lib/UnrarXLib
lib/libsquish/libsquish.a: force
	$(MAKE) -C lib/libsquish
lib/SlingboxLib/SlingboxLib.a: force
	$(MAKE) -C lib/SlingboxLib
xbmc/linux/linux.a: force
	$(MAKE) -C xbmc/linux
xbmc/addons/addons.a: force
	$(MAKE) -C xbmc/addons
xbmc/settings/settings.a: force
	$(MAKE) -C xbmc/settings
xbmc/utils/utils.a: force
	$(MAKE) -C xbmc/utils
xbmc/osx/osx.a: force
	$(MAKE) -C xbmc/osx
lib/libapetag/.libs/libapetag.a: force
	$(MAKE) -C lib/libapetag
lib/cpluff/libcpluff/.libs/libcpluff.a: force
	$(MAKE) -C lib/cpluff/libcpluff
system/libcpluff-@ARCH@.so: lib/cpluff/libcpluff/.libs/libcpluff.a
ifeq ($(findstring osx,@ARCH@), osx)
  ifeq (@ARCH@, arm-osx)
	$(CXX) $(LDFLAGS) -all_load -bundle -flat_namespace -undefined dynamic_lookup -read_only_relocs suppress -o $@ $<
  else
	$(CXX) $(LDFLAGS) -all_load -bundle -flat_namespace -undefined dynamic_lookup -lexpat $(BUNDLE1_O) -o $@ $<
  endif
else
	cp lib/cpluff/libcpluff/.libs/libcpluff.so $@
endif
lib/xbmc-dll-symbols/dll-symbols.a: force
	$(MAKE) -C lib/xbmc-dll-symbols

exports:
	$(MAKE) xbmc/cores/DllLoader/exports/exports.a
	$(MAKE) xbmc/cores/DllLoader/exports/util/exports_utils.a
	$(MAKE) -C xbmc/cores/DllLoader/exports wrapper.def
dllloader: exports
	$(MAKE) xbmc/cores/DllLoader/dllloader.a
visualizations: exports
	for d in $(VIS_DIRS); do $(MAKE) -C $$d; done
screensavers: exports
ifeq (@USE_OPENGL@,1)
	$(MAKE) -C xbmc/screensavers/rsxs-0.9/xbmc
endif
libpython: dllloader
	$(MAKE) -C xbmc/interfaces/python
	$(MAKE) -C xbmc/interfaces/python/xbmcmodule
dvdpcodecs: dllloader
	$(MAKE) -C lib 
	$(MAKE) -C lib/libdvd
eventclients:
ifeq ($(findstring osx,@ARCH@), osx)
ifneq ($(findstring arm,@ARCH@), arm)
	$(MAKE) -C tools/EventClients/Clients/OSXRemote
endif
else
	$(MAKE) -C tools/EventClients
endif
libexif: dllloader
	$(MAKE) -C lib/libexif
cmyth: dllloader
	$(MAKE) -C lib/cmyth
libhdhomerun: dllloader
	$(MAKE) -C lib/libhdhomerun
libid3tag: dllloader
	$(MAKE) -C lib/libid3tag
papcodecs: dllloader dvdpcodecs
	test -d system/players/paplayer || mkdir system/players/paplayer
	$(MAKE) -C lib/xbadpcm
	$(MAKE) -C lib/vgmstream
	$(MAKE) -C lib/timidity
	$(MAKE) -C lib/nosefart 
ifneq ($(findstring arm-osx,@ARCH@), arm-osx)
	$(MAKE) -C lib/libsidplay2 
endif
ifeq (@USE_ASAP_CODEC@,1)
  ifneq ($(findstring osx,@ARCH@), osx)
	$(MAKE) -C lib/asap asap-xbmc
  endif
endif
	$(MAKE) -C lib/stsound/StSoundLibrary	
ifeq ($(or $(findstring powerpc,@ARCH@),$(findstring x86_64-linux,@ARCH@),$(findstring arm, @ARCH@)),)
	$(MAKE) -C lib/snesapu/SNES/SNESAPU
endif
imagelib: dllloader
	$(MAKE) -C lib/cximage-6.0

codecs: papcodecs dvdpcodecs
libs: cmyth libhdhomerun libid3tag imagelib libexif system/libcpluff-@ARCH@.so
externals: codecs libs visualizations screensavers

xcode_depends: \
	codecs libs visualizations screensavers eventclients skins \
	lib/libsquish/libsquish.a \
	lib/libapetag/.libs/libapetag.a \
	lib/libRTV/librtv.a \
	lib/libXDAAP/libxdaap.a \
	lib/SlingboxLib/SlingboxLib.a

# platform independend objects
OBJSXBMC=	\
	xbmc/xbmc.a \
	xbmc/addons/addons.a \
	xbmc/cores/playercorefactory/playercorefactory.a \
	xbmc/cores/dvdplayer/DVDPlayer.a \
	xbmc/cores/paplayer/paplayer.a \
	xbmc/cores/VideoRenderers/VideoRenderer.a \
	xbmc/cores/VideoRenderers/VideoShaders/VideoShaders.a \
	lib/tinyXML/tinyxml.a \
	xbmc/cores/cores.a \
	xbmc/interfaces/python/python.a \
	xbmc/cores/DllLoader/dllloader.a \
	xbmc/cores/dvdplayer/DVDCodecs/DVDCodecs.a \
	xbmc/cores/dvdplayer/DVDCodecs/Audio/Audio.a \
	xbmc/cores/dvdplayer/DVDCodecs/Overlay/Overlay.a \
	xbmc/cores/dvdplayer/DVDCodecs/Video/Video.a \
	xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxers.a \
	xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreams.a \
	xbmc/cores/dvdplayer/DVDSubtitles/DVDSubtitles.a \
	xbmc/cores/AudioRenderers/audiorenderers.a \
	xbmc/cores/ExternalPlayer/ExternalPlayer.a \
	xbmc/filesystem/filesystem.a \
	xbmc/filesystem/MusicDatabaseDirectory/musicdatabasedirectory.a \
	xbmc/filesystem/VideoDatabaseDirectory/videodatabasedirectory.a \
	xbmc/input/input.a \
	xbmc/dialogs/dialogs.a \
	xbmc/music/karaoke/karaoke.a \
	xbmc/music/music.a \
	xbmc/music/dialogs/musicdialogs.a \
	xbmc/music/infoscanner/musicscanner.a \
	xbmc/music/tags/musictags.a \
	xbmc/music/windows/musicwindows.a \
	xbmc/video/dialogs/videodialogs.a \
	xbmc/pictures/pictures.a \
	xbmc/playlists/playlists.a \
	xbmc/programs/programs.a \
	xbmc/powermanagement/powermanagement.a \
	xbmc/storage/storage.a \
	xbmc/threads/threads.a \
	xbmc/windows/windows.a \
	xbmc/interfaces/python/xbmcmodule/xbmcmodule.a \
	xbmc/network/libscrobbler/scrobbler.a \
	lib/libRTV/librtv.a \
	lib/libUPnP/libupnp.a \
	lib/libXDAAP/libxdaap.a \
	xbmc/interfaces/interfaces.a \
	xbmc/cdrip/cdrip.a \
	xbmc/interfaces/json-rpc/json-rpc.a \
	xbmc/interfaces/http-api/http-api.a \
	xbmc/dbwrappers/dbwrappers.a \
	lib/libsquish/libsquish.a \
	lib/SlingboxLib/SlingboxLib.a \
	lib/libapetag/.libs/libapetag.a \
	lib/xbmc-dll-symbols/dll-symbols.a \
        xbmc/rendering/rendering.a \
        xbmc/windowing/windowing.a \

ifeq (@USE_OPENGL@,1)
OBJSXBMC+= \
	xbmc/rendering/gl/rendering_gl.a
endif
ifeq (@USE_OPENGLES@,1)
OBJSXBMC+= \
	xbmc/rendering/gles/rendering_gles.a \
	xbmc/windowing/egl/windowing_egl.a
endif

ifeq (@HAVE_XBMC_NONFREE@,1)
OBJSXBMC+= \
	lib/UnrarXLib/UnrarXLib.a
endif

OBJSXBMC+= \
	lib/libhts/libhts.a

# platform dependend objects
ifeq ($(findstring osx,@ARCH@), osx)
OBJSXBMC += \
	xbmc/osx/osx.a \
	xbmc/windowing/osx/windowing_osx.a \
	xbmc/powermanagement/osx/powermanagement.a \
	xbmc/network/osx/network.a \
	xbmc/storage/osx/storage.a \
	xbmc/network/linux/network_linux.a \

else
OBJSXBMC += \
	xbmc/input/linux/input_linux.a \
	xbmc/network/linux/network_linux.a \
	xbmc/powermanagement/linux/powermanagement_linux.a \
	xbmc/storage/linux/storage_linux.a
ifeq (@USE_OPENGL@,1)
OBJSXBMC+= \
	xbmc/windowing/X11/windowing_X11.a
endif
endif

DYNOBJSXBMC= \
	xbmc/linux/linux.a \
	xbmc/network/network.a \
	xbmc/video/windows/videowindows.a \
	xbmc/utils/utils.a \
	xbmc/cores/DllLoader/exports/util/exports_utils.a \
	xbmc/cores/DllLoader/exports/exports.a \
	xbmc/settings/settings.a \
	xbmc/video/video.a \
	xbmc/guilib/guilib.a # must be dynamic to avoid linker errors

LIBS += @PYTHON_LDFLAGS@

xbmc.bin: $(OBJSXBMC) $(DYNOBJSXBMC)
ifeq ($(findstring osx,@ARCH@), osx)
	$(CXX) $(LDFLAGS) -o xbmc.bin -Wl,-all_load,-ObjC $(DYNOBJSXBMC) $(OBJSXBMC) $(LIBS) -rdynamic
else
	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o xbmc.bin -Wl,--whole-archive $(DYNOBJSXBMC) $(OBJSXBMC) -Wl,--no-whole-archive $(LIBS) -rdynamic
endif

xbmc-xrandr: xbmc-xrandr.c
ifneq (1,@USE_XRANDR@)
	# xbmc-xrandr.c gets picked up by the default make rules
	@echo "excluding xbmc-xrandr"
else
	$(CC) $(CFLAGS) $(LDFLAGS) -o xbmc-xrandr xbmc-xrandr.c -lXrandr -lX11 
endif

tools/XBMCTex/XBMCTex:
ifeq ($(findstring osx,@ARCH@), osx)
	# hack this for now
	$(MAKE) -C tools/XBMCTex -f Makefile.osx
else
	$(MAKE) -C tools/XBMCTex/
endif

tools/TexturePacker/TexturePacker: xbmc/guilib/guilib.a lib/libsquish/libsquish.a
	$(MAKE) -C tools/TexturePacker/


install-bin: xbmc.bin # developement convenience target
	sudo install -d $(DESTDIR)$(libdir)
	sudo install xbmc.bin $(DESTDIR)$(libdir)/xbmc

ifeq ($(findstring osx,@ARCH@), osx)
	# TODO: add osx install
else
install: install-binaries install-arch install-datas

install-binaries: install-scripts
	@echo "Copying XBMC binary to $(DESTDIR)$(libdir)/xbmc/xbmc.bin"
	@install -d $(DESTDIR)$(libdir)/xbmc
	@install xbmc.bin $(DESTDIR)$(libdir)/xbmc/xbmc.bin
ifeq (1,@USE_XRANDR@)
	@install xbmc-xrandr $(DESTDIR)$(libdir)/xbmc/xbmc-xrandr
endif
	@echo "You can run XBMC with the command 'xbmc'"
endif

install-arch:
	@# Arch dependent files
ifeq ($(findstring freebsd,@ARCH@), freebsd)
	@find -E system addons -type f -not -iregex ".*svn.*" \
		-iregex ".*@ARCH@.*|.*\.vis|.*\.xbs" \
		-exec sh -c "install -d \"$(DESTDIR)$(libdir)/xbmc/\`dirname '{}'\`\"" \; \
		-and \
		-exec install "{}" $(DESTDIR)$(libdir)/xbmc/"{}" \; \
		-exec printf " -- %-75.75s\r" "{}" \;
else
	@find system addons -regextype posix-extended -type f -not -iregex ".*svn.*" -iregex ".*@ARCH@.*|.*\.vis|.*\.xbs" -exec install -D "{}" $(DESTDIR)$(libdir)/xbmc/"{}" \; -printf " -- %-75.75f\r"
endif

install-scripts:
	@install -d $(DESTDIR)$(bindir)
	@install tools/Linux/xbmc.sh $(DESTDIR)$(bindir)/xbmc
	@install tools/Linux/xbmc-standalone.sh $(DESTDIR)$(bindir)/xbmc-standalone
	@install -d $(DESTDIR)$(datarootdir)/xbmc
	@install -m 0644 tools/Linux/FEH.py $(DESTDIR)$(datarootdir)/xbmc/FEH.py
	@install -d $(DESTDIR)$(datarootdir)/xsessions
	@install -m 0644 tools/Linux/xbmc-xsession.desktop $(DESTDIR)$(datarootdir)/xsessions/XBMC.desktop

install-datas: install-scripts
	@echo "Copying support and legal files..."
	@install -d $(DESTDIR)$(docdir)
	@for FILE in `ls README.linux LICENSE.GPL *.txt`; do \
		install -m 0644 "$$FILE" "$(DESTDIR)$(docdir)/$$FILE"; done
	@echo "Done!"
	@echo "Copying system files to $(DESTDIR)$(datarootdir)/xbmc"
	@install -d $(DESTDIR)$(datarootdir)/xbmc
	@# Arch independent files
ifeq ($(findstring bsd,@ARCH@), bsd)
	@find -E addons language media sounds userdata system -type f \
		-not -iregex ".*@ARCH@.*|.*\.vis|.*\.xbs|.*svn.*|.*\.so|.*\.dll" \
		-exec sh -c "install -d \"$(DESTDIR)$(datarootdir)/xbmc/\`dirname '{}'\`\"" \; \
		-and \
		-exec install -m 0644 "{}" $(DESTDIR)$(datarootdir)/xbmc/"{}" \; \
		-exec printf " -- %-75.75s\r" "{}" \;
else
	@find addons language media sounds userdata system -regextype posix-extended -type f -not -iregex ".*@ARCH@.*|.*\.vis|.*\.xbs|.*svn.*|.*\.so|.*\.dll" -exec install -D -m 0644 "{}" $(DESTDIR)$(datarootdir)/xbmc/"{}" \; -printf " -- %-75.75f\r"
endif	
	@# Icons and links
	@install -d $(DESTDIR)$(datarootdir)/applications
	@install tools/Linux/xbmc.desktop $(DESTDIR)$(datarootdir)/applications/xbmc.desktop
	@install -d $(DESTDIR)$(datadir)/icons/hicolor/48x48/apps
	@install -m 0644 tools/Linux/xbmc-48x48.png $(DESTDIR)$(datadir)/icons/hicolor/48x48/apps/xbmc.png
	@install -d $(DESTDIR)$(datadir)/icons/hicolor/256x256/apps
	@install -m 0644 media/icon.png $(DESTDIR)$(datadir)/icons/hicolor/256x256/apps/xbmc.png
	@test -z "$(DESTDIR)" && gtk-update-icon-cache -f -q -t $(datadir)/icons/hicolor || :

uninstall:
	@echo "Removing XBMC..."
	@rm -rf $(DESTDIR)$(libdir)/xbmc
	@rm -rf $(DESTDIR)$(datarootdir)/xbmc $(DESTDIR)$(bindir)/xbmc
	@rm -rf $(DESTDIR)$(bindir)/xbmc-standalone
	@rm -rf $(DESTDIR)$(datarootdir)/xsessions/XBMC.desktop
	@echo "Done!"

reallyclean:
	@echo " This will delete ALL unversioned files in"; \
	 echo " your XBMC source tree. If you aren't sure"; \
	 echo " you want to do this, answer anything but"; \
	 echo " 'Y' (case sensitive) to the following."; \
	 echo " DISCLAIMER: Team XBMC is NOT responsible"; \
	 echo " for ANYTHING lost if you execute this command!"; \
	 echo -n " Damnserious? (Y/*) "; \
	 read -n1 PROMPT; \
	 if [[ "$$PROMPT" = "Y" ]]; then \
		SVNV=$$(svnversion -n | cut -d':' -f1); _IFS=$$IFS; IFS=$$'\t\n'; \
		for i in `svn st --no-ignore | grep ^[I\?] | cut -d' ' -f7-`; do \
			if [[ $${i:(-4)} != "diff" && $${i:(-5)} != "patch" ]]; then \
				echo "  Deleting $$i"; \
				rm -rf "$$i"; \
			fi; \
		done; \
		IFS=$$_IFS; \
		echo " Recovering any missing files."; \
		svn up -r $${SVNV/M/} | sed -e "s/.*'\(.*\)'/  \1/p" -e d; \
		echo " Done."; \
		echo " The following files may need reverted (svn revert <file>)"; \
		svn st | sed -e "s/^M */  /p" -e d; \
	 else \
	 	echo; \
	 fi

clean-xbmc.bin:
	rm -f xbmc.bin
	for d in $(BIN_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done
clean-eventclients:
	for d in $(EC_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done
clean-xbmctex:
	for d in $(XBMCTEX_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done
clean-dvdpcodecs: 
	for d in $(DVDPCODECS_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done
clean-papcodecs:
	for d in $(PAPCODECS_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done
clean-libs: 
	for d in $(LIB_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done
clean-screensavers: 
	for d in $(SS_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done
clean-visualisations:
	for d in $(VIS_DIRS); do if test -f $$d/Makefile; then $(MAKE) -C $$d clean; fi; done

clean-codecs: clean-dvdpcodecs clean-papcodecs

clean-externals: clean-codecs clean-eventclients clean-xbmctex clean-libs \
	clean-screensavers clean-visualisations