include config.mak
vpath % $(SRCDIR)

#DEBUG=on

CC:=gcc
#CFLAGS+=-Werror
CFLAGS+=-Wno-deprecated-declarations

CPPFLAGS+=-I.
CPPFLAGS+=-I$(SRCDIR)
CPPFLAGS+=-I$(INCLUDEDIR)

LIB:=libffsox.a

OBJS:=
OBJS+=$(LIB)(ffsox_ffi.o)
OBJS+=$(LIB)(ffsox_clone.o)
ifeq (yes,$(ENABLE_LAME)) # {
OBJS+=$(LIB)(ffsox_lame.o)
endif # }
OBJS+=$(LIB)(ffsox_ar_init_ffi.o)
OBJS+=$(LIB)(ffsox_ar.o)
OBJS+=$(LIB)(ffsox_buf.o)
OBJS+=$(LIB)(ffsox_rep.o)
OBJS+=$(LIB)(ffsox_sox_reader.o)
ifeq (yes,$(ENABLE_REPLAYGAIN)) # {
OBJS+=$(LIB)(ffsox_replaygain.o)
endif # }
ifneq (mingw,$(OS))
CFLAGS+=-fPIC
endif
ifeq (on,$(DEBUG))
CFLAGS+=-g
CFLAGS+=-finstrument-functions
endif

#INCLS:=Makefile
INCLS+=ffsox.h
INCLS+=ffsox_sym.h

.PHONY: all
#all: hello
all: $(LIB)

.PHONY: clean
clean:
	rm -f hello.exe hello $(LIB)

.PHONY: install
install: $(INCLUDEDIR)/ffsox.h
install: $(INCLUDEDIR)/ffsox_rep.h
install: $(INCLUDEDIR)/ffsox_sym.h
install: $(LIBDIR)/libffsox.a
install: $(LIBDIR)/pkgconfig/libffsox.pc

hello: $(LIB)
$(LIB): $(OBJS)
$(OBJS): $(INCLS)

$(INCLUDEDIR)/% $(LIBDIR)/% $(BINDIR)/%: %
	mkdir -p $(@D)
	cp $< $(@D)

$(LIBDIR)/pkgconfig/libffsox.pc: $(LIBDIR)/libffsox.a
	rm -f $@
	mkdir -p $(@D)
	echo "GEN  $@"
	@echo 'prefix=$(PFX)' >> $@
	@echo 'exec_prefix=$${prefix}' >> $@
	@echo 'libdir=$${exec_prefix}/lib' >> $@
	@echo 'includedir=$${prefix}/include' >> $@
	@echo '' >> $@
	@echo 'Name: libffsox' >> $@
	@echo 'Description: Utility library' >> $@
	@echo 'Version: 0' >> $@
	@#echo 'URL: http://www.xyz.org/' >> $@
	@echo 'Libs: -L$${libdir} -lffsox' >> $@
	@echo 'Cflags: -I$${includedir}' >> $@

.PRECIOUS: ffsox_sym.h
FFSOX_SYM_DEPS:=
FFSOX_SYM_DEPS+=Makefile
ffsox_sym.h: $(FFSOX_SYM_DEPS)
	@echo "[GEN] $@"
	@rm -f $@
	@touch $@
	@echo "#ifndef __FFSOX_SYM_H__">>$@
	@echo "#define __FFSOX_SYM_H__">>$@
	@echo>>$@
	@echo "#include <pb.h>">>$@
	@echo>>$@
### include original headers
	@echo "#include <libavfilter/avfilter.h>">>$@
	@echo "#include <libavformat/avformat.h>">>$@
	@echo "#include <libavcodec/avcodec.h>">>$@
	@echo "#include <libswresample/swresample.h>">>$@
	@echo "#include <libavutil/avutil.h>">>$@
	@echo "#include <libavutil/avstring.h>">>$@
	@echo "#include <libavutil/opt.h>">>$@
	@echo "#include <sox.h>">>$@
ifeq (yes,$(ENABLE_LAME)) # {
	@echo "#include <lame/lame.h>">>$@
endif # }
ifeq (yes,$(ENABLE_MAGICK)) # {
	@echo "#include <wand/MagickWand.h>">>$@
endif # }
ifeq (yes,$(ENABLE_REPLAYGAIN)) # {
	@echo "#include <gain_analysis.h>">>$@
endif # }
ifeq (yes,$(ENABLE_DLGITEMURL)) # {
	@echo "#include <dlgitemurl.h>">>$@
endif # }
	@echo>>$@
	@echo "#endif // __FFSOX_SYM_H__">>$@

.PRECIOUS: ffsox_%.c
ffsox_%.c: symbols/%.h Makefile
	@echo "GEN [$@]"
	@rm -f $@
	@touch $@
	@echo "#define FFSOX_IMPL">>$@
	@echo "#include \"ffsox_sym.h\"">>$@
	@echo>>$@
	@echo "#define DECL(sym) typeof(sym) *__##sym;">>$@
	@echo "#include \"symbols/$*.h\"">>$@
	@echo "#undef DECL">>$@
	@echo>>$@
	@echo "pb_sym_t ffsox_$*_sym[]={">>$@
	@echo "#define DECL(sym) { #sym,&__##sym },">>$@
	@echo "#include \"symbols/$*.h\"">>$@
	@echo "#undef DECL">>$@
	@echo "  { NULL,NULL }">>$@
	@echo "};">>$@

.PRECIOUS: $(INCLUDEDIR)/symbols/%.h
$(INCLUDEDIR)/symbols/%.h: symbols/%.h
	mkdir -p $(@D)
	cp $< $(@D)
