61 lines
2.8 KiB
Bash
61 lines
2.8 KiB
Bash
#!/bin/sh
|
|
# Run on the Linux box as its build user. Download headers only; do not upgrade
|
|
# system GLib/libusb or overwrite the distribution's /usr/bin/usbredirect.
|
|
set -eu
|
|
build_root="${1:?usage: build-usbredirect-private.sh ABSOLUTE_NEW_BUILD_DIRECTORY}"
|
|
case "$build_root" in /*) ;; *) exit 2 ;; esac
|
|
mkdir "$build_root"
|
|
cd "$build_root"
|
|
mkdir headers
|
|
python3 - <<'PY'
|
|
import hashlib, pathlib, tarfile, urllib.request
|
|
url = 'https://www.spice-space.org/download/usbredir/usbredir-0.15.0.tar.xz'
|
|
data = urllib.request.urlopen(url, timeout=60).read()
|
|
expected = '6dc2a380277688a068191245dac2ab7063a552999d8ac3ad8e841c10ff050961'
|
|
if hashlib.sha256(data).hexdigest() != expected:
|
|
raise SystemExit('usbredir source checksum mismatch')
|
|
archive = pathlib.Path('usbredir-0.15.0.tar.xz')
|
|
archive.write_bytes(data)
|
|
with tarfile.open(archive) as tar:
|
|
base = pathlib.Path('.').resolve()
|
|
for item in tar.getmembers():
|
|
if not (base / item.name).resolve().is_relative_to(base) or item.issym() or item.islnk():
|
|
raise SystemExit('unexpected archive member')
|
|
tar.extractall('.')
|
|
PY
|
|
# apt validates package hashes from the configured repository metadata. These
|
|
# two development packages are extracted into this private directory only.
|
|
apt-get download libglib2.0-dev libusb-1.0-0-dev
|
|
for package in ./*.deb; do dpkg-deb -x "$package" headers; done
|
|
arch=$(cc -print-multiarch)
|
|
cat >config.h <<'EOF'
|
|
#define PACKAGE_STRING "usbredir 0.15.0"
|
|
#define PACKAGE_VERSION "0.15.0"
|
|
#define VERSION "0.15.0"
|
|
#define PACKAGE_BUGREPORT "https://gitlab.freedesktop.org/spice/usbredir/issues"
|
|
#define USBREDIR_VISIBLE __attribute__((visibility("default")))
|
|
EOF
|
|
source_dir="$build_root/usbredir-0.15.0"
|
|
# Static usbredir objects; GLib, libusb and libc remain the installed runtime.
|
|
cc -O2 -g -fstack-protector-strong -D_FORTIFY_SOURCE=2 -pthread \
|
|
-Wno-deprecated-declarations -I. \
|
|
-Iheaders/usr/include/glib-2.0 \
|
|
-I"headers/usr/lib/$arch/glib-2.0/include" \
|
|
-Iheaders/usr/include/gio-unix-2.0 -Iheaders/usr/include/libusb-1.0 \
|
|
-I"$source_dir/usbredirhost" -I"$source_dir/usbredirparser" \
|
|
"$source_dir/tools/usbredirect.c" "$source_dir/usbredirhost/usbredirhost.c" \
|
|
"$source_dir/usbredirparser/usbredirparser.c" "$source_dir/usbredirparser/usbredirfilter.c" \
|
|
"/usr/lib/$arch/libgio-2.0.so.0" "/usr/lib/$arch/libgobject-2.0.so.0" \
|
|
"/usr/lib/$arch/libglib-2.0.so.0" "/usr/lib/$arch/libusb-1.0.so.0" \
|
|
-o usbredirect
|
|
./usbredirect --help
|
|
for suite in filter serializer; do
|
|
cc -O2 -pthread -I. -Iheaders/usr/include/glib-2.0 \
|
|
-I"headers/usr/lib/$arch/glib-2.0/include" -I"$source_dir/usbredirparser" \
|
|
"$source_dir/tests/$suite.c" "$source_dir/usbredirparser/usbredirparser.c" \
|
|
"$source_dir/usbredirparser/usbredirfilter.c" \
|
|
"/usr/lib/$arch/libglib-2.0.so.0" -o "test-$suite"
|
|
"./test-$suite"
|
|
done
|
|
sha256sum usbredirect
|