summaryrefslogtreecommitdiff
path: root/common_functions
blob: 2bfc988afa522220fcf61b9817e8920421cce867 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/bash

################################################################
#
# Copyright (c) 1995-2014 SUSE Linux Products GmbH
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or 3 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program (see the file COPYING); if not, write to the
# Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
################################################################

build_host_arch() {
    : ${BUILD_HOST_ARCH:=`uname -m`}
    BUILD_INITVM_ARCH="$BUILD_HOST_ARCH"
    # avoid multiple initvm.* helpers for i586 and i686
    test i686 != "$BUILD_INITVM_ARCH" || BUILD_INITVM_ARCH=i586
}

extend_build_arch() {
    case $BUILD_ARCH in
      armv7hl) BUILD_ARCH="armv7hl:armv7l:armv6hl:armv6l:armv5tel" ;;
      armv7l) BUILD_ARCH="armv7l:armv6l:armv5tel" ;;
      armv6hl) BUILD_ARCH="armv6hl:armv6l:armv5tel" ;;
      armv6l) BUILD_ARCH="armv6l:armv5tel" ;;
      armv5tel) BUILD_ARCH="armv5tel" ;;
      i686) BUILD_ARCH="i686:i586:i486:i386" ;;
      i586) BUILD_ARCH="i586:i486:i386" ;;
      i486) BUILD_ARCH="i486:i386" ;;
      i386) BUILD_ARCH="i386" ;;
      ppc64) BUILD_ARCH="ppc64:ppc" ;;
      ppc64le) BUILD_ARCH="ppc64le" ;;
      sparc64v) BUILD_ARCH="sparc64v:sparc64:sparcv9v:sparcv9:sparcv8:sparc" ;;
      sparc64) BUILD_ARCH="sparc64:sparcv9:sparcv8:sparc" ;;
      sparcv9v) BUILD_ARCH="sparcv9v:sparcv9:sparcv8:sparc" ;;
      sparcv9) BUILD_ARCH="sparcv9:sparcv8:sparc" ;;
      sparcv8) BUILD_ARCH="sparcv8:sparc" ;;
      sparc) BUILD_ARCH="sparc" ;;
      x86_64) BUILD_ARCH="x86_64:i686:i586:i486:i386" ;;
    esac
}

set_build_arch() {
    build_host_arch
    if test -z "$BUILD_ARCH" ; then
	BUILD_ARCH="$BUILD_HOST_ARCH"
    fi
    extend_build_arch
    if test "$BUILD_ARCH" != "${BUILD_ARCH#i686}" ; then
	cpuflags=`grep ^flags /proc/cpuinfo`
	cpuflags="$cpuflags "
	if test "$cpuflags" = "${cpuflags/ cx8 /}" -o "$cpuflags" = "${cpuflags/ cmov /}"; then
	    echo "Your cpu doesn't support i686 rpms. Exit."
	    cleanup_and_exit 1
	fi
    fi
}

check_exit() {
    if test -e $BUILD_ROOT/exit; then
	echo "exit ..."
	cleanup_and_exit 1
    fi
}

check_use_emulator() {
    INITVM_NAME=
    # check if the extended host arch contains the build arch
    local old_build_arch="$BUILD_ARCH"
    local arch="${BUILD_ARCH%%:*}"
    BUILD_ARCH="$BUILD_HOST_ARCH"
    extend_build_arch
    BUILD_ARCH=":$BUILD_ARCH:"
    if test "$BUILD_ARCH" != "${BUILD_ARCH/:$arch:/}" ; then
	# native supported arch, no emulator
	BUILD_ARCH="$old_build_arch"
	return 1
    fi
    BUILD_ARCH="$old_build_arch"

    # to run the qemu initialization in the vm, we need to
    # register it with a static program or shell script
    INITVM_NAME="initvm.$BUILD_INITVM_ARCH"
    if test -e "$BUILD_DIR/$INITVM_NAME" -a -e "$BUILD_DIR/qemu-reg" ; then
	chmod 0755 "$BUILD_DIR/$INITVM_NAME"
	return 0	# chroot build, we need to run
    fi
    # XXX: error?
    echo "Warning: cross compile not possible due to missing static binaries. please install build-initvm package for that purpose."
    echo "         check that the right architecture is available for your build host, you need $INITVM_NAME for this one."
    INITVM_NAME=
    return 1
}

# usage:
# progress_setup LIST
# for I in $LIST; do
#    progress_step LIST
#    action $I 
# done

# $1 name of a textual list
progress_setup() {
    eval "$1__ARRAY__=(\$$1)"
    eval "$1__INDEX__=1"
    eval "$1__LENGTH__=\${#$1__ARRAY__[@]}"
}

# $1 name of a textual list
# $2 optional, printf format for 2 numeric arguments (current, total)
progress_step() {
    local IDX=$1__INDEX__
    local LEN=$1__LENGTH__
    printf "${2-[%d/%d] }" $(($IDX++)) ${!LEN}
}