# EXTRA_FLAGS        extra compiler flags (included in CPPFLAGS)
#
# command-line example:
#     make debug       # very high debugging output
#     make err         # only gives error messages
#     make release     # absolutely quiet
#     make all DEBUG=3 EXTRA_FLAGS="-DFORCE_DISPLAY"

include rules.mk
BASEDIR=$(PWD)

all: debug

err:
	echo $(PWD) > .BASEDIR
	$(MAKE) DEBUG=1 vitooki apps examples

nodebug: release

release:
	echo $(PWD) > .BASEDIR
	#optimizing stuff
	CPPFLAGS="$(CPPFLAGS) $(RELEASE_CPPFLAGS)" $(MAKE) vitooki
	CPPFLAGS="$(CPPFLAGS) $(RELEASE_CPPFLAGS)" $(MAKE) apps
	CPPFLAGS="$(CPPFLAGS) $(RELEASE_CPPFLAGS)" $(MAKE) examples

# add debugging info
debugerr:
	echo $(PWD) > .BASEDIR
	CPPFLAGS="$(CPPFLAGS) -O3 -funroll-loops -fPIC" $(MAKE) DEBUG=1 vitooki apps examples

# add debugging info
debug:
	echo $(PWD) > .BASEDIR
	$(MAKE) DEBUG=3 vitooki apps examples

# add profiling info
prof:
	echo $(PWD) > .BASEDIR
	$(MAKE) PROF=1 vitooki apps examples

World:  all4itec all
	touch .world_built
	touch .small_world_built

vitooki:
	[ -f .small_world_built ] || $(MAKE) all4itec
	$(MAKE) -C src

ifeq (intel,$(findstring intel,$(VITOOKI_BUILD_ARCH)))
all4itec:   paragui xvid isomp4lib commonucl sord lame ffmpeg libdvdcss libdvdread libebml libmatroska #amsp
	touch .small_world_built
else  # ARM
all4itec:  commonucl sord ffmpeg
	touch .small_world_built
endif

apps:  vitooki
	$(MAKE) -C apps

examples:  vitooki
	$(MAKE) -C examples

sord:
	cd $(EXTRALIBS)/sord && \
	([ -f Makefile ] || perl configure.pl) && \
	$(MAKE)

paragui:
	cd $(EXTRALIBS)/paragui; \
	([ -f Makefile ] || ./configure --enable-internalphysfs --with-sdl-prefix=$(TOOLPREFIX)) && $(MAKE)
#	([ -f Makefile ] || ./configure --enable-internalphysfs --enable-internalexpat) && $(MAKE)

libdvdcss:
	cd $(EXTRALIBS)/libdvdcss; \
	([ -f config.status ] || ./configure) && $(MAKE)
	mkdir -p src/.libs
	cd src/.libs; \
	cp $(BASEDIR)/$(EXTRALIBS)/libdvdcss/src/.libs/libdvdcss.so.2.0.7 . ; \
	ln -sf libdvdcss.so.2.0.7 libdvdcss.so.2; \
	ln -sf libdvdcss.so.2 libdvdcss.so


libdvdread:
	cd $(EXTRALIBS)/libdvdread; \
	([ -f config.status ] || CPPFLAGS=-I$(PWD)/$(EXTRALIBS)/libdvdcss/src \
  LDFLAGS=-L$(PWD)/$(EXTRALIBS)/libdvdcss/src/.libs ./configure  \
  --with-libdvdcss=$(PWD)/$(EXTRALIBS)/libdvdcss) && \
  ([ -d $(PWD)/$(EXTRALIBS)/libdvdcss/src/.libs/.libs/ ] || ln -sf $(PWD)/$(EXTRALIBS)/libdvdcss/src/.libs $(PWD)/$(EXTRALIBS)/libdvdcss/src/.libs/.libs) && $(MAKE)
	mkdir -p src/.libs
	cd src/.libs; \
	cp $(BASEDIR)/$(EXTRALIBS)/libdvdread/dvdread/.libs/libdvdread.so.3.0.0 . ; \
	ln -sf libdvdread.so.3.0.0 libdvdread.so.3; \
	ln -sf libdvdread.so.3 libdvdread.so


lame:
	cd $(EXTRALIBS)/lame; \
	([ -f config.status ] || ./configure) && $(MAKE)
	mkdir -p src/.libs
	cd src/.libs; \
	cp $(BASEDIR)/$(EXTRALIBS)/lame/libmp3lame/.libs/libmp3lame.so.0.0.0 . ; \
	ln -sf libmp3lame.so.0.0.0 libmp3lame.so.0; \
	ln -sf libmp3lame.so.0 libmp3lame.so


ffmpeg:
	cd $(EXTRALIBS)/ffmpeg; \
	if [ ! -f ffmpeg ]; then \
	  if [ $(VITOOKI_BUILD_ARCH) = arm ]; then \
			echo "BUILDING FOR ARM!"; \
      ./configure --disable-encoder=snow --disable-decoder=snow --disable-ffplay --cpu=armv4l --tune=armv4l \
		  --cross-prefix="$(BASEDIR)/../../../../cross/arm-linux/bin/" \
                  --disable-mmx --enable-mp3lame --extra-libs="-L$(BASEDIR)/../../../../staging/arm-linux/lib/ -lmp3lame -lm" --enable-gpl; \
		else \
			echo "BUILDING FOR INTEL!"; \
	  	  ./configure --enable-pp --enable-gpl --enable-mp3lame --enable-shared --disable-static --extra-libs="-L$(BASEDIR)/$(EXTRALIBS)/lame/libmp3lame/.libs -lmp3lame -lm"; \
	  fi; \
	fi; \
	$(MAKE)
	mkdir -p src/.libs
	cd src/.libs; \
	cp $(BASEDIR)/$(EXTRALIBS)/ffmpeg/libavformat/libavformat.so libavformat.so.50; \
	ln -sf libavformat.so.50 libavformat.so ; \
	cp $(BASEDIR)/$(EXTRALIBS)/ffmpeg/libavcodec/libavcodec.so libavcodec.so.51; \
	ln -sf libavcodec.so.51 libavcodec.so; \
	cp $(BASEDIR)/$(EXTRALIBS)/ffmpeg/libavutil/libavutil.so libavutil.so.49; \
	ln -sf libavutil.so.49 libavutil.so

isomp4lib:
	cd $(EXTRALIBS)/isomp4/libisomediafile/linux/libisomediafile && $(MAKE) || echo "ignoring isomp4"

commonucl:
	echo $(PWD) > .BASEDIR; \
	cd $(EXTRALIBS)/commonucl; \
	$(MAKE)

xvid:
	cd $(EXTRALIBS)/xvidcore-1.1.0-beta2/build/generic; \
	LDFLAGS_SAV="$(LDFLAGS)"; CPPFLAGS_SAV="$(CPPFLAGS)"; \
	([ -f config.status ] || (./bootstrap.sh && LDFLAGS="" CPPFLAGS=""  ./configure $(CONFIG_ARM)) ) \
     &&  LDFLAGS=$(LDFLAGS_SAV) CPPFLAGS=$(CPPFLAGS_SAV) $(MAKE)

amsp:
	[ -f .BASEDIR ] || echo $(PWD) > .BASEDIR
	cd $(EXTRALIBS)/amsp && $(MAKE)

libebml:
	cd $(EXTRALIBS)/libebml/make/linux && $(MAKE)
	mkdir -p src/.libs
	cd src/.libs; \
	cp $(BASEDIR)/$(EXTRALIBS)/libebml/make/linux/libebml.so.0 . ; \
	ln -sf libebml.so.0 libebml.so

libmatroska:
	cd $(EXTRALIBS)/libmatroska/make/linux && $(MAKE)
	mkdir -p src/.libs
	cd src/.libs; \
	cp $(BASEDIR)/$(EXTRALIBS)/libmatroska/make/linux/libmatroska.so.0 . ; \
	ln -sf libmatroska.so.0 libmatroska.so

#docs:
#	$(MAKE) -C src doc
docu:
	cd docs/code && doxygen doxygen.cfg && cd ../../

clean:
	$(MAKE) -C src clean
	$(MAKE) -C apps clean
	$(MAKE) -C examples clean
	rm -f ./doc/html/*
	rm -f *~ Makefile.dep

distclean:
	@echo "removing the whole stuff"
	$(MAKE) -C $(EXTRALIBS)/sord realclean
	$(MAKE) -C $(EXTRALIBS)/commonucl distclean
	$(MAKE) -C $(EXTRALIBS)/paragui distclean && rm -f $(EXTRALIBS)/paragui/configure.status
	$(MAKE) -C  $(EXTRALIBS)/libdvdcss distclean
	$(MAKE) -C  $(EXTRALIBS)/libdvdread distclean
	$(MAKE) -C  $(EXTRALIBS)/lame distclean
	$(MAKE) -C $(EXTRALIBS)/xvidcore-1.1.0-beta2/build/generic clean
	$(MAKE) -C  $(EXTRALIBS)/ffmpeg distclean
	$(MAKE) -C  $(EXTRALIBS)/libebml/make/linux distclean
	$(MAKE) -C  $(EXTRALIBS)/libmatroska/make/linux distclean
	$(MAKE) -C  $(EXTRALIBS)/isomp4/libisomediafile/linux/libisomediafile clean || echo "ignoring isomp4"
#	$(MAKE) -C $(EXTRALIBS)/amsp distclean
	$(MAKE) clean
	rm -f `find . -name Makefile.dep`

install:
	@echo "installing to $(PREFIX)"
	mkdir -p $(PREFIX)/bin
	mkdir -p $(PREFIX)/lib
	$(MAKE) -C src install
	$(MAKE) -C apps install
	$(MAKE) -C examples install

uninstall:
	@echo "removing from $(PREFIX)"
	$(MAKE) -C src uninstall
	$(MAKE) -C apps uninstall
	$(MAKE) -C examples uninstall
