Files
mrw-cxx/resolve-debbuilddeps.sh

134 lines
3.9 KiB
Bash
Raw Normal View History

2015-09-11 10:42:51 +00:00
#! /bin/bash -ex
## @id $Id$
## Resolve Debian Build Dependencies
## Installs all the required packages
## Call: ./resolve-debbuilddeps 'name of build schroot'
## e.g. call: ./resolve-debbuilddeps trusty_amd64
## 1 2 3 4 5 6 7 8
## 45678901234567890123456789012345678901234567890123456789012345678901234567890
SCHROOTNAME="$1"
2015-11-09 08:27:05 +00:00
if test -n "${SCHROOTNAME}"; then
DO="schroot -c "${SCHROOTNAME}" --"
SUDO="schroot -c "${SCHROOTNAME}" -u root -d / --"
else
DO=""
2016-09-28 15:02:21 +00:00
if grep -q '/docker' /proc/1/cgroup; then
SUDO=""
else
SUDO="sudo"
fi
2015-11-09 08:27:05 +00:00
fi
2015-09-11 10:42:51 +00:00
function install() {
2018-08-21 14:32:20 +00:00
if ${SUDO} apt-get install -y --force-yes --no-install-suggests --no-install-recommends $*; then
2015-11-09 08:27:05 +00:00
return 0
else
2015-11-09 08:27:05 +00:00
return 1
fi
}
TO_INSTALL=
2017-03-17 17:14:15 +00:00
DEPS=
2015-11-03 09:29:22 +00:00
if test -e debian/control.in -a ! -e debian/control; then
2017-12-06 14:18:18 +00:00
function pkg_exists() {
test -n "$(${DO} apt-cache policy -q ${1})"
}
function AX_PKG_CHECK() {
local DEV_DEB_DIST_PKG=
local DEV_DIST_PKG=
local pkg=
eval $4
if test -z "$2"; then
pkg=$1
else
pkg=$2
fi
pkg=${DEV_DEB_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-dev}
if pkg_exists "${pkg}"; then
echo $pkg
fi
}
function AX_PKG_REQUIRE() {
local DEV_DEB_DIST_PKG=
local DEV_DIST_PKG=
local pkg=
eval $6
if test -z "$2"; then
pkg=$1
else
pkg=$2
fi
if test -n "$4"; then
for f in $pkg $4; do
if pkg_exists "${f}-dev"; then
pkg=$f
break
fi
done
fi
echo ${DEV_DEB_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-dev}
}
DEPS+=" $(eval $(sed -n '/^ *AX_PKG_REQUIRE/{s,^ *\(AX_PKG_REQUIRE\) *(\(.*\)).*,\1 \2,;s.\[\([^]]*\)\],\?."\1".g;s,$,;,g;p}' configure.ac))"
DEPS+=" $(eval $(sed -n '/^ *AX_PKG_CHECK/{s,^ *\(AX_PKG_CHECK\) *(\(.*\)).*,\1 \2,;s.\[\([^]]*\)\],\?."\1".g;s,$,;,g;p}' configure.ac))"
2017-03-19 18:59:39 +00:00
for f in $(sed -n 's, *AX_\(DEB\|ALL\)_DEPEND_IFEXISTS(\([^)]*\)).*,\2,p' configure.ac); do
2017-12-06 14:18:18 +00:00
if pkg_exists "${f}"; then
2017-03-17 17:14:15 +00:00
DEPS+=" ${f}"
fi
done
2017-03-19 18:59:39 +00:00
for f in $(sed -n 's, *AX_\(DEB\|ALL\)_DEPEND_IFEXISTS_DEV(\([^)]*\)).*,\2,p' configure.ac); do
2017-12-06 14:18:18 +00:00
if pkg_exists "${f}-dev"; then
2017-03-19 18:59:39 +00:00
DEPS+=" ${f}-dev"
fi
done
for f in $(sed -n 's, *AX_\(DEB\|ALL\)\(_BUILD\)\?_DEPEND(\([^)]*\)).*,\3,p' configure.ac); do
2017-03-17 17:14:15 +00:00
DEPS+=" ${f}"
done
2017-03-19 18:59:39 +00:00
for f in $(sed -n 's, *AX_\(DEB\|ALL\)\(_BUILD\)\?_DEPEND_DEV(\([^)]*\)).*,\3,p' configure.ac); do
DEPS+=" ${f}-dev"
done
2015-11-03 09:29:22 +00:00
trap "rm debian/control" INT TERM EXIT
2017-03-19 18:59:39 +00:00
sed 's,@\(\(ALL\|DEB\)_DEPEND_IFEXISTS\|\(ALL\|DEB\)_BUILD_DEPEND\|\(ALL\|DEB\)_DEPEND\)@,,g' debian/control.in | \
sed 's,@[^@]*@, dummytext,g' > debian/control
2015-11-03 09:29:22 +00:00
fi
2015-09-11 10:42:51 +00:00
2015-11-09 08:27:05 +00:00
install dpkg-dev
2017-12-06 14:18:18 +00:00
2017-03-17 17:14:15 +00:00
DEPS+=" $(LANG= ${DO} dpkg-checkbuilddeps 2>&1 | sed -n '/Unmet build dependencies/ { s,.*Unmet build dependencies: ,,g; s, ([^)]*),,g; s, *| *,|,g; p}')"
2015-09-11 10:42:51 +00:00
for pa in ${DEPS}; do
2017-12-06 14:18:18 +00:00
if test "${pa//|/}" = "${pa}"; then
2015-11-03 09:29:22 +00:00
TO_INSTALL+=" ${pa}"
continue;
fi
2015-09-11 10:42:51 +00:00
success=0
2015-11-03 09:29:22 +00:00
for p in ${pa//|/ }; do
if install ${TO_INSTALL} ${p}; then
TO_INSTALL+=" ${p}"
success=1
break
2015-09-11 10:42:51 +00:00
fi
done
if test ${success} -eq 0; then
echo "**** Error: Installation Failed: ${pa}"
2015-11-03 09:29:22 +00:00
exit 1
2015-09-11 10:42:51 +00:00
fi
done
if test -n "${TO_INSTALL}" && ! install ${TO_INSTALL}; then
echo "**** Error: Installation Failed: ${TO_INSTALL}"
2015-11-03 09:29:22 +00:00
exit 1
fi
2017-12-06 14:18:18 +00:00
FILES="$(LANG= ${DO} dpkg-checkbuilddeps 2>&1 | sed -n '/Unmet build dependencies/ { s,.*Unmet build dependencies: ,,g; s, ([^)]*),,g; s, *| *,|,g; p}')"
if test -n "${FILES}"; then
echo "**** ERROR: Cannot install: " $FILES
exit 1
fi
2015-09-11 10:42:51 +00:00
echo "**** Success: All Dependencies Resolved"