aboutsummaryrefslogtreecommitdiff
path: root/sbopkglint.d/pre-doinst.sh
blob: c374b8f5dd18c58b318900bb4bf70ae62cdf22fa (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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/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.

# Unlike the rest of the tests (those ending in .t.sh), this one runs
# before the package's doinst.sh does. Purpose for this is to check
# for the existence of stuff in the package tarball that shouldn't be
# there (e.g. /usr/info/dir), but might correctly be created by doinst.sh.

#######################################################################
badfiles="\
usr/info/dir \
usr/info/dir.gz \
usr/share/icons/hicolor/icon-theme.cache \
usr/share/glib-2.0/schemas/gschemas.compiled \
usr/share/mime/mime.cache \
usr/share/applications/mimeinfo.cache \
usr/lib/gio/modules/giomodule.cache \
usr/lib64/gio/modules/giomodule.cache \
usr/lib/perl5/perllocal.pod \
usr/lib64/perl5/perllocal.pod \
var/cache/fontconfig/CACHEDIR.TAG \
var/cache/man/usr-man/CACHEDIR.TAG"

for i in $badfiles; do
	[ -e "$i" ] && warn "package contains forbidden file: $i"
done

if [ -d usr/share/fonts ]; then
	find_warnfiles "package contains forbidden file(s):" \
		usr/share/fonts -name 'fonts.*'
fi

find_warnfiles "package contains actual symlinks:" \
	-P . -type l

[ -f install/slack-desc ] || warn "required file install/slack-desc is missing"

# Next test is supposed to complain if the package is "empty". What
# "empty" means is, there's nothing in the package outside of usr/doc
# and install/. This happens when a SlackBuild doesn't do error checking
# (no "set -e" or "|| exit 1" tests) and the 'make' or whatever it
# does fails, undetected.
# This is a stopgap, really. If someone submits a SlackBuild that doesn't
# do any error checking, it will always create a package and exit
# with 0 status (success)... if it does something more complex than
# build/install a single tarball, part of it might succeed and another
# part might fail. There's no way to detect a situation like that in
# the general case.

if [ "$( find . -type d -maxdepth 2 -a \! \( -path ./usr -o -path ./usr/doc -o -path . -o -path ./install \) )" = "" ]; then
	warn "package is empty (contains nothing outside of install/ and/or usr/doc)"
fi