105 lines
2.0 KiB
Bash
Executable File
105 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#
|
|
# Build a new directory of modules based on an inclusion list.
|
|
# The includsion list format must be a bash regular expression.
|
|
#
|
|
# usage: $0 ROOT INCLUSION_LIST
|
|
# example: $0 \
|
|
# debian/build/build-virtual-ALL debian/build/build-virtual \
|
|
# debian.master/control.d/virtual.inclusion-list \
|
|
# virtual.depmap
|
|
master=0
|
|
if [ "$1" = "--master" ]; then
|
|
master=1
|
|
shift
|
|
fi
|
|
|
|
ROOT=$1
|
|
NROOT=$2
|
|
ILIST=$3
|
|
DEPMAP=$4
|
|
|
|
tmp="/tmp/module-inclusion.$$"
|
|
|
|
#
|
|
# Prep a destination directory.
|
|
#
|
|
mkdir -p ${NROOT}
|
|
|
|
{
|
|
# Copy over the framework into the master package.
|
|
if [ "$master" -eq 1 ]; then
|
|
(cd ${ROOT}; find . ! -name "*.ko" -type f)
|
|
fi
|
|
|
|
# Copy over modules by name or pattern.
|
|
while read -r i
|
|
do
|
|
#
|
|
# 'find' blurts a warning if it cannot find any ko files.
|
|
#
|
|
case "$i" in
|
|
\!*)
|
|
(cd ${ROOT}; ${i#!} || true)
|
|
;;
|
|
*\**)
|
|
(cd ${ROOT}; eval find "${i}" -name "*.ko" || true)
|
|
;;
|
|
*)
|
|
echo "$i"
|
|
;;
|
|
esac
|
|
done <"${ILIST}"
|
|
} >"$tmp"
|
|
|
|
# Copy over the listed modules.
|
|
while read i
|
|
do
|
|
# If this is already moved over, all is good.
|
|
if [ -f "${NROOT}/$i" ]; then
|
|
:
|
|
|
|
# If present in the source, moved it over.
|
|
elif [ -f "${ROOT}/$i" ]; then
|
|
mkdir -p "${NROOT}/`dirname $i`"
|
|
mv "${ROOT}/$i" "${NROOT}/$i"
|
|
|
|
# Otherwise, it is missing.
|
|
else
|
|
echo "Warning: Could not find ${ROOT}/$i" 1>&2
|
|
fi
|
|
done <"$tmp"
|
|
|
|
# Copy over any dependancies, note if those are missing
|
|
# we know they are in a pre-requisite package as they must
|
|
# have existed at depmap generation time, and can only have
|
|
# moved into a package.
|
|
let n=0 || true
|
|
while [ -s "$tmp" ]
|
|
do
|
|
let n="$n+1" || true
|
|
[ "$n" = "20" ] && break || true
|
|
|
|
echo "NOTE: pass $n: dependency scan" 1>&2
|
|
|
|
while read i
|
|
do
|
|
grep "^$i " "$DEPMAP" | \
|
|
while read m d
|
|
do
|
|
if [ -f "${ROOT}/$d" ]; then
|
|
echo "NOTE: pass $n: ${i} pulls in ${d}" 1>&2
|
|
echo "$d"
|
|
mkdir -p "${NROOT}/`dirname $d`"
|
|
mv "${ROOT}/$d" "${NROOT}/$d"
|
|
fi
|
|
done
|
|
done <"$tmp" >"$tmp.new"
|
|
mv -f "$tmp.new" "$tmp"
|
|
done
|
|
|
|
rm -f "$tmp"
|
|
|
|
exit 0
|