__deps__ := A52DEC BZIP2 LIBVPX FFMPEG FONTCONFIG FREETYPE LAME LIBASS LIBDCA \
    LIBDVDREAD LIBDVDNAV LIBICONV LIBOGG LIBSAMPLERATE LIBTHEORA LIBVORBIS \
    LIBXML2 PTHREADW32 X264 X265 ZLIB LIBBLURAY FDKAAC LIBMFX LIBGNURX JANSSON

$(eval $(call import.MODULE.defs,LIBHB,libhb,$(__deps__)))
$(eval $(call import.GCC,LIBHB))

###############################################################################

LIBHB.src/   = $(SRC/)libhb/
LIBHB.build/ = $(BUILD/)libhb/

LIBHB.m4.in  = $(wildcard $(LIBHB.src/)*.m4)
LIBHB.m4.out = $(patsubst $(LIBHB.src/)%.m4,$(LIBHB.build/)%,$(LIBHB.m4.in))

LIBHB.c   = $(wildcard $(LIBHB.src/)*.c)
LIBHB.c.o = $(patsubst $(SRC/)%.c,$(BUILD/)%.o,$(LIBHB.c))
LIBHB.m.o = $(patsubst $(SRC/)%.m,$(BUILD/)%.o,$(LIBHB.m))
LIBHB.d   = $(LIBHB.m4.out) $(LIBHB.h.out) \
    $(foreach n,$(LIBHB.prerequisites),$($n.INSTALL.target) )

LIBHB.h.in  = $(wildcard $(LIBHB.src/)*.h)
LIBHB.h.in += $(wildcard $(LIBHB.src/)extras/*.h)
LIBHB.h.out = $(patsubst $(SRC/)%,$(BUILD/)%,$(LIBHB.h.in))

###############################################################################

LIBHB.a = $(LIBHB.build/)$(call TARGET.archive,handbrake)

###############################################################################

LIBHB.out += $(LIBHB.m4.out)
LIBHB.out += $(LIBHB.c.o)
LIBHB.out += $(LIBHB.m.o)
LIBHB.out += $(LIBHB.h.out)
LIBHB.out += $(LIBHB.a)

###############################################################################

ifeq (1,$(FEATURE.hwd))
LIBHB.GCC.D += USE_HWD
endif

ifeq (1,$(FEATURE.libav_aac))
LIBHB.GCC.D += USE_LIBAV_AAC
endif
LIBHB.GCC.D += __LIBHB__ USE_PTHREAD
LIBHB.GCC.I += $(LIBHB.build/) $(CONTRIB.build/)include

ifneq (,$(filter $(BUILD.system),darwin cygwin mingw))
LIBHB.GCC.I += $(CONTRIB.build/)include/libxml2
else
LIBHB.GCC.I += /usr/include/libxml2
endif

ifeq ($(BUILD.system),cygwin)
    LIBHB.GCC.D += SYS_CYGWIN
else ifeq ($(BUILD.system),darwin)
    LIBHB.GCC.D += SYS_DARWIN
    LIBHB.c += $(wildcard $(LIBHB.src/)platform/macosx/*.c)
    LIBHB.m += $(wildcard $(LIBHB.src/)platform/macosx/*.m)
else ifeq ($(BUILD.system),linux)
    LIBHB.GCC.D += SYS_LINUX _LARGEFILE_SOURCE _FILE_OFFSET_BITS=64
else ifeq ($(BUILD.system),mingw)
    LIBHB.GCC.D += SYS_MINGW
ifneq ($(HAS.pthread),1)
    LIBHB.GCC.D += PTW32_STATIC_LIB
endif
	LIBHB.GCC.args.extra.dylib++ += -Wl,--enable-auto-import -static
else ifeq ($(BUILD.system),solaris)
    LIBHB.GCC.D += SYS_SunOS _LARGEFILE_SOURCE _FILE_OFFSET_BITS=64 _POSIX_C_SOURCE=200112L __EXTENSIONS__
else
    LIBHB.platform.D = SYS_UNKNOWN
endif

ifeq (1,$(FEATURE.qsv))    
    LIBHB.GCC.D += USE_QSV HAVE_THREADS=1
endif  

ifeq (1,$(FEATURE.x265))
    LIBHB.GCC.D += USE_X265
endif  

ifeq (1,$(COMPAT.strtok_r))
    LIBHB.GCC.D += HB_NEED_STRTOK_R
endif

## required for <libdvdread/*.h>
ifneq (,$(filter $(BUILD.arch),ppc ppc64))
	LIBHB.GCC.D += WORDS_BIGENDIAN
endif

###############################################################################

## when defined this gives us the subdir name, or flavor of asm implementation
ifneq (disabled,$(FEATURE.asm))

LIBHB.yasm.src/   = $(LIBHB.src/)$(FEATURE.asm)/
LIBHB.yasm.build/ = $(LIBHB.build/)$(FEATURE.asm)/
LIBHB.yasm.asm    = $(LIBHB.yasm.src/)deinterlace-a.asm
LIBHB.yasm.o      = $(LIBHB.yasm.asm:$(LIBHB.yasm.src/)%.asm=$(LIBHB.yasm.build/)%.o)
LIBHB.yasm.d      = $(wildcard $(LIBHB.yasmsrc/)*.h)

LIBHB.YASM.I     = $(LIBHB.yasm.src/)
LIBHB.YASM.ASM_O = $(strip $(YASM.exe) \
    -f $(LIBHB.YASM.f) \
    -m $(LIBHB.YASM.m) \
    $(LIBHB.YASM.D:%=-D%) \
    $(LIBHB.YASM.I:%=-I%) \
    -o $(1) $(2))

LIBHB.out += $(LIBHB.yasm.o)

endif

###############################################################################

ifeq (1-mingw,$(BUILD.cross)-$(BUILD.system))

LIBHB.dll = $(LIBHB.build/)hb.dll
LIBHB.lib = $(LIBHB.build/)hb.lib

LIBHB.dll.libs = $(foreach n, \
        ass avcodec avformat avutil avresample dvdnav dvdread fontconfig \
        freetype mp3lame ogg samplerate swscale vpx theora vorbis vorbisenc \
        x264 xml2 bluray jansson, \
        $(CONTRIB.build/)lib/lib$(n).a )

ifeq (1,$(FEATURE.fdk_aac))
LIBHB.dll.libs += $(CONTRIB.build/)lib/libfdk-aac.a
endif

ifeq (1,$(FEATURE.qsv))
LIBHB.dll.libs += $(CONTRIB.build/)lib/libmfx.a
endif

ifeq (1,$(FEATURE.x265))
LIBHB.dll.libs += $(CONTRIB.build/)lib/libx265.a
endif

ifneq ($(HAS.iconv),1)
LIBHB.dll.libs += $(CONTRIB.build/)lib/libiconv.a
else
    LIBHB.GCC.l += iconv
endif

ifneq ($(HAS.regex),1)
LIBHB.dll.libs += $(CONTRIB.build/)lib/libregex.a
else
    LIBHB.GCC.l += regex
endif

ifeq (1,$(FRIBIDI.enabled))
    LIBHB.dll.libs += $(CONTRIB.build/)lib/libfribidi.a
else
	LIBHB.GCC.l += fribidi
endif

ifeq ($(HAS.pthread),1)
    LIBHB.GCC.l += pthread
else ifneq ($(HAS.pthreadGC2),1)
LIBHB.dll.libs += $(CONTRIB.build/)lib/libpthreadGC2.a
else
    LIBHB.GCC.l += pthreadGC2
endif

ifneq ($(HAS.bz2),1)
LIBHB.dll.libs += $(CONTRIB.build/)lib/libbz2.a
else
    LIBHB.GCC.l += bz2
endif

ifneq ($(HAS.libz),1)
LIBHB.dll.libs += $(CONTRIB.build/)lib/libz.a
else
    LIBHB.GCC.l += z
endif

LIBHB.GCC.args.extra.dylib++ += -Wl,--out-implib,$(LIBHB.lib)
LIBHB.GCC.l += ws2_32 uuid ole32
ifeq ($(HAS.dlfcn),1)
    LIBHB.GCC.l += dl
endif
LIBHB.out += $(LIBHB.dll) $(LIBHB.lib)

endif

###############################################################################

BUILD.out += $(LIBHB.out)