blob: 63e0ba8ea2c9b5d91e5f67069f3a47491d9e3e0c [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
Neels Hofmeyr851802b2017-06-23 03:52:26 +020084 if git rev-parse "origin/$branch"; then
Neels Hofmeyr53e758a2017-05-29 22:53:34 +020085 branch="origin/$branch"
86 fi
87
Neels Hofmeyr851802b2017-06-23 03:52:26 +020088 git branch -D build_branch || true
89 git checkout -b build_branch "$branch"
Neels Hofmeyr53e758a2017-05-29 22:53:34 +020090 git reset --hard "$branch"
91
92 git rev-parse HEAD
93
94 cd "$base"
95}
96
97build_repo() {
98 # usage: build_repo <name> [<branch>] [--configure-opts [...]]
99 dep="$1"
100 branch="master"
101 if [ -z "$(echo "$2" | grep '^-')" ]; then
102 # second arg does not start with a dash, it's empty or a branch
103 branch="$2"
104 if [ -n "$branch" ]; then
105 # we had a branch arg, need to shift once more to get config options
106 shift
107 else
108 branch="master"
109 fi
110 fi
111 shift
112 configure_opts="$@"
113
114 set +x; echo "
115
116====================== $dep
117
118"; set -x
119
120
121 have_repo "$dep" "$branch"
122
123 cd "$dep"
124
125 echo "$(git rev-parse HEAD) $dep" >> "$prefix_real/${name}_git_hashes.txt"
126
127 # special shim: we know the openbsc.git needs to be built in the openbsc/ subdir.
128 if [ "$dep" = "openbsc" ]; then
129 cd openbsc
130 fi
131
132 set +x; echo; echo; set -x
133 autoreconf -fi
134 set +x; echo; echo; set -x
135 ./configure --prefix="$prefix" $CONFIGURE_FLAGS $configure_opts
136 set +x; echo; echo; set -x
137 make -j8 || make # libsmpp34 can't build in parallel
138 set +x; echo; echo; set -x
139 make install
140}
141
142create_bin_tgz() {
143 # don't package documentation -- the libosmocore docs can be up to 16 Mb large,
144 # a significant amount compared to the binaries
145 rm -rf "$prefix_real/share/doc/{libosmocore,libosmo-sccp}" || true
146
147 # build the archive that is going to be copied to the tester
148 cd "$prefix_real"
149 this="$name.build-${BUILD_NUMBER-$(date +%Y-%m-%d_%H_%M_%S)}"
150 tar="${this}.tgz"
151 tar czf "$base/$tar" *
152 cd "$base"
153 md5sum "$tar" > "${this}.md5"
154}