buildsystem: big rework & cleanup - PART-1: split functions from 'config/path' to an seperate file 'config/functions', rework and cleanup some build scripts, remove references to $TARGET_PLATFORM, add support for more then one downloadurl for $PKG_URL (partially done), remove support for: $PKG_DIR/arch, $PKG_DIR/platform, $PKG_DIR/url files, remove support for *.diff patches, create download-stampfiles in sources/$PKG_NAME, create md5 files after download, add support to download all sources at once with './scripts/get'

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2010-11-19 22:01:08 +01:00
parent e258dca592
commit d691d2b8f6
13 changed files with 179 additions and 218 deletions

112
config/functions Normal file
View File

@ -0,0 +1,112 @@
setup_toolchain() {
if [ "$1" = "--optimize" ]; then
OPTIMIZE=yes
shift
fi
if [ "$1" = target ]; then
export CC=$TARGET_CC
export CXX=$TARGET_CXX
export LD=$TARGET_LD
export AS=$TARGET_AS
export AR=$TARGET_AR
export NM=$TARGET_NM
export RANLIB=$TARGET_RANLIB
export OBJCOPY=$TARGET_OBJCOPY
export STRIP=$TARGET_STRIP
export CPPFLAGS="$TARGET_CPPFLAGS"
export CFLAGS="$TARGET_CFLAGS"
export CXXFLAGS="$TARGET_CXXFLAGS"
export LDFLAGS="$TARGET_LDFLAGS"
export PKG_CONFIG_PATH="$TARGET_PKG_CONFIG_PATH"
export PKG_CONFIG_LIBDIR="$TARGET_PKG_CONFIG_LIBDIR"
export PKG_CONFIG_SYSROOT_DIR="$TARGET_PKG_CONFIG_SYSROOT_DIR"
# set CMAKE configfile for target
export CMAKE_CONF=$ROOT/$TOOLCHAIN/etc/cmake-$TARGET_NAME.conf
elif [ "$1" = host ]; then
export AWK=$HOST_AWK
export CC=$HOST_CC
export CXX=$HOST_CXX
export LD=$HOST_LD
export AS=$HOST_AS
export AR=$HOST_AR
export NM=$HOST_NM
export RANLIB=$HOST_RANLIB
export OBJCOPY=$HOST_OBJCOPY
export STRIP=$HOST_STRIP
export CPPFLAGS="$HOST_CPPFLAGS"
export CFLAGS="$HOST_CFLAGS"
export CXXFLAGS="$HOST_CXXFLAGS"
export LDFLAGS="$HOST_LDFLAGS"
export PKG_CONFIG_PATH="$HOST_PKG_CONFIG_PATH"
export PKG_CONFIG_LIBDIR="$HOST_PKG_CONFIG_LIBDIR"
export PKG_CONFIG_SYSROOT_DIR="$HOST_PKG_CONFIG_SYSROOT_DIR"
# set CMAKE configfile for host
export CMAKE_CONF=$ROOT/$TOOLCHAIN/etc/cmake-$HOST_NAME.conf
fi
}
kernel_path() {
ls -d $ROOT/$BUILD/linux-[0-9]*
}
tolower(){
echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
}
require_eglibc() {
if [ "$TARGET_LIBC" != eglibc ]; then
echo "$1 requires eglibc, aborting."
exit 1
fi
}
require_cxx() {
if [ "$TOOLCHAIN_CXX" != yes ]; then
echo "$1 requires C++ toolchain support, aborting."
exit 1
fi
}
xorg_drv_configure_prepend() {
incdir=${SYSROOT_PREFIX}/usr/include/xorg
for f in dri.h sarea.h dristruct.h exa.h damage.h xf86Module.h; do
incfile="$incdir/$f"
if [ -f "$incfile" ]; then
p=`echo "$incfile" | sed 'y%*+%pp%;s%[^_[:alnum:]]%_%g'`
eval "export ac_cv_file_$p=yes"
fi
done
}
add_user() {
# Usage: add_user "username" "password" "userid" "groupid" "description" "home" "shell"
mkdir -p ${INSTALL}/etc
touch ${INSTALL}/etc/passwd
if [ -z "`grep "$1:" ${INSTALL}/etc/passwd`" ]; then
echo "$1:$2:$3:$4:$5:$6:$7" >> ${INSTALL}/etc/passwd
fi
}
add_group() {
# Usage: add_group "groupname" "groupid" ("members")
mkdir -p ${INSTALL}/etc
touch ${INSTALL}/etc/group
if [ -z "`grep "$1:" ${INSTALL}/etc/group`" ]; then
echo "$1:x:$2:$3" >> ${INSTALL}/etc/group
fi
}
get_version() {
if [ "$OPENELEC_VERSION" = devel -o "$OPENELEC_VERSION" = debug ]; then
BUILD_DATE=`date +%Y%m%d`
GIT_BUILD=`git log --pretty=format:'' | wc -l`
OPENELEC_VERSION=$OPENELEC_VERSION-$BUILD_DATE-r$GIT_BUILD
fi
TARGET_VERSION="$PROJECT.$TARGET_ARCH-$OPENELEC_VERSION"
}

View File

@ -1,16 +1,5 @@
set -e
# setup initial directorys
CONFIG=config
SCRIPTS=scripts
PACKAGES=packages
SOURCES=sources
BUILD_BASE=build
TARGET=target
ADDONS=addons
test -f config/target-$TARGET_PLATFORM && . config/target-$TARGET_PLATFORM
# determine architecture's family
case $TARGET_ARCH in
i386)
@ -35,12 +24,20 @@ if [ -z "$TARGET_CPU" ]; then
esac
fi
# setup initial directorys
CONFIG=config
SCRIPTS=scripts
PACKAGES=packages
SOURCES=sources
BUILD_BASE=build
TARGET=target
ADDONS=addons
HOST_NAME=`$SCRIPTS/configtools/config.guess`
TARGET_NAME=$TARGET_FAMILY-openelec-linux-gnu
OPENELEC_SRC=http://sources.openelec.tv/src/$OPENELEC_VERSION
BUILD=$BUILD_BASE.OpenELEC-$PROJECT.$TARGET_ARCH.$OPENELEC_VERSION
[ -n "$TARGET_PLATFORM" ] && BUILD=$BUILD.$TARGET_PLATFORM
TARGET_IMG=$ROOT/$TARGET
TARGET_ADDONS="$TARGET_IMG/$ADDONS/$ADDON_PATH"
ADDON_BUILD="$BUILD/$ADDONS/$1"
@ -212,57 +209,10 @@ if [ -f $ROOT/$TOOLCHAIN/bin/autoconf ]; then
export AUTORECONF="$ROOT/$TOOLCHAIN/bin/autoreconf -v -f -i -I $ACLOCAL_DIR"
fi
setup_toolchain() {
if [ "$1" = "--optimize" ]; then
OPTIMIZE=yes
shift
fi
VERSION_SUFFIX=$TARGET_ARCH
if [ "$1" = target ]; then
export CC=$TARGET_CC
export CXX=$TARGET_CXX
export LD=$TARGET_LD
export AS=$TARGET_AS
export AR=$TARGET_AR
export NM=$TARGET_NM
export RANLIB=$TARGET_RANLIB
export OBJCOPY=$TARGET_OBJCOPY
export STRIP=$TARGET_STRIP
export CPPFLAGS="$TARGET_CPPFLAGS"
export CFLAGS="$TARGET_CFLAGS"
export CXXFLAGS="$TARGET_CXXFLAGS"
export LDFLAGS="$TARGET_LDFLAGS"
export PKG_CONFIG_PATH="$TARGET_PKG_CONFIG_PATH"
export PKG_CONFIG_LIBDIR="$TARGET_PKG_CONFIG_LIBDIR"
export PKG_CONFIG_SYSROOT_DIR="$TARGET_PKG_CONFIG_SYSROOT_DIR"
. config/functions
# set CMAKE configfile for target
export CMAKE_CONF=$ROOT/$TOOLCHAIN/etc/cmake-$TARGET_NAME.conf
elif [ "$1" = host ]; then
export AWK=$HOST_AWK
export CC=$HOST_CC
export CXX=$HOST_CXX
export LD=$HOST_LD
export AS=$HOST_AS
export AR=$HOST_AR
export NM=$HOST_NM
export RANLIB=$HOST_RANLIB
export OBJCOPY=$HOST_OBJCOPY
export STRIP=$HOST_STRIP
export CPPFLAGS="$HOST_CPPFLAGS"
export CFLAGS="$HOST_CFLAGS"
export CXXFLAGS="$HOST_CXXFLAGS"
export LDFLAGS="$HOST_LDFLAGS"
export PKG_CONFIG_PATH="$HOST_PKG_CONFIG_PATH"
export PKG_CONFIG_LIBDIR="$HOST_PKG_CONFIG_LIBDIR"
export PKG_CONFIG_SYSROOT_DIR="$HOST_PKG_CONFIG_SYSROOT_DIR"
# set CMAKE configfile for host
export CMAKE_CONF=$ROOT/$TOOLCHAIN/etc/cmake-$HOST_NAME.conf
fi
}
setup_toolchain target
SILENT_OUT=3
@ -276,76 +226,3 @@ else
fi
INDENT_SIZE=4
VERSION_SUFFIX=$TARGET_ARCH
[ -n "$TARGET_PLATFORM" ] && VERSION_SUFFIX=$TARGET_PLATFORM
# read generic personal options if available
if [ -f ~/.openelec/options ]; then
. ~/.openelec/options
fi
# read project based personal options if available
if [ -f ~/.openelec/$PROJECT/options ]; then
. ~/.openelec/$PROJECT/options
fi
kernel_path() {
ls -d $ROOT/$BUILD/linux-[0-9]*
}
tolower(){
echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
}
require_eglibc() {
if [ "$TARGET_LIBC" != eglibc ]; then
echo "$1 requires eglibc, aborting."
exit 1
fi
}
require_cxx() {
if [ "$TOOLCHAIN_CXX" != yes ]; then
echo "$1 requires C++ toolchain support, aborting."
exit 1
fi
}
xorg_drv_configure_prepend() {
incdir=${SYSROOT_PREFIX}/usr/include/xorg
for f in dri.h sarea.h dristruct.h exa.h damage.h xf86Module.h; do
incfile="$incdir/$f"
if [ -f "$incfile" ]; then
p=`echo "$incfile" | sed 'y%*+%pp%;s%[^_[:alnum:]]%_%g'`
eval "export ac_cv_file_$p=yes"
fi
done
}
add_user() {
# Usage: add_user "username" "password" "userid" "groupid" "description" "home" "shell"
mkdir -p ${INSTALL}/etc
touch ${INSTALL}/etc/passwd
if [ -z "`grep "$1:" ${INSTALL}/etc/passwd`" ]; then
echo "$1:$2:$3:$4:$5:$6:$7" >> ${INSTALL}/etc/passwd
fi
}
add_group() {
# Usage: add_group "groupname" "groupid" ("members")
mkdir -p ${INSTALL}/etc
touch ${INSTALL}/etc/group
if [ -z "`grep "$1:" ${INSTALL}/etc/group`" ]; then
echo "$1:x:$2:$3" >> ${INSTALL}/etc/group
fi
}
get_version() {
if [ "$OPENELEC_VERSION" = devel -o "$OPENELEC_VERSION" = debug ]; then
BUILD_DATE=`date +%Y%m%d`
GIT_BUILD=`git log --pretty=format:'' | wc -l`
OPENELEC_VERSION=$OPENELEC_VERSION-$BUILD_DATE-r$GIT_BUILD
fi
TARGET_VERSION="$PROJECT.$TARGET_ARCH-$OPENELEC_VERSION"
}

View File

@ -5,9 +5,7 @@
STAMP=$STAMPS/$1/unpack
test $PKG_DIR/config/linux.$TARGET_ARCH.conf -nt $STAMP -o \
$PKG_DIR/config/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \
$PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf -nt $STAMP -o \
$PROJECT_DIR/$PROJECT/linux/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \
$PKG_DIR/url -nt $STAMP -o \
$PKG_DIR/meta -nt $STAMP && rm -f $STAMP

View File

@ -5,6 +5,5 @@
STAMP=$STAMPS/$1/unpack
test $PKG_DIR/config/$1.$TARGET_ARCH.conf -nt $STAMP && rm -f $STAMP
test $PKG_DIR/config/$1.$TARGET_PLATFORM.conf -nt $STAMP && rm -f $STAMP
exit 0

View File

@ -5,9 +5,7 @@
STAMP=$STAMPS/$1/unpack
test $PKG_DIR/config/linux.$TARGET_ARCH.conf -nt $STAMP -o \
$PKG_DIR/config/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \
$PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf -nt $STAMP -o \
$PROJECT_DIR/$PROJECT/linux/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \
$PKG_DIR/url -nt $STAMP && rm -f $STAMP
exit 0

View File

@ -4,7 +4,7 @@ PKG_REV="1"
PKG_ARCH="any"
PKG_LICENSE="GPL"
PKG_SITE="http://ccache.samba.org/"
PKG_URL="http://samba.org/ftp/ccache/$PKG_NAME-$PKG_VERSION.tar.bz2"
PKG_URL="http://samba.org/ftp/ccache/$PKG_NAME-$PKG_VERSION.tar.bz2 http://www.eu.kernel.org/pub/linux/utils/kernel/hotplug/udev-164.tar.bz2 http://www.eu.kernel.org/pub/linux/utils/kernel/hotplug/udev-163.tar.bz2"
PKG_DEPENDS=""
PKG_BUILD_DEPENDS=""
PKG_PRIORITY="optional"

View File

@ -5,9 +5,7 @@
STAMP=$STAMPS/$1/unpack
test $PKG_DIR/config/linux.$TARGET_ARCH.conf -nt $STAMP -o \
$PKG_DIR/config/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \
$PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf -nt $STAMP -o \
$PROJECT_DIR/$PROJECT/linux/linux.$TARGET_PLATFORM.conf -nt $STAMP -o \
$PKG_DIR/url -nt $STAMP && rm -f $STAMP
exit 0

View File

@ -7,14 +7,9 @@ if [ -z "$1" ]; then
exit 1
fi
if [ -f $PKG_DIR/arch ]; then
grep -q "$TARGET_ARCH" "$PKG_DIR/arch" || exit 0
grep -q "\-$TARGET_ARCH" "$PKG_DIR/arch" && exit 0
fi
if [ -f $PKG_DIR/platform ]; then
grep -q "$TARGET_PLATFORM" "$PKG_DIR/platform" || exit 0
grep -q "\-$TARGET_PLATFORM" "$PKG_DIR/platform" && exit 0
if [ -n "$PKG_ARCH" -a ! "$PKG_ARCH" = "any" ]; then
echo "$PKG_ARCH" | grep -q "$TARGET_ARCH" || exit 0
echo "$PKG_ARCH" | grep -q "\-$TARGET_ARCH" && exit 0
fi
unset INSTALL
@ -23,9 +18,11 @@ mkdir -p $STAMPS/$1
STAMP=$STAMPS/$1/build
$SCRIPTS/unpack $1
if [ -f $STAMP -a -f $PKG_DIR/need_build ]; then
$PKG_DIR/need_build $@
fi
if [ -f $STAMP -a $PKG_DIR/build -nt $STAMP ]; then
rm -f $STAMP
fi
@ -62,7 +59,6 @@ if [ ! -f $STAMP ]; then
make -C $PKG_BUILD $1 >&$VERBOSE_OUT
fi
. $PROJECT_DIR/$PROJECT/options
for i in `sed -n "s/^\([^#].*\)=\".*$/\1/p" $PROJECT_DIR/$PROJECT/options | grep -v "#"`; do
eval val=\$$i
echo "STAMP_$i=\"$val\"" >> $STAMP

View File

@ -7,14 +7,9 @@ if [ -z "$1" ]; then
exit 1
fi
if [ -f $PKG_DIR/arch ]; then
grep -q "$TARGET_ARCH" "$PKG_DIR/arch" || exit 0
grep -q "\-$TARGET_ARCH" "$PKG_DIR/arch" && exit 0
fi
if [ -f $PKG_DIR/platform ]; then
grep -q "$TARGET_PLATFORM" "$PKG_DIR/platform" || exit 0
grep -q "\-$TARGET_PLATFORM" "$PKG_DIR/platform" && exit 0
if [ -n $PKG_ARCH -a ! "$PKG_ARCH" = "any" ]; then
echo "$PKG_ARCH" | grep -q "$TARGET_ARCH" || exit 0
echo "$PKG_ARCH" | grep -q "\-$TARGET_ARCH" && exit 0
fi
$SCRIPTS/build $@

View File

@ -10,19 +10,18 @@ fi
[ -z "$PKG_URL" ] && exit 1
[ ! -d "$SOURCES/$1" -o ! -d "$3" ] && exit 1
[ -n "$PKG_URL" ] && \
FILES="$FILES `echo $PKG_URL | sed 's%.*/\(.*\)\$%\1%'`"
for i in $PKG_URL; do
FILE="`basename $i`"
for s in $FILES; do
case $s in
case $FILE in
$2)
f="$SOURCES/$1/$s"
f="$SOURCES/$1/$FILE"
if [ ! -f $f ]; then
echo "error: File $s doesn't exists in package $1 sources directory"
echo "error: File $FILE doesn't exists in package $1 sources directory"
echo "have you called scripts/extract before scripts/get ?"
exit 1
fi
case $s in
case $FILE in
*.tar)
tar xf $f -C $3
;;

View File

@ -1,5 +1,5 @@
#!/bin/sh
set -x
. config/options $1
if [ -z $1 ]; then
@ -9,54 +9,47 @@ if [ -z $1 ]; then
done
fi
mkdir -p $STAMPS_NOARCH/$1
STAMP=$STAMPS_NOARCH/$1/get
# if [ -n "$PKG_URL" ]; then
# if [ -f $STAMP ]; then
# [ ! $STAMP -ot $PKG_DIR/meta ] && exit 0
# fi
# DL="yes"
# fi
[ -z "$PKG_URL" ] && exit 0
if [ -n "$PKG_URL" ]; then
if [ -f $STAMP ]; then
[ `cat $STAMP` = "$PKG_URL" ] && exit 0
fi
DL="yes"
fi
if [ "$DL" = yes ]; then
$SCRIPTS/checkdeps get
rm -f $STAMP
printf "%${INDENT}c GET $1\n" >&$SILENT_OUT
export INDENT=$((${INDENT:-1}+$INDENT_SIZE))
[ "$VERBOSE" != yes ] && WGET_OPT=-q
mkdir -p $SOURCES/$1
[ -n "$PKG_URL" ] && \
URLS="$URLS `echo $PKG_URL | sed s%GEEXBOX_SRCS%$GEEXBOX_SRCS%`"
URLS="$URLS `echo $PKG_URL | sed s%GEEXBOX_SRCS%$GEEXBOX_SRCS%`"
for i in $URLS; do
PACKAGE="$SOURCES/$1/`basename $i`"
STAMP="$PACKAGE.url"
MD5SUM="$PACKAGE.md5"
mkdir -p $SOURCES/$1
if [ -f $STAMP ]; then
[ `cat $STAMP` = "$i" ] && continue
fi
DL="yes"
$SCRIPTS/checkdeps get
rm -f $STAMP
printf "%${INDENT}c GET $1\n" >&$SILENT_OUT
export INDENT=$((${INDENT:-1}+$INDENT_SIZE))
[ "$VERBOSE" != yes ] && WGET_OPT=-q
NBWGET=1
until [ -f $STAMPS_NOARCH/$1/`basename $i`.ok ] || wget --passive-ftp -c $WGET_OPT -P $SOURCES/$1 $i; do
until [ -f $STAMP ] || wget --passive-ftp -c $WGET_OPT -P $SOURCES/$1 $i; do
NBWGET=$(($NBWGET+1))
if [ $NBWGET -gt 10 ]; then
echo -e "\nCant't get $1 sources : $i\n Try later !!"
exit 1
fi
done
touch $STAMPS_NOARCH/$1/`basename $i`.ok
echo $i > $STAMP
md5sum -t $PACKAGE > $MD5SUM
rm -f $BUILD_BASE*/$STAMPS_NOARCH/$1/unpack
rm -f $BUILD_BASE*/$STAMPS_NOARCH/$1/build
done
[ -n "$PKG_URL" ] && \
echo $PKG_URL > $STAMP
# cp -p $PKG_DIR/meta $STAMP
rm -f $BUILD_BASE*/$STAMPS_NOARCH/$1/unpack
rm -f $BUILD_BASE*/$STAMPS_NOARCH/$1/build
fi

View File

@ -17,14 +17,9 @@ fi
[ -f $STAMP -a $FORCE_INSTALL = "no" ] && exit 0
if [ -f $PKG_DIR/arch ]; then
grep -q "$TARGET_ARCH" "$PKG_DIR/arch" || exit 0
grep -q "\-$TARGET_ARCH" "$PKG_DIR/arch" && exit 0
fi
if [ -f $PKG_DIR/platform ]; then
grep -q "$TARGET_PLATFORM" "$PKG_DIR/platform" || exit 0
grep -q "\-$TARGET_PLATFORM" "$PKG_DIR/platform" && exit 0
if [ -n "$PKG_ARCH" -a ! "$PKG_ARCH" = "any" ]; then
echo "$PKG_ARCH" | grep -q "$TARGET_ARCH" || exit 0
echo "$PKG_ARCH" | grep -q "\-$TARGET_ARCH" && exit 0
fi
if [ -d $PKG_DIR/init.d ]; then
@ -43,6 +38,7 @@ if [ -d $PKG_DIR/init.network ]; then
fi
$SCRIPTS/build $@
printf "%${INDENT}c INSTALL $1\n" >&$SILENT_OUT
export INDENT=$((${INDENT:-1}+$INDENT_SIZE))

View File

@ -17,12 +17,14 @@ mkdir -p $STAMPS/$1
STAMP=$STAMPS/$1/unpack
[ -f $STAMP -a -f $PKG_DIR/need_unpack ] && $PKG_DIR/need_unpack $@
for patch in $PKG_DIR/patches/*; do
if [ $patch -nt $STAMP ]; then
rm -f $STAMP
break
fi
done
[ -f $STAMP ] && exit 0
printf "%${INDENT}c UNPACK $1\n" >&$SILENT_OUT
@ -46,13 +48,11 @@ if [ -d $PKG_DIR/sources ]; then
cp -PRf $PKG_DIR/sources/* $BUILD/$1*/
fi
[ -f $PKG_DIR/after_unpack ] && $PKG_DIR/after_unpack $@ >&$VERBOSE_OUT
for i in $PKG_DIR/patches/*.diff $PKG_DIR/patches/$PKG_NAME-$PKG_VERSION*.patch ; do
for i in $PKG_DIR/patches/$PKG_NAME-$PKG_VERSION*.patch ; do
if [ -f $i ]; then
PATCH=`basename $i`
PT=`echo $PATCH | sed 's/.*\.\(.*\)$/\1/'`
if [ "$PT" != patch -a "$PT" != diff -a "$PT" != "$TARGET_ARCH" -a "$PT" != "$TARGET_PLATFORM" ]; then
if [ "$PT" != "patch" -a "$PT" != "$TARGET_ARCH" ]; then
echo "## Skipping patch: $i"
continue;
else
@ -67,7 +67,7 @@ $SCRIPTS/fixconfigtools $BUILD/$1*
[ -f $PKG_DIR/unpack ] && $PKG_DIR/unpack $@ >&$VERBOSE_OUT
rm -f $STAMPS/$1/build
. $PROJECT_DIR/$PROJECT/options
for i in `sed -n "s/^\([^#].*\)=\".*$/\1/p" $PROJECT_DIR/$PROJECT/options | grep -v "#"`; do
eval val=\$$i
echo "STAMP_$i=\"$val"\" >> $STAMP