summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TODO1
-rw-r--r--locale/en_US/opkbuild.sh1
-rw-r--r--src/ob-checkbuilddeps.sh61
3 files changed, 62 insertions, 1 deletions
diff --git a/TODO b/TODO
index e9d9c43..0374dc1 100644
--- a/TODO
+++ b/TODO
@@ -26,7 +26,6 @@ Tasks:
- Review "IFS=... cmd ..." commands.
* "IFS=... read" is fine.
- Review eval commands.
- * Finish ob-checkbuilddeps.
* See if ob-installdocs can/should handle non-directory non-regular files.
* Write manual pages for functions and utilities.
diff --git a/locale/en_US/opkbuild.sh b/locale/en_US/opkbuild.sh
index 970fad9..f6a50d5 100644
--- a/locale/en_US/opkbuild.sh
+++ b/locale/en_US/opkbuild.sh
@@ -68,6 +68,7 @@ msg_opkbuild_host_arch_stat_header='Host system:'
# ob-checkbuilddeps
msg_opkbuild_checking_build_deps='Checking build dependencies...'
+msg_opkbuild_missing_build_deps='Missing build dependencies: %s'
# ob-buildenv
msg_opkbuild_setup_build_env='Setting up build environment...'
diff --git a/src/ob-checkbuilddeps.sh b/src/ob-checkbuilddeps.sh
index 53337dc..6d164b9 100644
--- a/src/ob-checkbuilddeps.sh
+++ b/src/ob-checkbuilddeps.sh
@@ -24,6 +24,7 @@
ob_use locale
ob_use output
ob_use package
+ob_use deps
main()
{
@@ -32,7 +33,67 @@ main()
ob_init_package '..' || exit 1
ob_parse_package_metadata -c '.opkbuild.cache' || exit 1
+ check_build_deps
+ return ${?}
+}
+
+check_build_deps()
+{
+ local deps=
+ local missing=
+ local dep=
+
ob_info "$(ob_get_msg 'checking_build_deps')"
+
+ deps="$(ob_get_source_parameter 'Build-Depends')"
+ deps="$(ob_reduce_deps -a "${OPK_HOST_ARCH}" \
+ -P "${OPK_HOST_PLAT}" "${deps}")"
+ deps="$(ob_substvars "${deps}")"
+
+ missing=''
+ IFS=','
+ for dep in ${deps}; do
+ unset IFS
+ if ! dep="$(check_dep "${dep}")"; then
+ missing="${missing}, ${dep}"
+ fi
+ done
+ unset IFS
+
+ missing="${missing#, }"
+ if [ "x${missing}" != 'x' ]; then
+ ob_error "$(ob_get_msg 'missing_build_deps')" "${missing}"
+ fi
+
+ return 0
+}
+
+check_dep()
+{
+ local dep="${1}"
+ local dep_pkg=
+ local dep_rel=
+ local dep_ver=
+ local status=
+ local pkg_ver=
+
+ ob_parse_dep -p dep_pkg -r dep_rel -v dep_ver "${dep}"
+ status="$(opkg status "${dep_pkg}")"
+
+ if ! printf '%s\n' "${status}" | grep '^Status: .*ok installed$' \
+ >/dev/null 2>&1; then
+ return 1
+ fi
+ if [ "x${dep_rel}" != 'x' ]; then
+ pkg_ver="$(printf '%s\n' "${status}" | \
+ sed -n 's/^Version: //p')"
+ if opkg compare-versions "${pkg_ver}" "${dep_rel}" "${dep_ver}"
+ then
+ return 1
+ fi
+ fi
+
+ return 0
}
main "${@}"