summaryrefslogtreecommitdiff
path: root/Tools/scripts/gen-compat.sh
blob: bb9d10db143b245af299c2b1e0a95e91cef5d21f (plain) (blame)
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
#!/bin/sh

set -eu
set -o pipefail

prog=${0##*/}

usage()
{
	echo "Usage $prog <version> <arch> <filelist>" >&2
	exit 1
}

if [ $# -ne 3 ]; then
	usage
fi

version=${1}
arch=${2}
filelist=${3}

if [ ! -f ${filelist} ]; then
	echo "filelist if not a file" >&2
	usage
fi

case $arch in
amd64)
	sets="base lib32" ;;
*)
	sets="base" ;;
esac
tarch=${arch}
if [ $tarch = "arm64" ]; then
	tarch="aarch64"
fi
if [ $tarch = "aarch64" ]; then
	arch="arm64"
fi

flist=""
while read l ; do
	flist="$flist */$l"
done <$filelist

tmpdir=$(mktemp -d)
trap "rm -rf $tmpdir" 0 1 2 3 15
mkdir -p ${tmpdir}/base
set -o noglob
for s in $sets; do
	echo "Fetching $s for ${version}"
	extract_list="$flist"
	if [ $s = "base" ]; then
		extract_list="${extract_list} */sys/param.h"
	fi
	fetch -o - https://download.freebsd.org/releases/${arch}/${version}-RELEASE/${s}.txz | tar -C ${tmpdir}/base -x -f - $extract_list
done
set +o noglob
fbsd_version=$(awk '/#define __FreeBSD_version/ { print $3 }' ${tmpdir}/base/usr/include/sys/param.h)
maj_version=${version%%.*}
date=$(date "+%Y%m%d")
compatdir="compat${maj_version}x-${tarch}-${version}.${fbsd_version}.${date}"
mkdir -p ${tmpdir}/${compatdir}/lib
case $sets in
*lib32*)
	mkdir -p ${tmpdir}/${compatdir}/lib32
	find ${tmpdir}/base/usr/lib32/ -name "*.so.*" -exec mv -v {} ${tmpdir}/${compatdir}/lib32/ \;
	;;
esac
find ${tmpdir}/base -name "*.so.*" -exec mv -v {} ${tmpdir}/${compatdir}/lib/ \;
tar -cvJf ${compatdir}.tar.xz -C ${tmpdir} ${compatdir}