功能:扩展U盘兼容并优化插拔响应和导出负载
This commit is contained in:
1 parent
b2de05c6a6
commit
bb5f554820
9 files changed
+589
-73
No files matched your search
@@ -0,0 +1,60 @@
|
||||
#!/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
|
||||
Reference in new issue
Block a user