#
# Main gpac Makefile
#
include config.mak

VPATH=$(SRC_PATH)

CFLAGS= $(OPTFLAGS) -Wall -I. -I$(SRC_PATH) -I$(SRC_PATH)/Include -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE

ifeq ($(DEBUGBUILD),yes)
CFLAGS+=-g
LDFLAGS+=-g
endif

ifeq ($(TARGET_GPROF),yes)
CFLAGS+=-p
LDFLAGS+=-p
endif

ifeq ($(BUILD_SHARED),yes)
DEP_LIBS=./bin/M4Systems.so 
else
DEP_LIBS=./bin/M4Systems.a
endif

ifeq ($(CONFIG_WIN32),yes)
PLUG_EXT=dll
else
PLUG_EXT=so
endif

all: lib progs plugs

lib:
	$(MAKE) -C M4Systems all

progs:
	$(MAKE) -C Applications all

sggen:
	$(MAKE) -C Applications sggen

plugs:
	$(MAKE) -C Plugins all

depend:
	$(MAKE) -C M4Systems dep
	$(MAKE) -C Applications dep
	$(MAKE) -C Plugins dep

clean: $(CLEANVHOOK)
	$(MAKE) -C M4Systems clean
	$(MAKE) -C Applications clean
	$(MAKE) -C Plugins clean

distclean: $(CLEANVHOOK)
	$(MAKE) -C M4Systems distclean
	$(MAKE) -C Applications distclean
	$(MAKE) -C Plugins distclean
	rm -f config.mak

dep:	depend

help:
	@echo "Input to GPAC make:"
	@echo "depend/dep: build dependencies (developer)"
	@echo "all (void): build main library, programs and plugins"
	@echo "progs: build programs only"
	@echo "plugs: build plugins only"
	@echo "sggen: build SGGen application only"
	@echo 
	@echo "clean: clean src repository"
	@echo "distclean: clean src repository and host config file"
	@echo "tar: create GPAC tarball"
	@echo 
	@echo "install-lib: install M4Systems library (libm4systems.a) and headers"
	@echo 
	@echo "install: install applications and plugins on system"
	@echo "uninstall: uninstall applications and plugins"

# tar release (use 'make -k tar' on a checkouted tree)
FILE=gpac-$(shell grep "\#define M4_VERSION " include/gpac/m4_tools.h | \
                    cut -d "\"" -f 2 )

tar:
	( tar zcvf ~/$(FILE).tar.gz ../gpac --exclude CVS --exclude Debug --exclude bin --exclude lib --exclude Release --exclude Obj --exclude temp --exclude AMR_NB --exclude *.mak --exclude *.o --exclude *.~*)

install:
	install -d "$(bindir)"
	install -c -s -m 755 bin/gcc/MP4Box "$(bindir)"
	install -c -s -m 755 bin/gcc/MP42AVI "$(bindir)"
	$(MAKE) -C Applications install
	install -d "$(libdir)"
	install -c bin/gcc/*.$(PLUG_EXT) "$(libdir)"
	install -d "$(mandir)/man1"
	install -c -m 644 doc/man/mp4box.1 $(mandir)/man1/
	install -c -m 644 doc/man/mp42avi.1 $(mandir)/man1/
	install -c -m 644 doc/man/mp4client.1 $(mandir)/man1/
	install -c -m 644 doc/man/gpac.1 $(mandir)/man1/

uninstall:
	$(MAKE) -C Applications uninstall
	rm -rf $(libdir)
	rm -rf $(bindir)/MP4Box
	rm -rf $(bindir)/MP42AVI
	rm -rf $(mandir)/man1/mp4box.1
	rm -rf $(mandir)/man1/mp42avi.1
	rm -rf $(mandir)/man1/mp4client.1
	rm -rf $(mandir)/man1/gpac.1

install-lib:
	install-headers
	mkdir -p "$(prefix)/lib"
	install -m 644 "./bin/gcc/libm4systems.a" "$(prefix)/lib"

install-headers:
	mkdir -p "$(prefix)/include/gpac"
	install -m 644 $(SRC_PATH)/include/gpac/m4_tools.h \
	               $(SRC_PATH)/include/gpac/m4_isomedia.h \
	               $(SRC_PATH)/include/gpac/m4_descriptors.h \
	               $(SRC_PATH)/include/gpac/m4_author.h \
	               $(SRC_PATH)/include/gpac/m4_avhw.h \
	               $(SRC_PATH)/include/gpac/m4_bifs.h \
	               $(SRC_PATH)/include/gpac/m4_decoder.h \
	               $(SRC_PATH)/include/gpac/m4_graphics.h \
	               $(SRC_PATH)/include/gpac/m4_ietf.h \
	               $(SRC_PATH)/include/gpac/m4_network.h \
	               $(SRC_PATH)/include/gpac/m4_nodes.h \
	               $(SRC_PATH)/include/gpac/m4_render.h \
	               $(SRC_PATH)/include/gpac/m4_scenegraph.h \
	               $(SRC_PATH)/include/gpac/m4_terminal.h \
	               $(SRC_PATH)/include/gpac/m4_config.h \
                "$(prefix)/include/gpac"

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