1#!/bin/sh
2# Copyright (C) John H Terpstra 1998-2002
3# Copyright (C) Gerald (Jerry) Carter 2003
4# Copyright (C) Michael Adam 2008
5
6# Script to build RPMs for RHEL from inside a git checkout.
7
8# The following allows environment variables to override the target directories
9#   the alternative is to have a file in your home directory calles .rpmmacros
10#   containing the following:
11#   %_topdir  /home/mylogin/redhat
12#
13# Note: Under this directory rpm expects to find the same directories
14# that are under the /usr/src/redhat directory.
15
16# Set DOCS_TARBALL to the path to a docs release tarball in .tar.bz2 format.
17# This tarball should contain the compiled docs with a prefix of "docs/".
18
19# extra options passed to rpmbuild
20EXTRA_OPTIONS="$1"
21
22RPMSPECDIR=`rpm --eval %_specdir`
23RPMSRCDIR=`rpm --eval %_sourcedir`
24
25# At this point the RPMSPECDIR and RPMSRCDIR variables must have a value!
26
27USERID=`id -u`
28GRPID=`id -g`
29
30DIRNAME=$(dirname $0)
31TOPDIR=${DIRNAME}/../..
32SRCDIR=${TOPDIR}/source3
33VERSION_H=${SRCDIR}/include/version.h
34
35SPECFILE="samba.spec"
36DOCS="docs.tar.bz2"
37RPMVER=`rpm --version | awk '{print $3}'`
38RPM="rpmbuild"
39
40##
41## Check the RPM version (paranoid)
42##
43case $RPMVER in
44    4*)
45       echo "Supported RPM version [$RPMVER]"
46       ;;
47    *)
48       echo "Unknown RPM version: `rpm --version`"
49       exit 1
50       ;;
51esac
52
53##
54## determine the samba version and create the SPEC file
55##
56pushd ${SRCDIR}
57./script/mkversion.sh
58popd
59if [ ! -f ${VERSION_H} ] ; then
60	echo "Error creating version.h"
61	exit 1
62fi
63
64VERSION=`grep "^#define SAMBA_VERSION_OFFICIAL_STRING " ${VERSION_H} | awk '{print $3}'`
65vendor_version=`grep "^#define SAMBA_VERSION_VENDOR_SUFFIX " ${VERSION_H} | awk '{print $3}'`
66if test "x${vendor_version}"  != "x" ; then
67	VERSION="${VERSION}-${vendor_version}"
68fi
69VERSION=`echo ${VERSION} | sed 's/-/_/g'`
70VERSION=`echo ${VERSION} | sed 's/\"//g'`
71echo "VERSION: ${VERSION}"
72sed -e s/PVERSION/${VERSION}/g \
73	-e s/PRELEASE/1/g \
74	-e s/PRPMREV//g \
75	< ${DIRNAME}/${SPECFILE}.tmpl \
76	> ${DIRNAME}/${SPECFILE}
77
78
79##
80## create the tarball
81##
82pushd ${TOPDIR}
83rm -rf ../samba-${VERSION}
84git archive --prefix=samba-${VERSION}/ HEAD | (cd .. && tar -xf -)
85RC=$?
86popd
87if [ $RC -ne 0 ]; then
88	echo "Build failed!"
89	exit 1
90fi
91
92if [ "x${DOCS_TARBALL}" != "x" ] && [ -f ${DOCS_TARBALL} ]; then
93	cp ${DOCS_TARBALL} /tmp/${DOCS}
94	pushd ${TOPDIR}/../samba-${VERSION}
95	tar xjf /tmp/${DOCS}
96	RC=$?
97	rm -f /tmp/${DOCS}
98	popd
99	if [ $RC -ne 0 ]; then
100		echo "Build failed!"
101		exit 1
102	fi
103fi
104
105pushd ${TOPDIR}/..
106chown -R ${USERID}.${GRPID} samba-${VERSION}${REVISION}
107if [ ! -d samba-${VERSION} ]; then
108	ln -s samba-${VERSION}${REVISION} samba-${VERSION} || exit 1
109fi
110echo -n "Creating samba-${VERSION}.tar.bz2 ... "
111tar --exclude=.svn -cf - samba-${VERSION}/. | bzip2 > ${RPMSRCDIR}/samba-${VERSION}.tar.bz2
112RC=$?
113rm -rf samba-${VERSION}/
114popd
115echo "Done."
116if [ $RC -ne 0 ]; then
117        echo "Build failed!"
118        exit 1
119fi
120
121
122##
123## copy additional source files
124##
125pushd ${DIRNAME}
126chmod 755 setup/filter-requires-samba.sh
127tar --exclude=.svn -jcvf - setup > ${RPMSRCDIR}/setup.tar.bz2
128cp -p ${SPECFILE} ${RPMSPECDIR}
129popd
130
131##
132## Build
133##
134echo "$(basename $0): Getting Ready to build release package"
135pushd ${RPMSPECDIR}
136${RPM} -ba $EXTRA_OPTIONS $SPECFILE
137if [ "x$?" = "x0" ] && [ `arch` = "x86_64" ]; then
138    echo "Building 32 bit winbind libs"
139    # hi ho, a hacking we will go ...
140    ln -sf /lib/libcom_err.so.2 /lib/libcom_err.so
141    ln -sf /lib/libuuid.so.1 /lib/libuuid.so
142    ln -sf /lib/libkeyutils.so.1 /lib/libkeyutils.so
143    ${RPM} -ba --rebuild --target=i386 $SPECFILE
144fi
145
146popd
147
148echo "$(basename $0): Done."
149
150