posaune
[projects.git] / tools / make / mconfigure
index ec5d2a6..244d19b 100755 (executable)
@@ -8,6 +8,8 @@ function echo_usage {
        echo "  -C <cross environment>"
        echo "  -d : compile"
        echo "  -p : pack default: do all"
+       echo "  -v : set version"
+       echo "  -V : version set by project"
        echo "  -o : support old Debian 7 format"
 }
 
@@ -25,7 +27,16 @@ function cmake_check {
                        exit 2
                fi
                
-               cp debian/$paket.cmake CMakeLists.txt
+               if [ -n "$cross" ]
+               then
+                       # inject cross toolset
+                       echo "set (CMAKE_MODULE_PATH $cross)" > CMakeLists.txt
+                       echo "include(toolset)" >> CMakeLists.txt
+                       cat debian/$paket.cmake >> CMakeLists.txt
+               else
+                       cp debian/$paket.cmake CMakeLists.txt
+               fi
+
                echo "make" > debian/$paket.build
                chmod 755 debian/$paket.build
                cmake .
@@ -70,6 +81,11 @@ function set_build {
        then
                tag=$(git describe --tags --match "${paket}_*" 2>/dev/null) || true
                if test -z "$tag"
+               then
+                       # try generic "v_" tag
+                       tag=$(git describe --tags --match "v_*" 2>/dev/null) || true
+               fi
+               if test -z "$tag"
                then
                        tag="0.0-0TOP"
                fi
@@ -109,6 +125,10 @@ function check_version {
        fi
 }
 
+##############################################################################
+# Main program
+##############################################################################
+
 if [ ! -d debian ]
 then
        echo "run mconfigure in the project base directory with a debian directory in it!"
@@ -118,40 +138,48 @@ fi
 configure=0
 compile=0
 pack=0
-while getopts "a:cC:dpo" opt; do
-       case $opt in
-               a) ARCH=$OPTARG
-                       ;;
-               c) configure=1
-                       ;;
-               d)      compile=1
-                       ;;
-               C) cross=$OPTARG
-                       ;;
-               p)      pack=1
-                       ;;
-               o)      oldpack="-Zgzip"
-                       ;;
-               \?) echo "Invalid option: -$OPTARG"
-                       echo_usage
-                       exit 1
-                       ;;
-               :) echo "Option -$OPTARG requires an argument."
-                       echo_usage
-                       exit 1
-                       ;;
-       esac
+while [ $OPTIND -le "$#" ]
+do
+       if getopts "a:cC:dpov:V" opt
+       then
+               case $opt in
+                       a) ARCH=$OPTARG
+                               ;;
+                       c) configure=1
+                               ;;
+                       d)      compile=1
+                               ;;
+                       C) cross=$OPTARG
+                               ;;
+                       p)      pack=1
+                               ;;
+                       o)      oldpack="-Zgzip"
+                               ;;
+                       v)      optversion=$OPTARG
+                               ;;
+                       V)      optversion="0.0"
+                               ;;
+                       \?) echo "Invalid option: -$OPTARG"
+                               echo_usage
+                               exit 1
+                               ;;
+                       :) echo "Option -$OPTARG requires an argument."
+                               echo_usage
+                               exit 1
+                               ;;
+               esac
+       else
+               paket="${!OPTIND}"
+               eval OPTIND=OPTIND+1
+       fi
 done
-shift $((OPTIND -1))
 
-if [ $# -lt 1 ]
+if [ -z "$paket" ]
 then
        echo_usage
        exit 1
 fi
 
-paket=$1
-
 if [ -n "$ARCH" -a -n "$cross" ]
 then
        echo "invalid options: supply -a for multiarch or -C for explicit cross compile environment"
@@ -175,18 +203,30 @@ then
        echo "" > debian/rules.pre
        if [ -e debian/setenv.sh ]; then rm debian/setenv.sh; fi
        
-       if [ -n "$ARCH" ]
-       then
-               arch_opt="-a $ARCH"
-       fi
        if [ -n "$cross" ]
        then
                if [ ${cross:0:1} != "/" ]
                then
                        cross="/opt/cross/$cross"
+                       #export $cross
+               fi
+               if [ -f "$cross/setenv.sh" ]
+               then
+                       . "$cross/setenv.sh"
+                       cp $cross/setenv.sh debian/setenv.sh
                fi
-               . "$cross/setenv.sh"
-               cp $cross/setenv.sh debian/setenv.sh
+               if [ -z "$ARCH" ]
+               then
+                       # determine architecture
+                       GNU_ARCH=${cross%-*} # assumed format: DEB_HOST_GNU_TYPE-g++version, e.g. arm-linux-gnueabihf-4.9
+                       GNU_ARCH=${GNU_ARCH##*/}
+                       arch_opt="-t $GNU_ARCH"
+               fi
+       fi
+
+       if [ -n "$ARCH" ]
+       then
+               arch_opt="-a $ARCH"
        fi
        dpkg-architecture $arch_opt >> debian/setenv.sh
        
@@ -194,7 +234,12 @@ then
        echo "oldpack=\"$oldpack\"" >> debian/setenv.sh
 
        set_build
-       check_version
+       if [ -z "$optversion" ]
+       then
+               check_version
+       else
+               version=$optversion
+       fi
        echo "version=$version" >> debian/setenv.sh
        echo "build=$build" >> debian/setenv.sh
 
@@ -204,7 +249,7 @@ then
 #      pwd=${pwd,,*}
 #      echo "pwd=$pwd" >> debian/rules.pre
 
-       echo "building $paket with build $version-$build"
+       echo "building $paket with version/build=$version-$build"
 
        pushd debian >/dev/null
        # ./debian -------------------------------------
@@ -305,11 +350,19 @@ then
                if grep "^Architecture: *all" debian/$paket.control >/dev/null
                then
                        echo "arch = all" >> debian/rules.pre
-                       echo "BINARY_INDEP = copy ../${paket}_$version-${build}_all.deb" >> debian/rules.pre
+                       echo 'BINARY_INDEP = copy ../$(paket)_$(version)-$(build)_all.deb' >> debian/rules.pre
                else
                        echo 'arch = ${DEB_HOST_ARCH}' >> debian/rules.pre
                        echo "BINARY_ARCH = copy ../${paket}_$version-${build}_"'$(arch).deb' >> debian/rules.pre
                fi
+               if ! [ -f debian/$paket.changelog ]
+               then
+                       echo "changelog_source = debian/default.changelog" >> debian/rules.pre
+                       if [ -f debian/default.changelog ]
+                       then
+                               rm debian/default.changelog
+                       fi
+               fi
        elif [ -f debian/$paket.cp ]
        then
                echo "PACK=zip" >> debian/rules.pre