--- buildsys.mk.in.old
+++ buildsys.mk.in
@@ -1,8 +1,8 @@
 #
-#  Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012
-#  Jonathan Schleifer <js@webkeks.org>
+#  Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016
+#  Jonathan Schleifer <js@heap.zone>
 #
-#  https://webkeks.org/git/?p=buildsys.git
+#  https://heap.zone/git/?p=buildsys.git
 #
 #  Permission to use, copy, modify, and/or distribute this software for any
 #  purpose with or without fee is hereby granted, provided that the above
@@ -45,6 +45,7 @@ OBJCFLAGS = @OBJCFLAGS@
 OBJCXXFLAGS = @OBJCXXFLAGS@
 LDFLAGS = @LDFLAGS@
 LDFLAGS_RPATH = @LDFLAGS_RPATH@
+LDFLAGS_INSTALL_NAME = @LDFLAGS_INSTALL_NAME@
 LIBS = @LIBS@
 PYTHON_FLAGS = @PYTHON_FLAGS@
 PROG_IMPLIB_NEEDED = @PROG_IMPLIB_NEEDED@
@@ -107,22 +108,27 @@ PLUGIN_OBJS = ${OBJS:.o=.plugin.o}
 
 MO_FILES = ${LOCALES:.po=.mo}
 
-.SILENT:
 .SUFFIXES:
 .SUFFIXES: .beam .c .c.dep .cc .cc.dep .class .cxx .cxx.dep .d .erl .lib.o .java .mo .m .m.dep .mm .mm.dep .o .plugin.o .po .py .pyc .rc .S .S.dep .xpm
-.PHONY: all subdirs pre-depend depend install install-extra uninstall uninstall-extra clean distclean locales ${SUBDIRS}
+.PHONY: all subdirs subdirs-after pre-depend depend install install-extra uninstall uninstall-extra clean distclean locales ${SUBDIRS} ${SUBDIRS_AFTER}
 
 all:
-	${MAKE} ${MFLAGS} subdirs
-	${MAKE} ${MFLAGS} depend
+	${MAKE} pre-all
+	${MAKE} subdirs
+	${MAKE} depend
 	${MAKE} ${STATIC_LIB} ${STATIC_LIB_NOINST} ${STATIC_PIC_LIB} ${STATIC_PIC_LIB_NOINST} ${SHARED_LIB} ${SHARED_LIB_NOINST} ${PLUGIN} ${PLUGIN_NOINST} ${PROG} ${PROG_NOINST} ${JARFILE} locales
+	${MAKE} subdirs-after
+	${MAKE} post-all
+
+pre-all post-all:
 
 subdirs: ${SUBDIRS}
+subdirs-after: ${SUBDIRS_AFTER}
 
-${SUBDIRS}:
+${SUBDIRS} ${SUBDIRS_AFTER}:
 	for i in $@; do \
 		${DIR_ENTER}; \
-		${MAKE} ${MFLAGS} || exit $$?; \
+		${MAKE} || exit $$?; \
 		${DIR_LEAVE}; \
 	done
 
@@ -166,7 +172,7 @@ depend: pre-depend ${SRCS}
 	done; \
 	if test x"$$regen" = x"1" -a x"$$deps" != x""; then \
 		${DEPEND_STATUS}; \
-		if ${MAKE} ${MFLAGS} $$deps && cat $$deps >.deps; then \
+		if ${MAKE} $$deps && cat $$deps >.deps; then \
 			rm -f $$deps; \
 			${DEPEND_OK}; \
 		else \
@@ -205,6 +211,7 @@ pre-depend:
 
 ${PROG} ${PROG_NOINST}: ${EXT_DEPS} ${OBJS} ${OBJS_EXTRA}
 	${LINK_STATUS}
+	out="$@"; \
 	if ${LD} -o $@ ${OBJS} ${OBJS_EXTRA} ${LDFLAGS} ${LIBS}; then \
 		${LINK_OK}; \
 	else \
@@ -228,7 +235,8 @@ ${JARFILE}: ${EXT_DEPS} ${JAR_MANIFEST} ${OBJS} ${OBJS_EXTRA}
 	fi
 
 ${SHARED_LIB} ${SHARED_LIB_NOINST}: ${EXT_DEPS} ${LIB_OBJS} ${LIB_OBJS_EXTRA}
-	${LINK_STATUS}; \
+	${LINK_STATUS}
+	out="$@"; \
 	objs=""; \
 	ars=""; \
 	for i in ${LIB_OBJS} ${LIB_OBJS_EXTRA}; do \
@@ -252,7 +260,7 @@ ${SHARED_LIB} ${SHARED_LIB_NOINST}: ${EXT_DEPS} ${LIB_OBJS} ${LIB_OBJS_EXTRA}
 		done; \
 		cd ..; \
 	done; \
-	if ${LD} -o $@ $$objs ${LIB_LDFLAGS} ${LDFLAGS} ${LIBS}; then \
+	if ${LD} -o $@ $$objs ${LIB_LDFLAGS} ${LDFLAGS_INSTALL_NAME} ${LDFLAGS} ${LIBS}; then \
 		${LINK_OK}; \
 	else \
 		${LINK_FAILED}; \
@@ -264,6 +272,7 @@ ${SHARED_LIB} ${SHARED_LIB_NOINST}: ${EXT_DEPS} ${LIB_OBJS} ${LIB_OBJS_EXTRA}
 
 ${PLUGIN} ${PLUGIN_NOINST}: ${EXT_DEPS} ${PLUGIN_OBJS}
 	${LINK_STATUS}
+	out="$@"; \
 	objs=""; \
 	ars=""; \
 	for i in ${PLUGIN_OBJS}; do \
@@ -300,6 +309,7 @@ ${PLUGIN} ${PLUGIN_NOINST}: ${EXT_DEPS} ${PLUGIN_OBJS}
 ${STATIC_LIB} ${STATIC_LIB_NOINST}: ${EXT_DEPS} ${OBJS} ${OBJS_EXTRA}
 	${LINK_STATUS}
 	rm -f $@
+	out="$@"; \
 	objs=""; \
 	ars=""; \
 	for i in ${OBJS} ${OBJS_EXTRA}; do \
@@ -337,6 +347,7 @@ ${STATIC_LIB} ${STATIC_LIB_NOINST}: ${EXT_DEPS} ${OBJS} ${OBJS_EXTRA}
 ${STATIC_PIC_LIB} ${STATIC_PIC_LIB_NOINST}: ${EXT_DEPS} ${LIB_OBJS} ${LIB_OBJS_EXTRA}
 	${LINK_STATUS}
 	rm -f $@
+	out="$@"; \
 	objs=""; \
 	ars=""; \
 	for i in ${LIB_OBJS} ${LIB_OBJS_EXTRA}; do \
@@ -375,21 +386,27 @@ locales: ${MO_FILES}
 
 .c.o:
 	${COMPILE_STATUS}
-	if ${CC} ${CFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${CC} ${CFLAGS} ${CPPFLAGS} ${CFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_OK}; \
 	else \
 		${COMPILE_FAILED}; \
 	fi
 .c.lib.o:
 	${COMPILE_LIB_STATUS}
-	if ${CC} ${LIB_CFLAGS} ${CFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${CC} ${LIB_CFLAGS} ${CFLAGS} ${CPPFLAGS} ${CFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_LIB_OK}; \
 	else \
 		${COMPILE_LIB_FAILED}; \
 	fi
 .c.plugin.o:
 	${COMPILE_PLUGIN_STATUS}
-	if ${CC} ${PLUGIN_CFLAGS} ${CFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${CC} ${PLUGIN_CFLAGS} ${CFLAGS} ${CPPFLAGS} ${CFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_PLUGIN_OK}; \
 	else \
 		${COMPILE_PLUGIN_FAILED}; \
@@ -397,21 +414,27 @@ locales: ${MO_FILES}
 
 .cc.o .cxx.o:
 	${COMPILE_STATUS}
-	if ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${CXX} ${CXXFLAGS} ${CPPFLAGS} ${CXXFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_OK}; \
 	else \
 		${COMPILE_FAILED}; \
 	fi
 .cc.lib.o .cxx.lib.o:
 	${COMPILE_LIB_STATUS}
-	if ${CXX} ${LIB_CFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${CXX} ${LIB_CFLAGS} ${CXXFLAGS} ${CPPFLAGS} ${CXXFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_LIB_OK}; \
 	else \
 		${COMPILE_LIB_FAILED}; \
 	fi
 .cc.plugin.o .cxx.plugin.o:
 	${COMPILE_PLUGIN_STATUS}
-	if ${CXX} ${PLUGIN_CFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${CXX} ${PLUGIN_CFLAGS} ${CXXFLAGS} ${CPPFLAGS} ${CXXFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_PLUGIN_OK}; \
 	else \
 		${COMPILE_PLUGIN_FAILED}; \
@@ -419,6 +442,8 @@ locales: ${MO_FILES}
 
 .d.o:
 	${COMPILE_STATUS}
+	in="$<"; \
+	out="$@"; \
 	if test x"$(basename ${DC})" = x"dmd"; then \
 		if ${DC} ${DFLAGS} -c -of$@ $<; then \
 			${COMPILE_OK}; \
@@ -435,6 +460,8 @@ locales: ${MO_FILES}
 
 .erl.beam:
 	${COMPILE_STATUS}
+	in="$<"; \
+	out="$@"; \
 	if ${ERLC} ${ERLCFLAGS} -o $@ $<; then \
 		${COMPILE_OK}; \
 	else \
@@ -443,6 +470,8 @@ locales: ${MO_FILES}
 
 .java.class:
 	${COMPILE_STATUS}
+	in="$<"; \
+	out="$@"; \
 	if ${JAVAC} ${JAVACFLAGS} $<; then \
 		${COMPILE_OK}; \
 	else \
@@ -451,21 +480,27 @@ locales: ${MO_FILES}
 
 .m.o:
 	${COMPILE_STATUS}
-	if ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${OBJC} ${OBJCFLAGS} ${CPPFLAGS} ${OBJCFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_OK}; \
 	else \
 		${COMPILE_FAILED}; \
 	fi
 .m.lib.o:
 	${COMPILE_LIB_STATUS}
-	if ${OBJC} ${LIB_CFLAGS} ${OBJCFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${OBJC} ${LIB_CFLAGS} ${OBJCFLAGS} ${CPPFLAGS} ${OBJCFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_LIB_OK}; \
 	else \
 		${COMPILE_LIB_FAILED}; \
 	fi
 .m.plugin.o:
 	${COMPILE_PLUGIN_STATUS}
-	if ${OBJC} ${PLUGIN_CFLAGS} ${OBJCFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${OBJC} ${PLUGIN_CFLAGS} ${OBJCFLAGS} ${CPPFLAGS} ${OBJCFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_PLUGIN_OK}; \
 	else \
 		${COMPILE_PLUGIN_FAILED}; \
@@ -473,21 +508,27 @@ locales: ${MO_FILES}
 
 .mm.o:
 	${COMPILE_STATUS}
-	if ${OBJCXX} ${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${OBJCXX} ${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} ${OBJCXXFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_OK}; \
 	else \
 		${COMPILE_FAILED}; \
 	fi
 .mm.lib.o:
 	${COMPILE_LIB_STATUS}
-	if ${OBJCXX} ${LIB_CFLAGS} ${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${OBJCXX} ${LIB_CFLAGS} ${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} ${OBJCXXFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_LIB_OK}; \
 	else \
 		${COMPILE_LIB_FAILED}; \
 	fi
 .mm.plugin.o:
 	${COMPILE_PLUGIN_STATUS}
-	if ${OBJCXX} ${PLUGIN_CFLAGS} ${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${OBJCXX} ${PLUGIN_CFLAGS} ${OBJCXXFLAGS} ${OBJCFLAGS} ${CXXFLAGS} ${CPPFLAGS} ${OBJCXXFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_PLUGIN_OK}; \
 	else \
 		${COMPILE_PLUGIN_FAILED}; \
@@ -495,6 +536,8 @@ locales: ${MO_FILES}
 
 .po.mo:
 	${COMPILE_STATUS}
+	in="$<"; \
+	out="$@"; \
 	if ${MSGFMT} -c -o $@ $<; then \
 		${COMPILE_OK}; \
 	else \
@@ -503,6 +546,8 @@ locales: ${MO_FILES}
 
 .py.pyc:
 	${COMPILE_STATUS}
+	in="$<"; \
+	out="$@"; \
 	if ${PYTHON} ${PYTHON_FLAGS} -c "import py_compile; py_compile.compile('$<')"; then \
 		${COMPILE_OK}; \
 	else \
@@ -511,7 +556,9 @@ locales: ${MO_FILES}
 
 .rc.o .rc.lib.o .rc.plugin.o:
 	${COMPILE_STATUS}
-	if ${WINDRES} -J rc -O coff -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${WINDRES} ${CPPFLAGS} -J rc -O coff -o $@ $<; then \
 		${COMPILE_OK}; \
 	else \
 		${COMPILE_FAILED}; \
@@ -519,21 +566,27 @@ locales: ${MO_FILES}
 
 .S.o:
 	${COMPILE_STATUS}
-	if ${AS} ${ASFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${AS} ${ASFLAGS} ${CPPFLAGS} ${ASFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_OK}; \
 	else \
 		${COMPILE_FAILED}; \
 	fi
 .S.lib.o:
 	${COMPILE_LIB_STATUS}
-	if ${AS} ${LIB_CFLAGS} ${ASFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${AS} ${LIB_CFLAGS} ${ASFLAGS} ${CPPFLAGS} ${ASFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_LIB_OK}; \
 	else \
 		${COMPILE_LIB_FAILED}; \
 	fi
 .S.plugin.o:
 	${COMPILE_PLUGIN_STATUS}
-	if ${AS} ${PLUGIN_CFLAGS} ${ASFLAGS} ${CPPFLAGS} -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${AS} ${PLUGIN_CFLAGS} ${ASFLAGS} ${CPPFLAGS} ${ASFLAGS_$@} -c -o $@ $<; then \
 		${COMPILE_PLUGIN_OK}; \
 	else \
 		${COMPILE_PLUGIN_FAILED}; \
@@ -541,30 +594,36 @@ locales: ${MO_FILES}
 
 .xpm.o:
 	${COMPILE_STATUS}
-	if ${CC} ${CFLAGS} ${CPPFLAGS} -x c -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${CC} ${CFLAGS} ${CPPFLAGS} ${CFLAGS_$@} -x c -c -o $@ $<; then \
 		${COMPILE_OK}; \
 	else \
 		${COMPILE_FAILED}; \
 	fi
 .xpm.lib.o:
 	${COMPILE_LIB_STATUS}
-	if ${CC} ${LIB_CFLAGS} ${CFLAGS} ${CPPFLAGS} -x c -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${CC} ${LIB_CFLAGS} ${CFLAGS} ${CPPFLAGS} ${CFLAGS_$@} -x c -c -o $@ $<; then \
 		${COMPILE_LIB_OK}; \
 	else \
 		${COMPILE_LIB_FAILED}; \
 	fi
 .xpm.plugin.o:
 	${COMPILE_PLUGIN_STATUS}
-	if ${CC} ${PLUGIN_CFLAGS} ${CFLAGS} ${CPPFLAGS} -x c -c -o $@ $<; then \
+	in="$<"; \
+	out="$@"; \
+	if ${CC} ${PLUGIN_CFLAGS} ${CFLAGS} ${CPPFLAGS} ${CFLAGS_$@} -x c -c -o $@ $<; then \
 		${COMPILE_PLUGIN_OK}; \
 	else \
 		${COMPILE_PLUGIN_FAILED}; \
 	fi
 
-install: install-extra
-	for i in ${SUBDIRS}; do \
+install: all install-extra
+	for i in ${SUBDIRS} ${SUBDIRS_AFTER}; do \
 		${DIR_ENTER}; \
-		${MAKE} ${MFLAGS} install || exit $$?; \
+		${MAKE} install || exit $$?; \
 		${DIR_LEAVE}; \
 	done
 
@@ -643,9 +702,9 @@ install: install-extra
 install-extra:
 
 uninstall: uninstall-extra
-	for i in ${SUBDIRS}; do \
+	for i in ${SUBDIRS} ${SUBDIRS_AFTER}; do \
 		${DIR_ENTER}; \
-		${MAKE} ${MFLAGS} uninstall || exit $$?; \
+		${MAKE} uninstall || exit $$?; \
 		${DIR_LEAVE}; \
 	done
 
@@ -736,9 +795,9 @@ uninstall: uninstall-extra
 uninstall-extra:
 
 clean:
-	for i in ${SUBDIRS}; do \
+	for i in ${SUBDIRS} ${SUBDIRS_AFTER}; do \
 		${DIR_ENTER}; \
-		${MAKE} ${MFLAGS} clean || exit $$?; \
+		${MAKE} clean || exit $$?; \
 		${DIR_LEAVE}; \
 	done
 
@@ -753,9 +812,9 @@ clean:
 	done
 
 distclean: clean
-	for i in ${SUBDIRS}; do \
+	for i in ${SUBDIRS} ${SUBDIRS_AFTER}; do \
 		${DIR_ENTER}; \
-		${MAKE} ${MFLAGS} distclean || exit $$?; \
+		${MAKE} distclean || exit $$?; \
 		${DIR_LEAVE}; \
 	done
 
@@ -769,27 +828,39 @@ distclean: clean
 		fi \
 	done
 
-DIR_ENTER = printf "@TERM_EL@@TERM_SETAF6@Entering directory @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF6@.@TERM_SGR0@\n"; cd $$i || exit $$?
-DIR_LEAVE = printf "@TERM_EL@@TERM_SETAF6@Leaving directory @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF6@.@TERM_SGR0@\n"; cd .. || exit $$?
+print-hierarchy:
+	for i in ${SUBDIRS} ${SUBDIRS_AFTER}; do \
+		echo ${PRINT_HIERARCHY_PREFIX}$$i; \
+		cd $$i || exit $$?; \
+		${MAKE} PRINT_HIERARCHY_PREFIX=$$i/ print-hierarchy || exit $$?; \
+		cd .. || exit $$?; \
+	done
+
+print-var:
+	printf '%s\n' '${${VAR}}'
+
+DIR_ENTER = printf "@TERM_EL@@TERM_SETAF6@Entering directory @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF6@.@TERM_SGR0@\n" "$$i"; cd $$i || exit $$?
+DIR_LEAVE = printf "@TERM_EL@@TERM_SETAF6@Leaving directory @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF6@.@TERM_SGR0@\n" "$$i"; cd .. || exit $$?
 DEPEND_STATUS = printf "@TERM_EL@@TERM_SETAF3@Generating dependencies...@TERM_SGR0@\r"
 DEPEND_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully generated dependencies.@TERM_SGR0@\n"
 DEPEND_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to generate dependencies!@TERM_SGR0@\n"; exit $$err
-COMPILE_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF3@...@TERM_SGR0@\r"
-COMPILE_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF2@.@TERM_SGR0@\n"
-COMPILE_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n"; exit $$err
-COMPILE_LIB_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF3@ (lib)...@TERM_SGR0@\r"
-COMPILE_LIB_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF2@ (lib).@TERM_SGR0@\n"
-COMPILE_LIB_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF1@ (lib)!@TERM_SGR0@\n"; exit $$err
-COMPILE_PLUGIN_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF3@ (plugin)...@TERM_SGR0@\r"
-COMPILE_PLUGIN_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF2@ (plugin).@TERM_SGR0@\n"
-COMPILE_PLUGIN_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@$<@TERM_SGR0@@TERM_SETAF1@ (plugin)!@TERM_SGR0@\n"; exit $$err
+COMPILE_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF3@...@TERM_SGR0@\r" "$<"
+COMPILE_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF2@.@TERM_SGR0@\n" "$<"
+COMPILE_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n" "$<"; exit $$err
+COMPILE_LIB_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF3@ (lib)...@TERM_SGR0@\r" "$<"
+COMPILE_LIB_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF2@ (lib).@TERM_SGR0@\n" "$<"
+COMPILE_LIB_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF1@ (lib)!@TERM_SGR0@\n" "$<"; exit $$err
+COMPILE_PLUGIN_STATUS = printf "@TERM_EL@@TERM_SETAF3@Compiling @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF3@ (plugin)...@TERM_SGR0@\r" "$<"
+COMPILE_PLUGIN_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully compiled @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF2@ (plugin).@TERM_SGR0@\n" "$<"
+COMPILE_PLUGIN_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to compile @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF1@ (plugin)!@TERM_SGR0@\n" "$<"; exit $$err
 LINK_STATUS = printf "@TERM_EL@@TERM_SETAF3@Linking @TERM_BOLD@$@@TERM_SGR0@@TERM_SETAF3@...@TERM_SGR0@\r"
 LINK_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully linked @TERM_BOLD@$@@TERM_SGR0@@TERM_SETAF2@.@TERM_SGR0@\n"
 LINK_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to link @TERM_BOLD@$@@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n"; exit $$err
-INSTALL_STATUS = printf "@TERM_EL@@TERM_SETAF3@Installing @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF3@...@TERM_SGR0@\r"
-INSTALL_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully installed @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF2@.@TERM_SGR0@\n"
-INSTALL_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to install @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n"; exit $$err
-DELETE_OK = printf "@TERM_EL@@TERM_SETAF4@Deleted @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF4@.@TERM_SGR0@\n"
-DELETE_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to delete @TERM_BOLD@$$i@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n"; exit $$err
-
-include .deps
+INSTALL_STATUS = printf "@TERM_EL@@TERM_SETAF3@Installing @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF3@...@TERM_SGR0@\r" "$$i"
+INSTALL_OK = printf "@TERM_EL@@TERM_SETAF2@Successfully installed @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF2@.@TERM_SGR0@\n" "$$i"
+INSTALL_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to install @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n" "$$i"; exit $$err
+DELETE_OK = printf "@TERM_EL@@TERM_SETAF4@Deleted @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF4@.@TERM_SGR0@\n" "$$i"
+DELETE_FAILED = err=$$?; printf "@TERM_EL@@TERM_SETAF1@Failed to delete @TERM_BOLD@%s@TERM_SGR0@@TERM_SETAF1@!@TERM_SGR0@\n" "$$i"; exit $$err
+
+.CURDIR ?= .
+include ${.CURDIR}/.deps
--- configure.ac.old
+++ configure.ac
@@ -16,6 +16,8 @@ COPYRIGHT="Copyright (C) 2001-2016 Audacious developers and others"
 AC_DEFINE_UNQUOTED(COPYRIGHT, "$COPYRIGHT", [Copyright])
 AC_SUBST(COPYRIGHT)
 
+BUILDSYS_INIT
+
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_MACRO_DIR([m4])
--- m4/buildsys.m4.old
+++ m4/buildsys.m4
@@ -1,8 +1,8 @@
 dnl
-dnl Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012
-dnl Jonathan Schleifer <js@webkeks.org>
+dnl Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016
+dnl Jonathan Schleifer <js@heap.zone>
 dnl
-dnl https://webkeks.org/git/?p=buildsys.git
+dnl https://heap.zone/git/?p=buildsys.git
 dnl
 dnl Permission to use, copy, modify, and/or distribute this software for any
 dnl purpose with or without fee is hereby granted, provided that the above
@@ -21,65 +21,76 @@ dnl ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 dnl POSSIBILITY OF SUCH DAMAGE.
 dnl
 
-AC_CONFIG_COMMANDS_PRE([
-	AC_SUBST(CC_DEPENDS, $GCC)
-	AC_SUBST(CXX_DEPENDS, $GXX)
-	AC_SUBST(OBJC_DEPENDS, $GOBJC)
-	AC_SUBST(OBJCXX_DEPENDS, $GOBJCXX)
+AC_DEFUN([BUILDSYS_INIT], [
+	AC_CONFIG_COMMANDS_PRE([
+		AC_SUBST(CC_DEPENDS, $GCC)
+		AC_SUBST(CXX_DEPENDS, $GXX)
+		AC_SUBST(OBJC_DEPENDS, $GOBJC)
+		AC_SUBST(OBJCXX_DEPENDS, $GOBJCXX)
 
-	AC_PATH_PROG(TPUT, tput)
+		AC_PATH_PROG(TPUT, tput)
 
-	AS_IF([test x"$TPUT" != x""], [
-		if x=$($TPUT el 2>/dev/null); then
-			AC_SUBST(TERM_EL, "$x")
-		else
-			AC_SUBST(TERM_EL, "$($TPUT ce 2>/dev/null)")
-		fi
+		AS_IF([test x"$TPUT" != x""], [
+			if x=$($TPUT el 2>/dev/null); then
+				AC_SUBST(TERM_EL, "$x")
+			else
+				AC_SUBST(TERM_EL, "$($TPUT ce 2>/dev/null)")
+			fi
 
-		if x=$($TPUT sgr0 2>/dev/null); then
-			AC_SUBST(TERM_SGR0, "$x")
-		else
-			AC_SUBST(TERM_SGR0, "$($TPUT me 2>/dev/null)")
-		fi
+			if x=$($TPUT sgr0 2>/dev/null); then
+				AC_SUBST(TERM_SGR0, "$x")
+			else
+				AC_SUBST(TERM_SGR0, "$($TPUT me 2>/dev/null)")
+			fi
 
-		if x=$($TPUT bold 2>/dev/null); then
-			AC_SUBST(TERM_BOLD, "$x")
-		else
-			AC_SUBST(TERM_BOLD, "$($TPUT md 2>/dev/null)")
-		fi
+			if x=$($TPUT bold 2>/dev/null); then
+				AC_SUBST(TERM_BOLD, "$x")
+			else
+				AC_SUBST(TERM_BOLD, "$($TPUT md 2>/dev/null)")
+			fi
 
-		if x=$($TPUT setaf 1 2>/dev/null); then
-			AC_SUBST(TERM_SETAF1, "$x")
-			AC_SUBST(TERM_SETAF2, "$($TPUT setaf 2 2>/dev/null)")
-			AC_SUBST(TERM_SETAF3, "$($TPUT setaf 3 2>/dev/null)")
-			AC_SUBST(TERM_SETAF4, "$($TPUT setaf 4 2>/dev/null)")
-			AC_SUBST(TERM_SETAF6, "$($TPUT setaf 6 2>/dev/null)")
-		else
-			AC_SUBST(TERM_SETAF1, "$($TPUT AF 1 2>/dev/null)")
-			AC_SUBST(TERM_SETAF2, "$($TPUT AF 2 2>/dev/null)")
-			AC_SUBST(TERM_SETAF3, "$($TPUT AF 3 2>/dev/null)")
-			AC_SUBST(TERM_SETAF4, "$($TPUT AF 4 2>/dev/null)")
-			AC_SUBST(TERM_SETAF6, "$($TPUT AF 6 2>/dev/null)")
-		fi
-	], [
-		AC_SUBST(TERM_EL, '\033\133K')
-		AC_SUBST(TERM_SGR0, '\033\133m')
-		AC_SUBST(TERM_BOLD, '\033\1331m')
-		AC_SUBST(TERM_SETAF1, '\033\13331m')
-		AC_SUBST(TERM_SETAF2, '\033\13332m')
-		AC_SUBST(TERM_SETAF3, '\033\13333m')
-		AC_SUBST(TERM_SETAF4, '\033\13334m')
-		AC_SUBST(TERM_SETAF6, '\033\13336m')
+			if x=$($TPUT setaf 1 2>/dev/null); then
+				AC_SUBST(TERM_SETAF1, "$x")
+				AC_SUBST(TERM_SETAF2,
+					"$($TPUT setaf 2 2>/dev/null)")
+				AC_SUBST(TERM_SETAF3,
+					"$($TPUT setaf 3 2>/dev/null)")
+				AC_SUBST(TERM_SETAF4,
+					"$($TPUT setaf 4 2>/dev/null)")
+				AC_SUBST(TERM_SETAF6,
+					"$($TPUT setaf 6 2>/dev/null)")
+			else
+				AC_SUBST(TERM_SETAF1,
+					"$($TPUT AF 1 2>/dev/null)")
+				AC_SUBST(TERM_SETAF2,
+					"$($TPUT AF 2 2>/dev/null)")
+				AC_SUBST(TERM_SETAF3,
+					"$($TPUT AF 3 2>/dev/null)")
+				AC_SUBST(TERM_SETAF4,
+					"$($TPUT AF 4 2>/dev/null)")
+				AC_SUBST(TERM_SETAF6,
+					"$($TPUT AF 6 2>/dev/null)")
+			fi
+		], [
+			AC_SUBST(TERM_EL, '\033\133K')
+			AC_SUBST(TERM_SGR0, '\033\133m')
+			AC_SUBST(TERM_BOLD, '\033\1331m')
+			AC_SUBST(TERM_SETAF1, '\033\13331m')
+			AC_SUBST(TERM_SETAF2, '\033\13332m')
+			AC_SUBST(TERM_SETAF3, '\033\13333m')
+			AC_SUBST(TERM_SETAF4, '\033\13334m')
+			AC_SUBST(TERM_SETAF6, '\033\13336m')
+		])
 	])
-])
 
-AC_CONFIG_COMMANDS_POST([
-	${as_echo:="echo"} ${as_me:="configure"}": touching .deps files"
-	for i in $(find . -name Makefile); do
-		DEPSFILE="$(dirname $i)/.deps"
-		test -f "$DEPSFILE" && rm "$DEPSFILE"
-		touch -t 0001010000 "$DEPSFILE"
-	done
+	AC_CONFIG_COMMANDS_POST([
+		${as_echo:="echo"} ${as_me:="configure"}": touching .deps files"
+		for i in $(find . -name Makefile); do
+			DEPSFILE="$(dirname $i)/.deps"
+			test -f "$DEPSFILE" && rm "$DEPSFILE"
+			touch -t 0001010000 "$DEPSFILE"
+		done
+	])
 ])
 
 AC_DEFUN([BUILDSYS_PROG_IMPLIB], [
@@ -108,31 +119,32 @@ AC_DEFUN([BUILDSYS_SHARED_LIB], [
 	case "$host_os" in
 		darwin*)
 			AC_MSG_RESULT(Darwin)
-			LIB_CFLAGS='-fPIC -DPIC -mmacosx-version-min=10.7'
-			LIB_LDFLAGS='-dynamiclib -current_version ${LIB_MAJOR}.${LIB_MINOR} -compatibility_version ${LIB_MAJOR} -mmacosx-version-min=10.7 -install_name "${libdir}/$$(i=${SHARED_LIB}; echo $${i%${LIB_SUFFIX}}).${LIB_MAJOR}${LIB_SUFFIX}"'
+			LIB_CFLAGS='-fPIC -DPIC'
+			LIB_LDFLAGS='-dynamiclib -current_version ${LIB_MAJOR}.${LIB_MINOR} -compatibility_version ${LIB_MAJOR}'
 			LIB_PREFIX='lib'
 			LIB_SUFFIX='.dylib'
 			LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
-			PLUGIN_CFLAGS='-fPIC -DPIC -mmacosx-version-min=10.7'
-			PLUGIN_LDFLAGS='-bundle -undefined dynamic_lookup -mmacosx-version-min=10.7'
+			LDFLAGS_INSTALL_NAME='-Wl,-install_name,${libdir}/$${out%.dylib}.${LIB_MAJOR}.dylib'
+			PLUGIN_CFLAGS='-fPIC -DPIC'
+			PLUGIN_LDFLAGS='-bundle -undefined dynamic_lookup'
 			PLUGIN_SUFFIX='.bundle'
 			INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib && ${LN_S} -f $${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib ${DESTDIR}${libdir}/$$i'
 			UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.dylib ${DESTDIR}${libdir}/$${i%.dylib}.${LIB_MAJOR}.${LIB_MINOR}.dylib'
 			CLEAN_LIB=''
 			;;
-		solaris*)
-			AC_MSG_RESULT(Solaris)
-			LIB_CFLAGS='-fPIC -DPIC'
-			LIB_LDFLAGS='-shared -Wl,-soname=${SHARED_LIB}.${LIB_MAJOR}.${LIB_MINOR}'
+		mingw* | cygwin*)
+			AC_MSG_RESULT(MinGW / Cygwin)
+			LIB_CFLAGS=''
+			LIB_LDFLAGS='-shared -Wl,--out-implib,${SHARED_LIB}.a'
 			LIB_PREFIX='lib'
-			LIB_SUFFIX='.so'
+			LIB_SUFFIX='.dll'
 			LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
-			PLUGIN_CFLAGS='-fPIC -DPIC'
+			PLUGIN_CFLAGS=''
 			PLUGIN_LDFLAGS='-shared'
-			PLUGIN_SUFFIX='.so'
-			INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR} && rm -f ${DESTDIR}${libdir}/$$i && ${LN_S} $$i.${LIB_MAJOR}.${LIB_MINOR} ${DESTDIR}${libdir}/$$i'
-			UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}'
-			CLEAN_LIB=''
+			PLUGIN_SUFFIX='.dll'
+			INSTALL_LIB='&& ${MKDIR_P} ${DESTDIR}${bindir} && ${INSTALL} -m 755 $$i ${DESTDIR}${bindir}/$$i && ${INSTALL} -m 755 $$i.a ${DESTDIR}${libdir}/$$i.a'
+			UNINSTALL_LIB='&& rm -f ${DESTDIR}${bindir}/$$i ${DESTDIR}${libdir}/$$i.a'
+			CLEAN_LIB='${SHARED_LIB}.a'
 			;;
 		openbsd* | mirbsd*)
 			AC_MSG_RESULT(OpenBSD)
@@ -148,22 +160,36 @@ AC_DEFUN([BUILDSYS_SHARED_LIB], [
 			UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i'
 			CLEAN_LIB=''
 			;;
-		cygwin* | mingw*)
-			AC_MSG_RESULT(Win32)
-			LIB_CFLAGS=''
-			LIB_LDFLAGS='-shared -Wl,--out-implib,${SHARED_LIB}.a'
+		solaris*)
+			AC_MSG_RESULT(Solaris)
+			LIB_CFLAGS='-fPIC -DPIC'
+			LIB_LDFLAGS='-shared -Wl,-soname=${SHARED_LIB}.${LIB_MAJOR}.${LIB_MINOR}'
 			LIB_PREFIX='lib'
-			LIB_SUFFIX='.dll'
+			LIB_SUFFIX='.so'
 			LDFLAGS_RPATH='-Wl,-rpath,${libdir}'
-			PLUGIN_CFLAGS=''
+			PLUGIN_CFLAGS='-fPIC -DPIC'
 			PLUGIN_LDFLAGS='-shared'
-			PLUGIN_SUFFIX='.dll'
-			INSTALL_LIB='&& ${MKDIR_P} ${DESTDIR}${bindir} && ${INSTALL} -m 755 $$i ${DESTDIR}${bindir}/$$i && ${INSTALL} -m 755 $$i.a ${DESTDIR}${libdir}/$$i.a'
-			UNINSTALL_LIB='&& rm -f ${DESTDIR}${bindir}/$$i ${DESTDIR}${libdir}/$$i.a'
-			CLEAN_LIB='${SHARED_LIB}.a'
+			PLUGIN_SUFFIX='.so'
+			INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR} && rm -f ${DESTDIR}${libdir}/$$i && ${LN_S} $$i.${LIB_MAJOR}.${LIB_MINOR} ${DESTDIR}${libdir}/$$i'
+			UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}'
+			CLEAN_LIB=''
+			;;
+		*-android*)
+			AC_MSG_RESULT(Android)
+			LIB_CFLAGS='-fPIC -DPIC'
+			LIB_LDFLAGS='-shared -Wl,-soname=${SHARED_LIB}.${LIB_MAJOR}'
+			LIB_PREFIX='lib'
+			LIB_SUFFIX='.so'
+			LDFLAGS_RPATH=''
+			PLUGIN_CFLAGS='-fPIC -DPIC'
+			PLUGIN_LDFLAGS='-shared'
+			PLUGIN_SUFFIX='.so'
+			INSTALL_LIB='&& ${INSTALL} -m 755 $$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0 && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} && ${LN_S} -f $$i.${LIB_MAJOR}.${LIB_MINOR}.0 ${DESTDIR}${libdir}/$$i'
+			UNINSTALL_LIB='&& rm -f ${DESTDIR}${libdir}/$$i ${DESTDIR}${libdir}/$$i.${LIB_MAJOR} ${DESTDIR}${libdir}/$$i.${LIB_MAJOR}.${LIB_MINOR}.0'
+			CLEAN_LIB=''
 			;;
 		*)
-			AC_MSG_RESULT(GNU)
+			AC_MSG_RESULT(ELF)
 			LIB_CFLAGS='-fPIC -DPIC'
 			LIB_LDFLAGS='-shared -Wl,-soname=${SHARED_LIB}.${LIB_MAJOR}'
 			LIB_PREFIX='lib'
@@ -183,6 +209,7 @@ AC_DEFUN([BUILDSYS_SHARED_LIB], [
 	AC_SUBST(LIB_PREFIX)
 	AC_SUBST(LIB_SUFFIX)
 	AC_SUBST(LDFLAGS_RPATH)
+	AC_SUBST(LDFLAGS_INSTALL_NAME)
 	AC_SUBST(PLUGIN_CFLAGS)
 	AC_SUBST(PLUGIN_LDFLAGS)
 	AC_SUBST(PLUGIN_SUFFIX)