1 | #!/bin/bash |
---|
2 | |
---|
3 | # |
---|
4 | # Script for building MythTV packages from an SVN checkout. |
---|
5 | # |
---|
6 | # by: Chris Petersen <rpm@forevermore.net> |
---|
7 | # |
---|
8 | # The latest version of this file can be found in mythtv git repository: |
---|
9 | # |
---|
10 | # https://github.com/MythTV/packaging/tree/fixes/0.24/rpm/build_myth.sh |
---|
11 | # |
---|
12 | # See --help for usage instructions. |
---|
13 | # |
---|
14 | # Please make sure that the rpm build parameters are to your liking (a |
---|
15 | # number of plugins are disabled by default/example in this script to |
---|
16 | # show you that the spec is capable of compiling only those plugins that |
---|
17 | # you wish to install). The same goes for the installmyth function, |
---|
18 | # which only installs those packages which I personally use. |
---|
19 | # |
---|
20 | # I will eventually clean up this script to enhance the parameters and |
---|
21 | # make it a little easier to configure/use. |
---|
22 | # |
---|
23 | |
---|
24 | ############################################################################### |
---|
25 | # Configuration |
---|
26 | ############################################################################### |
---|
27 | |
---|
28 | # Hard-code the version of MythTV |
---|
29 | VERSION="0.24" |
---|
30 | |
---|
31 | # Branch should be "master" or "stable" |
---|
32 | BRANCH="master" |
---|
33 | |
---|
34 | # Hard-code the git clone directory. Leave blank to auto-detect based on |
---|
35 | # the location of this script |
---|
36 | GITDIR="" |
---|
37 | |
---|
38 | ############################################################################### |
---|
39 | # Functions to be used by the program |
---|
40 | ############################################################################### |
---|
41 | |
---|
42 | # Print the help/usage message |
---|
43 | function usage { |
---|
44 | cat <<EOF |
---|
45 | Usage: $PROG [OPTIONS] |
---|
46 | |
---|
47 | Build RPMs for MythTV, MythPlugins, etc. |
---|
48 | |
---|
49 | Options: |
---|
50 | |
---|
51 | $PROG --help |
---|
52 | |
---|
53 | print this menu |
---|
54 | |
---|
55 | $PROG -i REVISION |
---|
56 | $PROG --install REVISION |
---|
57 | |
---|
58 | Install the pre-build package for REVISION |
---|
59 | |
---|
60 | $PROG REVISION |
---|
61 | $PROG -r REVISION |
---|
62 | $PROG --revision REVISION |
---|
63 | |
---|
64 | Build/install the requested revision |
---|
65 | |
---|
66 | EOF |
---|
67 | } |
---|
68 | |
---|
69 | # Update the requested spec to the requested revision/branch/version |
---|
70 | function updatespec { |
---|
71 | R="$1" |
---|
72 | SPEC="$2" |
---|
73 | echo "Updating $SPEC _gitver to r$R" |
---|
74 | sed -i \ |
---|
75 | -e "s,define _gitrev .\+,define _svnrev r$R," \ |
---|
76 | -e "s,define branch .\+,define branch $BRANCH," \ |
---|
77 | -e "s,Version:.\+,Version: $VERSION," \ |
---|
78 | $SPEC |
---|
79 | } |
---|
80 | |
---|
81 | # Function to build mythtv packages |
---|
82 | function buildmyth { |
---|
83 | # Remove the existing mythtv-devel so it doesn't confuse qmake |
---|
84 | # (we can't override the order of the include file path) |
---|
85 | PKG=`rpm -q mythtv-devel` |
---|
86 | if [ `expr match "$PKG" 'mythtv-libs.*'` -gt 0 ]; then |
---|
87 | echo "Removing existing mythtv-devel package to avoid conflicts" |
---|
88 | sudo rpm -e mythtv-devel.i386 mythtv-devel.x86_64 2>/dev/null |
---|
89 | fi |
---|
90 | # Clean up any old tarballs that might exist |
---|
91 | rm -f "$ABSPATH"/mythtv/myth*.tar.bz2 |
---|
92 | # Create the appropriate tarballs |
---|
93 | echo "Creating tarballs from git clones at $GITDIR" |
---|
94 | for file in mythtv mythplugins; do |
---|
95 | git archive --format tar --remote "$GITDIR"/ HEAD "$file"/ | bzip2 > "$ABSPATH/mythtv/$file-$GITVER.tar.bz2" |
---|
96 | echo "$ABSPATH/mythtv/$file-$GITVER.tar.bz2" |
---|
97 | done |
---|
98 | # Build MythTV |
---|
99 | time rpmbuild -bb "$ABSPATH"/mythtv.spec \ |
---|
100 | --define "_sourcedir $ABSPATH/mythtv" \ |
---|
101 | --with debug \ |
---|
102 | --without mytharchive \ |
---|
103 | --without mythgallery \ |
---|
104 | --without mythgame \ |
---|
105 | --without mythnews \ |
---|
106 | --without mythzoneminder |
---|
107 | # Error? |
---|
108 | if [ "$?" -ne 0 ]; then |
---|
109 | echo "MythTV build error." |
---|
110 | return |
---|
111 | fi |
---|
112 | # Install |
---|
113 | echo -n "Install $VSTRING? [n] " |
---|
114 | read INST |
---|
115 | if [ "$INST" = "y" -o "$INST" = "Y" -o "$INST" = "yes" ]; then |
---|
116 | installmyth "$VSTRING" |
---|
117 | else |
---|
118 | echo "If you wish to install later, just run: $PROG --install \"$VSTRING\"" |
---|
119 | fi |
---|
120 | } |
---|
121 | |
---|
122 | # Function to build mythtv themes packages |
---|
123 | function buildthemes { |
---|
124 | # Update the SVN checkout -- make sure not to |
---|
125 | svnupdate mythtv-themes "$1" |
---|
126 | # Update the spec |
---|
127 | updatespec $REL "$ABSPATH/mythtv-themes.spec" |
---|
128 | # Clean up any old tarballs that might exist |
---|
129 | rm -f "$ABSPATH"/mythtv-themes/*themes*.tar.bz2 |
---|
130 | # Create the appropriate tarballs |
---|
131 | for file in myththemes themes; do |
---|
132 | if [ -d "$file-$GITVER" ]; then |
---|
133 | rm -rf "$file-$GITVER" |
---|
134 | fi |
---|
135 | echo -n " " |
---|
136 | mv "$file" "$file-$GITVER" |
---|
137 | tar jcf "$ABSPATH/mythtv-themes/$file-$GITVER.tar.bz2" --exclude .svn "$file-$GITVER" |
---|
138 | mv "$file-$GITVER" "$file" |
---|
139 | echo "$ABSPATH/mythtv-themes/$file-$GITVER.tar.bz2" |
---|
140 | done |
---|
141 | # Disabled until I can clean this up later -- themes now require mythtv-libs in |
---|
142 | # order to compile. |
---|
143 | # |
---|
144 | ## Build MythTV Themes |
---|
145 | # rpmbuild -bb /usr/src/redhat/SPECS/mythtv-themes.spec |
---|
146 | ## Error? |
---|
147 | # if [ "$?" -ne 0 ]; then |
---|
148 | # echo "MythTV Themes build error." |
---|
149 | # return |
---|
150 | # fi |
---|
151 | } |
---|
152 | |
---|
153 | # A function to install mythtv packages |
---|
154 | function installmyth { |
---|
155 | sudo rpm -Uvh --force --nodeps \ |
---|
156 | /usr/src/redhat/RPMS/x86_64/mythtv-docs-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
157 | /usr/src/redhat/RPMS/x86_64/mythtv-libs-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
158 | /usr/src/redhat/RPMS/x86_64/mythtv-devel-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
159 | /usr/src/redhat/RPMS/x86_64/mythtv-base-themes-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
160 | /usr/src/redhat/RPMS/x86_64/mythtv-frontend-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
161 | /usr/src/redhat/RPMS/x86_64/mythtv-backend-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
162 | /usr/src/redhat/RPMS/x86_64/mythtv-setup-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
163 | /usr/src/redhat/RPMS/x86_64/mythtv-common-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
164 | /usr/src/redhat/RPMS/x86_64/perl-MythTV-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
165 | /usr/src/redhat/RPMS/x86_64/python-MythTV-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
166 | /usr/src/redhat/RPMS/x86_64/mythmusic-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
167 | /usr/src/redhat/RPMS/x86_64/mythbrowser-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
168 | /usr/src/redhat/RPMS/x86_64/mythnetvision-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
169 | /usr/src/redhat/RPMS/x86_64/mythvideo-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
170 | /usr/src/redhat/RPMS/x86_64/mythweather-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
171 | /usr/src/redhat/RPMS/x86_64/mythtv-debuginfo-$GITVER-0.1.git.$GITREV.*.rpm |
---|
172 | #/usr/src/redhat/RPMS/x86_64/mythtv-themes-$GITVER-0.1.git.$GITREV.*.rpm \ |
---|
173 | } |
---|
174 | |
---|
175 | # And a function to install mythtv theme packages, since they need mythtv-libs |
---|
176 | # to be already installed in order to build them |
---|
177 | function installthemes { |
---|
178 | REL="$1" |
---|
179 | } |
---|
180 | |
---|
181 | |
---|
182 | ############################################################################### |
---|
183 | # Actually execute the program here |
---|
184 | ############################################################################### |
---|
185 | |
---|
186 | # Get the absolute path to this script |
---|
187 | ABSPATH=$(cd `dirname "$0"` && pwd) |
---|
188 | |
---|
189 | # The nice name of this program |
---|
190 | PROG=`basename $0` |
---|
191 | |
---|
192 | # Check a few things for sanity |
---|
193 | for PKG in 'mythtv' 'mythtv-themes'; do |
---|
194 | # Make sure the spec exists |
---|
195 | if [ ! -f "$ABSPATH/$PKG.spec" ]; then |
---|
196 | echo "$ABSPATH/$PKG.spec does not exist" |
---|
197 | exit |
---|
198 | fi |
---|
199 | # Make sure we have a sources directory |
---|
200 | if [ ! -d "$ABSPATH/$PKG/" ]; then |
---|
201 | echo "$ABSPATH/$PKG does not exist" |
---|
202 | exit |
---|
203 | fi |
---|
204 | done |
---|
205 | |
---|
206 | # Auto-detect the source directory? |
---|
207 | if [ -z "$GITDIR" ]; then |
---|
208 | GITDIR=$(dirname $(dirname "$ABSPATH"))/mythtv |
---|
209 | fi |
---|
210 | if [ ! -d "$GITDIR" ]; then |
---|
211 | echo "$GITDIR does not exist. Please check out using:" |
---|
212 | echo " git clone -b fixes/0.24 https://github.com/MythTV/mythtv" |
---|
213 | exit |
---|
214 | fi |
---|
215 | |
---|
216 | # Default revision |
---|
217 | REV="" |
---|
218 | |
---|
219 | # Do the requested operation |
---|
220 | case "$1" in |
---|
221 | -h*|--h*|h*|-u*|--u*|u*) |
---|
222 | usage |
---|
223 | exit |
---|
224 | ;; |
---|
225 | -i*|--i*|i*) |
---|
226 | installmyth "$2" |
---|
227 | exit |
---|
228 | ;; |
---|
229 | -r*|--r*|r*) |
---|
230 | REV="$2" |
---|
231 | ;; |
---|
232 | *) |
---|
233 | REV="$1" |
---|
234 | esac |
---|
235 | |
---|
236 | # Make sure our git clone is up to date |
---|
237 | echo "Fetching latest information from git repository." |
---|
238 | cd "$GITDIR" |
---|
239 | git fetch |
---|
240 | git fetch --tags |
---|
241 | |
---|
242 | # Get information about the latest/requested Git sha |
---|
243 | if [[ $REV ]]; then |
---|
244 | DESCRIBE=`git describe "$REV" -- 2>/dev/null` |
---|
245 | else |
---|
246 | DESCRIBE=`git describe -- 2>/dev/null` |
---|
247 | fi |
---|
248 | if [[ ! $DESCRIBE ]]; then |
---|
249 | echo "Unknown/Invalid revision: $REV" |
---|
250 | exit |
---|
251 | fi |
---|
252 | GITVER=`echo "$DESCRIBE" | sed -e 's,^\([^-]\+\)-.\+$,\1,'` |
---|
253 | GITREV=`echo "$DESCRIBE" | sed -e 's,^[^-]\+-,,' -e 's,-,.,'` |
---|
254 | # do some magic here to detect v, b, or pre notations |
---|
255 | if [[ $GITVER =~ pre$ ]]; then |
---|
256 | GITVER=${GITVER#v} |
---|
257 | GITVER=${GITVER%pre} |
---|
258 | elif [[ $GITVER =~ ^v ]]; then |
---|
259 | GITVER=${GITVER#v} |
---|
260 | GITREV=1 |
---|
261 | elif [[ $GITVER =~ ^b ]]; then |
---|
262 | GITVER=0.$((${GITVER#b0.}+1)) |
---|
263 | GITREV="0.$GITREV" |
---|
264 | fi |
---|
265 | VSTRING="$GITVER.$GITREV" |
---|
266 | |
---|
267 | # Done doing that, now back to the working dir |
---|
268 | cd - >/dev/null |
---|
269 | |
---|
270 | # What to do now? |
---|
271 | if [[ ! $REV ]]; then |
---|
272 | echo "Building $VSTRING (latest revision)" |
---|
273 | else |
---|
274 | echo "Building $VSTRING" |
---|
275 | fi |
---|
276 | |
---|
277 | # Update the revision in the specfile |
---|
278 | echo "Updating mythtv.spec _gitver to $VSTRING" |
---|
279 | sed -i \ |
---|
280 | -e "s,define _gitrev .\+,define _gitrev $GITREV," \ |
---|
281 | -e "s,define branch .\+,define branch $BRANCH," \ |
---|
282 | -e "s,define vers_string .\+,define vers_string $DESCRIBE," \ |
---|
283 | -e "s,Version:.\+,Version: $GITVER," \ |
---|
284 | mythtv.spec |
---|
285 | |
---|
286 | # Update the other spec files to the MythTV spec version |
---|
287 | # later... |
---|
288 | |
---|
289 | # Build MythTV |
---|
290 | buildmyth |
---|
291 | |
---|
292 | # Done |
---|
293 | exit |
---|
294 | |
---|