[pacman-dev] [PATCH] libmakepkg: Add check_buildoption for distcc and ccache

Jan Alexander Steffens (heftig) jan.steffens at gmail.com
Mon Oct 19 01:33:24 UTC 2015


makepkg used to check OPTIONS too, which could override
BUILDENV. Implement a new function that handles these
options more like OPTIONS.

This also reduces code duplication a bit.

Signed-off-by: Jan Alexander Steffens (heftig) <jan.steffens at gmail.com>
---
 scripts/libmakepkg/util/option.sh | 34 ++++++++++++++++++++++++++++++++++
 scripts/makepkg.sh.in             |  8 ++++----
 2 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/scripts/libmakepkg/util/option.sh b/scripts/libmakepkg/util/option.sh
index 1b2d94d..41c7fd3 100644
--- a/scripts/libmakepkg/util/option.sh
+++ b/scripts/libmakepkg/util/option.sh
@@ -106,3 +106,37 @@ check_buildenv() {
 	# not found
 	return 127
 }
+
+##
+# Checks to see if options are present in BUILDENV or PKGBUILD;
+# PKGBUILD options always take precedence.
+#
+#  usage : check_buildoption( $option, $expected_val )
+# return : 0   - matches expected
+#          1   - does not match expected
+#          127 - not found
+##
+check_buildoption() {
+	in_opt_array "$1" ${options[@]}
+	case $? in
+		0) # assert enabled
+			[[ $2 = y ]]
+			return ;;
+		1) # assert disabled
+			[[ $2 = n ]]
+			return
+	esac
+
+	in_opt_array "$1" ${BUILDENV[@]}
+	case $? in
+		0) # assert enabled
+			[[ $2 = y ]]
+			return ;;
+		1) # assert disabled
+			[[ $2 = n ]]
+			return
+	esac
+
+	# not found
+	return 127
+}
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 6ededa3..82dc58f 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -852,13 +852,13 @@ run_prepare() {
 
 run_build() {
 	# use distcc if it is requested (check buildenv and PKGBUILD opts)
-	if check_buildenv "distcc" "y" && ! check_option "distcc" "n"; then
+	if check_buildoption "distcc" "y"; then
 		[[ -d /usr/lib/distcc/bin ]] && export PATH="/usr/lib/distcc/bin:$PATH"
 		export DISTCC_HOSTS
 	fi
 
 	# use ccache if it is requested (check buildenv and PKGBUILD opts)
-	if check_buildenv "ccache" "y" && ! check_option "ccache" "n"; then
+	if check_buildoption "ccache" "y"; then
 		[[ -d /usr/lib/ccache/bin ]] && export PATH="/usr/lib/ccache/bin:$PATH"
 	fi
 
@@ -1557,7 +1557,7 @@ check_software() {
 	fi
 
 	# distcc - compilation with distcc
-	if check_buildenv "distcc" "y" && ! check_option "distcc" "n"; then
+	if check_buildoption "distcc" "y"; then
 		if ! type -p distcc >/dev/null; then
 			error "$(gettext "Cannot find the %s binary required for distributed compilation.")" "distcc"
 			ret=1
@@ -1565,7 +1565,7 @@ check_software() {
 	fi
 
 	# ccache - compilation with ccache
-	if check_buildenv "ccache" "y" && ! check_option "ccache" "n"; then
+	if check_buildoption "ccache" "y"; then
 		if ! type -p ccache >/dev/null; then
 			error "$(gettext "Cannot find the %s binary required for compiler cache usage.")" "ccache"
 			ret=1
-- 
2.6.1


More information about the pacman-dev mailing list