#!/bin/bash cd "$( dirname "$0" )" ARGS="" DIST="$(rpmdist.sh --dist)" # CCACHE related stuff if [ ! -d /var/cache/ccache ]; then [ -z "${DIST}" ] && DIST="$(rpm -E "%{dist}")" if [ -n "${DIST}" ]; then export CCACHE_DIR=~/.ccache${DIST}.$(uname -m) fi fi while [ $# -gt 0 ]; do case "$1" in "--auto"|"-a") AUTO=1;; "--version"|"-v") REQVERSION="$2"; shift;; "--"*) ARGS="${ARGS} $1";; *) COMP="${1%%/}";; esac shift done if [ -d ~/tde/tde-tarballs/${REQVERSION} ]; then eval TARBALLS_DIR=~/tde/tde-tarballs/${REQVERSION} else eval TARBALLS_DIR=~/tde/tde-tarballs/3.5.13.2 #eval TARBALLS_DIR=~/tde/tde-tarballs/14.0.0 fi #clear cat <<EOF $(< /etc/redhat-release) [$(uname -m)] This script generates RPM of TDE from source tarball. EOF # Checks RPMBUILD environment RHEL="$( rpm -E "%{rhel}" )" FEDORA="$( rpm -E "%{fedora}" )" SUSE="$( rpm -E "%{suse_version}" )" PCLINUXOS="$( rpm -E "%{pclinuxos}" )" MGAVERSION="$( rpm -E "%{mgaversion}" )" if [ "${RHEL}" = "%{rhel}" ] && [ "${FEDORA}" = "%{fedora}" ] && [ "${SUSE}" = "%{suse_version}" ] && [ "${PCLINUXOS}" = "%{pclinuxos}" ] && [ "${MGAVERSION}" = "%{mgaversion}" ] ; then cat <<EOF Error: RPM macro %rhel or %fedora must be set to the distribution version to build ! E.g: %rhel 6 or: %fedora 15 EOF exit 1 fi # Checks TDE version to use #if [ -z "${REQVERSION}" ]; then # REQVERSION="3.5.13" #fi if [ -z "${COMP}" ]; then select COMP in $( cut -f1 "components.txt" | grep -v "^#" ) ; do break; done fi # Gets package version from 'components.txt' file VERSION=$( awk '{ if ($1 == "'${COMP}'") { print $2; } }' components.txt ) # If no version is set in text file, get version number from source tarball name COMPNAME="${COMP##*/}" if [ -z "${VERSION}" ]; then for d in "${TARBALLS_DIR}/main/${COMP%/*}" "${TARBALLS_DIR}/main/" "${PWD}/main/${COMP}/"; do for n in "trinity-${COMPNAME}-${REQVERSION:-*}.tar.gz" "trinity-${COMPNAME}?-${REQVERSION:-*}.tar.gz" "trinity-${COMPNAME/kde/tde}-${REQVERSION:-*}.tar.gz" "trinity-${COMPNAME/kde/tde}-${REQVERSION:-*}*.tar.gz"; do # echo $d/$n set $d/$n if [ $# -eq 0 ]; then echo "No tarball found !" exit 1 elif [ $# -eq 1 ] && [ -r "$1" ]; then TARBALL=$1 elif [ $# -gt 1 ]; then select TARBALL in $*; do break; done fi done done echo "TARBALL is ${TARBALL##*/}" fi # Checks for version if [ -z "${VERSION}" ] && [ -n "${REQVERSION}" ]; then VERSION="${REQVERSION}" fi # Checks for preversion (non-final) if [ "${TARBALL}" != "${TARBALL%%~pre*}" ]; then PREVERSION="${TARBALL##*~}" PREVERSION="${PREVERSION%.tar*}" fi # Chooses a spec file (if many) set $( cd "${COMP}"; echo *${COMP##*/}*.spec ) if [ $# -gt 1 ]; then if [ -n "${REQVERSION}" ]; then set $( cd "${COMP}"; echo *-${REQVERSION}.spec ) SPEC="$1" else select SPEC in $*; do break; done fi elif [ -r "${COMP}/$1" ]; then SPEC="$1" else echo "Fatal: no spec file found !" echo $1 exit 2 fi cat <<EOF About to build '${COMP}': Version: '${VERSION}' Preversion: '${PREVERSION}' Spec file: '${SPEC}' Tarball: '${TARBALL}' Press ENTER to build, or CTRL+C to abort. EOF [ -z "${AUTO}" ] && read rep # Specific prefix for installation of some components case "${COMP##*/}" in "qt3") PREFIX="/usr";; esac # Determines if we are running an i386 or x86_64 distro if [ "$(rpm -q --qf '%{arch}\n' kernel | tail -n 1)" = "i686" ]; then ARGS="${ARGS} --target=i686" fi LOGFILE=/tmp/log.${COMP##*/} SOURCEDIR="$(mktemp -d)" # Puts the GIT files in SOURCEDIR #rsync -rLv "${PWD}/${COMP}/" "${SOURCEDIR}/" while read a b; do case "${a}" in "Source"*|"Patch"*) b=$(rpm -E "${b##*/}") [ -r "${COMP}/${b}" ] && cp -fv "${COMP}/${b}" "${SOURCEDIR}" ;; esac done < "${COMP}/${SPEC}" # Copies the SPEC file cp -f "${COMP}/${SPEC}" "${SOURCEDIR}" # Puts the TARBALL in SOURCEDIR #cp -f "${TARBALLS_DIR}/${COMP}-"*.tar* "${SOURCEDIR}" echo "Copying TARBALL ..." cp -fv "${TARBALL}" "${SOURCEDIR}" BUILDDIR="/dev/shm/BUILD${DIST}.$(uname -i)" BUILDROOTDIR="/dev/shm/BUILDROOT${DIST}.$(uname -i)" TOPSRCRPMDIR="$(rpm -E %_srcrpmdir)" TOPRPMDIR="$(rpm -E %_rpmdir)" SUBDIR="${COMP%/*}" if [ "${SUBDIR}" = "${COMP}" ]; then SUBDIR="main" fi RPMDIR="${TOPRPMDIR}/${SUBDIR}" SRCRPMDIR="${TOPSRCRPMDIR}/${SUBDIR}" [ -d "${BUILDDIR}" ] || mkdir "${BUILDDIR}" [ -d "${BUILDROOTDIR}" ] || mkdir "${BUILDROOTDIR}" set -x ( rpmbuild -ba \ ${ARGS} \ --define "_specdir ${SOURCEDIR}" \ --define "_sourcedir ${SOURCEDIR}" \ --define "_builddir ${BUILDDIR}" \ --define "_buildrootdir ${BUILDROOTDIR}" \ --define "tde_prefix ${PREFIX:-/opt/trinity}" \ --define "version ${VERSION:-3.5.13.2}" \ --define "preversion ${PREVERSION}" \ "${SOURCEDIR}/${SPEC}" echo "RET=$?" ) 2>&1 | tee ${LOGFILE} eval "$(grep ^RET= ${LOGFILE})" # Removes temporary source directory rm -rf "${SOURCEDIR}" if [ "${RET}" -gt 0 ]; then exit ${RET} fi set +x if grep -q "error: Failed build dependencies:" ${LOGFILE}; then # DEPS=$( sed -n -e "/.* is needed by .*/ s/^[ \t]*\([a-zA-Z2-9_-]*\) .*/\1/p" ${LOGFILE} ) set $( grep " is needed by " ${LOGFILE} | cut -d " " -f1 ) exit 2 fi rm -rf "${SOURCEDIR}" # Removes BUILDDIR if build succeeded rm -rf "${BUILDDIR}/"*${COMP##*/}-${VERSION}*