diff --git a/build.sh b/build.sh
index 5d213b8..2057826 100755
--- a/build.sh
+++ b/build.sh
@@ -4,7 +4,7 @@
 
 for __ in $(find subr -name *.subr); do . "${__}"; done;
 pre_setup_args "${@}"; pre_setup_env; pre_check; pre_subdirs;
-build_files_init; {(
+pre_state init; {(
 log_msg info "Build started by ${BUILD_USER:=${USER}}@${BUILD_HNAME:=$(hostname)} at ${BUILD_DATE_START}.";
 log_env_vars "build (global)" ${LOG_ENV_VARS};
 for BUILD_TARGET_LC in $(subst_tgts invariants ${BUILD_TARGETS_META:-world}); do
@@ -34,7 +34,7 @@ for BUILD_TARGET_LC in $(subst_tgts invariants ${BUILD_TARGETS_META:-world}); do
 	if [ "${BUILD_SCRIPT_RC:-0}" -ne 0 ]; then
 		break;
 	fi;
-done; build_files_fini;
+done; pre_state fini;
 log_msg info "${BUILD_NFINI} finished, ${BUILD_NSKIP} skipped, and ${BUILD_NFAIL} failed builds in ${BUILD_NBUILT} build script(s).";
 log_msg info "Build time: ${BUILD_TIMES_HOURS} hour(s), ${BUILD_TIMES_MINUTES} minute(s), and ${BUILD_TIMES_SECS} second(s).";
 if [ ${ARG_RELAXED:-0} -eq 1 ]\
diff --git a/subr/build.subr b/subr/build.subr
index b734163..526d9f2 100644
--- a/subr/build.subr
+++ b/subr/build.subr
@@ -47,30 +47,6 @@ build_fileop() {
 	fi;
 };
 
-build_files_fini() {
-	: $((BUILD_TIMES_SECS=$(command date +%s)-${BUILD_TIMES_SECS}));
-	: $((BUILD_TIMES_HOURS=${BUILD_TIMES_SECS}/3600));
-	: $((BUILD_TIMES_MINUTES=(${BUILD_TIMES_SECS}%3600)/60));
-	: $((BUILD_TIMES_SECS=(${BUILD_TIMES_SECS}%3600)%60));
-	if [ -f "${BUILD_STATUS_IN_PROGRESS_FNAME}" ]; then
-		build_fileop rm ${BUILD_STATUS_IN_PROGRESS_FNAME};
-	fi;
-};
-build_files_init() {
-	if [ -e ${BUILD_STATUS_IN_PROGRESS_FNAME} ]; then
-		log_msg failexit "Error: another build targeting this architecture and build type is currently in progress.";
-	else
-		touch ${BUILD_STATUS_IN_PROGRESS_FNAME};
-	fi;
-	if [ -e ${BUILD_LOG_FNAME} ]; then
-		mv -- ${BUILD_LOG_FNAME} ${BUILD_LOG_LAST_FNAME};
-	fi;
-	BUILD_DATE_START="$(date %Y-%m-%d-%H-%M-%S)";
-	BUILD_NFINI=${BUILD_NSKIP:=${BUILD_NFAIL:=${BUILD_NBUILT:=0}}};
-	BUILD_TIMES_SECS=$(command date +%s);
-	BUILD_PKGS_FAILED="";
-};
-
 is_build_script_done() {
 	local _done_fname="${WORKDIR}/.${1}.${2}" _restart_at="${3}";
 	if [ -z "${_restart_at}" ]; then
@@ -87,7 +63,6 @@ is_build_script_done() {
 		return 0;		# Skip
 	fi;
 };
-
 set_build_script_done() {
 	local _pkg_fname="${1}";
 	local _done_fname_pfx="${WORKDIR}/.${_pkg_fname}";
diff --git a/subr/pre_state.subr b/subr/pre_state.subr
new file mode 100644
index 0000000..58bfc59
--- /dev/null
+++ b/subr/pre_state.subr
@@ -0,0 +1,31 @@
+#
+# set -o errexit -o noglob are assumed.
+#
+
+pre_state() {
+	case "${1}" in
+	fini)	: $((BUILD_TIMES_SECS=$(command date +%s)-${BUILD_TIMES_SECS}));
+		: $((BUILD_TIMES_HOURS=${BUILD_TIMES_SECS}/3600));
+		: $((BUILD_TIMES_MINUTES=(${BUILD_TIMES_SECS}%3600)/60));
+		: $((BUILD_TIMES_SECS=(${BUILD_TIMES_SECS}%3600)%60));
+		if [ -f "${BUILD_STATUS_IN_PROGRESS_FNAME}" ]; then
+			build_fileop rm ${BUILD_STATUS_IN_PROGRESS_FNAME};
+		fi;
+		;;
+	init)	if [ -e ${BUILD_STATUS_IN_PROGRESS_FNAME} ]; then
+			log_msg failexit "Error: another build targeting this architecture and build type is currently in progress.";
+		else
+			touch ${BUILD_STATUS_IN_PROGRESS_FNAME};
+		fi;
+		if [ -e ${BUILD_LOG_FNAME} ]; then
+			mv -- ${BUILD_LOG_FNAME} ${BUILD_LOG_LAST_FNAME};
+		fi;
+		BUILD_DATE_START="$(date %Y-%m-%d-%H-%M-%S)";
+		BUILD_NFINI=${BUILD_NSKIP:=${BUILD_NFAIL:=${BUILD_NBUILT:=0}}};
+		BUILD_TIMES_SECS=$(command date +%s);
+		BUILD_PKGS_FAILED="";
+		;;
+	esac;
+};
+
+# vim:filetype=sh