From 76625fe805571aad77a46e44649d2e37ab35f09d Mon Sep 17 00:00:00 2001 From: jesus Date: Thu, 17 Jul 2008 20:57:24 +0000 Subject: [PATCH] New version of build scripts --- trunk/scripts/helper-functions.sh | 64 +++++++++++++ trunk/scripts/log-functions.sh | 64 +++++++++++++ trunk/scripts/package-functions.sh | 168 +++++++++++++++++++++++++++++++++ trunk/scripts/repository-functions.sh | 86 +++++++++++++++++ trunk/scripts/setup-functions.sh | 77 +++++++++++++++ trunk/scripts/var-definitions.sh | 69 ++++++++++++++ 6 files changed, 528 insertions(+) create mode 100644 trunk/scripts/helper-functions.sh create mode 100644 trunk/scripts/log-functions.sh create mode 100644 trunk/scripts/package-functions.sh create mode 100644 trunk/scripts/repository-functions.sh create mode 100644 trunk/scripts/setup-functions.sh create mode 100644 trunk/scripts/var-definitions.sh diff --git a/trunk/scripts/helper-functions.sh b/trunk/scripts/helper-functions.sh new file mode 100644 index 0000000..a1a7ddb --- /dev/null +++ b/trunk/scripts/helper-functions.sh @@ -0,0 +1,64 @@ +#!/bin/sh + +########################################################### +# Maemo-efl building script +# Helper functions for utility scripts. +########################################################### + +COLOR_GOOD="\033[1;32m" +COLOR_WARN="\033[1;33m" +COLOR_ERROR="\033[1;31m" +COLOR_NORMAL="\033[0m" + +# usage <> +function usage() { + cat << EOF + +Usage: $__this_script [OPTIONS] + +Build script for Maemo EFL debian packages. + +Options: + -n Don't sign packages. + -c Don't update source repositories. + -h Show this usage guide. + -s PATH Specify alternate scratchbox path (default: $__sbox_path). + -t A:B:Z Specify scratchbox building targets (default: all targets installed). + -p P1:P2:PN Specify packges to build (default: build all packages available). + +EOF +} + +# error +error() { + echo -e " ${COLOR_ERROR}* E:${COLOR_NORMAL} $*" + exit 1 +} + +# warn +warn() { + echo -e " ${COLOR_WARN}* W:${COLOR_NORMAL} $*" +} + +# msg +msg() { + echo -e " ${COLOR_GOOD}*${COLOR_NORMAL} $*" +} + +# msg_begin +msg_begin() { + echo -en " ${COLOR_GOOD}*${COLOR_NORMAL} $* ..." +} + +# msg_end +msg_end() { + echo -en "\033[72G" + if [ $1 -eq 0 ]; then + echo -e "[ ${COLOR_GOOD}ok${COLOR_NORMAL} ]" + else + echo -e "[${COLOR_ERROR}fail${COLOR_NORMAL}]" + exit 1 + fi +} + + diff --git a/trunk/scripts/log-functions.sh b/trunk/scripts/log-functions.sh new file mode 100644 index 0000000..989bd7b --- /dev/null +++ b/trunk/scripts/log-functions.sh @@ -0,0 +1,64 @@ +#!/bin/sh + +########################################################### +# Maemo-efl building script +# Logging functions definitions +# +# Note: var-definitions.sh and helper-functions.sh needed. +########################################################### + +function create_log_file() { + if [ ! -r $__output_file ]; then + msg_begin "Creating log file" + touch $__output_file + msg_end $? + else + msg "Using existing log file: $__output_file" + fi +} + +function log_to_file() { + local now + local msg + msg=$1 + + if [ ! -r $__output_file ]; then + error "log_to_file(): Log file does not exist" + fi + + now=`$__date +%H:%M:%S` + echo "$now: $msg" >> $__output_file +} + +function start_log() { + local now + now=`$__date -R` + + echo "" >> $__output_file + + if [ $? != 0 ] ; then + error "start_log(): Could not create $__output_file file" + fi + + cat << EOF >> $__output_file +********************************************************* +* Started $__this_script: $now * +********************************************************* + +EOF +} + +function finish_log() { + local now + now=`$__date -R` + + if [ ! -r $__output_file ]; then + error "finish_log(): Log file does not exist" + fi + + cat << EOF >> $__output_file + +* Finished $__this_script: $now +EOF +} + diff --git a/trunk/scripts/package-functions.sh b/trunk/scripts/package-functions.sh new file mode 100644 index 0000000..446d962 --- /dev/null +++ b/trunk/scripts/package-functions.sh @@ -0,0 +1,168 @@ +#!/bin/sh + +########################################################### +# Maemo-efl building script +# Package functions definitions +# +# Note: var-definitions.sh needed. +########################################################### + +function configure_pkg() { + local dir + dir=$1 + + cd $dir/`basename $dir` + + if [ -x ./autogen.sh ]; then + NOCONFIGURE=1 ./autogen.sh >> $dir/sbox_build_pkgs.log 2>&1 || return 1 + fi + + cd - > /dev/null 2>&1 + + return 0 +} + +function build_pkg() { + local dir + dir=$1 + + configure_pkg $dir || return 1 + + local DEB_BUILD_OPTIONS=n8x0 + if [ "x$__distro" = "xgregale" ]; then + DEB_BUILD_OPTIONS=n770 + fi + + cat << EOF > $dir/sbox_build_pkgs +#!/bin/sh + +export DEBFULLNAME="$DEBFULLNAME" +export DEBEMAIL="$DEBEMAIL" +export DEB_BUILD_OPTIONS="$DEB_BUILD_OPTIONS" + +cd $dir/`basename $dir` + +#VERSION=\`$__sbox_dpkg_parsechangelog | grep Version: | cut -d" " -f2 | cut -d- -f1 >> $dir/sbox_build_pkgs.log 2>&1 || exit 1\` +#REVISION=\`$__sbox_dpkg_parsechangelog | grep Version: | cut -d- -f2 >> $dir/sbox_build_pkgs.log 2>&1 || exit 1\` + +VERSION=\`$__sbox_dpkg_parsechangelog | grep Version: | cut -d" " -f2 | cut -d- -f1\` +REVISION=\`$__sbox_dpkg_parsechangelog | grep Version: | cut -d- -f2\` + +TO_REPLACE=\`grep -o -E '@([A-Z]|[0-9])+(-|_)*([A-Z]|[0-9])+_VERSION@' ./debian/control.in | cut -d @ -f 2 | sort -u\` + +# Test if we should process control.in file or not. +if [ -z $__not_all_pkgs ]; then + cp ./debian/control.in ./debian/control.temp + + for replacement in \$TO_REPLACE + do + replacement_lowercase=\`echo \$replacement | tr "[:upper:]" "[:lower:]"\` + version_file=$__versions_dir/\$replacement_lowercase + version_number=\`cat \$version_file\` + sed -i s/@\$replacement@/\$version_number/g ./debian/control.temp + done + + mv ./debian/control.temp ./debian/control +else + builddeps=\`$__sbox_dpkg_checkbuilddeps ./debian/control 2>&1 | grep Unmet | cut -d: -f3\` + target_lowercase=\`echo $target | cut -d_ -f1 | tr "[:upper:]" "[:lower:]"\` + + if [ -z $__pkgslist_updated ];then + + has_extras_rep=\`grep 'deb http://repository.maemo.org/extras' $__srclist_file\` + if [ -z "\$has_extras_rep" ];then + echo "deb http://repository.maemo.org/extras \$target_lowercase free non-free" >> $__srclist_file + fi + + has_extras_rep=\`grep 'deb-src http://repository.maemo.org/extras' $__srclist_file\` + if [ -z "\$has_extras_rep" ];then + echo "deb-src http://repository.maemo.org/extras \$target_lowercase free non-free" >> $__srclist_file + fi + + apt-get update >> $dir/sbox_apt_update.log 2>&1 + __pkgslist_updated=1 + fi + + if [ -n "\$builddeps" ];then + echo \$builddeps | while read line + do + pkg_name=\`echo \$line | cut -d'(' -f1 | tr -d "[:blank:]"\` + pkg_version=\`echo \$line | cut -d= -f2 | cut -d')' -f1 | tr -d "[:blank:]"\` + apt-get -y install \$pkg_name=\$pkg_version >> $dir/sbox_builddeps.log 2>&1 + done + fi +fi + +# $__sbox_dch -v \$VERSION+cvs$__today-\$REVISION -D $__distro "Snapshot CVS release of $__today" >> $dir/sbox_build_pkgs.log 2>&1 || exit 1 +$__sbox_dpkg_buildpackage $__build_pkg_options >> $dir/sbox_build_pkgs.log 2>&1 + +if [ -z \$REVISION ] +then + echo "\$VERSION" > $__versions_dir/`basename $dir`_version +else + echo "\$VERSION-\$REVISION" > $__versions_dir/`basename $dir`_version +fi + +exit \$? +EOF + + $__chmod 755 $dir/sbox_build_pkgs + $__sbox $dir/sbox_build_pkgs + return $? +} + +function install_pkgs() { + local dir + dir=$1 + + cat << EOF > $dir/sbox_install_pkgs +#!/bin/sh + +cd $dir +$__sbox_dpkg --install *.deb >> $dir/sbox_install_pkgs.log 2>&1 +exit \$? +EOF + + $__chmod 755 $dir/sbox_install_pkgs + $__sbox $dir/sbox_install_pkgs || return 1 + + for package in $dir/*.deb; do + pkg=`basename $package | cut -d_ -f1` + echo $__installed_packages | tr " " "\n" | sort -u | $__egrep "\^$pkg\$" > /dev/null 2>&1 + + if [ ! $? -eq 0 ]; then + __installed_packages="$__installed_packages $pkg" + fi + done + + return 0 +} + +function uninstall_pkgs() { + + cat << EOF > $__tmp_dir/sbox_uninstall_pkgs +#!/bin/sh + +cd $__tmp_dir +$__sbox_dpkg --purge $__installed_packages >> $__tmp_dir/sbox_uninstall_pkgs.log 2>&1 +exit \$? +EOF + + __installed_packages="" + $__chmod 755 $__tmp_dir/sbox_uninstall_pkgs + #$__sbox $__tmp_dir/sbox_uninstall_pkgs + return $? +} + +function sign_pkgs() { + local dir + dir=$1 + + cd $dir + $__debsign *.changes >> $dir/sign_pkgs.log 2>&1 || return 1 + + cd - > /dev/null 2>&1 + + return 0 +} + diff --git a/trunk/scripts/repository-functions.sh b/trunk/scripts/repository-functions.sh new file mode 100644 index 0000000..358fe6e --- /dev/null +++ b/trunk/scripts/repository-functions.sh @@ -0,0 +1,86 @@ +#!/bin/sh + +########################################################### +# Maemo-efl building script +# Repository functions definitions +# +# Note: helper-functions.sh and var-definitions.sh needed. +########################################################### + +function clone_repository() { + local repo + repo=$1 + $__git_clone $repo.git >> $__output_file 2>&1 + return $? +} + +function update_repository() { + local repo + repo=$1 + + if [ ! -d $repo ]; then + error " Trying to update invalid repository" + fi + + cd $repo + $__git_pull >> $__output_file 2>&1 || return 1 + cd - > /dev/null 2>&1 + + return 0 +} + +function clean_repository() { + local repo + repo=$1 + + if [ ! -d $repo ]; then + error " Trying to clean invalid repository" + fi + + cd $repo + $__git_reset >> $__output_file 2>&1 || return 1 + $__git_clean >> $__output_file 2>&1 || return 1 + cd - > /dev/null 2>&1 + + return 0 +} + +function get_sources() { + local modules + local repo + modules=`echo $1|$__sed -e 's/:/ /g'` + repo=$2 + + for module in $modules; do + + if [ ! -d $module ]; then + error "Directory $module does not exist." + fi + + cd $module + + if [ -d $module/.git ]; then + if [ ! $__update_repositories -eq 0 ]; then + log_to_file "Updating existing repository at $PWD/$module" + + msg_begin " Updating $module repository" + update_repository $module + msg_end $? + else + log_to_file "Skipping update of $module repository" + fi + elif [ -d $module ]; then + log_to_file "Removing invalid repository at $PWD/$module" + rm -rf $module + fi + + if [ ! -d $module ]; then + msg_begin " Cloning $repo/$module.git" + clone_repository $repo/$module + msg_end $? + fi + + cd .. + done +} + diff --git a/trunk/scripts/setup-functions.sh b/trunk/scripts/setup-functions.sh new file mode 100644 index 0000000..66984fd --- /dev/null +++ b/trunk/scripts/setup-functions.sh @@ -0,0 +1,77 @@ +#!/bin/sh + +########################################################### +# Maemo-efl building script +# Enviroment setup functions definitions +# +# Note: var-definitions.sh, log-functions.sh +# and helper-functions.sh needed. +########################################################### + +function setup_distro() { + local target + local sources_list_file + local target_conf_file + local ret + target=$1 + sources_list_file=$__sbox_path/users/$USER/targets/$target/etc/apt/sources.list + target_conf_file=$__sbox_path/users/$USER/targets/$target.config + ret=1 + + log_to_file "setup_distro(): Target $target" + log_to_file "setup_distro(): sources.list file : $sources_list_file" + log_to_file "setup_distro(): config file: $target_conf_file" + + if [ "x$target" != "x" ] && [ -r $sources_list_file ] && [ -r $target_conf_file ]; then + # XXX: FIXME Figure out a better way to get the distro string + __distro=`$__head -1 $sources_list_file | cut -d" " -f3` + __arch=`$__grep SBOX_CPU= $target_conf_file | cut -d= -f2` + __pkg_dir="$__base_pkg_dir/$__distro/$__arch" + if [ "x$__arch" = "xarm" ] ; then + __build_pkg_options="$__common_build_pkg_options -B" + else + __build_pkg_options="$__common_build_pkg_options -I.svn -I.git -I.gitignore -I.cvsignore -sa" + fi + ret=0 + fi + + if [ $ret -eq 0 ]; then + log_to_file "setup_distro(): Configuration:" + log_to_file "setup_distro(): distro...........: $__distro" + log_to_file "setup_distro(): arch.............: $__arch" + log_to_file "setup_distro(): build options....: $__build_pkg_options" + log_to_file "setup_distro(): pkg_dir..........: $__pkg_dir" + fi + + return $ret +} + +function setup_sbox() { + if [ ! -d $__sbox_path ]; then + error "Invalid scratchbox path: $__sbox_path" + fi + + __sbox="$__sbox_path/login" + __sbox_tools_bin_path="$__sbox_path/tools/bin" + __sbox_sb_conf="$__sbox_tools_bin_path/sb-conf" + + __sbox_maemo3_debian_bin_path="/scratchbox/devkits/maemo3-debian/bin" + __sbox_dpkg="$__sbox_maemo3_debian_bin_path/dpkg" + __sbox_dpkg_buildpackage="$__sbox_dpkg-buildpackage" + __sbox_dpkg_parsechangelog="$__sbox_dpkg-parsechangelog" + __sbox_dpkg_checkbuilddeps="$__sbox_dpkg-checkbuilddeps" + + __sbox_debian_sarge_bin_path="/scratchbox/devkits/debian-sarge/bin" + __sbox_dch="$__sbox_debian_sarge_bin_path/dch" + + __sbox_targets=`$__sbox_sb_conf list --targets` +} + +function change_sbox_target() { + local target + target=$1 + + $__sbox_sb_conf select $target >> $__output_file 2>&1 + return $? +} + diff --git a/trunk/scripts/var-definitions.sh b/trunk/scripts/var-definitions.sh new file mode 100644 index 0000000..72d7120 --- /dev/null +++ b/trunk/scripts/var-definitions.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +########################################################### +# Maemo-efl building script +# Variable definitions +########################################################### + +__tmp_hash=`mktemp XXXXXXXX` + +# Paths +__tmp_dir="/tmp/`whoami`_build_maemo-efl/$__tmp_hash" +__versions_dir="$__tmp_dir/versions" +__this_script=`basename $0` +__this_script_dir=`dirname $0` +__orig_path=$PATH +__srclist_file="/etc/apt/sources.list" + +# Binaries +__date=`which date` +__git=`which git` +__head=`which head` +__mkdir=`which mkdir` +__sed=`which sed` +__uname=`which uname` +__chmod=`which chmod` +__grep=`which grep` +__egrep=`which egrep` +__debsign=`which debsign` + +# git definitions +__git_clone="$__git clone -q" +__git_pull="$__git pull -q" +__git_clean="$__git clean -q -x -d -f" +__git_reset="$__git reset --hard HEAD" +__git_repo="git://staff.get-e.org/" + +# e17 git repositories paths +__e17_libs="e17/libs" +__e17_proto="e17/proto" +__e17_python_efl="$__e17_proto/python-efl" +__e17_python_etk="users/cmarcelo" +__e17_python_efl_utils="users/barbieri" +#__e17_python_dispatcher="users/ulisses" + +# modules to build +#__lib_modules="edb eet evas ecore embryo edje efreet epeg epsilon emotion etk ewl e_dbus exml enhance" +__lib_modules="eet:evas:ecore:embryo:edje:imlib2:epeg:epsilon:etk:e_dbus" +__other_modules="himf-ecore:himf-ecore-chinook:lightmediascanner:python-lightmediascanner" +__python_modules="python-evas:python-ecore:python-edje:python-epsilon:python-e_dbus" +__python_etk_module="python-etk" +__python_efl_utils_module="python-efl_utils" +__python_dispatcher_module="python-dispatcher" +__virtual_packages="efl-core python-efl-core" + +# dpkg definitions +__common_build_pkg_options="-rfakeroot -us -uc -D" + +# Packages dirs and log file +__today=`$__date +%Y%m%d` +__base_pkg_dir="$__this_script_dir/packages_$__today" +__output_file="$PWD/$__base_pkg_dir/packages_$__today.log" + +# Scratchbox definitions +__sbox_path="/scratchbox" + +# Other +__update_repositories=1 +__installed_packages="" + -- 1.7.9.5