source: spec/trunk/SPECS/odin/UpdateRPMSpec.sh@ 1194

Last change on this file since 1194 was 255, checked in by dmik, 14 years ago

odin: Spec for release 0.8.1-1.

File size: 4.9 KB
Line 
1#!/bih/sh
2
3#
4# Odin RPM spec file updater.
5#
6# Project Odin Software License can be found in LICENSE.TXT
7#
8# NOTE: This script requires rpmbuild and the basic set of unix tools such
9# as cp, mkdir, pwd, readlink, etc.
10#
11
12#
13# Defaults
14#
15
16spec_file="odin.spec"
17
18#
19# Functions
20#
21
22die() { echo "ERROR: $@"; cd "$start_dir"; exit 1; }
23
24run()
25{
26 echo "$@"
27 "$@" || die \
28"Last command failed (exit status $?)."
29}
30
31cmd_update()
32{
33 local have_git="$(git --version)"
34
35 # get the version info from .spec
36 local s_ver_major=$(sed -nre \
37 "s/^%define ver_major[[:space:]]+([0-9]+).*$/\1/p" < "$spec_file")
38 local s_ver_minor=$(sed -nre \
39 "s/^%define ver_minor[[:space:]]+([0-9]+).*$/\1/p" < "$spec_file")
40 local s_ver_patch=$(sed -nre \
41 "s/^%define ver_patch[[:space:]]+([0-9]+).*$/\1/p" < "$spec_file")
42 local s_rpm_release=$(sed -nre \
43 "s/^%define rpm_release[[:space:]]+([0-9]+).*$/\1/p" < "$spec_file")
44
45 [ -z "$s_ver_major" -o -z "$s_ver_minor" -o -z "$s_ver_patch" -o \
46 -z "$s_rpm_release" ] && \
47 die "Could not determine version number in '$spec_file'."
48
49 echo
50 echo "Old version: $s_ver_major.$s_ver_minor.$s_ver_patch-$s_rpm_release"
51
52 if [ "$s_ver_major.$s_ver_minor.$s_ver_patch" != \
53 "$ver_major.$ver_minor.$ver_build" ]; then
54 # reset the revision number and take the new version number
55 s_rpm_release=1
56 s_ver_major=$ver_major
57 s_ver_minor=$ver_minor
58 s_ver_patch=$ver_build
59 else
60 # increase the current revision number
61 s_rpm_release=$(($s_rpm_release + 1))
62 fi
63
64 echo "New version: $s_ver_major.$s_ver_minor.$s_ver_patch-$s_rpm_release"
65
66 # Get the user name and email from .gitconfig, if any
67 if [ -n "$have_git" ]; then
68 packager_name=$(git config --get user.name)
69 packager_email=$(git config --get user.email)
70 fi
71
72 if [ -z "$packager_name" -a -z "$packager_email" ]; then
73 packager="Your Name <your/email.com>"
74 elif [ -z "$packager_name" ]; then
75 packager="<$packager_email>"
76 elif [ -z "$packager_email" ]; then
77 packager="$packager_name"
78 else
79 packager="$packager_name <$packager_email>"
80 fi
81
82 echo "Packager: $packager"
83
84 # Get the current date in the required format
85 cur_date=`LANG=C date "+%a %b %d %Y"`
86
87 echo "Date: $cur_date"
88 echo
89
90 # backup the original .spec file
91 run cp -Rdp "$spec_file" "$spec_file.old"
92
93 # escape some values for sed
94 packager=$(echo "$packager" | sed -re 's/[\\\/\&]/\\&/g')
95
96 # update it with new data (note that we pipe through tr to remove CR since
97 # sed uses CRLF for line terminators on OS/2 but rpmbuild can't stand it)
98 echo 'sed ... < '$spec_file.old' > '$spec_file
99 sed -re '
100{
101 s/^(%define ver_major[[:space:]]+)[0-9]+(.*)$/\1'$s_ver_major'\2/
102 s/^(%define ver_minor[[:space:]]+)[0-9]+(.*)$/\1'$s_ver_minor'\2/
103 s/^(%define ver_patch[[:space:]]+)[0-9]+(.*)$/\1'$s_ver_patch'\2/
104 s/^(%define rpm_release[[:space:]]+)[0-9]+(.*)$/\1'$s_rpm_release'\2/
105
106 s/^%changelog[[:space:]]*$/%changelog\n\n\* '"$cur_date"' '"$packager"\
107' - '"$s_ver_major"'.'"$s_ver_minor"'.'"$s_ver_patch"'-'"$s_rpm_release"\
108'\n- <List changes here>/
109}
110' < "$spec_file.old" | tr -d '\015' > "$spec_file"
111
112 rc=$?
113 if [ "$rc" != "0" ]; then
114 echo "sed command failed (exit status $rc)."
115 cp -Rdp "$spec_file.old" "$spec_file"
116 rm "$spec_file.old"
117 exit $rc
118 fi
119
120 echo "ALL DONE."
121}
122
123cmd_help()
124{
125 echo \
126"
127Usage:
128 $0 update <odin_root> Update the \"$spec_file\" file.
129
130<odin_root> is the full path to the Odin source tree. Note that the build
131tree is expected to be found in the <odin_root>-build directory.
132"
133}
134
135#
136# Main
137#
138
139script_path=$(readlink -f $0)
140script_dir=${script_path%/*}
141
142start_dir=$(pwd)
143
144# Check prerequisites
145
146[ -f "$spec_file" ] || \
147 die "Could not find file '$spec_file'."
148
149# Get Odin version number
150
151odin_root="$2"
152[ -n "$2" ] || { cmd_help; exit 0; }
153
154odinbuild_h="$odin_root/include/odinbuild.h"
155
156[ -f "$odinbuild_h" ] || \
157 die "Could not find file '$odinbuild_h'."
158
159ver_major=$(sed -nre \
160 "s/^#define ODIN32_VERSION_MAJOR[[:space:]]+([0-9]+).*$/\1/p" < "$odinbuild_h")
161ver_minor=$(sed -nre \
162 "s/^#define ODIN32_VERSION_MINOR[[:space:]]+([0-9]+).*$/\1/p" < "$odinbuild_h")
163ver_build=$(sed -nre \
164 "s/^#define ODIN32_BUILD_NR[[:space:]]+([0-9]+).*$/\1/p" < "$odinbuild_h")
165
166[ -z "$ver_major" -o -z "$ver_minor" -o -z "$ver_build" ] && \
167 die "Could not determine Odin version number in '$odinbuild_h'."
168
169ver_dots="$ver_major.$ver_minor.$ver_build"
170
171# Parse arguments
172
173case $1 in
174 "--help" | "-?" | "-h" | "") cmd_help;;
175 "update") cmd_update;;
176 *) cmd_help;;
177esac
178
179# end of story
180
181exit 0
182
Note: See TracBrowser for help on using the repository browser.