#!/usr/bin/make -f

DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed

include /usr/share/dpkg/pkg-info.mk
include /usr/share/dpkg/architecture.mk

pluginpackages += access-extra
pluginpackages += base
pluginpackages += fluidsynth
pluginpackages += jack
pluginpackages += notify
pluginpackages += qt
pluginpackages += sdl
pluginpackages += skins2
pluginpackages += svg
pluginpackages += video-output
pluginpackages += video-splitter
pluginpackages += visualization
pluginpackages += zvbi

ifneq (,$(filter debug,$(DEB_BUILD_OPTIONS)))
confflags += --enable-debug
endif

# configure flags
confflags += \
	--config-cache \
	--disable-update-check \
	--enable-fast-install \
	--docdir=/usr/share/doc/vlc-data \
	--with-binary-version=$(DEB_VERSION) \
	$(NULL)
# configure features
confflags += \
	--enable-a52 \
	--enable-aa \
	--enable-bluray \
	--enable-bonjour \
	--enable-caca \
	--enable-chromaprint \
	--enable-dbus \
	--enable-dca \
	--enable-directfb \
	--enable-dvbpsi \
	--enable-dvdnav \
	--enable-faad \
	--enable-flac \
	--enable-fluidsynth \
	--enable-freerdp \
	--enable-freetype \
	--enable-fribidi \
	--enable-gles1 \
	--enable-gles2 \
	--enable-gnutls \
	--enable-jack \
	--enable-kate \
	--enable-libass \
	--enable-libmpeg2 \
	--enable-libxml2 \
	--enable-lirc \
	--enable-live555 \
	--enable-mad \
	--enable-mkv \
	--enable-mod \
	--enable-mpc \
	--enable-mtp \
	--enable-mux_ogg \
	--enable-ncurses \
	--enable-notify \
	--enable-ogg \
	--enable-opus \
	--enable-pulse \
	--enable-qt \
	--enable-realrtsp \
	--enable-samplerate \
	--enable-sdl \
	--enable-sdl-image \
	--enable-sftp \
	--enable-shine \
	--enable-shout \
	--enable-skins2 \
	--enable-sndio \
	--enable-speex \
	--enable-svg \
	--enable-svgdec \
	--enable-taglib \
	--enable-theora \
	--enable-twolame \
	--enable-upnp \
	--enable-vcdx \
	--enable-vdpau \
	--enable-vnc \
	--enable-vorbis \
	--enable-x264 \
	--enable-x265 \
	--enable-zvbi \
	--with-kde-solid=/usr/share/solid/actions/ \
	$(NULL)
# Reasons for disabling features:
# decklink: not in Debian
# dxva2: Windows only
# fdkaac: in Debian non-free
# gnomevfs: poorly maintained
# goom: not in Debian
# gst-decode: not needed when having libavcodec
# libtar: security issue (#737534)
# mfx: currently not supported on Linux
# opencv: developer plugin not required by end users
# projectm: broken
# schroedinger: removed from Debian (#845037)
# telx: incompatible with zvbi
# vpx: not needed when having libavcodec
# vsxu: not in Debian
# wasapi: Windows only
confflags += \
	--disable-decklink \
	--disable-dxva2 \
	--disable-fdkaac \
	--disable-gnomevfs \
	--disable-goom \
	--disable-gst-decode \
	--disable-libtar \
	--disable-mfx \
	--disable-opencv \
	--disable-projectm \
	--disable-schroedinger \
	--disable-telx \
	--disable-vpx \
	--disable-vsxu \
	--disable-wasapi \
	$(NULL)

# Linux specific flags
ifeq ($(DEB_HOST_ARCH_OS),linux)
# omxil should be enabled on all systems, but libomxil-bellagio does
# not build on kfreebsd and hurd (currently).
# V4L2 is disabled on kFreeBSD due to a build failure.
confflags += \
	--enable-alsa \
	--enable-atmo \
	--enable-dc1394 \
	--enable-dv1394 \
	--enable-linsys \
	--enable-omxil \
	--enable-udev \
	--enable-v4l2 \
	$(NULL)
else
confflags += \
	--disable-alsa \
	--disable-atmo \
	--disable-dc1394 \
	--disable-dv1394 \
	--disable-linsys \
	--disable-omxil \
	--disable-udev \
	--disable-v4l2 \
	$(NULL)
removeplugins += \
	alsa \
	atmo \
	dc1394 \
	dtv \
	dv1394 \
	dvb \
	fb \
	linsys \
	omxil \
	udev \
	v4l2 \
	$(NULL)
endif

# Linux and kFreeBSD specific flags (disabled on Hurd)
ifeq (,$(filter-out linux kfreebsd,$(DEB_HOST_ARCH_OS)))
confflags += --enable-libva --enable-vcd --enable-smbclient
pluginpackages += samba
else
confflags += --disable-libva --disable-vcd --disable-smbclient
removeplugins += cdda libva smbclient vcd
endif

# kFreeBSD specific flags
ifeq (,$(filter-out kfreebsd,$(DEB_HOST_ARCH_OS)))
confflags += --enable-oss
else
# Note: Use ALSA on Linux instead of OSS.
#       Ubuntu has disabled OSS support in their Linux kernel.
confflags += --disable-oss
removeplugins += oss
endif

# Linux amd64 and i386 specific flags
ifeq (,$(filter-out amd64 i386,$(DEB_HOST_ARCH)))
confflags += --enable-crystalhd
else
confflags += --disable-crystalhd
removeplugins += crystalhd
endif

ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
confflags += \
	--disable-optimizations \
	--disable-mmx \
	--disable-sse \
	--disable-altivec \
	--disable-neon \
	$(NULL)
removeplugins += mmx sse2 altivec neon
else
# amd64 and i386 specific optimizations
ifeq (,$(filter-out amd64 i386,$(DEB_HOST_ARCH_CPU)))
confflags += --enable-mmx --enable-sse
else
confflags += --disable-mmx --disable-sse
removeplugins += mmx sse2
endif

# ARM specific optimizations
ifeq (,$(filter-out armhf,$(DEB_HOST_ARCH_CPU)))
confflags += --enable-neon
else
confflags += --disable-neon
removeplugins += neon
endif

# PowerPC specific optimizations (excluding powerpcspe)
ifeq (,$(filter-out powerpc,$(DEB_HOST_ARCH_CPU))$(filter powerpcspe,$(DEB_HOST_ARCH)))
confflags += --enable-altivec
else
confflags += --disable-altivec
removeplugins += altivec
endif

# PowerPCSPE specific optimizations
ifeq (,$(filter-out powerpcspe,$(DEB_HOST_ARCH)))
DEB_CFLAGS_MAINT_APPEND += -mtune=8548
DEB_CXXFLAGS_MAINT_APPEND += -mtune=8548
endif
endif

# configuration for embedded ffmpeg
ffmpegprefix = $(CURDIR)/ffmpeg/install
ffmpegbuild = $(CURDIR)/ffmpeg/build

ffmpegflags = \
	--prefix=$(ffmpegprefix) \
	--enable-pic \
	--disable-stripping \
	--enable-static \
	--disable-shared

# mostly based on contrib/src/ffmpeg/rules.mak
ffmpegflags += \
	--disable-doc \
	--disable-avdevice \
	--disable-devices \
	--disable-avfilter \
	--disable-avresample \
	--disable-swresample \
	--disable-programs \
	--disable-filters \
	--disable-bsfs \
	--disable-protocol=concat

# from ffmpeg 7:2.8.6-1 debian/rules and contrib/src/ffmpeg/rules.mak
ffmpegflags += \
	--enable-gpl \
	--enable-gnutls \
	--disable-libass \
	--enable-libbluray \
	--disable-libbs2b \
	--disable-libcaca \
	--disable-libcdio \
	--disable-libflite \
	--disable-libfontconfig \
	--disable-libfreetype \
	--disable-libfribidi \
	--disable-libopenjpeg \
	--disable-libschroedinger \
	--enable-libgme \
	--enable-libgsm \
	--enable-libmodplug \
	--enable-libmp3lame \
	--enable-libopus \
	--enable-librtmp \
	--enable-libshine \
	--enable-libsnappy \
	--enable-libsoxr \
	--enable-libspeex \
	--enable-libssh \
	--enable-libtheora \
	--enable-libtwolame \
	--enable-libvorbis \
	--enable-libvpx \
	--enable-libwavpack \
	--enable-libwebp \
	--enable-libx265 \
	--enable-libxvid \
	--enable-libzvbi \
	--disable-openal \
	--disable-opengl \
	--disable-x11grab

# Disable altivec optimizations on powerpc, because they are not always
# available on this architecture.
ifeq ($(DEB_HOST_ARCH),powerpc)
ffmpegflags += --disable-altivec
endif

# Disable assembly optimizations on x32, because they don't work (yet).
ifneq (,$(filter $(DEB_HOST_ARCH),x32))
ffmpegflags += --disable-asm
endif

# Disable optimizations on mips(el) and some on mips64(el), because they are not
# always available on these architectures.
ifneq (,$(filter $(DEB_HOST_ARCH),mips mipsel mips64 mips64el))
ffmpegflags += --disable-mipsdspr1 \
	--disable-mipsdspr2 \
	--disable-loongson3
endif
ifneq (,$(filter $(DEB_HOST_ARCH),mips mipsel))
ffmpegflags += --disable-mipsfpu
endif

# merge ffmpeg based plugins to reduce installation size
confflags += --enable-merge-ffmpeg

export DEB_CFLAGS_MAINT_APPEND
export DEB_CXXFLAGS_MAINT_APPEND
export DEB_LDFLAGS_MAINT_APPEND
export removeplugins

%:
	dh $@

override_dh_auto_clean:
	rm -rf $(ffmpegprefix) $(ffmpegbuild)
	dh_auto_clean

override_dh_autoreconf:
	dh_autoreconf --as-needed

override_dh_auto_configure:
	mkdir -p $(ffmpegbuild) $(ffmpegprefix)
	cd $(ffmpegbuild) && \
		$(CURDIR)/ffmpeg-2-8-13/configure $(ffmpegflags)
	dh_auto_build --sourcedirectory $(ffmpegbuild) -- V=1
	$(MAKE) -C $(ffmpegbuild) install-libs install-headers V=1
	PKG_CONFIG_PATH=$(ffmpegprefix)/lib/pkgconfig \
		dh_auto_configure -- $(confflags)

override_dh_auto_build:
	dh_auto_build
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
	# Build zsh completion
	BUILDDIR=$(CURDIR) \
	cd extras/analyser && ./zsh_completion.sh
endif

override_dh_auto_test:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
	# Check which plugins were built and whether they load properly.
	@if test $$( id -u ) -eq 0 ; then \
	   echo "Not runing the test as you are compiling as root"; \
	   echo "Use 'dpkg-buildpackage -rfakeroot' rather than 'fakeroot dpkg-buildpackage'"; \
	else \
	   command="./vlc -vvv --ignore-config --no-plugins-cache --list --no-color"; \
	   echo "$${command}"; $${command} ; \
	fi
endif
endif

override_dh_install:
	# Remove plugin cache
	find debian/tmp/usr/lib -name plugins.dat -delete
	# Clean up libtool crap
	find debian/tmp -name '*.la' -delete
	# Remove useless stuff
	ln -sf /usr/share/fonts/truetype/freefont/FreeSans.ttf debian/tmp/usr/share/vlc/skins2/fonts/FreeSans.ttf
	ln -sf /usr/share/fonts/truetype/freefont/FreeMonoBold.ttf debian/tmp/usr/share/vlc/skins2/fonts/FreeSansBold.ttf
	rm -f debian/tmp/usr/share/man/man1/vlc-config.1
	# Remove additional license files
	find debian/tmp -name LICENSE -delete
	# Remove examples installed in -dev packages
	rm -rf debian/tmp/usr/share/doc/vlc-data/libvlc
	# Contains only a 404 link
	find debian/tmp -name bugreport-howto.txt -delete
	# Remove old BluRay plugin
	find debian/tmp -name libaccess_bd_plugin.so -delete
	# Install
	dh_install --fail-missing
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
	# Install zsh completion
	dh_install -pvlc-bin extras/analyser/_vlc usr/share/zsh/vendor-completions
endif
	$(if $(shell dpkg-vendor --is Ubuntu && echo true),dh_install -pvlc-bin debian/source_vlc.py usr/share/apport/package-hooks/)

override_dh_installchangelogs:
	dh_installchangelogs NEWS $(pluginpackages:%=-Nvlc-plugin-%)

override_dh_installdocs:
	dh_installdocs $(pluginpackages:%=-Nvlc-plugin-%)
	dh_installdocs --link-doc=libvlccore8 --remaining-packages

override_dh_makeshlibs:
	dh_makeshlibs -Xlibvlc_vdpau

override_dh_bugfiles:
	dh_bugfiles -A

override_dh_installdeb:
	sed 's/#DEB_HOST_MULTIARCH#/${DEB_HOST_MULTIARCH}/g' \
		debian/libvlc-bin.postinst.in > debian/libvlc-bin.postinst
	sed 's/#DEB_HOST_MULTIARCH#/${DEB_HOST_MULTIARCH}/g' \
		debian/libvlc-bin.postrm.in > debian/libvlc-bin.postrm
	echo 'interest-noawait /usr/lib/${DEB_HOST_MULTIARCH}/vlc/plugins' > debian/libvlc-bin.triggers
	dh_installdeb
