Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports
Path: blob/main/Tools/scripts/gen-compat.sh
26694 views
1
#!/bin/sh
2
3
set -eu
4
set -o pipefail
5
6
prog=${0##*/}
7
8
usage()
9
{
10
echo "Usage $prog <version> <arch> <filelist>" >&2
11
exit 1
12
}
13
14
if [ $# -ne 3 ]; then
15
usage
16
fi
17
18
version=${1}
19
arch=${2}
20
filelist=${3}
21
22
if [ ! -f ${filelist} ]; then
23
echo "filelist if not a file" >&2
24
usage
25
fi
26
27
case $arch in
28
amd64 | powerpc64)
29
sets="base lib32" ;;
30
aarch64)
31
case $version in
32
13.*)
33
sets="base" ;;
34
*)
35
sets="base lib32" ;;
36
esac
37
;;
38
*)
39
sets="base" ;;
40
esac
41
tarch=${arch}
42
if [ $tarch = "arm64" ]; then
43
tarch="aarch64"
44
fi
45
if [ $tarch = "aarch64" ]; then
46
arch="arm64"
47
fi
48
if [ $tarch = "powerpc64" ] || [ $tarch = "powerpc64le" ]; then
49
arch="powerpc"
50
fi
51
if [ $tarch = "riscv64" ]; then
52
arch="riscv"
53
fi
54
55
flist=""
56
while read l ; do
57
flist="$flist */$l"
58
done <$filelist
59
60
tmpdir=$(mktemp -d)
61
trap "rm -rf $tmpdir" 0 1 2 3 15
62
mkdir -p ${tmpdir}/base
63
set -o noglob
64
for s in $sets; do
65
echo "Fetching $s for ${version}"
66
extract_list="$flist"
67
if [ $s = "base" ]; then
68
extract_list="${extract_list} */sys/param.h"
69
fi
70
fetch -o - https://download.freebsd.org/releases/${arch}/${tarch}/${version}-RELEASE/${s}.txz | tar -C ${tmpdir}/base -x -f - $extract_list
71
done
72
set +o noglob
73
fbsd_version=$(awk '/#define __FreeBSD_version/ { print $3 }' ${tmpdir}/base/usr/include/sys/param.h)
74
maj_version=${version%%.*}
75
date=$(date "+%Y%m%d")
76
compatdir="compat${maj_version}x-${tarch}-${version}.${fbsd_version}.${date}"
77
mkdir -p ${tmpdir}/${compatdir}/lib
78
case $sets in
79
*lib32*)
80
mkdir -p ${tmpdir}/${compatdir}/lib32
81
find ${tmpdir}/base/usr/lib32/ -name "*.so.*" -exec mv -v {} ${tmpdir}/${compatdir}/lib32/ \;
82
;;
83
esac
84
find ${tmpdir}/base -name "*.so.*" -exec mv -v {} ${tmpdir}/${compatdir}/lib/ \;
85
tar -cvJf ${compatdir}.tar.xz -C ${tmpdir} ${compatdir}
86
87