blob: 921434d9ffa685e03058459f692dc03fa685456d [file] [log] [blame]
Neels Hofmeyr53e758a2017-05-29 22:53:34 +02001#!source_this_file
2
3# Common parts for osmo-gsm-tester jenkins build scripts. Use like in below example:
4#
5#--------------
6# #!/bin/sh
7# set -e -x
8# base="$PWD"
9# name="osmo-name"
10# . "$(dirname "$0")/jenkins-build-common.sh"
11#
12# build_repo libosmocore --configure --opts
13# build_repo libosmo-foo special_branch --configure --opts
14# build_repo osmo-bar
15#
16# create_bin_tgz
17#--------------
18#
19# Some explanations:
20#
21# To allow calling from arbitrary working directories, other scripts should
22# source this file like shown above.
23#
24# Sourcing scripts must provide some variables/functions, see above.
25# In addition, these values can optionally be passed to override:
26# git_url, prefix, prefix_real, BUILD_NUMBER
27#
28# CONFIGURE_FLAGS may contain flags that should be passed to all builds'
29# ./configure steps (useful e.g. for building in the sysmobts SDK).
30#
31# For each built repository, a specific git branch or hash can be provided by
32# environment variable: OSMO_GSM_TESTER_BUILD_$repo="<git-hash>"
33# NOTE: convert $repo's dashes to underscore. For example:
34# OSMO_GSM_TESTER_BUILD_osmo_hlr="f001234abc"
35# OSMO_GSM_TESTER_BUILD_libosmocore="my/branch"
36# ("origin/" is prepended to branch names automatically)
37
38if [ -z "$name" -o -z "$base" ]; then
39 set +x
40 echo "Some environment variables are not provided as required by jenkins-build-common.sh. Error."
41 exit 1
42fi
43
44git_url="${git_url-"git://git.osmocom.org"}"
45prefix="${prefix-"$base/inst-$name"}"
46# prefix_real is usually identical with prefix, except when installing to a
47# different $DESTDIR than /, which is the case for example when building
48# osmo-bts within the sysmoBTS SDK
49prefix_real="${prefix_real-"$prefix"}"
50
51export PKG_CONFIG_PATH="$prefix_real/lib/pkgconfig:$PKG_CONFIG_PATH"
52export LD_LIBRARY_PATH="$prefix_real/lib:$LD_LIBRARY_PATH"
53
54# Show current environment. Sometimes the LESS_ vars have ansi colors making a
55# mess, so exclude those.
56env | grep -v "^LESS" | sort
57
58# clean the workspace
59rm -f "$base/${name}"*.tgz rm -f "$base/${name}"*.md5
60rm -rf "$prefix_real"
61mkdir -p "$prefix_real"
62
63have_repo() {
64 repo="$1"
65 branch="${2-master}"
66
67 # Evaluate environment for instructions to build a specific git hash.
68 # Using a hash as $branch above unfortunately doesn't work.
69 branch_override_var="$(echo "OSMO_GSM_TESTER_BUILD_$repo" | sed 's/-/_/g')"
70 branch_override="$(eval "echo \$$branch_override_var")"
71 if [ -n "$branch_override" ]; then
72 branch="$branch_override"
73 fi
74
75 cd "$base"
76 if [ ! -d "$repo" ]; then
77 git clone "$git_url/$repo" "$repo"
78 fi
79 cd "$repo"
80 rm -rf *
81 git fetch origin
82
83 # Figure out whether we need to prepend origin/ to find branches in upstream
84 if ! git rev-parse "$branch"; then
85 branch="origin/$branch"
86 fi
87
88 git reset --hard "$branch"
89
90 git rev-parse HEAD
91
92 cd "$base"
93}
94
95build_repo() {
96 # usage: build_repo <name> [<branch>] [--configure-opts [...]]
97 dep="$1"
98 branch="master"
99 if [ -z "$(echo "$2" | grep '^-')" ]; then
100 # second arg does not start with a dash, it's empty or a branch
101 branch="$2"
102 if [ -n "$branch" ]; then
103 # we had a branch arg, need to shift once more to get config options
104 shift
105 else
106 branch="master"
107 fi
108 fi
109 shift
110 configure_opts="$@"
111
112 set +x; echo "
113
114====================== $dep
115
116"; set -x
117
118
119 have_repo "$dep" "$branch"
120
121 cd "$dep"
122
123 echo "$(git rev-parse HEAD) $dep" >> "$prefix_real/${name}_git_hashes.txt"
124
125 # special shim: we know the openbsc.git needs to be built in the openbsc/ subdir.
126 if [ "$dep" = "openbsc" ]; then
127 cd openbsc
128 fi
129
130 set +x; echo; echo; set -x
131 autoreconf -fi
132 set +x; echo; echo; set -x
133 ./configure --prefix="$prefix" $CONFIGURE_FLAGS $configure_opts
134 set +x; echo; echo; set -x
135 make -j8 || make # libsmpp34 can't build in parallel
136 set +x; echo; echo; set -x
137 make install
138}
139
140create_bin_tgz() {
141 # don't package documentation -- the libosmocore docs can be up to 16 Mb large,
142 # a significant amount compared to the binaries
143 rm -rf "$prefix_real/share/doc/{libosmocore,libosmo-sccp}" || true
144
145 # build the archive that is going to be copied to the tester
146 cd "$prefix_real"
147 this="$name.build-${BUILD_NUMBER-$(date +%Y-%m-%d_%H_%M_%S)}"
148 tar="${this}.tgz"
149 tar czf "$base/$tar" *
150 cd "$base"
151 md5sum "$tar" > "${this}.md5"
152}