Blame MakeTools/build_srpms.sh

Packit 857059
#!/bin/bash
Packit 857059
# BEGIN_ICS_COPYRIGHT8 ****************************************
Packit 857059
# 
Packit 857059
# Copyright (c) 2015, Intel Corporation
Packit 857059
# 
Packit 857059
# Redistribution and use in source and binary forms, with or without
Packit 857059
# modification, are permitted provided that the following conditions are met:
Packit 857059
# 
Packit 857059
#     * Redistributions of source code must retain the above copyright notice,
Packit 857059
#       this list of conditions and the following disclaimer.
Packit 857059
#     * Redistributions in binary form must reproduce the above copyright
Packit 857059
#       notice, this list of conditions and the following disclaimer in the
Packit 857059
#       documentation and/or other materials provided with the distribution.
Packit 857059
#     * Neither the name of Intel Corporation nor the names of its contributors
Packit 857059
#       may be used to endorse or promote products derived from this software
Packit 857059
#       without specific prior written permission.
Packit 857059
# 
Packit 857059
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Packit 857059
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit 857059
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Packit 857059
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
Packit 857059
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit 857059
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Packit 857059
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Packit 857059
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Packit 857059
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit 857059
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit 857059
# 
Packit 857059
# END_ICS_COPYRIGHT8   ****************************************
Packit 857059
##
Packit 857059
## build_srpms
Packit 857059
## -----------
Packit 857059
## create SRPMS from an expanded source tree
Packit 857059
## designed to work with trees built by expand_source.  Supports OFED source.
Packit 857059
##
Packit 857059
## Usage:
Packit 857059
##	build_srpms [-c] [-d SRPMS_dir] [-s source_dir] [-p] [-V kernel_ver] [package...]
Packit 857059
##
Packit 857059
## Arguments:
Packit 857059
##	-c - cleanup SOURCES, SPECS and SRPMS in each package when done
Packit 857059
##	-d - SRPMS directory to create, default is ./SRPMS
Packit 857059
##	-s - source for build, default is ., ignored if package(s) specified
Packit 857059
##	-p - unapply patches for ofa_kernel
Packit 857059
##	-V - kernel version to unapply patches for, default is `uname -r`
Packit 857059
##  package - a package source directory
Packit 857059
## Environment:
Packit 857059
Packit 857059
#. $ICSBIN/funcs.sh
Packit 857059
Packit 857059
Usage()
Packit 857059
{
Packit 857059
	# include "ERROR" in message so weeklybuild catches it in error log
Packit 857059
	echo "ERROR: build_srpms failed" >&2
Packit 857059
	echo "Usage: build_srpms [-c] [-d SRPMS_dir] [-s source_dir] [-p] [-V kernel_ver] [package...]" >&2
Packit 857059
	echo "    -c - cleanup SOURCES, SPECS and SRPMS in each package when done" >&2
Packit 857059
	echo "    -d - SRPMS directory to create, default is ./SRPMS" >&2
Packit 857059
	echo "    -s - source for build, default is ., ignored if package(s) specified" >&2
Packit 857059
	echo "    -p - unapply patches for ofa_kernel" >&2
Packit 857059
	echo "    -V - kernel version to unapply patches for, default is `uname -r`" >&2
Packit 857059
	echo "    -v - verbose output" >&2
Packit 857059
	echo "    package - a package source directory" >&2
Packit 857059
	exit 2
Packit 857059
}
Packit 857059
Packit 857059
# convert $1 to an absolute path
Packit 857059
fix_dir()
Packit 857059
{
Packit 857059
	if [ x$(echo $1|cut -c1) != x"/" ]
Packit 857059
	then
Packit 857059
		echo $PWD/$1
Packit 857059
	else
Packit 857059
		echo $1
Packit 857059
	fi
Packit 857059
}
Packit 857059
Packit 857059
build_flags=
Packit 857059
patch_kernel=n
Packit 857059
kernel_ver=`uname -r`
Packit 857059
srpms_dir=$PWD/SRPMS
Packit 857059
source_dir=$PWD
Packit 857059
vopt=""
Packit 857059
packages=
Packit 857059
clean=n
Packit 857059
while getopts cs:d:pV:v param
Packit 857059
do
Packit 857059
	case $param in
Packit 857059
	c)	clean=y;;
Packit 857059
	d)	srpms_dir="$OPTARG";;
Packit 857059
	s)	source_dir="$OPTARG";;
Packit 857059
	p)	patch_kernel=y;;
Packit 857059
	V)	kernel_ver="$OPTARG";;
Packit 857059
	v)	vopt="-v";;
Packit 857059
	*)	Usage;;
Packit 857059
	esac
Packit 857059
done
Packit 857059
shift $(($OPTIND -1))
Packit 857059
Packit 857059
unset IFS # use default so enable word expansion
Packit 857059
Packit 857059
source_dir=$(fix_dir $source_dir)
Packit 857059
srpms_dir=$(fix_dir $srpms_dir)
Packit 857059
Packit 857059
echo "Building SRPMS in $srpms_dir from $source_dir..."
Packit 857059
Packit 857059
mkdir -p $srpms_dir
Packit 857059
Packit 857059
gettaropt()
Packit 857059
{
Packit 857059
	case $1 in
Packit 857059
	*.tgz)	taropt=z;;
Packit 857059
	*.tar.gz)	taropt=z;;
Packit 857059
	*.tar.bz2)	taropt=j;;
Packit 857059
	*)	echo "Unknown tarfile format: $tarfile"; exit 1
Packit 857059
	esac
Packit 857059
}
Packit 857059
Packit 857059
checkfiles()
Packit 857059
{
Packit 857059
	local ret
Packit 857059
Packit 857059
	ret=0
Packit 857059
	if [ ! -f SPECS/$specfile ]
Packit 857059
	then
Packit 857059
		echo "$srpm: missing file: SPECS/$specfile"
Packit 857059
		ret=1
Packit 857059
	fi
Packit 857059
	for f in $tarfile $otherfiles
Packit 857059
	do
Packit 857059
		if [ ! -f SOURCES/$f ]
Packit 857059
		then
Packit 857059
			echo "$srpm: missing file: SOURCES/$f"
Packit 857059
			ret=1
Packit 857059
		fi
Packit 857059
	done
Packit 857059
	return $ret
Packit 857059
}
Packit 857059
Packit 857059
if [ $# -eq 0 ]
Packit 857059
then
Packit 857059
	#if [ ! -f package_list ]
Packit 857059
	#then
Packit 857059
	#	echo "ERROR: build_srpms: package_list not found in $source_dir" >&2
Packit 857059
	#	echo "ERROR: build_srpms: source_dir must be created by expand_source" >&2
Packit 857059
	#	exit 1
Packit 857059
	#fi
Packit 857059
Packit 857059
	#set -- $(grep -v '^#' package_list)
Packit 857059
	#set -- $(cat package_list)
Packit 857059
Packit 857059
	cd $source_dir
Packit 857059
	set -- $(ls */namemap|cut -f1 -d /)
Packit 857059
Packit 857059
	if [ $# -eq 0 ]
Packit 857059
	then
Packit 857059
		echo "build_srpms: ERROR: No packages found in $source_dir" >&2
Packit 857059
		exit 1
Packit 857059
	fi
Packit 857059
fi
Packit 857059
Packit 857059
for package in "$@"
Packit 857059
do
Packit 857059
	(
Packit 857059
	if [ ! -f $package/namemap -o ! -f $package/make_symlinks ]
Packit 857059
	then
Packit 857059
		echo "ERROR: build_srpms: namemap not found in $source_dir/$package" >&2
Packit 857059
		echo "ERROR: build_srpms: source_dir must be created by expand_source" >&2
Packit 857059
		exit 1
Packit 857059
	fi
Packit 857059
	cd $package
Packit 857059
	bash -x ./make_symlinks
Packit 857059
Packit 857059
	# tail is just to be paranoid, should only be 1 non-comment line
Packit 857059
	grep -v "^#" namemap|tail -1|while read package srpm specfile srcdir tarfile otherfiles
Packit 857059
	do
Packit 857059
		echo "Generating $srpm from $package..."
Packit 857059
Packit 857059
		gettaropt $tarfile
Packit 857059
Packit 857059
		case $srpm in
Packit 857059
		*ofa_kernel*)
Packit 857059
				if [ $patch_kernel = y ]
Packit 857059
				then
Packit 857059
					echo "Un-Patching ofa_kernel for $kernel_ver..."
Packit 857059
					(
Packit 857059
						cd src
Packit 857059
						# TBD - undo ofed_scripts/ofed_patch.sh
Packit 857059
						# need an unapply option or a separate unpatch script
Packit 857059
						echo "build_srpms: ERROR: -p option not implemented" >&2; exit 1
Packit 857059
					)
Packit 857059
				fi
Packit 857059
				;;
Packit 857059
		esac
Packit 857059
Packit 857059
		rm -rf SOURCES SPECS SRPMS
Packit 857059
		mkdir SOURCES SPECS SRPMS
Packit 857059
Packit 857059
		# copy all the source files to the proper directory name
Packit 857059
		# omit CVS directories
Packit 857059
		# Note we can't symlink because we need tar below to not follow symlinks
Packit 857059
		(
Packit 857059
			mkdir SOURCES/$srcdir;
Packit 857059
			cd src; find . -name CVS -prune -o -name '*~' -prune -o -print|cpio -pdum ../SOURCES/$srcdir
Packit 857059
			if [ $? != 0 -o ! -e ../SOURCES/$srcdir ]
Packit 857059
			then
Packit 857059
				echo "$srpm: ERROR: unable to create: $package/SOURCES/$srcdir" >&2
Packit 857059
				exit 1
Packit 857059
			fi
Packit 857059
		)
Packit 857059
		[ $? -eq 0 ] || exit 1
Packit 857059
Packit 857059
		# create the final tarfile which will be included in the srpm
Packit 857059
		(
Packit 857059
			cd SOURCES
Packit 857059
			# set timestamp order for files which are typically pregenerated
Packit 857059
			# this avoids the need to upgrade to autoconf 2.60 on older distros
Packit 857059
			find $srcdir -name 'configure.in'|xargs -r touch
Packit 857059
			sleep 1
Packit 857059
			find $srcdir -name '*.m4'|xargs -r touch
Packit 857059
			sleep 1
Packit 857059
			find $srcdir -name 'configure'|xargs -r touch
Packit 857059
			sleep 1
Packit 857059
			find $srcdir -name 'config.status'|xargs -r touch
Packit 857059
			sleep 1
Packit 857059
			find $srcdir -name 'Makefile.in'|xargs -r touch
Packit 857059
			sleep 1
Packit 857059
			find $srcdir -name '*h.in'|xargs -r touch
Packit 857059
			sleep 1
Packit 857059
Packit 857059
			tar cf$taropt $tarfile $vopt $srcdir
Packit 857059
			if [ $? != 0 -o ! -e $tarfile ]
Packit 857059
			then
Packit 857059
				echo "$srpm: ERROR: unable to create: $package/SOURCES/$tarfile" >&2
Packit 857059
				exit 1
Packit 857059
			fi
Packit 857059
			rm -rf $srcdir
Packit 857059
		)
Packit 857059
		[ $? -eq 0 ] || exit 1
Packit 857059
Packit 857059
		if [ x"$otherfiles" != x ]
Packit 857059
		then
Packit 857059
			cp $otherfiles SOURCES/
Packit 857059
			if [ $? != 0 ]
Packit 857059
			then
Packit 857059
				echo "$srpm: ERROR: unable to copy: $otherfiles to $package/SOURCES" >&2
Packit 857059
				exit 1
Packit 857059
			fi
Packit 857059
		fi
Packit 857059
Packit 857059
		cp $specfile SPECS/$specfile
Packit 857059
		if [ $? != 0 -o ! -e SPECS/$specfile ]
Packit 857059
		then
Packit 857059
			echo "$srpm: ERROR: unable to create: $package/SPECS/$specfile" >&2
Packit 857059
			exit 1
Packit 857059
		fi
Packit 857059
Packit 857059
		checkfiles || exit 1
Packit 857059
		rpmbuild --nodeps -bs --define "_topdir `pwd`" SPECS/$specfile
Packit 857059
		if [ $? != 0 -o ! -e SRPMS/$srpm ]
Packit 857059
		then
Packit 857059
			echo "$srpm: ERROR: unable to create: $package/SRPMS/$srpm" >&2
Packit 857059
			exit 1
Packit 857059
		fi
Packit 857059
		cp SRPMS/$srpm $srpms_dir
Packit 857059
		echo "Built $package/SRPMS/$srpm"
Packit 857059
		if [ $? != 0 -o ! -e $srpms_dir/$srpm ]
Packit 857059
		then
Packit 857059
			echo "$srpm: ERROR: unable to create: $srpms_dir/$srpm" >&2
Packit 857059
			exit 1
Packit 857059
		fi
Packit 857059
		if [ "$clean" = y ]
Packit 857059
		then
Packit 857059
			rm -rf SOURCES SPECS SRPMS
Packit 857059
		fi
Packit 857059
		echo "Copied $package/SRPMS/$srpm to $srpms_dir/$srpm"
Packit 857059
	done
Packit 857059
	)
Packit 857059
	if [ $? -ne 0 ]
Packit 857059
	then
Packit 857059
		echo "build_srpms: ERROR building $package" >&2
Packit 857059
		exit 1
Packit 857059
	fi
Packit 857059
done