373ef5536880f4375b5138009fe2a4e4dc69201b
[NetworkManager.git] / contrib / fedora / rpm / build.sh
1 #!/bin/bash
2
3 #set -vx
4
5 die() {
6     echo "$*" >&2
7     exit 1
8 }
9
10 # copy output also to logfile
11 LOG() {
12     echo "$*"
13 }
14
15 abs_path() {
16     local F="$1"
17     local ALT="$2"
18
19     if [[ "$F" != "" ]]; then
20         (cd "$ORIGDIR" && readlink -f "$F") || die "Could not change into $ORIGDIR"
21     else
22         echo "$2"
23     fi
24 }
25
26 get_version() {
27     local major minor micro
28     local F="${1:-"$GITDIR/configure.ac"}"
29
30     vars="$(sed -n 's/^m4_define(\[nm_\(major\|minor\|micro\)_version\], *\[\([0-9]\+\)\]) *$/local \1='\''\2'\''/p' "$F" 2>/dev/null)"
31     eval "$vars"
32
33     [[ -n "$major" && -n "$minor" && "$micro" ]] || return 1
34     echo "$major.$minor.$micro"
35 }
36
37 write_changelog() {
38     if [[ "x$CHANGELOG" == x ]]; then
39         cat <<- EOF
40         * $(LC_TIME=C date '+%a %b %d %Y') $USERNAME - %{epoch_version}:%{version}-%{release_version}%{snapshot}%{git_sha_version}
41         - build of NetworkManager ($DATE, uuid: $UUID, git: $COMMIT_FULL)
42         $(git log -n20 --date=local --format='- %h %s [%an] (%ci)')
43         - ...
44         EOF
45     else
46         echo "$CHANGELOG"
47     fi > "$TEMP/SOURCES/CHANGELOG"
48 }
49
50 ORIGDIR="$(readlink -f "$PWD")"
51 SCRIPTDIR="$(dirname "$(readlink -f "$0")")"
52 LOG "Change to directory \"$SCRIPTDIR\""
53 cd "$SCRIPTDIR" || die "could not change into $SCRIPTDIR"
54 GITDIR="$(cd "$SCRIPTDIR" && git rev-parse --show-toplevel || die "Could not get GITDIR")"
55
56 DATE="$(date '+%Y%m%d-%H%M%S')"
57
58 BUILDLOG="$(mktemp ./.build.log.XXXXXXX)"
59 chmod +r "$BUILDLOG"
60
61 exec > >(tee "$BUILDLOG")
62 exec 2>&1
63
64 UUID=`uuidgen`
65 RELEASE_VERSION="${RELEASE_VERSION:-$(git rev-list HEAD | wc -l)}"
66 VERSION="${VERSION:-$(get_version || die "Could not read $VERSION")}"
67 COMMIT_FULL="${COMMIT_FULL:-$(git rev-parse --verify HEAD || die "Error reading HEAD revision")}"
68 COMMIT="${COMMIT:-$(git rev-parse --verify HEAD | sed 's/^\(.\{10\}\).*/\1/' || die "Error reading HEAD revision")}"
69 USERNAME="${USERNAME:-"$(git config user.name) <$(git config user.email)>"}"
70 SPECFILE="$(abs_path "$SPECFILE" "$SCRIPTDIR/NetworkManager.spec")"
71 _SOURCE="$SOURCE"
72 SOURCE="$(abs_path "$SOURCE" "$(ls -1 "$GITDIR/NetworkManager-$VERSION"*.tar* 2>/dev/null | head -n1)")"
73 [[ -f "$SOURCE" ]] || die "could not find source ${_SOURCE:-$GITDIR/NetworkManager-$VERSION*.tar*} . Did you execute \`make dist\`? Otherwise set \$SOURCE variable"
74 SOURCE_NETWORKMANAGER_CONF="$(abs_path "$SOURCE_NETWORKMANAGER_CONF" "$SCRIPTDIR/NetworkManager.conf")"
75 SOURCE_CONFIG_SERVER="$(abs_path "$SOURCE_CONFIG_SERVER" "$SCRIPTDIR/00-server.conf")"
76 SOURCE_CONFIG_CONNECTIVITY_FEDORA="$(abs_path "$SOURCE_CONFIG_CONNECTIVITY_FEDORA" "$SCRIPTDIR/20-connectivity-fedora.conf")"
77
78 TEMP="$(mktemp -d "$SCRIPTDIR/NetworkManager.$DATE.XXXXXX")"
79 TEMPBASE="$(basename "$TEMP")"
80
81 LOG "UUID=$UUID"
82 LOG "VERSION=$VERSION"
83 LOG "RELEASE_VERSION=$RELEASE_VERSION"
84 LOG "COMMIT=$COMMIT"
85 LOG "USERNAME=$USERNAME"
86 LOG "SPECFILE=$SPECFILE"
87 LOG "SOURCE=$SOURCE"
88 LOG "SOURCE_NETWORKMANAGER_CONF=$SOURCE_NETWORKMANAGER_CONF"
89 LOG "SOURCE_CONFIG_SERVER=$SOURCE_CONFIG_SERVER"
90 LOG "SOURCE_CONFIG_CONNECTIVITY_FEDORA=$SOURCE_CONFIG_CONNECTIVITY_FEDORA"
91 LOG "BASEDIR=$TEMP"
92
93 ln -snf "$TEMPBASE" ./latest0
94 ln "$BUILDLOG" "$TEMPBASE/build.log"
95 rm -f "$BUILDLOG"
96
97 TEMPSPEC="$TEMP/SPECS/NetworkManager.spec"
98 mkdir -p "$TEMP/SOURCES/" "$TEMP/SPECS/" || die "error creating SPECS directoy"
99
100 cp "$SOURCE" "$TEMP/SOURCES/" || die "Could not copy source $SOURCE to $TEMP/SOURCES"
101 cp "$SOURCE_NETWORKMANAGER_CONF" "$TEMP/SOURCES/NetworkManager.conf" || die "Could not copy source $SOURCE_NETWORKMANAGER_CONF to $TEMP/SOURCES"
102 cp "$SOURCE_CONFIG_SERVER" "$TEMP/SOURCES/00-server.conf" || die "Could not copy source $SOURCE_CONFIG_SERVER to $TEMP/SOURCES"
103 cp "$SOURCE_CONFIG_CONNECTIVITY_FEDORA" "$TEMP/SOURCES/20-connectivity-fedora.conf" || die "Could not copy source $SOURCE_CONFIG_CONNECTIVITY_FEDORA to $TEMP/SOURCES"
104
105 write_changelog
106
107 sed -e "s/__VERSION__/$VERSION/g" \
108     -e "s/__RELEASE_VERSION__/$RELEASE_VERSION/g" \
109     -e "s/__COMMIT__/$COMMIT/g" \
110     -e "s/__COMMIT_FULL__/$COMMIT_FULL/g" \
111     -e "s/__SOURCE1__/$(basename "$SOURCE")/g" \
112    "$SPECFILE" |
113 sed -e "/^__CHANGELOG__$/ \
114         {
115             r $TEMPBASE/SOURCES/CHANGELOG
116             d
117         }" > "$TEMPSPEC" || die "Error reading spec file"
118
119 case "$BUILDTYPE" in
120         "SRPM")
121                 RPM_BUILD_OPTION=-bs
122                 ;;
123         *)
124                 RPM_BUILD_OPTION=-ba
125                 ;;
126 esac
127
128 rpmbuild --define "_topdir $TEMP" $RPM_BUILD_OPTION "$TEMPSPEC" $NM_RPMBUILD_ARGS || die "ERROR: rpmbuild FAILED"
129
130 ln -snf "$TEMPBASE" ./latest
131 TEMP_LATEST="$(readlink -f .)"/latest
132
133 LOG
134 LOG
135 LOG "Finished with success."
136 LOG
137 LOG "See \"$TEMP_LATEST/\" which symlinks to \"$TEMPBASE\""
138 LOG
139 LOG "Result:"
140 ls -dla "$TEMP_LATEST" "$(dirname "$TEMP_LATEST")/$TEMPBASE/" "$TEMP_LATEST"/RPMS/*/ "$TEMP_LATEST"/RPMS/*/*.rpm "$TEMP_LATEST"/SRPMS/ "$TEMP_LATEST"/SRPMS/*.rpm 2>/dev/null | sed 's/^/    /'
141 LOG
142 LOG "sudo $(which dnf &>/dev/null && echo dnf || echo yum) install '$TEMP_LATEST/RPMS'/*/*.rpm"
143 LOG
144