New version of build scripts
authorjesus <jesus.palencia@openbossa.org>
Thu, 17 Jul 2008 20:57:24 +0000 (20:57 +0000)
committerjesus <jesus.palencia@openbossa.org>
Thu, 17 Jul 2008 20:57:24 +0000 (20:57 +0000)
trunk/scripts/helper-functions.sh [new file with mode: 0644]
trunk/scripts/log-functions.sh [new file with mode: 0644]
trunk/scripts/package-functions.sh [new file with mode: 0644]
trunk/scripts/repository-functions.sh [new file with mode: 0644]
trunk/scripts/setup-functions.sh [new file with mode: 0644]
trunk/scripts/var-definitions.sh [new file with mode: 0644]

diff --git a/trunk/scripts/helper-functions.sh b/trunk/scripts/helper-functions.sh
new file mode 100644 (file)
index 0000000..a1a7ddb
--- /dev/null
@@ -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 <message>
+error() {
+    echo -e " ${COLOR_ERROR}* E:${COLOR_NORMAL} $*"
+    exit 1
+}
+
+# warn <message>
+warn() {
+    echo -e " ${COLOR_WARN}* W:${COLOR_NORMAL} $*"
+}
+
+# msg <message>
+msg() {
+    echo -e " ${COLOR_GOOD}*${COLOR_NORMAL} $*"
+}
+
+# msg_begin <message>
+msg_begin() {
+    echo -en " ${COLOR_GOOD}*${COLOR_NORMAL} $* ..."
+}
+
+# msg_end <error-code>
+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 (file)
index 0000000..989bd7b
--- /dev/null
@@ -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 (file)
index 0000000..446d962
--- /dev/null
@@ -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 (file)
index 0000000..358fe6e
--- /dev/null
@@ -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 (file)
index 0000000..66984fd
--- /dev/null
@@ -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 (file)
index 0000000..72d7120
--- /dev/null
@@ -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=""
+