source: trunk/tools/install/UpdateRPMSpec.sh@ 21689

Last change on this file since 21689 was 21678, checked in by dmik, 14 years ago

Added RPM .spec file and script to auto-update it.

The file HowToDistribute.txt contains the detailed description
of the steps necessary to prepare ZIP and RPM distribution
archives.

The .spec file only installs some test files, this will be improved
soon.

  • Property svn:eol-style set to native
File size: 4.5 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
123#
124# Main
125#
126
127script_path=$(readlink -f $0)
128script_dir=${script_path%/*}
129
130start_dir=$(pwd)
131
132# Check prerequisites
133
134[ -f "$spec_file" ] || \
135 die "Could not find file '$spec_file'."
136
137# Get Odin version number
138
139odin_root="$script_dir/../.."
140
141odinbuild_h="$odin_root/include/odinbuild.h"
142
143[ -f "$odinbuild_h" ] || \
144 die "Could not find file '$odinbuild_h'."
145
146ver_major=$(sed -nre \
147 "s/^#define ODIN32_VERSION_MAJOR[[:space:]]+([0-9]+).*$/\1/p" < "$odinbuild_h")
148ver_minor=$(sed -nre \
149 "s/^#define ODIN32_VERSION_MINOR[[:space:]]+([0-9]+).*$/\1/p" < "$odinbuild_h")
150ver_build=$(sed -nre \
151 "s/^#define ODIN32_BUILD_NR[[:space:]]+([0-9]+).*$/\1/p" < "$odinbuild_h")
152
153[ -z "$ver_major" -o -z "$ver_minor" -o -z "$ver_build" ] && \
154 die "Could not determine Odin version number in '$odinbuild_h'."
155
156ver_dots="$ver_major.$ver_minor.$ver_build"
157
158# Parse arguments
159
160cmd_help()
161{
162 echo \
163"
164Usage:
165 $0 update Update the \"$spec_file\" file.
166"
167}
168
169case $1 in
170 "--help" | "-?" | "-h" | "") cmd_help;;
171 "update") cmd_update;;
172esac
173
174# end of story
175
176exit 0
177
Note: See TracBrowser for help on using the repository browser.