| 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 |
|
|---|