X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=blobdiff_plain;f=scripts%2Fdeptest.sh;h=762821a39cb078a278c55f88fd24f95af532683e;hp=43757026ccdcd39beac9a7a1c3664040cec13f24;hb=fb0be607f8219e2465562d3aa4ee93548d3a1b30;hpb=27089a8f48a2a026811586aeb9af6342969e56b0 diff --git a/scripts/deptest.sh b/scripts/deptest.sh index 43757026cc..762821a39c 100755 --- a/scripts/deptest.sh +++ b/scripts/deptest.sh @@ -1,43 +1,105 @@ -DIR="$PWD/tmp/deptest" -STAMP_DIR="$DIR/stamp" -BUILD_DIR="$DIR/build" -STAGING_DIR="$DIR/staging" -STAGING_DIR_HOST="$DIR/staging_host" -STAGING_DIR_HOST_TMPL="$DIR/staging_host_tmpl" +#!/bin/bash +# +# Automated OpenWrt package dependency checker +# +# Copyright (C) 2009-2010 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# Usage: +# No commandline arguments => check dependencies of all installed packages +# Package name(s) as arguments => only test the specified packages +# + +SCRIPTDIR="$(dirname "$0")" +[ "${SCRIPTDIR:0:1}" = "/" ] || SCRIPTDIR="$PWD/$SCRIPTDIR" +BASEDIR="$SCRIPTDIR/.." + +DIR="$BASEDIR/tmp/deptest" +STAMP_DIR_SUCCESS="$DIR/stamp-success" +STAMP_DIR_FAILED="$DIR/stamp-failed" +STAMP_DIR_BLACKLIST="$DIR/stamp-blacklist" +BUILD_DIR="$DIR/build_dir/target" +BUILD_DIR_HOST="$DIR/build_dir/host" +STAGING_DIR="$DIR/staging_dir" +STAGING_DIR_HOST="$DIR/staging_dir_host" +STAGING_DIR_HOST_TMPL="$DIR/staging_dir_host_tmpl" LOG_DIR="$DIR/logs" -mkdir -p "$STAMP_DIR" "$BUILD_DIR" "$LOG_DIR" +die() +{ + echo "$@" + exit 1 +} + +test_package() # $1=pkgname +{ + local pkg="$1" + [ -z "$(echo "$pkg" | grep -e '/')" -a "$pkg" != "." -a "$pkg" != ".." ] || \ + die "Package name \"$pkg\" contains illegal characters" + local SELECTED= + for conf in `grep CONFIG_PACKAGE tmp/.packagedeps | grep -E "[ /]$pkg\$" | sed -e 's,package-$(\(CONFIG_PACKAGE_.*\)).*,\1,'`; do + grep "$conf=" .config > /dev/null && SELECTED=1 && break + done + local STAMP_SUCCESS="$STAMP_DIR_SUCCESS/$pkg" + local STAMP_FAILED="$STAMP_DIR_FAILED/$pkg" + local STAMP_BLACKLIST="$STAMP_DIR_BLACKLIST/$pkg" + rm -f "$STAMP_FAILED" + [ -f "$STAMP_SUCCESS" ] && return + [ -n "$SELECTED" ] || { + echo "Package $pkg is not selected" + return + } + [ -f "$STAMP_BLACKLIST" ] && { + echo "Package $pkg is blacklisted" + return + } + echo "Testing package $pkg..." + rm -rf "$STAGING_DIR" + mkdir -p "$STAGING_DIR" + rm -rf "$STAGING_DIR_HOST" + cp -al "$STAGING_DIR_HOST_TMPL" "$STAGING_DIR_HOST" + make package/$pkg/compile \ + BUILD_DIR="$BUILD_DIR" \ + BUILD_DIR_HOST="$BUILD_DIR_HOST" \ + STAGING_DIR="$STAGING_DIR" \ + STAGING_DIR_HOST="$STAGING_DIR_HOST" \ + V=99 >"$LOG_DIR/$(basename $pkg).log" 2>&1 + if [ $? -eq 0 ]; then + touch "$STAMP_SUCCESS" + else + touch "$STAMP_FAILED" + echo "Building package $pkg failed!" + fi +} + +[ -f "$BASEDIR/include/toplevel.mk" ] || \ + die "Error: Could not find buildsystem base directory" +[ -f "$BASEDIR/.config" ] || \ + die "The buildsystem is not configured. Please run make menuconfig." +cd "$BASEDIR" || die "Failed to enter base directory" + +mkdir -p "$STAMP_DIR_SUCCESS" "$STAMP_DIR_FAILED" "$STAMP_DIR_BLACKLIST" \ + "$BUILD_DIR" "$BUILD_DIR_HOST" "$LOG_DIR" [ -d "$STAGING_DIR_HOST_TMPL" ] || { rm -rf staging_dir/host - make tools/install || { - echo "make tools/install failed, please check" - exit 1 - } + make tools/install V=99 || die "make tools/install failed, please check" cp -al staging_dir/host "$STAGING_DIR_HOST_TMPL" + make toolchain/install V=99 || die "make toolchain/install failed, please check" + make target/linux/install V=99 || die "make target/linux/install failed, please check" } -for pkg in `cat tmp/.packagedeps | grep CONFIG_PACKAGE | grep -v curdir | sed -e 's,.*[/=]\s*,,' | sort -u`; do - SELECTED= - for conf in `grep CONFIG_PACKAGE tmp/.packagedeps | grep " $pkg\$" | sed -e 's,package-$(\(CONFIG_PACKAGE_.*\)).*,\1,'`; do - grep "$conf=" .config > /dev/null && SELECTED=1 - done - [ -f "$STAMP_DIR/$pkg-done" ] && continue - [ -n "$SELECTED" ] || { - echo "Package $pkg is not selected" - continue - } - echo "Testing package $pkg..." - rm -rf "$STAGING_DIR" - mkdir -p "$STAGING_DIR" - rm -rf "$STAGING_DIR_HOST" - cp -al "$STAGING_DIR_HOST_TMPL" "$STAGING_DIR_HOST" - make package/$pkg/compile \ - BUILD_DIR="$BUILD_DIR" \ - STAGING_DIR="$STAGING_DIR" \ - STAGING_DIR_HOST="$STAGING_DIR_HOST" \ - V=99 >"$LOG_DIR/$(basename $pkg).log" 2>&1 \ - && touch "$STAMP_DIR/$pkg-done" || { - echo "Building package $pkg failed!" - } -done +if [ $# -eq 0 ]; then + # iterate over all packages + for pkg in `cat tmp/.packagedeps | grep CONFIG_PACKAGE | grep -v curdir | sed -e 's,.*[/=]\s*,,' | sort -u`; do + test_package "$pkg" + done +else + # Only check the specified packages + while [ $# -ne 0 ]; do + test_package "$1" + shift + done +fi