From ecd214881aa7e8b8ab936dd1f5a7207864e71806 Mon Sep 17 00:00:00 2001
From: Henrik Grimler <henrik@grimler.se>
Date: Sat, 21 Aug 2021 18:08:57 +0200
Subject: [PATCH] build-package: add new arg -c for "continue build"

As replacement for TERMUX_PKG_QUICK_REBUILD. Running
./build-package.sh -c <package> starts a build for <package>, but does
not extract and patch the source from scratch. Instead it sets up the
build variables and starts from termux_step_make.

When working on a big package that can take hours to build it is
convenient to be able to build until there is an error, then apply
some new patch (manually) to the source, and then continue from where
the build failed.
---
 build-package.sh                              |  43 ++++--
 packages/libllvm/build.sh                     |   8 +-
 packages/swift/build.sh                       | 137 +++++++++---------
 .../build/configure/termux_step_configure.sh  |  15 +-
 .../configure/termux_step_configure_cmake.sh  |   3 +
 scripts/build/termux_step_handle_hostbuild.sh |  16 +-
 scripts/build/termux_step_patch_package.sh    |  28 ++--
 scripts/build/termux_step_setup_variables.sh  |   2 +-
 scripts/build/termux_step_start_build.sh      |  46 +++---
 9 files changed, 161 insertions(+), 137 deletions(-)

diff --git a/build-package.sh b/build-package.sh
index adf6bc4f6..66fd76e58 100755
--- a/build-package.sh
+++ b/build-package.sh
@@ -276,7 +276,7 @@ _show_usage() {
 	exit 1
 }
 
-while getopts :a:hdDfiIqso: option; do
+while getopts :a:hdDfiIqso:c option; do
 	case "$option" in
 		a)
 			if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ]; then
@@ -300,6 +300,7 @@ while getopts :a:hdDfiIqso: option; do
 		q) export TERMUX_QUIET_BUILD=true;;
 		s) export TERMUX_SKIP_DEPCHECK=true;;
 		o) TERMUX_DEBDIR=$(realpath -m "$OPTARG");;
+		c) TERMUX_CONTINUE_BUILD="true";;
 		?) termux_error_exit "./build-package.sh: illegal option -$OPTARG";;
 	esac
 done
@@ -373,22 +374,38 @@ while (($# > 0)); do
 		termux_step_setup_variables
 		termux_step_handle_buildarch
 		termux_step_start_build
-		termux_step_get_dependencies
+		if [ "$TERMUX_CONTINUE_BUILD" == "false" ]; then
+			termux_step_get_dependencies
+		fi
+
 		termux_step_create_timestamp_file
-		cd "$TERMUX_PKG_CACHEDIR"
-		termux_step_get_source
-		cd "$TERMUX_PKG_SRCDIR"
-		termux_step_post_get_source
-		termux_step_handle_hostbuild
+
+		if [ "$TERMUX_CONTINUE_BUILD" == "false" ]; then
+			cd "$TERMUX_PKG_CACHEDIR"
+			termux_step_get_source
+			cd "$TERMUX_PKG_SRCDIR"
+			termux_step_post_get_source
+			termux_step_handle_hostbuild
+		fi
+
 		termux_step_setup_toolchain
-		termux_step_patch_package
-		termux_step_replace_guess_scripts
-		cd "$TERMUX_PKG_SRCDIR"
-		termux_step_pre_configure
+
+		if [ "$TERMUX_CONTINUE_BUILD" == "false" ]; then
+			termux_step_patch_package
+			termux_step_replace_guess_scripts
+			cd "$TERMUX_PKG_SRCDIR"
+			termux_step_pre_configure
+		fi
+
+		# Even on continued build we might need to setup paths
+		# to tools so need to run part of configure step
 		cd "$TERMUX_PKG_BUILDDIR"
 		termux_step_configure
-		cd "$TERMUX_PKG_BUILDDIR"
-		termux_step_post_configure
+
+		if [ "$TERMUX_CONTINUE_BUILD" == "false" ]; then
+			cd "$TERMUX_PKG_BUILDDIR"
+			termux_step_post_configure
+		fi
 		cd "$TERMUX_PKG_BUILDDIR"
 		termux_step_make
 		cd "$TERMUX_PKG_BUILDDIR"
diff --git a/packages/libllvm/build.sh b/packages/libllvm/build.sh
index 3dfbb0e0a..cb8743ea0 100644
--- a/packages/libllvm/build.sh
+++ b/packages/libllvm/build.sh
@@ -64,11 +64,9 @@ termux_step_host_build() {
 }
 
 termux_step_pre_configure() {
-	if [ "$TERMUX_PKG_QUICK_REBUILD" = "false" ]; then
-		mkdir openmp/runtime/src/android
-		cp $TERMUX_PKG_BUILDER_DIR/nl_types.h openmp/runtime/src/android
-		cp $TERMUX_PKG_BUILDER_DIR/nltypes_stubs.cpp openmp/runtime/src/android
-	fi
+	mkdir openmp/runtime/src/android
+	cp $TERMUX_PKG_BUILDER_DIR/nl_types.h openmp/runtime/src/android
+	cp $TERMUX_PKG_BUILDER_DIR/nltypes_stubs.cpp openmp/runtime/src/android
 
 	# Add unknown vendor, otherwise it screws with the default LLVM triple
 	# detection.
diff --git a/packages/swift/build.sh b/packages/swift/build.sh
index 584a00e7e..d96fa75cd 100644
--- a/packages/swift/build.sh
+++ b/packages/swift/build.sh
@@ -24,61 +24,60 @@ SWIFT_BINDIR="$TERMUX_PKG_HOSTBUILD_DIR/$SWIFT_BIN/usr/bin"
 fi
 
 termux_step_post_get_source() {
-	if [ "$TERMUX_PKG_QUICK_REBUILD" = "false" ]; then
-		# The Swift build-script requires a particular organization of source
-		# directories, which the following sets up.
-		mkdir .temp
-		mv [a-zA-Z]* .temp/
-		mv .temp swift
+	# The Swift build-script requires a particular organization of source
+	# directories, which the following sets up.
+	mkdir .temp
+	mv [a-zA-Z]* .temp/
+	mv .temp swift
 
-		declare -A library_checksums
-		library_checksums[swift-cmark]=d1c2d9728667a563e9420c608ef4fcde749a86e38ee373e8b109bce5eb94510d
-		library_checksums[llvm-project]=50401b5b696292ccf6dc11f59f34f8958fdc0097c7d4db9cd862a4622ee1676a
-		library_checksums[swift-corelibs-libdispatch]=84602423596712a1fd0d866d640af0c2de56c52ea03c95864af900a55945ef37
-		library_checksums[swift-corelibs-foundation]=38e15b60188a4240fe71b9ca6e9409d423d342896102ac957db42d7fa8b4ad23
-		library_checksums[swift-corelibs-xctest]=5e0bede769b0869e65d2626a3bfdab09faf99dfe48366a37e5c72dc3b7dc9287
-		library_checksums[swift-llbuild]=d5562e63fd68f6fcd64c60820a1be0142592a2742c71c1c6fe673f34854ac599
-		library_checksums[swift-argument-parser]=6743338612be50a5a32127df0a3dd1c34e695f5071b1213f128e6e2b27c4364a
-		library_checksums[Yams]=8bbb28ef994f60afe54668093d652e4d40831c79885fa92b1c2cd0e17e26735a
-		library_checksums[swift-driver]=9907e6d41236cf543a43a89b5ff67b6cb12474692f96069908d4b6f92b617518
-		library_checksums[swift-tools-support-core]=a4bc991cf601fe0f45edc7d0a6248f1a19def4d149b3e86b37361f34b0ecbd2c
-		library_checksums[swift-package-manager]=3648d7cbf74a2ad69b444d78b53e278541b1bd0e4e54fb1b8bc9002596bbaf4b
+	declare -A library_checksums
+	library_checksums[swift-cmark]=d1c2d9728667a563e9420c608ef4fcde749a86e38ee373e8b109bce5eb94510d
+	library_checksums[llvm-project]=50401b5b696292ccf6dc11f59f34f8958fdc0097c7d4db9cd862a4622ee1676a
+	library_checksums[swift-corelibs-libdispatch]=84602423596712a1fd0d866d640af0c2de56c52ea03c95864af900a55945ef37
+	library_checksums[swift-corelibs-foundation]=38e15b60188a4240fe71b9ca6e9409d423d342896102ac957db42d7fa8b4ad23
+	library_checksums[swift-corelibs-xctest]=5e0bede769b0869e65d2626a3bfdab09faf99dfe48366a37e5c72dc3b7dc9287
+	library_checksums[swift-llbuild]=d5562e63fd68f6fcd64c60820a1be0142592a2742c71c1c6fe673f34854ac599
+	library_checksums[swift-argument-parser]=6743338612be50a5a32127df0a3dd1c34e695f5071b1213f128e6e2b27c4364a
+	library_checksums[Yams]=8bbb28ef994f60afe54668093d652e4d40831c79885fa92b1c2cd0e17e26735a
+	library_checksums[swift-driver]=9907e6d41236cf543a43a89b5ff67b6cb12474692f96069908d4b6f92b617518
+	library_checksums[swift-tools-support-core]=a4bc991cf601fe0f45edc7d0a6248f1a19def4d149b3e86b37361f34b0ecbd2c
+	library_checksums[swift-package-manager]=3648d7cbf74a2ad69b444d78b53e278541b1bd0e4e54fb1b8bc9002596bbaf4b
 
-		for library in "${!library_checksums[@]}"; do \
-			if [ "$library" = "swift-argument-parser" ]; then
-				GH_ORG="apple"
-				SRC_VERSION="0.4.1"
-				TAR_NAME=$SRC_VERSION
-			elif [ "$library" = "Yams" ]; then
-				GH_ORG="jpsim"
-				SRC_VERSION="4.0.2"
-				TAR_NAME=$SRC_VERSION
-			else
-				GH_ORG="apple"
-				SRC_VERSION=$SWIFT_RELEASE
-				TAR_NAME=swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE
-			fi
-
-			termux_download \
-				https://github.com/$GH_ORG/$library/archive/$TAR_NAME.tar.gz \
-				$TERMUX_PKG_CACHEDIR/$library-$SRC_VERSION.tar.gz \
-				${library_checksums[$library]}
-			tar xf $TERMUX_PKG_CACHEDIR/$library-$SRC_VERSION.tar.gz
-			mv $library-$TAR_NAME $library
-		done
-
-		mv swift-cmark cmark
-		mv swift-llbuild llbuild
-		mv Yams yams
-		mv swift-package-manager swiftpm
-
-		if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then
-			termux_download \
-				https://swift.org/builds/swift-$TERMUX_PKG_VERSION-release/ubuntu2004/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE/$SWIFT_BIN.tar.gz \
-				$TERMUX_PKG_CACHEDIR/$SWIFT_BIN.tar.gz \
-				86b849d9f6ba2eda4e12ea5eafaa0748bffcd6272466b514c2b0fd4a829c63a4
+	for library in "${!library_checksums[@]}"; do \
+		if [ "$library" = "swift-argument-parser" ]; then
+			GH_ORG="apple"
+			SRC_VERSION="0.4.1"
+			TAR_NAME=$SRC_VERSION
+		elif [ "$library" = "Yams" ]; then
+			GH_ORG="jpsim"
+			SRC_VERSION="4.0.2"
+			TAR_NAME=$SRC_VERSION
+		else
+			GH_ORG="apple"
+			SRC_VERSION=$SWIFT_RELEASE
+			TAR_NAME=swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE
 		fi
+
+		termux_download \
+			https://github.com/$GH_ORG/$library/archive/$TAR_NAME.tar.gz \
+			$TERMUX_PKG_CACHEDIR/$library-$SRC_VERSION.tar.gz \
+			${library_checksums[$library]}
+		tar xf $TERMUX_PKG_CACHEDIR/$library-$SRC_VERSION.tar.gz
+		mv $library-$TAR_NAME $library
+	done
+
+	mv swift-cmark cmark
+	mv swift-llbuild llbuild
+	mv Yams yams
+	mv swift-package-manager swiftpm
+
+	if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then
+		termux_download \
+			https://swift.org/builds/swift-$TERMUX_PKG_VERSION-release/ubuntu2004/swift-$TERMUX_PKG_VERSION-$SWIFT_RELEASE/$SWIFT_BIN.tar.gz \
+			$TERMUX_PKG_CACHEDIR/$SWIFT_BIN.tar.gz \
+			86b849d9f6ba2eda4e12ea5eafaa0748bffcd6272466b514c2b0fd4a829c63a4
 	fi
+
 	# The Swift compiler searches for the clang headers so symlink against them.
 	export TERMUX_CLANG_VERSION=$(grep ^TERMUX_PKG_VERSION= $TERMUX_PKG_BUILDER_DIR/../libllvm/build.sh | cut -f2 -d=)
 }
@@ -103,28 +102,26 @@ termux_step_host_build() {
 termux_step_pre_configure() {
 	export SWIFT_ARCH=$TERMUX_ARCH
 	test $SWIFT_ARCH == 'arm' && SWIFT_ARCH='armv7'
-	if [ "$TERMUX_PKG_QUICK_REBUILD" = "false" ]; then
-		cd llbuild
-		# A single patch needed from the existing llbuild package
-		patch -p1 < $TERMUX_PKG_BUILDER_DIR/../llbuild/lib-llvm-Support-CmakeLists.txt.patch
+	cd llbuild
+	# A single patch needed from the existing llbuild package
+	patch -p1 < $TERMUX_PKG_BUILDER_DIR/../llbuild/lib-llvm-Support-CmakeLists.txt.patch
 
-		cd ../llvm-project
-		patch -p1 < $TERMUX_PKG_BUILDER_DIR/../libllvm/clang-lib-Driver-ToolChain.cpp.patch
-		patch -p1 < $TERMUX_PKG_BUILDER_DIR/../libllvm/clang-lib-Driver-ToolChains-Linux.cpp.patch
-		cd ..
+	cd ../llvm-project
+	patch -p1 < $TERMUX_PKG_BUILDER_DIR/../libllvm/clang-lib-Driver-ToolChain.cpp.patch
+	patch -p1 < $TERMUX_PKG_BUILDER_DIR/../libllvm/clang-lib-Driver-ToolChains-Linux.cpp.patch
+	cd ..
 
-		sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" \
-		$TERMUX_PKG_BUILDER_DIR/swiftpm-Utilities-bootstrap | \
-		sed "s%\@TERMUX_PKG_BUILDDIR\@%${TERMUX_PKG_BUILDDIR}%g" | patch -p1
+	sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" \
+	$TERMUX_PKG_BUILDER_DIR/swiftpm-Utilities-bootstrap | \
+	sed "s%\@TERMUX_PKG_BUILDDIR\@%${TERMUX_PKG_BUILDDIR}%g" | patch -p1
 
-		if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then
-			sed "s%\@TERMUX_STANDALONE_TOOLCHAIN\@%${TERMUX_STANDALONE_TOOLCHAIN}%g" \
-			$TERMUX_PKG_BUILDER_DIR/swiftpm-android-flags.json | \
-			sed "s%\@CCTERMUX_HOST_PLATFORM\@%${CCTERMUX_HOST_PLATFORM}%g" | \
-			sed "s%\@TERMUX_HOST_PLATFORM\@%${TERMUX_HOST_PLATFORM}%g" | \
-			sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" | \
-			sed "s%\@SWIFT_ARCH\@%${SWIFT_ARCH}%g" > $TERMUX_PKG_BUILDDIR/swiftpm-android-flags.json
-		fi
+	if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then
+		sed "s%\@TERMUX_STANDALONE_TOOLCHAIN\@%${TERMUX_STANDALONE_TOOLCHAIN}%g" \
+		$TERMUX_PKG_BUILDER_DIR/swiftpm-android-flags.json | \
+		sed "s%\@CCTERMUX_HOST_PLATFORM\@%${CCTERMUX_HOST_PLATFORM}%g" | \
+		sed "s%\@TERMUX_HOST_PLATFORM\@%${TERMUX_HOST_PLATFORM}%g" | \
+		sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" | \
+		sed "s%\@SWIFT_ARCH\@%${SWIFT_ARCH}%g" > $TERMUX_PKG_BUILDDIR/swiftpm-android-flags.json
 	fi
 }
 
diff --git a/scripts/build/configure/termux_step_configure.sh b/scripts/build/configure/termux_step_configure.sh
index e508a0c6e..fbb315cb5 100644
--- a/scripts/build/configure/termux_step_configure.sh
+++ b/scripts/build/configure/termux_step_configure.sh
@@ -2,10 +2,23 @@ termux_step_configure() {
 	[ "$TERMUX_PKG_METAPACKAGE" = "true" ] && return
 
 	if [ "$TERMUX_PKG_FORCE_CMAKE" = "false" ] && [ -f "$TERMUX_PKG_SRCDIR/configure" ]; then
+		if [ "$TERMUX_CONTINUE_BUILD" == "true" ]; then
+			return;
+		fi
 		termux_step_configure_autotools
-	elif [ -f "$TERMUX_PKG_SRCDIR/CMakeLists.txt" ]; then
+	elif [ "$TERMUX_PKG_FORCE_CMAKE" = "true" ] || [ -f "$TERMUX_PKG_SRCDIR/CMakeLists.txt" ]; then
+		if [ "$TERMUX_CONTINUE_BUILD" == "true" ]; then
+			termux_setup_cmake
+			if [ "$TERMUX_CMAKE_BUILD" = Ninja ]; then
+				termux_setup_ninja
+			fi
+			return;
+		fi
 		termux_step_configure_cmake
 	elif [ -f "$TERMUX_PKG_SRCDIR/meson.build" ]; then
+		if [ "$TERMUX_CONTINUE_BUILD" == "true" ]; then
+			return;
+		fi
 		termux_step_configure_meson
 	fi
 }
diff --git a/scripts/build/configure/termux_step_configure_cmake.sh b/scripts/build/configure/termux_step_configure_cmake.sh
index 4003abe3b..29dabaac2 100644
--- a/scripts/build/configure/termux_step_configure_cmake.sh
+++ b/scripts/build/configure/termux_step_configure_cmake.sh
@@ -14,6 +14,9 @@ termux_step_configure_cmake() {
 		MAKE_PROGRAM_PATH=$(command -v make)
 	fi
 
+	if [ "$TERMUX_CONTINUE_BUILD" == "true" ]; then
+		return
+	fi
 	local CMAKE_ADDITIONAL_ARGS=()
 	if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then
 		CXXFLAGS+=" --target=$CCTERMUX_HOST_PLATFORM"
diff --git a/scripts/build/termux_step_handle_hostbuild.sh b/scripts/build/termux_step_handle_hostbuild.sh
index cc5bebc32..a82e399c3 100644
--- a/scripts/build/termux_step_handle_hostbuild.sh
+++ b/scripts/build/termux_step_handle_hostbuild.sh
@@ -3,19 +3,15 @@ termux_step_handle_hostbuild() {
 	[ "$TERMUX_PKG_HOSTBUILD" = "false" ] && return
 
 	cd "$TERMUX_PKG_SRCDIR"
-	if [ "$TERMUX_PKG_QUICK_REBUILD" = "false" ]; then
-		for patch in $TERMUX_PKG_BUILDER_DIR/*.patch.beforehostbuild; do
-			echo "Applying patch: $(basename $patch)"
-			test -f "$patch" && sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" "$patch" | patch --silent -p1
-		done
-	fi
+	for patch in $TERMUX_PKG_BUILDER_DIR/*.patch.beforehostbuild; do
+		echo "Applying patch: $(basename $patch)"
+		test -f "$patch" && sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" "$patch" | patch --silent -p1
+	done
 
 	local TERMUX_HOSTBUILD_MARKER="$TERMUX_PKG_HOSTBUILD_DIR/TERMUX_BUILT_FOR_$TERMUX_PKG_VERSION"
 	if [ ! -f "$TERMUX_HOSTBUILD_MARKER" ]; then
-		if [ "$TERMUX_PKG_QUICK_REBUILD" = "false" ]; then
-			rm -Rf "$TERMUX_PKG_HOSTBUILD_DIR"
-			mkdir -p "$TERMUX_PKG_HOSTBUILD_DIR"
-		fi
+		rm -Rf "$TERMUX_PKG_HOSTBUILD_DIR"
+		mkdir -p "$TERMUX_PKG_HOSTBUILD_DIR"
 		cd "$TERMUX_PKG_HOSTBUILD_DIR"
 		termux_step_host_build
 		touch "$TERMUX_HOSTBUILD_MARKER"
diff --git a/scripts/build/termux_step_patch_package.sh b/scripts/build/termux_step_patch_package.sh
index 78c00fa12..43aa4f072 100644
--- a/scripts/build/termux_step_patch_package.sh
+++ b/scripts/build/termux_step_patch_package.sh
@@ -6,19 +6,17 @@ termux_step_patch_package() {
 	if [ "$TERMUX_DEBUG_BUILD" = "true" ]; then
 		DEBUG_PATCHES=$(find $TERMUX_PKG_BUILDER_DIR -mindepth 1 -maxdepth 1 -name \*.patch.debug)
 	fi
-	if [ "$TERMUX_PKG_QUICK_REBUILD" = "false" ]; then
-		# Suffix patch with ".patch32" or ".patch64" to only apply for these bitnesses:
-		shopt -s nullglob
-		for patch in $TERMUX_PKG_BUILDER_DIR/*.patch{$TERMUX_ARCH_BITS,} $DEBUG_PATCHES; do
-			echo "Applying patch: $(basename $patch)"
-			test -f "$patch" && sed \
-				-e "s%\@TERMUX_APP_PACKAGE\@%${TERMUX_APP_PACKAGE}%g" \
-				-e "s%\@TERMUX_BASE_DIR\@%${TERMUX_BASE_DIR}%g" \
-				-e "s%\@TERMUX_CACHE_DIR\@%${TERMUX_CACHE_DIR}%g" \
-				-e "s%\@TERMUX_HOME\@%${TERMUX_ANDROID_HOME}%g" \
-				-e "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" \
-				"$patch" | patch --silent -p1
-		done
-		shopt -u nullglob
-	fi
+	# Suffix patch with ".patch32" or ".patch64" to only apply for these bitnesses:
+	shopt -s nullglob
+	for patch in $TERMUX_PKG_BUILDER_DIR/*.patch{$TERMUX_ARCH_BITS,} $DEBUG_PATCHES; do
+		echo "Applying patch: $(basename $patch)"
+		test -f "$patch" && sed \
+			-e "s%\@TERMUX_APP_PACKAGE\@%${TERMUX_APP_PACKAGE}%g" \
+			-e "s%\@TERMUX_BASE_DIR\@%${TERMUX_BASE_DIR}%g" \
+			-e "s%\@TERMUX_CACHE_DIR\@%${TERMUX_CACHE_DIR}%g" \
+			-e "s%\@TERMUX_HOME\@%${TERMUX_ANDROID_HOME}%g" \
+			-e "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" \
+			"$patch" | patch --silent -p1
+	done
+	shopt -u nullglob
 }
diff --git a/scripts/build/termux_step_setup_variables.sh b/scripts/build/termux_step_setup_variables.sh
index 06dc1147e..04d16cb5e 100644
--- a/scripts/build/termux_step_setup_variables.sh
+++ b/scripts/build/termux_step_setup_variables.sh
@@ -8,6 +8,7 @@ termux_step_setup_variables() {
 	: "${TERMUX_NO_CLEAN:="false"}"
 	: "${TERMUX_PACKAGES_DIRECTORIES:="packages"}"
 	: "${TERMUX_PKG_API_LEVEL:="24"}"
+	: "${TERMUX_CONTINUE_BUILD:="false"}"
 	: "${TERMUX_QUIET_BUILD:="false"}"
 	: "${TERMUX_SKIP_DEPCHECK:="false"}"
 	: "${TERMUX_TOPDIR:="$HOME/.termux-build"}"
@@ -122,7 +123,6 @@ termux_step_setup_variables() {
 	TERMUX_PKG_PLATFORM_INDEPENDENT=false
 	TERMUX_PKG_PRE_DEPENDS=""
 	TERMUX_PKG_PROVIDES="" #https://www.debian.org/doc/debian-policy/#virtual-packages-provides
-	TERMUX_PKG_QUICK_REBUILD=false # set this temporarily when iterating on a large package and you don't want the source and build directories wiped every time you make a mistake
 	TERMUX_PKG_RECOMMENDS="" # https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
 	TERMUX_PKG_REPLACES=""
 	TERMUX_PKG_REVISION="0" # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version
diff --git a/scripts/build/termux_step_start_build.sh b/scripts/build/termux_step_start_build.sh
index ab4f8eea0..ddd75670e 100644
--- a/scripts/build/termux_step_start_build.sh
+++ b/scripts/build/termux_step_start_build.sh
@@ -47,6 +47,23 @@ termux_step_start_build() {
 		fi
 	fi
 
+	echo "termux - building $TERMUX_PKG_NAME for arch $TERMUX_ARCH..."
+	test -t 1 && printf "\033]0;%s...\007" "$TERMUX_PKG_NAME"
+
+	# Avoid exporting PKG_CONFIG_LIBDIR until after termux_step_host_build.
+	export TERMUX_PKG_CONFIG_LIBDIR=$TERMUX_PREFIX/lib/pkgconfig
+
+	if [ "$TERMUX_PKG_BUILD_IN_SRC" = "true" ]; then
+		echo "Building in src due to TERMUX_PKG_BUILD_IN_SRC being set to true" > "$TERMUX_PKG_BUILDDIR/BUILDING_IN_SRC.txt"
+		TERMUX_PKG_BUILDDIR=$TERMUX_PKG_SRCDIR
+	fi
+
+	if [ "$TERMUX_CONTINUE_BUILD" == "true" ]; then
+		# Do not remove source dir on continued builds, the
+		# rest in this function can be skipped in this case
+		return
+	fi
+
 	if [ "$TERMUX_INSTALL_DEPS" == true ] && [ "$TERMUX_PKG_DEPENDS" != "${TERMUX_PKG_DEPENDS/libllvm/}" ]; then
 		LLVM_DEFAULT_TARGET_TRIPLE=$TERMUX_HOST_PLATFORM
 		if [ $TERMUX_ARCH = "arm" ]; then
@@ -68,18 +85,14 @@ termux_step_start_build() {
 			-e "s|@TERMUX_ARCH@|$TERMUX_ARCH|g" > $TERMUX_PREFIX/bin/llvm-config
 		chmod 755 $TERMUX_PREFIX/bin/llvm-config
 	fi
-	if [ "$TERMUX_PKG_QUICK_REBUILD" = "false" ]; then
-		# Following directories may contain files with read-only permissions which
-		# makes them undeletable. We need to fix that.
-		[ -d "$TERMUX_PKG_BUILDDIR" ] && chmod +w -R "$TERMUX_PKG_BUILDDIR"
-		[ -d "$TERMUX_PKG_SRCDIR" ] && chmod +w -R "$TERMUX_PKG_SRCDIR"
+	# Following directories may contain files with read-only permissions which
+	# makes them undeletable. We need to fix that.
+	[ -d "$TERMUX_PKG_BUILDDIR" ] && chmod +w -R "$TERMUX_PKG_BUILDDIR"
+	[ -d "$TERMUX_PKG_SRCDIR" ] && chmod +w -R "$TERMUX_PKG_SRCDIR"
 
-		# Cleanup old build state:
-		rm -Rf "$TERMUX_PKG_BUILDDIR" \
-			"$TERMUX_PKG_SRCDIR"
-	else
-		TERMUX_PKG_SKIP_SRC_EXTRACT=true
-	fi
+	# Cleanup old build state:
+	rm -Rf "$TERMUX_PKG_BUILDDIR" \
+		"$TERMUX_PKG_SRCDIR"
 
 	# Cleanup old packaging state:
 	rm -Rf "$TERMUX_PKG_PACKAGEDIR" \
@@ -111,15 +124,4 @@ termux_step_start_build() {
 		g++ -std=c++11 -Wall -Wextra -pedantic -Os -D__ANDROID_API__=$TERMUX_PKG_API_LEVEL \
 			"$TERMUX_ELF_CLEANER_SRC" -o "$TERMUX_ELF_CLEANER"
 	fi
-
-	if [ "$TERMUX_PKG_BUILD_IN_SRC" = "true" ]; then
-		echo "Building in src due to TERMUX_PKG_BUILD_IN_SRC being set to true" > "$TERMUX_PKG_BUILDDIR/BUILDING_IN_SRC.txt"
-		TERMUX_PKG_BUILDDIR=$TERMUX_PKG_SRCDIR
-	fi
-
-	echo "termux - building $TERMUX_PKG_NAME for arch $TERMUX_ARCH..."
-	test -t 1 && printf "\033]0;%s...\007" "$TERMUX_PKG_NAME"
-
-	# Avoid exporting PKG_CONFIG_LIBDIR until after termux_step_host_build.
-	export TERMUX_PKG_CONFIG_LIBDIR=$TERMUX_PREFIX/lib/pkgconfig
 }