aboutsummaryrefslogtreecommitdiff
path: root/sbopkglint.d/75-static_libs.t.sh
blob: fab2a2b5a6a7c0a4be8ef39e444fc12f57d8c39f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/sh

# sbopkglint test, must be sourced by sbopkglint (not run standalone).

# PKG, PRGNAM, VERSION, ARCH are set by sbopkglint. also the current
# directory is the root of the installed package tree.

########################################################################
# checks permissions and ownership of static libraries lib dirs.
# checks that static libraries actually *are* static libraries.
# if the package includes both a static and shared library, a note is
# triggered, suggesting removal of the static lib. this is not an error.

for libdir in lib lib64 usr/lib usr/lib64; do
	if [ -d $libdir ]; then
		find_warnfiles "bad static library ownership (should be root:root):" \
			-L $libdir -mindepth 1 -maxdepth 1 -name '*.a' \! \( -user root -a -group root \)
		find_warnfiles "bad static library permissions (should be 0644 or 0444):" \
			-L $libdir -mindepth 1 -maxdepth 1 -name '*.a' \! \( -perm 444 -o -perm 644 \)
		find $libdir -mindepth 1 -maxdepth 1 -name '*.a' | while read static; do
			ftype="$( file -L -b --mime-type "$static" )"
			case "$ftype" in
				"application/x-archive") ;; # OK
				*) warn "$static is not a valid static library. MIME type is '$ftype'." ;;
			esac
			shared=$libdir/"$( basename "$static" .a)".so
			if [ -e "$shared" ]; then
				shname="$( basename "$shared" )"
				stname="$( basename "$static" )"
				note "$libdir has both $shname and $stname; unless it's needed by a dependee, consider removing $stname"
			fi
		done
	fi
done