X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=trunk%2Fbuild-all.sh;h=4e9130009061ebbdb256a77dcc3d2cf2aa73b4d7;hb=1c714031650b9da9708e5c0f3542e5915f61bfdf;hp=1a49a5299956e7bc6aa7837ad34ffe6e929a47b7;hpb=49aa356bd596065b9105f5bea772c0c15a98bc1d;p=maemo-efl diff --git a/trunk/build-all.sh b/trunk/build-all.sh index 1a49a52..4e91300 100755 --- a/trunk/build-all.sh +++ b/trunk/build-all.sh @@ -1,359 +1,353 @@ -#!/bin/bash - -source "helper-functions.sh" +#!/bin/sh ########################################################### -# Variable definitions +# Maemo-efl building script +# Build script ########################################################### -__this_script=`basename $0` -__this_script_dir=`dirname $0` -__orig_path=$PATH - -# Binaries -__date=`which date` -__git=`which git` -__head=`which head` -__mkdir=`which mkdir` -__sed=`which sed` -__uname=`which uname` -__chmod=`which chmod` - -# git definitions -__git_clone="$__git clone -q" -__git_pull="$__git pull -q -n" -__git_clean="$__git clean -q -x -d" -__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" - -# 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:epsilon:etk:e_dbus" -__python_modules="python-evas:python-ecore:python-edje:python-epsilon:python-e_dbus" -__python_etk_module="python-etk" - -# dpkg definitions -__common_build_pkg_options="-I.svn -I.git -I.gitignore -I.cvsignore -rfakeroot -us -uc -D -tc" - -# 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 + +source "./scripts/message-functions.sh" +source "./scripts/var-definitions.sh" +source "./scripts/log-functions.sh" +source "./scripts/repository-functions.sh" +source "./scripts/package-functions.sh" +source "./scripts/setup-functions.sh" ########################################################### -# Function definitions +# Begin script ########################################################### -function usage() { - cat << EOF -Usage: $__this_script [OPTIONS] - -Build script for EFL debian packages for Maemo. +# Parse comand line options +usage () { + cat << EOF +Usage: $__this_script [OPTIONS] +Build script for Maemo EFL debian packages. Options: - -c Don't update source repositories. - -h Show this usage guide. - -s PATH Specify alternate scratchbox path (default: $__sbox_path). + -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). + -r Remove module sub-directories (not the high level debian dir) + and then exit. + -t A:B:Z Specify scratchbox building targets + (default: all targets installed). + -u svn_rev Update the latest revision number to "svn_rev" and exit. This + only works on revision numbers that has the svn label on + the version part (e.g 0.9.9.043+svn32000-maemo1) Also, + this option will not create a new entry on the changelog + file, it will only change its first line. If you want to + update to the latest repository revision number, just use + HEAD as parameter. + -p P1:P2:PN Specify packges to build (default: build all packages available). EOF } -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 +while getopts "anchre:s:t:u:p:" opt ; do + case "$opt" in + p) + __lib_modules_temp="" + __python_modules_temp="" + __python_efl_utils_module_temp="" + __python_dispatcher_module_temp="" + __virtual_packages_temp="" + __not_all_pkgs=1 + __parameters=`echo "$OPTARG" | $__sed -e 's/:/ /g'` + for i in $__parameters; do + for module in `echo "$__lib_modules"|$__sed -e 's/:/ /g'`; do + if [ x$module == x$i ]; then + __lib_modules_temp=$__lib_modules_temp:$i + continue + fi + done + + for module in `echo "$__python_modules"|$__sed -e 's/:/ /g'`; do + if [ x$module == x$i ]; then + __python_modules_temp=$__python_modules_temp:$i + fi + done + + for module in `echo "$__python_efl_utils_module"|$__sed -e 's/:/ /g'`; do + if [ x$module == x$i ]; then + __python_efl_utils_module_temp=$__python_efl_utils_module_temp:$i + continue + fi + done + + for module in `echo "$__python_dispatcher_module" |$__sed -e 's/:/ /g'`; do + if [ x$module == x$i ]; then + __python_dispatcher_module_temp=$__python_dispatcher_module_temp:$i + continue + fi + done + + for module in `echo "$__virtual_packages" |$__sed -e 's/:/ /g'`; do + if [ x$module == x$i ]; then + __virtual_packages_temp=$__virtual_packages_temp:$i + continue + fi + done + + done + __lib_modules_temp=`echo "$__lib_modules_temp" | tr "[:upper:]" "[:lower:]"` + __python_modules_temp=`echo "$__python_modules_temp" | tr "[:upper:]" "[:lower:]"` + __python_efl_utils_module_temp=`echo "$__python_efl_utils_module_temp" | tr "[:upper:]" "[:lower:]"` + __python_dispatcher_module_temp=`echo "$__python_dispatcher_module_temp" | tr "[:upper:]" "[:lower:]"` + __virtual_packages_temp=`echo "$__virtual_packages_temp" | tr "[:upper:]" "[:lower:]"` + ;; + c) + __update_repositories=0 + ;; + e) + __export_dir=$OPTARG + if [ "x$__sbox_path" = "x" ] || [ ! -d $__sbox_path ]; then + error "Invalid export path: $__export_dir" + exit 1 + fi + ;; + h) + usage + exit 0 + ;; + r) + __force_remove=1 + ;; + s) + __sbox_path=$OPTARG + if [ "x$__sbox_path" = "x" ] || [ ! -d $__sbox_path ]; then + error "Invalid scratchbox path: $__sbox_path" + exit 1 + fi + ;; + n) + __no_signing=1 + ;; + t) + __sbox_targets_temp=`echo $OPTARG | tr "[:lower:]" "[:upper:]"` + ;; + u) + __changelog_update=$OPTARG + ;; + ?) + usage + exit 1 + ;; + esac +done - if [ $? != 0 ] ; then - error "start_log(): Could not create $__output_file file" - fi +############################ +# Initial checks # +########################### - cat << EOF >> $__output_file -********************************************************* -* Started $__this_script: $now * -********************************************************* +update_all_modules +init_checks -EOF -} +# Remove modules subdirectories and exit +if [ $__force_remove -eq 1 ]; then + clean_modules + exit 0 +fi -function finish_log() { - local now - now=`$__date -R` +# Modify debian changelog +if [ -n "$__changelog_update" ]; then + update_changelog $__changelog_update + exit 0 +fi - if [ ! -r $__output_file ]; then - error "finish_log(): Log file does not exist" - fi +setup_dirs +generate_versions - cat << EOF >> $__output_file +if [ $__not_all_pkgs -eq 1 ]; then + __lib_modules=$__lib_modules_temp + __python_modules=$__python_modules_temp + __python_efl_utils_module=$__python_efl_utils_module_temp + __python_dispatcher_module=$__python_dispatcher_module_temp + __virtual_packages=$__virtual_packages_temp -* Finished $__this_script: $now -EOF -} + update_all_modules -function clone_repository() { - local repo - repo=$1 - `$__git_clone $repo.git >> $__output_file 2>&1 ` - return $? -} +fi -function update_repository() { - local repo - repo=$1 +# Create log file +create_log_file +start_log - if [ ! -d $repo ]; then - error " Trying to update invalid repository" - fi +# update modules +download_modules +# Setup scratchbox variables +setup_sbox - cd $repo - `$__git_pull >> $__output_file 2>&1` - cd - > /dev/null 2>&1 +# Setup scratchbox targets if option -t was used +if [ ! -z $__sbox_targets_temp ]; then + __sbox_targets=`echo $__sbox_targets_temp|$__sed -e 's/:/ /g'` +fi - return 0 -} +########################################################### +# ARCHITECTURE DEPENDENT MODULES +########################################################### +# For each scratchbox target +for target in $__sbox_targets; do + msg_begin "Checking distro and arch for target $target" + setup_distro $target + msg_end $? -function clean_repository() { - local repo - repo=$1 + msg " Distribution..: $__distro" + msg " Architecture..: $__arch" + msg " Build Options.: $__build_pkg_options" - if [ ! -d $repo ]; then - error " Trying to clean invalid repository" + if [ ! -d $__pkg_dir ]; then + msg_begin " Creating dir for $__distro $__arch packages" + $__mkdir -p $__pkg_dir + msg_end $? fi - cd $repo - `$__git_reset >> $__output_file 2>&1` - `$__git_clean >> $__output_file 2>&1` - cd - > /dev/null 2>&1 - - return 0 -} - -function build_pkg() { - local dir - dir=$1 - - cat << EOF >> $dir/sbox_build_pkg -#!/bin/bash + msg_begin " Changing current sbox target to $target" + change_sbox_target $target + msg_end $? -cd $dir/`basename $dir` -NOCONFIGURE=1 ./autogen.sh >> $dir/sbox_build_pkg.log 2>&1 -$__sbox_dpkg_buildpackage $__build_pkg_options >> $dir/sbox_build_pkg.log 2>&1 -exit \$? -EOF + # For each module + for module in `echo $__lib_modules:$__python_modules|$__sed -e 's/:/ /g'`; do + msg " Building $module packages for $__distro $__arch" - `$__chmod 755 $dir/sbox_build_pkg` - `$__sbox $dir/sbox_build_pkg` - return $? -} + update_debian_dir $module -function install_pkg() { - echo "install_pkg" - return $? -} + if [ -d $__tmp_dir/$module/$module ]; then + msg_begin " Removing temporary $module" + rm -rf $__tmp_dir/$module/$module + msg_end $? + fi -function uninstall_pkg() { - echo "uninstall_pkg" - return $? -} + msg_begin " Copying $module dir to $__tmp_dir" + $__tar c --exclude=.svn --exclude=.git $module | $__tar x --directory $__tmp_dir + msg_end $? -function get_sources() { - local modules - local repo - modules=`echo $1|$__sed -e 's/:/ /g'` - repo=$2 +# msg_begin " Cleaning $module repository" +# git_clean_repository $module/$module +# msg_end $? - for module in $modules; do + msg_begin " Building $module packages" + build_pkg $__tmp_dir/$module + msg_end $? - if [ ! -d $module ]; then - error "Directory $module does not exist." + if [ -z $__no_signing ]; then + msg_begin " Signing $module packages" + sign_pkgs $__tmp_dir/$module + msg_end $? 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 + msg_begin " Installing $module packages" + install_pkgs $__tmp_dir/$module + msg_end $? - if [ ! -d $module ]; then - msg_begin " Cloning $repo/$module.git" - clone_repository $repo/$module - msg_end $? + msg_begin " Copying $module packages" + if [ "x$__arch" != "xarmel" ]; then + mv $__tmp_dir/$module/*.dsc $__tmp_dir/$module/*.tar.gz $__pkg_dir fi + mv $__tmp_dir/$module/*.deb $__tmp_dir/$module/*.changes $__pkg_dir + msg_end $? - cd .. + msg_begin " Removing temporary $module" + rm -rf $__tmp_dir/$module/$module + msg_end $? done -} -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" - __build_pkg_options="$__common_build_pkg_options -sa" - if [ "x$__arch" = "xarm" ] ; then - __build_pkg_options="$__common_build_pkg_options -B" - fi - ret=0 - fi + msg_begin " Uninstalling packages $__installed_packages" + uninstall_pkgs + msg_end $? +done - 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 +########################################################### +# ARCHITECTURE INDEPENDENT MODULES +########################################################### +# For each scratchbox target +for target in $__sbox_targets; do + msg_begin "Checking distro and arch for target $target" + setup_distro $target + msg_end $? - log_to_file "setup_distro(): Returning $ret" + msg " Distribution..: $__distro" + msg " Architecture..: $__arch" + msg " Build Options.: $__build_pkg_options" - return $ret -} + if [ "x$__arch" = "xarmel" ]; then + warn "Skipping target $target for architecture independent packages" + continue + fi + + __arch="all" + __pkg_dir=`dirname $__pkg_dir`/$__arch -function setup_sbox() { - if [ ! -d $__sbox_path ]; then - error "Invalid scratchbox path: $__sbox_path" + if [ ! -d $__pkg_dir ]; then + msg_begin " Creating dir for $__distro $__arch packages" + $__mkdir -p $__pkg_dir + msg_end $? fi - __sbox="$__sbox_path/login" - __sbox_tools_bin_path="$__sbox_path/tools/bin" - __sbox_sb_conf="$__sbox_tools_bin_path/sb-conf" + msg_begin " Changing current sbox target to $target" + change_sbox_target $target + msg_end $? - __sbox_maemo3_debian_bin_path="/scratchbox/devkits/maemo3-debian/bin" - __sbox_dpkg_buildpackage="$__sbox_maemo3_debian_bin_path/dpkg-buildpackage" + # For each module + for module in `echo $__python_efl_utils_module|$__sed -e 's/:/ /g'`; do - __sbox_debian_sarge_bin_path="/scratchbox/devkits/debian-sarge/bin" - __sbox_dch="$__sbox_debian_sarge_bin_path/dch" -} + msg " Building $module packages for $__distro $__arch" + update_debian_dir $module -function change_sbox_target() { - local target - target=$1 - `$__sbox_sb_conf select $target` - return $? -} + if [ ! -d $__tmp_dir/$module ]; then + mkdir $__tmp_dir/$module + fi -########################################################### -# Begin script -########################################################### + if [ -d $__tmp_dir/$module/$module ]; then + msg_begin " Removing temporary $module" + rm -rf $__tmp_dir/$module/$module + msg_end $? + fi -# Parse comand line options -while getopts "chs:" opt ; do - case "$opt" in - c) - __update_repositories=0 - ;; - h) - usage - exit 0 - ;; - s) - __sbox_path=$OPTARG - if [ "x$__sbox_path" = "x" ] || [ ! -d $__sbox_path ]; then - error "Invalid scratchbox path: $__sbox_path" - fi - ;; - [?]) - usage - exit 1 - ;; - esac -done -# Initial checks + msg_begin " Copying $module dir to $__tmp_dir" + $__tar c --exclude=.svn --exclude=.git $module | $__tar x --directory $__tmp_dir + #cp -f -u -r $module $__tmp_dir + msg_end $? -# Check if we're running inside scratchbox -if [ -r /targets/links/scratchbox.config ]; then - error "You should run this script ouside the scratchbox environment." -fi +# msg_begin " Cleaning $module repository" +# git_clean_repository $module/$module +# msg_end $? -# Create base packages dir -if [ ! -d $__base_pkg_dir ]; then - msg_begin "Creating base packages dir $__base_pkg_dir" - $__mkdir -p $__base_pkg_dir - msg_end $? -fi + msg_begin " Building $module packages" + build_pkg $__tmp_dir/$module + msg_end $? -# Create log file -create_log_file -start_log + if [ -z $__no_signing ]; then + msg_begin " Signing $module packages" + sign_pkgs $__tmp_dir/$module + msg_end $? + fi -# Download modules under e17/libs -msg "Downloading e17 modules" -get_sources $__lib_modules $__git_repo$__e17_libs + msg_begin " Installing $module packages" + install_pkgs $__tmp_dir/$module + msg_end $? -# Download python modules under proto/python/efl -msg "Downloading python modules" -get_sources $__python_modules $__git_repo$__e17_python_efl + msg_begin " Copying $module packages" + mv $__tmp_dir/$module/*.dsc $__tmp_dir/$module/*.tar.gz $__tmp_dir/$module/*.deb $__tmp_dir/$module/*.changes $__pkg_dir + msg_end $? -# Download python-etk module -get_sources $__python_etk_module $__git_repo$__e17_python_etk + msg_begin " Removing temporary $module" + rm -rf $__tmp_dir/$module/$module + msg_end $? + done -# Setup scratchbox variables -setup_sbox + msg_begin " Uninstalling packages $__installed_packages" + uninstall_pkgs + msg_end $? +done +########################################################### +# VIRTUAL PACKAGES +########################################################### # For each scratchbox target -for target in `$__sbox_sb_conf list --targets`; do +for target in $__sbox_targets; do msg_begin "Checking distro and arch for target $target" setup_distro $target msg_end $? @@ -362,73 +356,71 @@ for target in `$__sbox_sb_conf list --targets`; do msg " Architecture..: $__arch" msg " Build Options.: $__build_pkg_options" + if [ "x$__arch" = "xarmel" ]; then + warn "Skipping target $target for architecture independent packages" + continue + fi + + __arch="all" + __pkg_dir=`dirname $__pkg_dir`/$__arch + if [ ! -d $__pkg_dir ]; then - msg_begin "Creating dir for $__distro $__arch packages" + msg_begin " Creating dir for $__distro $__arch packages" $__mkdir -p $__pkg_dir msg_end $? fi - # For each module - for module in `echo $__lib_modules $__python_modules $__python_etk_module|$__sed -e 's/:/ /g'`; do - - msg_begin "Changing current sbox target to $target" - change_sbox_target $target - msg_end $? + msg_begin " Changing current sbox target to $target" + change_sbox_target $target + msg_end $? + # For each module + for module in `echo $__virtual_packages|$__sed -e 's/:/ /g'`; do msg " Building $module packages for $__distro $__arch" - if [ -d "./$module/$module/debian" ]; then - msg_begin " Removing existing debian directory" - rm -rf "./$module/$module/debian" - msg_end $? - fi + update_debian_dir $module - msg_begin " Copying specific debian directory" - if [ -d "./$module/debian_$__distro" ]; then - cp -r "./$module/debian_$__distro" "./$module/$module/debian" - elif [ -d "./$module/debian" ]; then - cp -r "./$module/debian" "./$module/$module/" - else - error " Missing debian directory for $module" + if [ ! -d $__tmp_dir/$module ]; then + mkdir $__tmp_dir/$module fi - msg_end $? - if [ -d "/tmp/$module" ]; then + if [ -d $__tmp_dir/$module/$module ]; then msg_begin " Removing temporary $module" - rm -rf "/tmp/$module" + rm -rf $__tmp_dir/$module/$module msg_end $? fi - msg_begin " Copying $module dir to /tmp" - cp -r $module /tmp + msg_begin " Copying $module dir to $__tmp_dir" + $__tar c --exclude=.svn --exclude=.git $module | $__tar x --directory $__tmp_dir + #cp -f -u -r $module $__tmp_dir/$module msg_end $? - msg_begin " Cleaning $module repository" - clean_repository $module/$module + msg_begin " Building $module packages" + build_pkg $__tmp_dir/$module msg_end $? - msg_begin " Building $module packages" - build_pkg /tmp/$module + if [ -z $__no_signing ]; then + msg_begin " Signing $module packages" + sign_pkgs $__tmp_dir/$module + msg_end $? + fi + + msg_begin " Installing $module packages" + install_pkgs $__tmp_dir/$module msg_end $? msg_begin " Copying $module packages" - if [ "x$__arch" != "xarm" ]; then - mv /tmp/$module/*.dsc /tmp/$module/*.tar.gz $__pkg_dir - fi - mv /tmp/$module/*.deb /tmp/$module/*.changes $__pkg_dir + mv $__tmp_dir/$module/*.dsc $__tmp_dir/$module/*.tar.gz $__tmp_dir/$module/*.deb $__tmp_dir/$module/*.changes $__pkg_dir msg_end $? msg_begin " Removing temporary $module" - rm -rf /tmp/$module + rm -rf $__tmp_dir/$module/$module msg_end $? - - # Install packages - - # Clean tree - clean_repository $module done - # Uninstall all packages + msg_begin " Uninstalling packages $__installed_packages" + uninstall_pkgs + msg_end $? done # END