##
 # Makefile
 # Copyright (C) 2010 - 2013 Peter Belkner <pbelkner@snafu.de>
 # 
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 # 
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 # 
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
include config.mak
include $(SRCDIR)/source.mak
include $(SRCDIR)/version.mak
vpath % $(SRCDIR)
#vpath %.c $(SRCDIR)
#vpath %.cpp $(SRCDIR)
#vpath %.asm $(SRCDIR)

BUILD_MSYS2=X
MINGW_LINK=on

ifneq (x,x$(BUILD_MSYS2)) # [
CL:='$(MSVC)/bin/cl' -nologo
else # ] [
CL:='$(MSVC)/bin/cl' -nologo
endif # ]
MS_LD='$(MSVC)/bin/link'

PLUGINS=/h/Programme/Winamp/Plugins
CC:=gcc
CFLAGS+=-Wall
#CFLAGS+=-Wextra
CFLAGS+=-Werror
#CFLAGS+=-Wno-error=deprecated-declarations
CFLAGS+=-O2
CPPFLAGS+=-D_WIN32_WINNT=0x0500
CPPFLAGS+=-DUNICODE
CPPFLAGS+=-D_UNICODE
CPPFLAGS+=-DUNICODE_INPUT_PLUGIN
ifeq (tiny,$(MODE)) # [
CPPFLAGS+=-DTINY
else # ] [
CPPFLAGS+=-DFULL
endif # ]
CPPFLAGS+=-DAVUTIL_VER=$(AVUTIL_VER)
CPPFLAGS+=-DSWRESAMPLE_VER=$(SWRESAMPLE_VER)
CPPFLAGS+=-DSWSCALE_VER=$(SWSCALE_VER)
CPPFLAGS+=-DPOSTPROC_VER=$(POSTPROC_VER)
CPPFLAGS+=-DAVCODEC_VER=$(AVCODEC_VER)
CPPFLAGS+=-DAVFORMAT_VER=$(AVFORMAT_VER)
CPPFLAGS+=-DAVFILTER_VER=$(AVFILTER_VER)
CPPFLAGS+=-DLIBSOX_VER=$(LIBSOX_VER)
CPPFLAGS+='-DVERSION="$(VERSION)"'
CPPFLAGS+='-I$(WASDK)'
CPPFLAGS+=-I$(LIBPB)/include
CPPFLAGS+=-I$(LIBFFSOX)/include
LDFLAGS+=-static-libgcc
#LDFLAGS+=-L$(HOME)/r128gain-2/mingw/lib

MS_LDFLAGS+=-nologo
MS_LDFLAGS+=-nodefaultlib
ifeq (on,$(MINGW_LINK)) # {
#LDLIBS+=-lffsox
#LDLIBS+=-lpb
LDLIBS+=-lavrt
LDLIBS+=-luxtheme
LDLIBS+=-lwinmm
else # } {
MS_LDLIBS+='$(MSVC)/lib/msvcrt.lib'
MS_LDLIBS+='$(MSSDK)/lib/winmm.lib'
MS_LDLIBS+='$(MSSDK)/lib/user32.lib'
MS_LDLIBS+='$(MSSDK)/lib/kernel32.lib'
#MS_LDLIBS+='$(MSSDK)/lib/avrt.lib'
endif # }

EXTLIBS:=$(LIBFFSOX)/lib/libffsox.a
EXTLIBS+=$(LIBPB)/lib/lib1770.a
EXTLIBS+=$(LIBPB)/lib/libpb.a
EXTLIBS+=$(LIBFFSOX)/bin/delayload/libavfilter-$(AVFILTER_VER).dll.a
EXTLIBS+=$(LIBFFSOX)/bin/delayload/libavformat-$(AVFORMAT_VER).dll.a
EXTLIBS+=$(LIBFFSOX)/bin/delayload/libavcodec-$(AVCODEC_VER).dll.a
EXTLIBS+=$(LIBFFSOX)/bin/delayload/libpostproc-$(POSTPROC_VER).dll.a
EXTLIBS+=$(LIBFFSOX)/bin/delayload/libswscale-$(SWSCALE_VER).dll.a
EXTLIBS+=$(LIBFFSOX)/bin/delayload/libswresample-$(SWRESAMPLE_VER).dll.a
EXTLIBS+=$(LIBFFSOX)/bin/delayload/libavutil-$(AVUTIL_VER).dll.a
EXTLIBS+=$(LIBPB)/bin/delayload/libsox-$(LIBSOX_VER).dll.a
EXTLIBS+=$(LIBPB)/bin/delayload/libdlgitemurl.dll.a

#MVCFLAGS+=-I$(LIBPB)/include
#MVCFLAGS+=-I$(LIBFFSOX)/include
#MVCFLAGS+='-I$(WASDK)'
MVCFLAGS+=-D_USING_V110_SDK71_
MVCFLAGS+='-I$(MSSDK)/Include'
MVCFLAGS+='-I$(MSVC)/include'
MVCFLAGS+='-I$(WASDK)'
#MVCFLAGS+=-I$(LIBPB)/include
#MVCFLAGS+=-I$(LIBFFSOX)/include

INCLS=$(filter %.h,$(IN_FFSOX_SRCS))
SRCS=$(filter %.c,$(IN_FFSOX_SRCS))
OBJS+=$(patsubst %.c,%.o,$(SRCS))

ifneq (x,x$(__XXX__)) # [
OBJS:=
OBJS+=plugin.o
#OBJS+=basenamew.o
#OBJS+=basenamea.o
OBJS+=cache.o
OBJS+=decoder.o
OBJS+=video.o
OBJS+=video_filter.o
OBJS+=audio.o
OBJS+=screen.o
OBJS+=samples.o
OBJS+=queue.o
OBJS+=list.o
OBJS+=track.o
OBJS+=sox.o
OBJS+=sox_writer.o
OBJS+=prefs.o
OBJS+=prefs_conv.o
OBJS+=prefs_conv_audio.o
OBJS+=prefs_conv_general.o
OBJS+=prefs_yasapi.o
OBJS+=prefs_audio.o
OBJS+=prefs_video.o
OBJS+=prefs_adapt.o
OBJS+=prefs_help.o
OBJS+=prefs_general.o
OBJS+=prefs_combo.o
OBJS+=prefs_slider.o
OBJS+=prefs_check.o
OBJS+=prefs_tabs.o
OBJS+=prefs_enablethemedialogtexture.o
OBJS+=about.o
OBJS+=timer.o
OBJS+=wbuf.o
OBJS+=buf.o
OBJS+=ffsox.o
OBJS+=vout.o
endif # ]

LIB:=libplugin.a
LIB_OBJS:=$(patsubst %.o,$(LIB)(%.o),$(OBJS))

#INCLS+=resource.h
INCLS+=yasapi_nt_api.h
INCLS+=$(LIBFFSOX)/include/ffsox.h
INCLS+=$(LIBPB)/include/pb.h

.PHONY: all install clean
all: in_ffsox.dll
install: $(BINDIR)/in_ffsox.dll
clean:
	rm -f *.7z *.dll *.a *.o
in_ffsox.dll: main.o resource.o $(LIB) $(LIBDI) $(EXTLIBS)
ifeq (on,$(MINGW_LINK)) # {
	$(CC) -shared -mwindows $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)
else # } {
	$(MS_LD) $(MS_LDFLAGS) -dll -out:$@ $(patsubst %.def,-def:%.def,$^) $(MS_LDLIBS)
endif # }
main.o $(LIB_OBJS): $(INCLS) $(SRCDIR)/version.mak
ifeq (x,x$(BUILD_MSYS2)) # [
$(BINDIR)/%: %
	cp $< $(@D)
endif # ]
resource.o: resource.rc resource.h manifest.xml $(SRCDIR)/version.mak
	windres $< $@
RESOURCE_FILTER+=-e 's/\(^\s\+FILEVERSION\s\+\)\(0,0,0,0\)/\1$(FILE_VER)/g'
RESOURCE_FILTER+=-e 's/\(^\s\+PRODUCTVERSION\s\+\)\(0,0,0,0\)/\12,0,0,0/g'
resource.rc: $(SRCDIR)/resource/resource.rc
	sed $(RESOURCE_FILTER) $< >$@
resource.h: $(SRCDIR)/resource/resource.h
	cp $< .
manifest.xml: $(SRCDIR)/resource/manifest.xml
	cp $< .
$(LIBDI)(%.o): %.asm
	yasm $(CPPFLAGS) -P "config.asm" -a x86 -f win32 --prefix=_ -o $*.o $<
	$(AR) rv $(LIBDI) $*.o
	rm -f $*.o
COMPILE_VOUT=MSCPP
ifneq (x,x$(COMPILE_VOUT)) # [
.INTERMEDIATE: vout.o
vout.o: vout.c
	$(CL) -Zl -c $(MVCFLAGS) -Tp $< -Fo$@
endif # ]
$(LIB): $(LIB_OBJS)
$(LIBDI): $(LIBDI_OBJS)
