|
|
|
@ -1,4 +1,16 @@ |
|
|
|
|
#!/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" |
|
|
|
@ -21,40 +33,25 @@ die() |
|
|
|
|
exit 1 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[ -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 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= |
|
|
|
|
test_package() # $1=pkgname |
|
|
|
|
{ |
|
|
|
|
local pkg="$1" |
|
|
|
|
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 |
|
|
|
|
grep "$conf=" .config > /dev/null && SELECTED=1 && break |
|
|
|
|
done |
|
|
|
|
STAMP_SUCCESS="$STAMP_DIR_SUCCESS/$pkg" |
|
|
|
|
STAMP_FAILED="$STAMP_DIR_FAILED/$pkg" |
|
|
|
|
STAMP_BLACKLIST="$STAMP_DIR_BLACKLIST/$pkg" |
|
|
|
|
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" ] && continue |
|
|
|
|
[ -f "$STAMP_SUCCESS" ] && return |
|
|
|
|
[ -n "$SELECTED" ] || { |
|
|
|
|
echo "Package $pkg is not selected" |
|
|
|
|
continue |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
[ -f "$STAMP_BLACKLIST" ] && { |
|
|
|
|
echo "Package $pkg is blacklisted" |
|
|
|
|
continue |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
echo "Testing package $pkg..." |
|
|
|
|
rm -rf "$STAGING_DIR" |
|
|
|
@ -73,4 +70,34 @@ for pkg in `cat tmp/.packagedeps | grep CONFIG_PACKAGE | grep -v curdir | sed - |
|
|
|
|
touch "$STAMP_FAILED" |
|
|
|
|
echo "Building package $pkg failed!" |
|
|
|
|
fi |
|
|
|
|
done |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[ -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 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" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|