mirror of
https://github.com/orbbec/OrbbecSDK_ROS2.git
synced 2026-10-11 15:09:48 +08:00
feat: update script to update bundled SDK
This commit is contained in:
@@ -16,11 +16,13 @@ config_backup_file=""
|
|||||||
usage() {
|
usage() {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
Usage:
|
Usage:
|
||||||
$(basename "$0") [--dry-run] <arm64-or-x86_64-sdk-directory>
|
$(basename "$0") [--dry-run] <arm64-or-x86_64-sdk-directory-or.tar.gz>
|
||||||
|
|
||||||
Replace the bundled Orbbec SDK for both supported ROS package architectures.
|
Replace the bundled Orbbec SDK for both supported ROS package architectures.
|
||||||
The other SDK directory is inferred by swapping the input path suffix between
|
The other SDK directory or archive is inferred by swapping the architecture
|
||||||
"_arm64" and "_x86_64".
|
suffix between "_arm64" and "_x86_64" (before .tar.gz for archives).
|
||||||
|
Both architectures must be present in the same input format.
|
||||||
|
Archives are extracted into temporary directories and cleaned up on exit.
|
||||||
|
|
||||||
Only the files used or distributed by orbbec_camera are copied:
|
Only the files used or distributed by orbbec_camera are copied:
|
||||||
- include/libobsensor/
|
- include/libobsensor/
|
||||||
@@ -35,7 +37,7 @@ SDK/licenses/ is left unchanged.
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
$(basename "$0") \\
|
$(basename "$0") \\
|
||||||
/home/user/Downloads/SDK/OrbbecSDK_v2.10.2_linux_arm64
|
/home/user/Downloads/SDK/OrbbecSDK_v2.10.2_linux_arm64.tar.gz
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,8 +134,17 @@ done
|
|||||||
[[ -f "${ROS_CONFIG_FILE}" && ! -L "${ROS_CONFIG_FILE}" ]] ||
|
[[ -f "${ROS_CONFIG_FILE}" && ! -L "${ROS_CONFIG_FILE}" ]] ||
|
||||||
die "ROS SDK configuration must be a real file: ${ROS_CONFIG_FILE}"
|
die "ROS SDK configuration must be a real file: ${ROS_CONFIG_FILE}"
|
||||||
|
|
||||||
[[ -d "$1" ]] || die "SDK directory not found: $1"
|
archive_suffix=""
|
||||||
|
if [[ -d "$1" ]]; then
|
||||||
|
:
|
||||||
|
elif [[ -f "$1" && "$1" == *.tar.gz ]]; then
|
||||||
|
archive_suffix=".tar.gz"
|
||||||
|
command -v tar >/dev/null 2>&1 || die "required command not found: tar"
|
||||||
|
else
|
||||||
|
die "SDK directory or .tar.gz archive not found: $1"
|
||||||
|
fi
|
||||||
input_source="$(readlink -f -- "$1")"
|
input_source="$(readlink -f -- "$1")"
|
||||||
|
input_source="${input_source%"${archive_suffix}"}"
|
||||||
|
|
||||||
case "${input_source}" in
|
case "${input_source}" in
|
||||||
*_arm64)
|
*_arm64)
|
||||||
@@ -145,12 +156,19 @@ case "${input_source}" in
|
|||||||
arm64_source="${input_source%_x86_64}_arm64"
|
arm64_source="${input_source%_x86_64}_arm64"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
die "SDK directory name must end with _arm64 or _x86_64: ${input_source}"
|
die "SDK name must end with _arm64 or _x86_64 (before .tar.gz): ${input_source}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
[[ -d "${arm64_source}" ]] || die "paired ARM64 SDK directory not found: ${arm64_source}"
|
if [[ -n "${archive_suffix}" ]]; then
|
||||||
[[ -d "${x64_source}" ]] || die "paired x86-64 SDK directory not found: ${x64_source}"
|
[[ -f "${arm64_source}${archive_suffix}" ]] ||
|
||||||
|
die "paired ARM64 SDK archive not found: ${arm64_source}${archive_suffix}"
|
||||||
|
[[ -f "${x64_source}${archive_suffix}" ]] ||
|
||||||
|
die "paired x86-64 SDK archive not found: ${x64_source}${archive_suffix}"
|
||||||
|
else
|
||||||
|
[[ -d "${arm64_source}" ]] || die "paired ARM64 SDK directory not found: ${arm64_source}"
|
||||||
|
[[ -d "${x64_source}" ]] || die "paired x86-64 SDK directory not found: ${x64_source}"
|
||||||
|
fi
|
||||||
case "${arm64_source}" in
|
case "${arm64_source}" in
|
||||||
"${SDK_ROOT}" | "${SDK_ROOT}"/*) die "the ARM64 source cannot be inside ${SDK_ROOT}" ;;
|
"${SDK_ROOT}" | "${SDK_ROOT}"/*) die "the ARM64 source cannot be inside ${SDK_ROOT}" ;;
|
||||||
esac
|
esac
|
||||||
@@ -267,6 +285,31 @@ copy_architecture() {
|
|||||||
cp -a -- "${source_dir}/lib/extensions" "${destination_dir}/lib/"
|
cp -a -- "${source_dir}/lib/extensions" "${destination_dir}/lib/"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extract_sdk_archive() {
|
||||||
|
local archive=$1
|
||||||
|
local destination=$2
|
||||||
|
local expected_root=${archive##*/}
|
||||||
|
expected_root=${expected_root%.tar.gz}
|
||||||
|
|
||||||
|
mkdir -p -- "${destination}" || return 1
|
||||||
|
tar --extract --gzip --file="${archive}" --directory="${destination}" --no-same-owner || return 1
|
||||||
|
# Official archives contain a directory named after the archive. Also accept
|
||||||
|
# archives with include/ and lib/ directly at the root.
|
||||||
|
if [[ -d "${destination}/${expected_root}" ]]; then
|
||||||
|
printf '%s\n' "${destination}/${expected_root}"
|
||||||
|
else
|
||||||
|
printf '%s\n' "${destination}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
work_dir="$(mktemp -d -- "${PACKAGE_DIR}/.sdk-update.XXXXXX")"
|
||||||
|
if [[ -n "${archive_suffix}" ]]; then
|
||||||
|
arm64_source="$(extract_sdk_archive "${arm64_source}${archive_suffix}" "${work_dir}/source-arm64")" ||
|
||||||
|
die "failed to extract ARM64 SDK archive"
|
||||||
|
x64_source="$(extract_sdk_archive "${x64_source}${archive_suffix}" "${work_dir}/source-x64")" ||
|
||||||
|
die "failed to extract x86-64 SDK archive"
|
||||||
|
fi
|
||||||
|
|
||||||
verify_source_layout "${arm64_source}" arm64
|
verify_source_layout "${arm64_source}" arm64
|
||||||
verify_source_layout "${x64_source}" x64
|
verify_source_layout "${x64_source}" x64
|
||||||
cmp -s -- "${arm64_source}/lib/OrbbecSDKConfig.xml" \
|
cmp -s -- "${arm64_source}/lib/OrbbecSDKConfig.xml" \
|
||||||
@@ -278,7 +321,6 @@ x64_version="$(sdk_version "${x64_source}")"
|
|||||||
[[ "${arm64_version}" == "${x64_version}" ]] ||
|
[[ "${arm64_version}" == "${x64_version}" ]] ||
|
||||||
die "SDK versions do not match: ARM64=${arm64_version}, x86-64=${x64_version}"
|
die "SDK versions do not match: ARM64=${arm64_version}, x86-64=${x64_version}"
|
||||||
|
|
||||||
work_dir="$(mktemp -d -- "${PACKAGE_DIR}/.sdk-update.XXXXXX")"
|
|
||||||
staged_sdk="${work_dir}/SDK.new"
|
staged_sdk="${work_dir}/SDK.new"
|
||||||
staged_config="${work_dir}/OrbbecSDKConfig_v2.0.xml.new"
|
staged_config="${work_dir}/OrbbecSDKConfig_v2.0.xml.new"
|
||||||
mkdir -p -- "${staged_sdk}"
|
mkdir -p -- "${staged_sdk}"
|
||||||
|
|||||||
Reference in New Issue
Block a user