summaryrefslogtreecommitdiff
path: root/update-kernel
blob: 30674742b645546caa65f21a6145b4f3d1d99c48 (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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/sh -euf

script=update-kernel
set -euf

# -----------------------------------------------------
# BASIC STUFF

is_yes() 
{
	case ${1-} in
        [Yy][Ee][Ss]|[Yy]|[Tt][Rr][Uu][Ee])
		return 0
		;;
	*)
		return 1
		;;
        esac
}

empty() 
{
	case ${@:+1} in
	'')     
		return 0 
		;;
	*)      
		return 1 
		;;
        esac
}

warn()
{
	echo "$script: $@" >&2
}

fail()
{
	echo "$script: $@" >&2
	exit 1
}

# ------------------------------------------------------------
# Main action

usage()
{
	echo "usage: $script [-vn] [-s server] [-B branch]" >&2
	exit 2
}

supfile=/usr/src/cvsupfile-sys
server="cvsup2.FreeBSD.org"
version=`uname -r | sed -En 's/^([.0-9]+).*/\1/p'`
branch="RELENG_`echo $version | tr '.' '_'`"
csup="csup -L0"
patch="patch -s"
patches="YES"

while getopts "B:ns:v" arg; do
	case $arg in
	B)
		branch="$OPTARG"
		;;
	n)
		patches="NO"
		;;
	s)
		server="$OPTARG"
		;;
	v)
		patch="patch"
		csup="csup -L2"
		;;
	*)
		usage
		;;
	esac
done

shift `expr $OPTIND - 1`
if [ $# -ne 0 ]; then
	usage
fi

if empty $version; then
	fail "couldn't determine OS version"
fi
	
if empty $branch; then
	fail "couldn't determine cvsup branch"
fi

base=`dirname $0`
base=`realpath $base`
patchdir=$base/kernel-$version

if [ ! -d $patchdir ]; then
	fail "patches directory does not exist: $patchdir"
fi

cat > $supfile << EOF
*default  host=$server
*default  base=/usr
*default  prefix=/usr
*default  release=cvs
*default  tag=$branch
*default  delete use-rel-suffix

src-sys
EOF

# Only allow up to 10 files to be deleted
$csup -d 10 $supfile

if is_yes $patches; then
	# Allow globbing from here on out
	set +f

	for file in $patchdir/*; do
		if [ -f "$file" ]; then
			$patch -d /usr/src -t -p0 < $file
		fi
	done
fi