blob: 92b41ac6e017a5332c91ac117e965f94c70bf988 [file] [log] [blame]
#!/bin/bash -e
# $Id$
#
# Packaging Scripts
# Copyright (C) 2014-2017 by Thomas Dreibholz
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Contact: dreibh@iem.uni-due.de
# ---------------------------------------------------------------------------
# USAGE:
# ./make-rpm default => for default distribution (F24, amd64)
# ./make-rpm fedora-24-x86_64 => F24, amd64
# ./make-rpm fedora-24-i386 => F24, i386
# ...
# ---------------------------------------------------------------------------
DISTRIBUTIONS=`\
( \
while [ x$1 != "x" ] ; do \
echo $1
shift
done \
) | sort -u`
if [ "$DISTRIBUTIONS" == "" ] ; then
DISTRIBUTIONS="fedora-24-x86_64"
fi
PACKAGE=`grep "^Name:" rpm/*.spec | head -n1 | sed -e "s/Name://g" -e "s/[ \t]*//g"`
PACKAGE_VERSION=`grep "^Version:" rpm/*.spec | head -n1 | sed -e "s/Version://g" -e "s/[ \t]*//g"`
PACKAGE_RELEASE=`grep "^Release:" rpm/*.spec | head -n1 | sed -e "s/Release://g" -e "s/[ \t]*//g"`
echo -e "\x1b[34m###########################################\x1b[0m"
echo -e "\x1b[34mPACKAGE: $PACKAGE\x1b[0m"
echo -e "\x1b[34mPACKAGE_VERSION: $PACKAGE_VERSION\x1b[0m"
echo -e "\x1b[34mPACKAGE_RELEASE: $PACKAGE_RELEASE\x1b[0m"
echo -e "\x1b[34m###########################################\x1b[0m"
# ====== Check with Debian package's version ================================
if [ -e debian/changelog ] ; then
DEBIAN_CHANGELOG_HEADER="`head -n1 debian/changelog`"
# The package name, e.g. MyApplication
DEBIAN_PACKAGE=`echo $DEBIAN_CHANGELOG_HEADER | sed -e "s/(.*//" -e "s/ //g"`
# The package's version, e.g. 1.2.3-1ubuntu1
DEBIAN_PACKAGE_VERSION=`echo $DEBIAN_CHANGELOG_HEADER | sed -e "s/.*(//" -e "s/).*//" -e "s/ //g" -e "s/ //g"`
# The package's output version, e.g. 1.2.3-1ubuntu
OUTPUT_VERSION=`echo $PACKAGE_VERSION | sed -e "s/\(ubuntu\|ppa\)[0-9]*$/\1/"`
# The package's Debian version, e.g. 1.2.3-1
DEBIAN_VERSION=`echo $OUTPUT_VERSION | sed -e "s/\(ubuntu\|ppa\)$//1"`
# The package's upstream version, e.g. 1.2.3
DEBIAN_UPSTREAM_VERSION=`echo $DEBIAN_VERSION | sed -e "s/-[0-9]*$//"`
if [ "$PACKAGE-$PACKAGE_VERSION" != "$DEBIAN_PACKAGE-$DEBIAN_UPSTREAM_VERSION" ] ; then
echo >&2 "ERROR: RPM version and Debian version do not match -> $PACKAGE-$PACKAGE_VERSION vs. $DEBIAN_PACKAGE-$DEBIAN_UPSTREAM_VERSION!"
exit 1
fi
if [ ! -e ./debian.conf ] ; then
echo >&2 "ERROR: debian.conf does not exist -> no configuration for the new package!"
exit 1
fi
fi
if [ -e rpm.conf ] ; then
. ./rpm.conf
fi
# ====== Create upstream package ============================================
echo -e ""
echo -e "\x1b[34m`date +%FT%H:%M:%S`: ====== Creating upstream package ======================\x1b[0m"
echo -e ""
if [ "$UPSTREAM_PACKAGE" = "" ] ; then
UPSTREAM_PACKAGE="`find . -maxdepth 1 -name "$PACKAGE-*.gz" -printf '%f'`"
UPSTREAM_PACKAGE_TYPE="gz"
if [ ! -e "$UPSTREAM_PACKAGE" ] ; then
UPSTREAM_PACKAGE="`find . -maxdepth 1 -name "$PACKAGE-*.bz2" -printf '%f'`"
UPSTREAM_PACKAGE_TYPE="bz2"
fi
if [ ! -e "$UPSTREAM_PACKAGE" ]; then
rm -f $PACKAGE-*.gz $PACKAGE"_"*.gz $PACKAGE-*.bz2 $PACKAGE"_"*.bz2
echo -e "\x1b[34m------ Running MAKE_DIST ... ------\x1b[0m"
echo "\$ $MAKE_DIST"
eval "$MAKE_DIST"
echo -e "\x1b[34m------ Looking for upstream package ... ------\x1b[0m"
UPSTREAM_PACKAGE="`find . -maxdepth 1 -name $PACKAGE-*.gz -printf '%f'`"
UPSTREAM_PACKAGE_TYPE="gz"
if [ ! -e "$UPSTREAM_PACKAGE" ] ; then
UPSTREAM_PACKAGE="`find . -maxdepth 1 -name $PACKAGE-*.bz2 -printf '%f'`"
UPSTREAM_PACKAGE_TYPE="bz2"
fi
if [ ! -e "$UPSTREAM_PACKAGE" ] ; then
UPSTREAM_PACKAGE="`find . -maxdepth 1 -name $PACKAGE-*.xz -printf '%f'`"
UPSTREAM_PACKAGE_TYPE="xz"
fi
fi
fi
if [ ! -e "$UPSTREAM_PACKAGE" ] ; then
echo -e "\x1b[34mERROR: No upstrem package found!\x1b[0m"
exit 1
fi
echo -e ""
echo -e "\x1b[34m==> Upstream package is $UPSTREAM_PACKAGE (type is $UPSTREAM_PACKAGE_TYPE)\x1b[0m"
echo -e ""
# ====== Create RPMs ========================================================
echo -e ""
echo -e "\x1b[34m`date +%FT%H:%M:%S`: ====== Creating source RPM ============================\x1b[0m"
echo -e ""
# Remove old files
rpmdev-setuptree
find $HOME/rpmbuild/SRPMS -name "$PACKAGE*.rpm" | xargs --no-run-if-empty rm -f
find $HOME/rpmbuild/RPMS -name "$PACKAGE*.rpm" | xargs --no-run-if-empty rm -f
# Copy upstream sources
cp $UPSTREAM_PACKAGE $HOME/rpmbuild/SOURCES/
# Patches
if [ -e original ] ; then
find original -name "*" -type f | grep -v "~$" | grep -v ".spec$" | xargs -n1 -i§ cp "§" $HOME/rpmbuild/SOURCES/
fi
# Further patches
find rpm -name "*" -type f | grep -v "~$" | grep -v ".spec$" | xargs -n1 -i§ cp "§" $HOME/rpmbuild/SOURCES/
# The .spec file
cp rpm/$PACKAGE.spec $HOME/rpmbuild/SPECS/
# Create source RPM
rpmbuild -bs rpm/$PACKAGE.spec
PACKAGE_SRPM=`find $HOME/rpmbuild/SRPMS/ -name "$PACKAGE-*$PACKAGE_VERSION*-*.src.rpm"`
if [ ! -e "$PACKAGE_SRPM" ] ; then
echo >&2 "ERROR: Cannot find SRPM $PACKAGE_SRPM!"
exit 1
fi
# Create binary RPMs
for DISTRIBUTION in $DISTRIBUTIONS ; do
echo -e ""
echo -e "\x1b[34m`date +%FT%H:%M:%S`: ====== Creating binary RPM for $DISTRIBUTION ==========\x1b[0m"
echo -e ""
# Remove old files
find /var/lib/mock/$DISTRIBUTION/result -name "$PACKAGE-*.rpm" | xargs --no-run-if-empty rm -f
# Build the binary RPM
mock -r $DISTRIBUTION --init
mock -r $DISTRIBUTION --installdeps $PACKAGE_SRPM
mock -r $DISTRIBUTION --install openssl pesign
mock -r $DISTRIBUTION --no-clean --rebuild $PACKAGE_SRPM
# Check whether files are at the right location
PACKAGE_RPMS=`find /var/lib/mock/$DISTRIBUTION/result -name "$PACKAGE-*$PACKAGE_VERSION*-*.rpm" | grep -v "$PACKAGE-*$PACKAGE_VERSION*-*.src.rpm" || true`
if [ "$PACKAGE_RPMS" == "" ] ; then
echo >&2 "ERROR: Cannot find RPMs!"
exit 1
fi
done