File: functions.sh

package info (click to toggle)
syslog-ng 4.8.1-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 20,456 kB
  • sloc: ansic: 177,631; python: 13,035; cpp: 11,611; makefile: 7,012; sh: 5,147; java: 3,651; xml: 3,344; yacc: 1,377; lex: 599; perl: 193; awk: 190; objc: 162
file content (163 lines) | stat: -rw-r--r-- 4,573 bytes parent folder | download | duplicates (3)
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
set -e

function get_version() {
	[ -n "$VERSION" ] && echo $VERSION && return
	[ -d /source/scripts ] && cd /source && scripts/version.sh || echo "unknown-version"
}

function _map_cmdline_null()
{
	echo -n ""
}

function _map_env_null()
{
	echo "_=_"
}

function run_build_command_with_build_manifest_parameters() {
	map_environment=$1
	map_cmdline=$2
	shift 2

	# we sort longer strings in front, to make more specific items
	# first.

	TMPDIR=$(mktemp -d)

	IFS=$'\t'
	egrep -e "^${OS_DISTRIBUTION}([^-]|$)" -e "^${IMAGE_PLATFORM}" /dbld/build.manifest | sort -r | head -1 | while read os featureflags env cmdline; do
		unset IFS
		echo $os $featureflags $env $cmdline
		declare -a env_values
		if [ "${env}" != "-" -a "${env}" != "" ]; then
			# xargs processes removes quote characters just like the shell
			echo "${env}" | tr ',' '\n' | xargs -n1 echo > $TMPDIR/env.list
		        readarray -t env_values < $TMPDIR/env.list
		fi

		if [ "`${map_cmdline} ${featureflags}`" = "" ]; then

			# no extra command line values (e.g.  deb), execute
			# it without them on the env command line.  In this
			# case we supplied an extra, zero-length argument to
			# dpkg-buildpackage that it errored out on (understandably).
			#
			# I couldn't find a way to expand a variable in shell that
			#   1) was able to handle spaces in arguments
			#   2) could also represent no extra arguments (not even an empty one)
			#
			# that's why we are using this ugly if statement above and the
			# double evaluation of ${map_cmdline}.
			#

			echo "Runnign build as: " env "${env_values[@]}" "`${map_environment} ${featureflags}`" "$@" $cmdline
			env "${env_values[@]}" "`${map_environment} ${featureflags}`" "$@" $cmdline
		else
			${map_cmdline} ${featureflags} | xargs -n1 echo > $TMPDIR/cmdline.list
			readarray -t cmdline_values < $TMPDIR/cmdline.list
			echo "Running build as: " env "${env_values[@]}" "`${map_environment} ${featureflags}`" "$@" $cmdline "${cmdline_values[@]}"
			env "${env_values[@]}" "`${map_environment} ${featureflags}`" "$@" $cmdline "${cmdline_values[@]}"
		fi
	done
}

function _map_feature_flags_to_deb_build_profiles()
{
    echo -n DEB_BUILD_PROFILES=
    IFS=,
    for feature in $1; do
        case "$feature" in
          nojava|nopython)
            # these are standard Debian build profiles, keep them intact
            echo -n "$feature "
            ;;
          *)
            # everything else is prefixed with "sng-"
            echo -n "sng-$feature "
            ;;
        esac
    done
    echo
}

function deb_run_build_command()
{
    run_build_command_with_build_manifest_parameters _map_feature_flags_to_deb_build_profiles _map_cmdline_null "$@"
}

function _map_feature_flags_to_rpmbuild_with_and_without_options()
{
    IFS=,
    echo -n "--define='_dbld 1' "
    for feature in $1; do
        case "$feature" in
            no*)
                feature_without_no=`echo $feature | sed -e 's/^no//'`
                echo -n "--define='_without_${feature_without_no} --without-${feature_without_no}' "
                ;;
            *)
                echo -n "--define='_with_${feature} --with-${feature}' "
                ;;
        esac
    done
}


function rpm_run_build_command()
{
    run_build_command_with_build_manifest_parameters _map_env_null _map_feature_flags_to_rpmbuild_with_and_without_options "$@"
}

function validate_man_binary() {
	MAN=`which man`
	if ! [ -x ${MAN} ]; then
		return 0
	fi

	set +e
	man_help=$(${MAN} --help 2>&1)
	rc=$?
	set -e
	if [ "$rc" -ne 0 ]; then
		cat <<EOF
${man_help}

Your /usr/bin/man binary seems disfunctional within the dbld container.
This is a dependency of debhelper, which is required to generate syslog-ng
Debian packages.

This may happen because of an AppArmor bug that you can work around by
removing the apparmor policy for man on the HOST computer, invoking this
command as root:

bash# apparmor_parser -R /etc/apparmor.d/usr.bin.man

The error that happens is that man is complaining about a missing
libmandb.so, which is there, but AppArmor prevents access.

You can validate whether this was successful by querying the running
apparmor policy:

bash# apparmor_status
EOF
		return 1
	fi
}

function validate_container() {
	validate_man_binary
}

function capture_artifacts()
{
	if [ "$MODE" = "release" ]; then
		ARTIFACT_DIR=${ARTIFACT_DIR:-/dbld/release/$VERSION}
		echo "Capturing artifacts:" "$*" "into" "${ARTIFACT_DIR}"
		cp -R -v "$*" "${ARTIFACT_DIR}"
		echo "The current list of artifacts:"
		ls -l "${ARTIFACT_DIR}"
	fi
}

VERSION=$(get_version)