I understand how to build TVHeadend using commands such as these from a cloned tvheadend directory:
./configure --enable-hdhomerun_client --disable-hdhomerun_static --disable-dvbscan --enable-libav
make -j$(nproc)
make install
I understand that the Autobuild.sh script is used to make an installer .deb file... but when I run it it also builds tvheadend so it must be calling the make command somewhere.
You can call it like this...
AUTOBUILD_CONFIGURE_EXTRA="--enable-hdhomerun_client --disable-hdhomerun_static --disable-dvbscan --enable-libav" ./Autobuild.sh
But I cannot understand exactly how Autobuild.sh works. Can anyone explain it?
This is the Autobuild.sh script...
#!/bin/bash
#
# Entry point for the Doozer autobuild system
#
# (c) Andreas Ă–man 2011. All rights reserved.
#
#
set -eu
BUILD_API_VERSION=3
EXTRA_BUILD_NAME=""
JARGS=""
JOBSARGS=""
TARGET="debian"
RELEASE="--release"
WORKINGDIR="/var/tmp/showtime-autobuild"
FILELIST="$PWD/filelist.txt"
OP="build"
while getopts "vht:e:j:w:o:c:" OPTION
do
case $OPTION in
v)
echo $BUILD_API_VERSION
exit 0
;;
h)
echo "This script is intended to be used by the autobuild system only"
exit 0
;;
t)
TARGET="$OPTARG"
;;
e)
EXTRA_BUILD_NAME="$OPTARG"
;;
j)
JOBSARGS="--jobs=$OPTARG"
JARGS="-j$OPTARG"
;;
w)
WORKINGDIR="$OPTARG"
;;
o)
OP="$OPTARG"
;;
esac
done
if [[ -z $TARGET ]]; then
echo "target (-t) not specified"
exit 1
fi
#
# $1 = local file path
# $2 = type
# $3 = content-type
# $4 = filename
#
artifact() {
echo "doozer-artifact:$PWD/$1:$2:$3:$4"
echo "$PWD/$1" >> "$FILELIST"
}
versioned_artifact() {
echo "doozer-versioned-artifact:$PWD/$1:$2:$3:$4"
echo "$PWD/$1" >> "$FILELIST"
}
git status
if [ -f Autobuild/${TARGET}.sh ]; then
source Autobuild/${TARGET}.sh
else
echo "target $TARGET not supported"
exit 1
fi
What calls artifact() and versioned_artifact() ?
On my system I would expect this line to get called...
source Autobuild/debian.sh
This is deban.sh
CHANGELOG=debian/changelog
NOW=`date -R`
VER=`$(dirname $0)/support/version`
[ -z "${DEBDIST:-}" ] && DEBDIST=""
BUILD_DEPS=`awk '\
BEGIN {cnt = 1;}
/^Build-Depends:/ {
split($0, line, ":");
split(line[2], deps, ",");
for (i in deps) {
d = deps[i];
sub(/^ */, "", d);
sub(/ *$/, "", d);
n = split(d, tokens, " ");
packages[cnt++] = tokens[1];
}
}
END {
out = "";
for(i = 1; i <= cnt; i++) {
out = out packages[i] " ";
}
print out;
}' debian/control`
case "${DEBDIST}" in
precise|trusty|jessie|raspbianjessie)
BUILD_DEPS=`echo ${BUILD_DEPS} | sed -e 's/libpcre2-dev/libpcre3-dev/g'` ;;
esac
build()
{
$(dirname $0)/support/changelog "$CHANGELOG" "$DEBDIST" "$VER"
export JOBSARGS
export JARGS
export AUTOBUILD_CONFIGURE_EXTRA
if ccache=$(which ccache); then
echo "Using ccache"
ccache -s
USE_CCACHE="--ccache"
else
USE_CCACHE=""
fi
export USE_CCACHE
dpkg-buildpackage -b -us -uc
for a in ../tvheadend*${VER}*.deb; do
versioned_artifact "$a" deb application/x-deb `basename $a`
done
for a in ../tvheadend*${VER}*.changes; do
versioned_artifact "$a" changes text/plain `basename $a`
done
}
clean()
{
for a in ../tvheadend*${VER}*.deb; do
rm -f "$a"
done
for a in ../tvheadend*${VER}*.changes; do
rm -f "$a"
done
rm -f ${CHANGELOG}
dh_clean
}
deps()
{
if [[ $EUID -ne 0 ]]; then
echo "Build dependencies must be installed as root"
exit 1
fi
apt-get -y install ${BUILD_DEPS}
}
buildenv()
{
echo $BUILD_DEPS | shasum | awk '{print $1}'
}
eval $OP
What process calls the methods: build(), clean(), deps and buildenv()?
What is calling the configure script, the make and make install commands?
What script or routine makes use of the build options in the AUTOBUILD_CONFIGURE_EXTRA environment variable?
Cheers,
Flex
<<