#
# Main KMP Makefile
# (c) 2007 KO Myung-Hun
# based on Main ffmpeg Makefile
# (c) 2000-2004 Fabrice Bellard
#
include config.mak

VPATH=$(SRC_PATH_BARE)

CFLAGS=$(OPTFLAGS) -I$(BUILD_ROOT) -I$(SRC_PATH) -I$(SRC_PATH)/libavutil \
	   -I$(SRC_PATH)/libavcodec -I$(SRC_PATH)/libavformat -I$(SRC_PATH)/libswscale \
	   -I$(SRC_PATH)/libkva -I$(SRC_PATH)/libdart -I$(SRC_PATH)/libyuv \
	   -I$(SRC_PATH)/libsub \
	   -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_ISOC9X_SOURCE

LDFLAGS+= -g

PROGS_G+=ffplay_g$(EXESUF)
PROGS+=ffplay$(EXESUF)

PROGS_G+=kmp_g$(EXESUF)
PROGS+=kmp$(EXESUF)

PROGS_G+=test_g$(EXESUF)
PROGS+=test$(EXESUF)

BASENAMES=ffplay kmp test
ALLPROGS=$(addsuffix $(EXESUF), $(BASENAMES))
ALLPROGS_G=$(addsuffix _g$(EXESUF), $(BASENAMES))

ifeq ($(BUILD_SHARED),yes)
DEP_LIBS=libavcodec/$(SLIBPREF)avcodec$(SLIBSUF) libavformat/$(SLIBPREF)avformat$(SLIBSUF)
else
DEP_LIBS=libavcodec/$(LIBPREF)avcodec$(LIBSUF) libavformat/$(LIBPREF)avformat$(LIBSUF)
endif

OBJS = cmdutils.o ffplay.o kmp.o test.o
SRCS = $(OBJS:.o=.c) $(ASM_OBJS:.o=.s)
LDFLAGS := -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil $(LDFLAGS)
EXTRALIBS := -lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)

all: lib $(PROGS_G) $(PROGS)

lib:
	$(MAKE) -C libavutil   all
	$(MAKE) -C libavcodec  all
	$(MAKE) -C libavformat all
	$(MAKE) -C libkva	   all
	$(MAKE) -C libdart	   all
	$(MAKE) -C libyuv	   all
	$(MAKE) -C libsub	   all

ffplay_g$(EXESUF): ffplay.o cmdutils.o .libs
	$(CC) $(LDFLAGS) -o $@ ffplay.o cmdutils.o $(EXTRALIBS) $(SDL_LIBS)

KMP_OBJS = kmp.o kmp_thread.o kmp_img.o kmp_timer.o kmp_sub.o cmdutils.o
KMP_LIBS = libkva/kva.lib libdart/dart.lib libyuv/yuv.lib libsub/sub.lib

kmp_g$(EXESUF): $(KMP_OBJS) $(KMP_LIBS) .libs
	$(CC) $(LDFLAGS) -o $@ $(KMP_OBJS) $(EXTRALIBS) $(KMP_LIBS) -lmmpm2

test_g$(EXESUF): test.o libkva/kva.lib libsub/sub.lib .libs
	$(CC) $(LDFLAGS) -o $@ test.o $(EXTRALIBS) -llibkva/kva -llibsub/sub -lmmpm2

%$(EXESUF): %_g$(EXESUF)
	cp -p $< $@
	$(STRIP) $@

ffplay.o: ffplay.c
	$(CC) $(CFLAGS) $(SDL_CFLAGS) -c -o $@ $<

kmp.o : kmp.c kmp.h kmp_thread.h kmp_img.h kmp_timer.h kmp_sub.h

kmp_thread.o : kmp_thread.c kmp_thread.h

kmp_img.o : kmp_img.c kmp_img.h

kmp_timer.o : kmp_timer.c kmp_timer.h kmp_thread.h

kmp_sub.o : kmp_sub.c kmp_sub.h

test.o : test.c

ffplay.o kmp.o test.o : version.h

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

depend dep: .depend
	$(MAKE) -C libavutil   depend
	$(MAKE) -C libavcodec  depend
	$(MAKE) -C libavformat depend
	$(MAKE) -C libkva	   depend
	$(MAKE) -C libdart	   depend
	$(MAKE) -C libyuv	   depend
	$(MAKE) -C libsub	   depend

.depend: $(SRCS) version.h
	$(CC) -MM $(CFLAGS) $(SDL_CFLAGS) $(filter-out %.h,$^) 1>.depend

$(DEP_LIBS): lib

.libs: $(DEP_LIBS)
	touch $@

clean:
	$(MAKE) -C libavutil   clean
	$(MAKE) -C libavcodec  clean
	$(MAKE) -C libavformat clean
	$(MAKE) -C libkva	   clean
	$(MAKE) -C libdart	   clean
	$(MAKE) -C libyuv	   clean
	$(MAKE) -C libsub	   clean

	rm -f *.o *.d *~ .libs gmon.out TAGS $(ALLPROGS) $(ALLPROGS_G) \
	   output_example$(EXESUF) qt-faststart$(EXESUF) cws2fws$(EXESUF)

distclean: clean
	$(MAKE) -C libavutil   distclean
	$(MAKE) -C libavcodec  distclean
	$(MAKE) -C libavformat distclean
	$(MAKE) -C libkva	   distclean
	$(MAKE) -C libdart	   distclean
	$(MAKE) -C libyuv	   distclean
	$(MAKE) -C libsub	   distclean

	rm -f .depend version.h config.* *.pc

TAGS:
	etags *.[ch] libavformat/*.[ch] libavcodec/*.[ch]

.PHONY: all lib
.PHONY: dep depend clean distclean TAGS

ifneq ($(wildcard .depend),)
include .depend
endif
