diff --git a/abuild.in b/abuild.in
index e3e749bb8f2b7ac6452636b226157dc58f5e4e71..cd38494ff6a33b4e08b7640afd847b2f516ae9ad 100755
--- a/abuild.in
+++ b/abuild.in
@@ -990,6 +990,7 @@ scan_shared_objects() {
 			esac
 			;;
 		esac
+		list_has "$soname" $somask && continue
 		echo "$soname $sover"
 	done | sort -u > "$controldir"/.provides-so
 
@@ -997,10 +998,11 @@ scan_shared_objects() {
 	scanelf --nobanner --recursive --needed "$datadir"  | tr ' ' ':' \
 		| awk -F ":" '$1 == "ET_DYN" || $1 == "ET_EXEC" {print $2}'  \
 		| sed 's:,:\n:g' | sort -u \
-	| while read i; do
+	| while read soname; do
 		# only add files that are not self provided
-		grep -q -w "^$i" "$controldir"/.provides-so \
-			|| echo $i
+		grep -q -w "^$soname" "$controldir"/.provides-so \
+			|| list_has "$soname" $somask \
+			|| echo $soname
 	done > "$controldir"/.needs-so
 }