#! /usr/bin/make -f

include ../source.mk

config_enabled = \
	config_enabled() \
	{ \
		[ "x$${1}" = 'x-' ] && return 0; \
		enabled=false; \
		IFS='& '; \
		for cfg in $$(printf '%s' "$${1}"); do \
			unset IFS; \
			[ x"$${cfg}" = x'' ] && continue; \
			case "$${cfg}" in \
				!*) \
					cfg="$$(printf '%s' "$${cfg}" | \
						sed 's/^!//')"; \
					grep -q "^CONFIG_$${cfg}=y$$" \
						<src/.config \
						&& enabled=false; \
					;; \
				*) \
					grep -q "^CONFIG_$${cfg}=y$$" \
						<src/.config \
						&& enabled=true; \
					;; \
			esac; \
		done; \
		unset IFS; \
		$${enabled}; \
	}
install_init_script = \
	install_init_script() \
	{ \
		script="$${1}"; \
		shift; \
		install -p -m 0755 "../src.etc/init.d/$${script}" \
			"dest/etc/init.d/$${script}"; \
		for link; do \
			ln -s "../init.d/$${script}" \
				"dest/etc/rc.d/$${link}$${script}"; \
		done; \
	}

nop:
	@:

menuconfig oldconfig mrproper:
	oh-autobuild -T $@

build:
	KCONFIG_NOTIMESTAMP=1 oh-autobuild -- -j $${JOBS:-1}
	touch $@

install: build
	oh-autoinstall
	oh-fixperms
	oh-strip
	chmod u+s dest/bin/busybox
	mkdir -p dest/usr/share/busybox
	set -e; exec 3>dest/usr/share/busybox/alternatives; \
	for f in dest/bin/* dest/sbin/* dest/usr/bin/* dest/usr/sbin/*; do \
		case "$${f}" in \
			dest/bin/busybox | dest/bin/sh | dest/sbin/init) ;; \
			*) \
				rm "$${f}"; \
				printf '%s\n' "$${f#dest}" >&3; \
				;; \
		esac; \
	done; \
	exec 3>&-
	set -e; $(config_enabled); $(install_init_script); \
	if config_enabled INIT; then \
		exec 3>dest/usr/share/busybox/init-scripts; \
		ln -sf /sbin/init dest/init; \
		install -d -m 0755 dest/etc; \
		install -p -m 0644 inittab dest/etc/inittab; \
		install -d -m 0755 dest/etc/init.d dest/etc/rc.d; \
		install -p -m 0755 ../src.etc/init.d/rc dest/etc/init.d/rc; \
		install -p -m 0755 ../src.etc/rc.common dest/etc/rc.common; \
		ln -sf rc dest/etc/init.d/rcS; \
		ln -sf rc dest/etc/init.d/rcK; \
		while read -r config script links; do \
			if [ "x$${links%abled}" = "x$${links}" ]; then \
				config_enabled "$${config}" && \
					install_init_script "$${script}" \
						$${links}; \
			elif config_enabled "$${config}"; then \
				install_init_script "$${script}"; \
				printf '%s %s\n' "$${script}" "$${links}" >&3; \
			fi; \
		done <../scripts; \
		exec 3>&-; \
	fi; \
	if config_enabled HTTPD; then \
		install -d -m 0755 dest/var/www; \
	fi; \
	if config_enabled IFUP || config_enabled IFDOWN; then \
		install -d -m 0755 dest/etc/network; \
		install -m 0644 ../src.etc/network/functions \
			dest/etc/network/; \
	fi; \
	if config_enabled IFUP; then \
		for dir in '' if-pre-up.d if-up.d; do \
			install -d -m 0755 "dest/etc/network/$${dir}"; \
		done; \
		while read -r config hook; do \
			for dir in if-pre-up.d if-up.d; do \
				[ -f "../src.etc/network/$${dir}/$${hook}" ] \
					|| continue; \
				config_enabled "$${config}" && install -m 0755 \
					"../src.etc/network/$${dir}/$${hook}" \
					"dest/etc/network/$${dir}"; \
			done; \
		done <../network-hooks; \
	fi; \
	if config_enabled IFDOWN; then \
		for dir in '' if-down.d if-post-down.d; do \
			install -d -m 0755 "dest/etc/network/$${dir}"; \
		done; \
		while read -r config hook; do \
			for dir in if-down.d if-post-down.d; do \
				[ -f "../src.etc/network/$${dir}/$${hook}" ] \
					|| continue; \
				config_enabled "$${config}" && install -m 0755 \
					"../src.etc/network/$${dir}/$${hook}" \
					"dest/etc/network/$${dir}"; \
			done; \
		done <../network-hooks; \
	fi; \
	if config_enabled UDHCPC; then \
		install -d -m 0755 dest/etc; \
		ln -sf /var/run/resolv.conf dest/etc/resolv.conf; \
		install -d -m 0755 dest/usr/share/udhcpc; \
		install -p -m 0755 ../src.usr/share/udhcpc/default.script \
			dest/usr/share/udhcpc/default.script; \
	fi
	oh-installfiles
	oh-shlibdeps
	set -e; $(config_enabled); $(install_init_script); \
	if config_enabled FEATURE_WGET_OPENSSL; then \
		printf 'Extra-Depends: wolfutil\n' >>busybox.substvars; \
	else \
		printf 'Extra-Depends:\n' >>busybox.substvars; \
	fi