

# NOTE: This file is generated by m4! Make sure you're editing the .m4 version,
# not the generated version!

FFMPEG_VERSION_MAJOR=8
FFMPEG_VERSION_MINREV=0
FFMPEG_VERSION=$(FFMPEG_VERSION_MAJOR).$(FFMPEG_VERSION_MINREV)
LIBAVJS_VERSION_SUFFIX=
LIBAVJS_VERSION_BASE=6.8
LIBAVJS_VERSION=$(LIBAVJS_VERSION_BASE).$(FFMPEG_VERSION)$(LIBAVJS_VERSION_SUFFIX)
LIBAVJS_VERSION_SHORT=$(LIBAVJS_VERSION_BASE).$(FFMPEG_VERSION_MAJOR)
EMCC=emcc
MINIFIER=node_modules/.bin/terser
OPTFLAGS=-Oz
EMFTFLAGS=-Lbuild/inst/base/lib -lemfiberthreads
THRFLAGS=-pthread $(EMFTFLAGS)
ES6FLAGS=-sEXPORT_ES6=1 -sUSE_ES6_IMPORT_META=1
EFLAGS=\
	`tools/memory-init-file-emcc.sh` \
	--pre-js src/pre.js \
	--extern-post-js src/extern-post.js \
	-s "EXPORT_NAME='LibAVFactory'" \
	-s MODULARIZE=1 \
	-s STACK_SIZE=1048576 \
	-s ASYNCIFY \
	-s "ASYNCIFY_IMPORTS=['libavjs_wait_reader', 'jsfetch_open_js', 'jsfetch_read_js', 'jsfetch_seek_js']" \
	-s INITIAL_MEMORY=25165824 \
	-s ALLOW_MEMORY_GROWTH=1 \
	-s WASM_BIGINT=0

EFLAGS_NTHR=\
	-s "EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'HEAPU8', 'HEAP8', 'HEAPU16', 'HEAP16', 'HEAPU32', 'HEAP32', 'HEAPF32']"
EFLAGS_THR=\
	-s "EXPORTED_RUNTIME_METHODS=['ccall', 'cwrap', 'HEAPU8', 'HEAP8', 'HEAPU16', 'HEAP16', 'HEAPU32', 'HEAP32', 'HEAPF32', 'PThread']"

# For debugging:
#EFLAGS+=\
#	-s ASSERTIONS=2 \
#	-s STACK_OVERFLOW_CHECK=2 \
#	-s MALLOC=emmalloc-memvalidate \
#	-s SAFE_HEAP=1

all: build-default

include mk/*.mk


build-%: \
	dist/libav-$(LIBAVJS_VERSION)-%.js \
	dist/libav-%.js \
	dist/libav-$(LIBAVJS_VERSION)-%.mjs \
	dist/libav-%.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.js \
	dist/libav-%.dbg.js \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.mjs \
	dist/libav-%.dbg.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.asm.js \
	dist/libav-$(LIBAVJS_VERSION)-%.asm.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.asm.js \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.asm.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.wasm.js \
	dist/libav-$(LIBAVJS_VERSION)-%.wasm.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.wasm.js \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.wasm.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.thr.js \
	dist/libav-$(LIBAVJS_VERSION)-%.thr.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.thr.js \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.thr.mjs \
	dist/libav.types.d.ts
	true

# Generic rule for frontend builds
# Use: febuildrule(debug infix, target extension, minifier)



dist/libav-$(LIBAVJS_VERSION)-%.js: build/frontend-$(LIBAVJS_VERSION)-%.js \
	node_modules/.bin/terser
	mkdir -p dist
	sed "s/@DBG//g" < $< | $(MINIFIER) > $(@)

dist/libav-%.js: dist/libav-$(LIBAVJS_VERSION)-%.js
	cp $(<) $(@)


dist/libav-$(LIBAVJS_VERSION)-%.mjs: build/frontend-$(LIBAVJS_VERSION)-%.mjs \
	node_modules/.bin/terser
	mkdir -p dist
	sed "s/@DBG//g" < $< | $(MINIFIER) > $(@)

dist/libav-%.mjs: dist/libav-$(LIBAVJS_VERSION)-%.mjs
	cp $(<) $(@)


dist/libav-$(LIBAVJS_VERSION)-%.dbg.js: build/frontend-$(LIBAVJS_VERSION)-%.js \
	node_modules/.bin/terser
	mkdir -p dist
	sed "s/@DBG/.dbg/g" < $< | cat > $(@)

dist/libav-%.dbg.js: dist/libav-$(LIBAVJS_VERSION)-%.dbg.js
	cp $(<) $(@)


dist/libav-$(LIBAVJS_VERSION)-%.dbg.mjs: build/frontend-$(LIBAVJS_VERSION)-%.mjs \
	node_modules/.bin/terser
	mkdir -p dist
	sed "s/@DBG/.dbg/g" < $< | cat > $(@)

dist/libav-%.dbg.mjs: dist/libav-$(LIBAVJS_VERSION)-%.dbg.mjs
	cp $(<) $(@)


dist/libav.types.d.ts: build/libav.types.d.ts
	mkdir -p dist
	cp $< $@

# General build rule for any target
# Use: buildrule(target file name, debug infix, target inst name, extra link flags, target file suffix)


# asm.js version

dist/libav-$(LIBAVJS_VERSION)-%.asm.js: build/ffmpeg-$(FFMPEG_VERSION)/build-base-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/base/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_NTHR) $(EMFTFLAGS) -s WASM=0 \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).asm.js
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).asm.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).asm.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/asm/g ; \
		s/@DBG//g ; \
		s/@JS/js/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).asm.js | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).asm.js
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d


dist/libav-$(LIBAVJS_VERSION)-%.asm.mjs: build/ffmpeg-$(FFMPEG_VERSION)/build-base-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/base/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_NTHR) $(EMFTFLAGS) $(ES6FLAGS) -s WASM=0 \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).asm.mjs
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).asm.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).asm.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/asm/g ; \
		s/@DBG//g ; \
		s/@JS/mjs/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).asm.mjs | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).asm.mjs
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d


dist/libav-$(LIBAVJS_VERSION)-%.dbg.asm.js: build/ffmpeg-$(FFMPEG_VERSION)/build-base-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/base/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_NTHR) $(EMFTFLAGS) -g2 -s WASM=0 \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.asm.js
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.asm.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.asm.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/asm/g ; \
		s/@DBG/dbg./g ; \
		s/@JS/js/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.asm.js | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.asm.js
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d


dist/libav-$(LIBAVJS_VERSION)-%.dbg.asm.mjs: build/ffmpeg-$(FFMPEG_VERSION)/build-base-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/base/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_NTHR) $(EMFTFLAGS) -g2 $(ES6FLAGS) -s WASM=0 \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.asm.mjs
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.asm.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.asm.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/asm/g ; \
		s/@DBG/dbg./g ; \
		s/@JS/mjs/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.asm.mjs | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.asm.mjs
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d

# wasm version with no added features

dist/libav-$(LIBAVJS_VERSION)-%.wasm.js: build/ffmpeg-$(FFMPEG_VERSION)/build-base-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/base/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_NTHR) $(EMFTFLAGS) \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).wasm.js
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).wasm.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).wasm.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/wasm/g ; \
		s/@DBG//g ; \
		s/@JS/js/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).wasm.js | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).wasm.js
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d


dist/libav-$(LIBAVJS_VERSION)-%.wasm.mjs: build/ffmpeg-$(FFMPEG_VERSION)/build-base-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/base/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_NTHR) $(EMFTFLAGS) $(ES6FLAGS) \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).wasm.mjs
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).wasm.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).wasm.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/wasm/g ; \
		s/@DBG//g ; \
		s/@JS/mjs/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).wasm.mjs | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).wasm.mjs
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d


dist/libav-$(LIBAVJS_VERSION)-%.dbg.wasm.js: build/ffmpeg-$(FFMPEG_VERSION)/build-base-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/base/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_NTHR) $(EMFTFLAGS) -gsource-map \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.wasm.js
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.wasm.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.wasm.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/wasm/g ; \
		s/@DBG/dbg./g ; \
		s/@JS/js/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.wasm.js | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.wasm.js
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d


dist/libav-$(LIBAVJS_VERSION)-%.dbg.wasm.mjs: build/ffmpeg-$(FFMPEG_VERSION)/build-base-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-base-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/base/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_NTHR) $(EMFTFLAGS) -gsource-map $(ES6FLAGS) \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.wasm.mjs
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.wasm.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.wasm.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/wasm/g ; \
		s/@DBG/dbg./g ; \
		s/@JS/mjs/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.wasm.mjs | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.wasm.mjs
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d

# wasm + threads

dist/libav-$(LIBAVJS_VERSION)-%.thr.js: build/ffmpeg-$(FFMPEG_VERSION)/build-thr-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/thr/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_THR) $(THRFLAGS) -sPTHREAD_POOL_SIZE=navigator.hardwareConcurrency \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).thr.js
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).thr.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).thr.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/thr/g ; \
		s/@DBG//g ; \
		s/@JS/js/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).thr.js | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).thr.js
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d


dist/libav-$(LIBAVJS_VERSION)-%.thr.mjs: build/ffmpeg-$(FFMPEG_VERSION)/build-thr-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/thr/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_THR) $(ES6FLAGS) $(THRFLAGS) -sPTHREAD_POOL_SIZE=navigator.hardwareConcurrency \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).thr.mjs
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).thr.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).thr.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/thr/g ; \
		s/@DBG//g ; \
		s/@JS/mjs/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).thr.mjs | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).thr.mjs
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d


dist/libav-$(LIBAVJS_VERSION)-%.dbg.thr.js: build/ffmpeg-$(FFMPEG_VERSION)/build-thr-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/thr/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_THR) -gsource-map $(THRFLAGS) -sPTHREAD_POOL_SIZE=navigator.hardwareConcurrency \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.thr.js
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.thr.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.thr.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/thr/g ; \
		s/@DBG/dbg./g ; \
		s/@JS/js/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.thr.js | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.thr.js
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d


dist/libav-$(LIBAVJS_VERSION)-%.dbg.thr.mjs: build/ffmpeg-$(FFMPEG_VERSION)/build-thr-%/libavformat/libavformat.a \
	build/exports-%.json src/pre.js build/post-%.js src/extern-post.js \
        src/bindings.c src/b-*.c
	mkdir -p $(@).d
	$(EMCC) $(OPTFLAGS) $(EFLAGS) \
		--post-js build/post-$(*).js \
		-s "EXPORTED_FUNCTIONS=@build/exports-$(*).json" \
		-Ibuild/ffmpeg-$(FFMPEG_VERSION) -Ibuild/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*) \
		`test ! -e configs/configs/$(*)/link-flags.txt || cat configs/configs/$(*)/link-flags.txt` \
		src/bindings.c \
		`grep LIBAVJS_WITH_CLI configs/configs/$(*)/link-flags.txt > /dev/null 2>&1 && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/*.o \
		-Lbuild/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/libavdevice -lavdevice \
		'` \
		`test -e build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/textformat/tf_xml.o && echo ' \
		build/ffmpeg-$(FFMPEG_VERSION)/build-thr-$(*)/fftools/*/*.o \
		'` \
		`test ! -e configs/configs/$(*)/libs.txt || sed 's/@FFVER/$(FFMPEG_VERSION)/ ; s/@TARGET/thr/ ; s/@VARIANT/$(*)/' configs/configs/$(*)/libs.txt` \
		$(EFLAGS_THR) -gsource-map $(ES6FLAGS) $(THRFLAGS) -sPTHREAD_POOL_SIZE=navigator.hardwareConcurrency \
		-o $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.thr.mjs
	if [ -e $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.thr.wasm.map ] ; then \
		./tools/adjust-sourcemap.js $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.thr.wasm.map \
			ffmpeg $(FFMPEG_VERSION) \
			libvpx $(LIBVPX_VERSION) \
			libaom $(LIBAOM_VERSION); \
	fi || ( rm -f $(@) ; false )
	sed " \
		s/^\/\/.*include:.*// ; \
		s/@VER/$(LIBAVJS_VERSION)/g ; \
		s/@VARIANT/$(*)/g ; \
		s/@TARGET/thr/g ; \
		s/@DBG/dbg./g ; \
		s/@JS/mjs/g \
	" $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.thr.mjs | tools/license-header.sh configs/configs/$(*)/license.js > $(@)
	rm -f $(@).d/libav-$(LIBAVJS_VERSION)-$(*).dbg.thr.mjs
	-chmod a-x $(@).d/*.wasm
	-mv $(@).d/* dist/
	rmdir $(@).d


# Built source files
build/exports-%.json: configs/configs/%/components.txt funcs.json \
	tools/mk-exports.js
	mkdir -p build
	./tools/mk-exports.js $(*) > $@

build/frontend-$(LIBAVJS_VERSION)-%.js: configs/configs/%/components.txt \
	funcs.json src/frontend.in.js tools/mk-frontend.js
	mkdir -p build
	./tools/mk-frontend.js $(*) $(LIBAVJS_VERSION) js > $@

build/frontend-$(LIBAVJS_VERSION)-%.mjs: build/frontend-$(LIBAVJS_VERSION)-%.js \
	configs/configs/%/components.txt funcs.json src/frontend.in.js \
	tools/mk-frontend.js
	./tools/mk-frontend.js $(*) $(LIBAVJS_VERSION) mjs > $@.tmp
	./tools/mk-es6.js ../build/frontend-$(LIBAVJS_VERSION)-$(*).js $@.tmp > $@
	rm -f $@.tmp

build/post-%.js: configs/configs/%/components.txt funcs.json tools/mk-post.js \
	src/post.in.js src/p-*.in.js
	mkdir -p build
	./tools/mk-post.js $(*) > $@

build/libav.types.d.ts: funcs.json mk/doxygen.json tools/mk-types-dts.js \
	src/post.in.js src/p-*.in.js src/libav.types.in.d.ts
	mkdir -p build
	./tools/mk-types-dts.js > $@

node_modules/.bin/terser:
	npm install

# Targets
build/inst/base/cflags.txt:
	mkdir -p build/inst/base
	echo -gsource-map > $@

build/inst/thr/cflags.txt:
	mkdir -p build/inst/thr
	echo -pthread -gsource-map > $@

RELEASE_VARIANTS=\
	default default-cli opus opus-af flac flac-af wav wav-af obsolete webm \
	webm-cli webm-vp9 webm-vp9-cli vp8-opus vp8-opus-avf vp9-opus \
	vp9-opus-avf av1-opus av1-opus-avf webcodecs webcodecs-avf

RELEASE_SUFFIX=
RELEASE_DIR=dist/release$(RELEASE_SUFFIX)

MODULAR_VARIANTS_ENCUMBERED=\
	decoder-aac decoder-h264 decoder-hevc
	
MODULAR_VARIANTS=\
	decoder-ac3 decoder-alac decoder-av1 decoder-cinepak decoder-cook \
	decoder-dvaudio decoder-dvvideo decoder-flac decoder-flashsv \
	decoder-flashsv2 decoder-flv1 decoder-h261 decoder-h263 decoder-h263p \
	decoder-indeo2 decoder-indeo3 decoder-indeo4 decoder-indeo5 decoder-mp1 \
	decoder-mp2 decoder-mp3 decoder-mpeg1video decoder-mpeg2video \
	decoder-mpeg4 decoder-msmpeg4v1 decoder-msmpeg4v2 decoder-msmpeg4v3 \
	decoder-msvideo1 decoder-opus decoder-pcm_f16le decoder-pcm_f24le \
	decoder-pcm_f32be decoder-pcm_f32le decoder-pcm_f64be decoder-pcm_f64le \
	decoder-pcm_s16be decoder-pcm_s16le decoder-pcm_s24be decoder-pcm_s24le \
	decoder-pcm_s32be decoder-pcm_s32le decoder-pcm_s64be decoder-pcm_s64le \
	decoder-pcm_s8 decoder-pcm_u16be decoder-pcm_u16le decoder-pcm_u24be \
	decoder-pcm_u24le decoder-pcm_u32be decoder-pcm_u32le decoder-pcm_u8 \
	decoder-prores decoder-qtrle decoder-ra_144 decoder-ra_288 decoder-ralf \
	decoder-rv10 decoder-rv20 decoder-rv30 decoder-rv40 decoder-sipr \
	decoder-theora decoder-vorbis decoder-vp8 decoder-vp9 decoder-wavpack \
	decoder-wmalossless decoder-wmapro decoder-wmav1 decoder-wmav2 \
	decoder-wmavoice decoder-wmv1 decoder-wmv2 decoder-wmv3 demuxer-asf \
	demuxer-au demuxer-avi demuxer-caf demuxer-dv demuxer-flac demuxer-flv \
	demuxer-matroska demuxer-mp3 demuxer-mp4 demuxer-mpeg demuxer-mpegts \
	demuxer-ogg demuxer-rm demuxer-wav demuxer-wv

release: extract
	mkdir -p $(RELEASE_DIR)
	mkdir $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX)
	cp -a README.md docs $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX)/
	mkdir $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX)/dist
	$(MAKE) $(RELEASE_DIR)/libav.js-types-$(LIBAVJS_VERSION)
	for v in $(RELEASE_VARIANTS); \
	do \
		$(MAKE) build-$$v || exit 1; \
		$(MAKE) release-$$v || exit 1; \
		cp dist/libav-$(LIBAVJS_VERSION)-$$v.* \
			dist/libav-$$v.* \
			$(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX)/dist; \
	done
	cp dist/libav.types.d.ts $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX)/dist/
	mkdir $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX)/sources
	for t in ffmpeg emfiberthreads lame libaom libogg libvorbis libvpx opus zlib; \
	do \
		$(MAKE) $$t-release; \
	done
	git archive HEAD -o $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX)/sources/libav.js.tar
	xz $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX)/sources/libav.js.tar
	cd $(RELEASE_DIR) && zip -r libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX).zip libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX)
	rm -rf $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)$(RELEASE_SUFFIX)

modular:
	$(MAKE) release \
		RELEASE_VARIANTS="$(MODULAR_VARIANTS)" \
		RELEASE_SUFFIX=-modular

release-%: $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)-%
	true

$(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)-%: build-%
	mkdir -p $(@)/dist
	cp dist/libav-$(LIBAVJS_VERSION)-$(*).* \
		dist/libav-$(*).* \
		dist/libav.types.d.ts \
		$(@)/dist
	rm -f $(@)/dist/*.dbg.*
	sed 's/@VARIANT/$(*)/g ; s/@VERSION/$(LIBAVJS_VERSION)/g ; s/@VER/$(LIBAVJS_VERSION_SHORT)/g' \
		package-one-variant.json > $(@)/package.json

$(RELEASE_DIR)/libav.js-types-$(LIBAVJS_VERSION): dist/libav.types.d.ts
	mkdir -p $(@)/dist
	cp dist/libav.types.d.ts $(@)/dist
	sed 's/@VERSION/$(LIBAVJS_VERSION)/g ; s/@VER/$(LIBAVJS_VERSION_SHORT)/g' \
		package-types-only.json > $(@)/package.json

npm-publish:
	cd $(RELEASE_DIR) && unzip libav.js-$(LIBAVJS_VERSION).zip
	cd $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION) && \
	  cp ../../../package.json . && \
	  rm -f dist/*.dbg.* dist/*-av1* dist/*-vp9* dist/*.asm.mjs && \
	  npm publish
	rm -rf $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)
	( cd $(RELEASE_DIR)/libav.js-types-$(LIBAVJS_VERSION) && npm publish --access=public )
	for v in $(RELEASE_VARIANTS); \
	do \
		( cd $(RELEASE_DIR)/libav.js-$(LIBAVJS_VERSION)-$$v && npm publish --access=public ) \
	done

halfclean:
	-rm -rf dist/
	-rm -f build/exports.json build/libav-$(LIBAVJS_VERSION).js build/post.js

clean: halfclean
	-rm -rf build/inst
	-rm -rf build/emfiberthreads
	-rm -rf build/opus-$(OPUS_VERSION)
	-rm -rf build/libaom-$(LIBAOM_VERSION)
	-rm -rf build/libvorbis-$(LIBVORBIS_VERSION)
	-rm -rf build/libogg-$(LIBOGG_VERSION)
	-rm -rf build/libvpx-$(LIBVPX_VERSION)
	-rm -rf build/lame-$(LAME_VERSION)
	-rm -rf build/openh264-$(OPENH264_VERSION)
	-rm -rf build/ffmpeg-$(FFMPEG_VERSION)
	-rm -rf build/zlib-$(ZLIB_VERSION)

distclean: clean
	-rm -rf build/

print-version:
	@printf '%s\n' "$(LIBAVJS_VERSION)"

.PRECIOUS: \
	build/ffmpeg-$(FFMPEG_VERSION)/build-%/libavformat/libavformat.a \
	build/exports-%.json \
	build/post-%.js \
	dist/libav.types.d.ts \
	dist/libav-$(LIBAVJS_VERSION)-%.js \
	dist/libav-%.js \
	dist/libav-$(LIBAVJS_VERSION)-%.mjs \
	dist/libav-%.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.js \
	dist/libav-%.dbg.js \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.mjs \
	dist/libav-%.dbg.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.asm.js \
	dist/libav-$(LIBAVJS_VERSION)-%.asm.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.asm.js \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.asm.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.wasm.js \
	dist/libav-$(LIBAVJS_VERSION)-%.wasm.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.wasm.js \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.wasm.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.thr.js \
	dist/libav-$(LIBAVJS_VERSION)-%.thr.mjs \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.thr.js \
	dist/libav-$(LIBAVJS_VERSION)-%.dbg.thr.mjs
