#!/bin/bash set -e function echo_usage { echo "usage: mconfigure [options]" echo " -a " echo " -p : prepare build, but not do it" } function set_build { if [ -e .svn ] then version="0.0" build=$(svnversion) elif [ -e .git ] then tag=$(git describe --tags 2>/dev/null) || true if test -z "$tag" then tag="0.0-TOP" fi changes=$(git status -s |grep "^ *M") || true if test -n "$changes" then tag="${tag}M" fi version=${tag%-*} build=${tag#*-} fi } function check_version { if [ $version = "0.0" ] then return fi vline=$(head -1 debian/$paket.changelog) vline=${vline%-*} clversion=${vline#*(} if [ "$clversion" != $version ] then echo "version mismatch: git: $version, changelog: $clversion" exit 1 fi } # to build a package you need ... # .cp (optional): copy step for package production # .cpp.sh (optional): commands to setup the C++ compile environment if [ $# -lt 1 ] then echo_usage exit 1 fi if [ ! -d debian ] then echo "run mconfigure in the project base directory!" exit 2 fi echo "export paket=$1" > debian/setenv.sh shift ARCH="" cpp_build=0 set_build check_version echo "export version=$version" >> debian/setenv.sh echo "export build=$build" >> debian/setenv.sh # get repository name tmp=$(pwd) pwd=${tmp##*/} echo "export pwd=$pwd" >> debian/setenv.sh echo "building $paket with build $version-$build" prepare=0 while getopts ":ap" opt; do case $opt in a) ARCH=$OPTARG ;; p) prepare=1 ;; \?) echo "Invalid option: -$OPTARG" echo_usage exit 1 ;; :) echo "Option -$OPTARG requires an argument." echo_usage exit 1 ;; esac done # ## clean dirs and check out #if [ -d build -a $delete_src -eq 1 ] #then # rm -rf build #fi # pushd debian >/dev/null ln -sf /usr/share/mbuild/rules . #if [ -e tmp ] #then # rm -rf tmp #fi #rm *.stamp 2>/dev/null || true #rm make.pre 2>/dev/null || true mkdir -p tmp/DEBIAN # load util functions for C/C++ - build if [ -f $paket.cpp.sh ] then cpp_build=1 . projects/tools/make/c_configure.sh . $paket.cpp.sh fi # copy package control #control=$(find .. -name $paket.control) #build_number=${build#*_} #if [ -z "$control" ] #then # echo "warning: control file not found" # echo " this file is necessary for any package production." #else # sed "s/%BUILD%/$build_number/" $control |sed "s/%ARCH%/$ARCH/" >$paket.control # echo "$paket.control written." # # # extract version # version=$(grep Version $paket.control |sed "s/Version: //") #fi popd >/dev/null if [ $prepare = 1 ] then exit 0 fi # build package . debian/setenv.sh debian/rules binary ## check for copy file #if [ ! -f $paket.cp ] #then # # search for copy file # copy=$(find .. -name $paket.cp) # if [ -n "$copy" ] # then # ln -sf $copy . # else # echo "warning: file $paket.cp missing or not executable:" # echo " this file is necessary for any package production." # fi #fi # ## check for installation scripts #files=$(find .. -name $paket.preinst) #files="$files $(find .. -name $paket.postinst)" #files="$files $(find .. -name $paket.prerm)" #files="$files $(find .. -name $paket.postrm)" #for file in $files #do # ln -sf $file . #done # create generic make.pre, if not existing #if [ ! -f make.pre ] #then # cat >>make.pre <>make.pre # echo "_arch = _${ARCH}" >>make.pre # fi # echo "make.pre written." #fi # ## append version to make.pre #echo "version = $version" >> make.pre #echo "build = $build" >> make.pre