From a7ab7c21761ca2242ddd43c8ce113ffa164e08a2 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Mon, 12 May 2014 23:14:50 -0400 Subject: ob-checkbuilddeps: Finally implement. --- 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 "${@}" -- cgit v0.9.1