include config.mak
include $(SRCDIR)/source.mak
vpath % $(SRCDIR)

#DEBUG=on

CC:=gcc
CFLAGS+=-Wall
#CFLAGS+=-Wextra
CFLAGS+=-Werror

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

LIB:=libffsox.a

##FFSOXINCLS:=Makefile
#FFSOXINCLS+=ffsox.h
#FFSOXINCLS+=ffsox_sym.h
INCLS+=$(filter %.h,$(LIBFFSOX_SRCS))
ifneq (,$(ALTPFX)) # [
INCLS+=$(ALTPFX)/include/pb.h
INCLS+=$(ALTPFX)/include/bs1770.h
endif # ]
ifneq (,$(LIBPB)) # [
INCLS+=$(LIBPB)/include/pb.h
endif # ]
ifneq (,$(LIB1770)) # [
INCLS+=$(LIB1770)/include/bs1770.h
endif # ]
SRCS+=$(filter %.c,$(LIBFFSOX_SRCS))

OBJS+=$(patsubst %.c,$(LIB)(%.o),$(SRCS))
ifeq (yes,$(ENABLE_LAME)) # [
OBJS+=$(LIB)(ffsox_lame.o)
endif # ]
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

.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 -p $< $(@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 -p $< $(@D)
