Blame MakeTools/expand_source.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
## expand_source
Packit 857059
## -----------
Packit 857059
## expand the SRPMs found in a SRPMS source tree into their component files
Packit 857059
## designed to work with OFED packagings.  build_srpms can rebuild the srpms.
Packit 857059
##
Packit 857059
## Usage:
Packit 857059
##	expand_source [-a] [-s source_dir] [-d dest_dir] [-p] [-L] [-V kernel_ver] [srpm ...]
Packit 857059
##
Packit 857059
## Arguments:
Packit 857059
##	-s - source directory to expand, default is ., ignored if srpm(s) specified
Packit 857059
##	-a - expand all of OFED, -s is OFED install tree
Packit 857059
##	-d - destination for expansion, default is ./SOURCE_TREE
Packit 857059
##	-p - apply patches for ofa_kernel
Packit 857059
##	-V - kernel version to apply patches for, default is `uname -r`
Packit 857059
##	-L - clean any symlinks
Packit 857059
##  srpm - srpm file to expand
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: expand_source failed" >&2
Packit 857059
	echo "Usage: expand_source [-a] [-s source_dir] [-d dest_dir] [-p] [-L] [-V kernel_ver] [srpm ...]" >&2
Packit 857059
	echo "    -s - source directory to expand, default is ., ignored if srpm(s) specified" >&2
Packit 857059
	echo "    -a - expand all of OFED, -s is OFED install tree" >&2
Packit 857059
	echo "    -d - destination for expansion, default is ./SOURCE_TREE" >&2
Packit 857059
	echo "    -p - apply patches for ofa_kernel" >&2
Packit 857059
	echo "    -V - kernel version to apply patches for, default is `uname -r`" >&2
Packit 857059
	echo "    -v - verbose output" >&2
Packit 857059
	echo "    -L - clean any symlinks" >&2
Packit 857059
	echo "    srpm - srpm file to expand" >&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_make_symlinks()
Packit 857059
{
Packit 857059
	# $1 = directory to check
Packit 857059
	# $2 = make_symlinks file to create or append to
Packit 857059
	dir=$1
Packit 857059
	outfile=$2
Packit 857059
	# outputs make_symlinks contents
Packit 857059
	(
Packit 857059
		cd $dir
Packit 857059
		# file outputs:
Packit 857059
		#     ./makefile:  symbolic link to `ofed_scripts/makefile'
Packit 857059
		find . -type l|xargs -r file|sed -e 's/:[ 	]*symbolic link to `/ /' -e 's/:[ 	]*broken symbolic link to `/ /' -e "s/'\$//"|sort|while read dest source
Packit 857059
		do
Packit 857059
			subdir=$(dirname $dest)
Packit 857059
			if [ "$subdir" = "." ]
Packit 857059
			then
Packit 857059
				echo "[ -h $dest ] || ln -s $source $dest"
Packit 857059
			else
Packit 857059
				echo "[ -h $dest ] || { mkdir -p $subdir && ln -s $source $dest;  }"
Packit 857059
			fi
Packit 857059
		done
Packit 857059
	) >> $outfile
Packit 857059
	chmod +x $outfile
Packit 857059
}
Packit 857059
Packit 857059
Packit 857059
build_flags=
Packit 857059
patch_kernel=n
Packit 857059
kernel_ver=`uname -r`
Packit 857059
source_dir=$PWD
Packit 857059
dest_dir=$PWD/SOURCE_TREE
Packit 857059
vopt=""
Packit 857059
aflag=n
Packit 857059
cleansym=n
Packit 857059
while getopts as:d:pLV:v param
Packit 857059
do
Packit 857059
	case $param in
Packit 857059
	a)	aflag=y;;
Packit 857059
	s)	source_dir="$OPTARG";;
Packit 857059
	d)	dest_dir="$OPTARG";;
Packit 857059
	p)	patch_kernel=y;;
Packit 857059
	L)	cleansym=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
dest_dir=$(fix_dir $dest_dir)
Packit 857059
source_dir=$(fix_dir $source_dir)
Packit 857059
Packit 857059
mkdir -p $dest_dir
Packit 857059
Packit 857059
Packit 857059
gettaropt()
Packit 857059
{
Packit 857059
	# $1 is tarfile name
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
querysrpm()
Packit 857059
{
Packit 857059
	# $1 = src.rpm file
Packit 857059
	package=$(rpm -q --queryformat '[%{NAME}\n]' -p $1)
Packit 857059
	[ x"$package" != x ] || exit 1
Packit 857059
	# OFED has 2 versions of open-iscsi-generic.  Separate out the RH4 version
Packit 857059
	if [ $(basename $1 .src.rpm) = "open-iscsi-generic-2.0-754.1" ]
Packit 857059
	then
Packit 857059
		package="open-iscsi-generic-rh4"
Packit 857059
	fi
Packit 857059
	specfile=$(rpm -q --queryformat '[%{FILENAMES}\n]' -p $1|grep '.spec$')
Packit 857059
	[ x"$specfile" != x ] || exit 1
Packit 857059
	tarfile=$(rpm -q --queryformat '[%{FILENAMES}\n]' -p $1|egrep '.tgz$|.tar.gz$|.tar.bz2$')
Packit 857059
	[ x"$tarfile" != x ] || exit 1
Packit 857059
	otherfiles=$(rpm -q --queryformat '[%{FILENAMES}\n]' -p $1|egrep -v '.spec$|.tgz$|.tar.gz$|.tar.bz2$'|tr '\n' ' ')
Packit 857059
Packit 857059
	gettaropt $tarfile
Packit 857059
}
Packit 857059
Packit 857059
copy_ofed_misc()
Packit 857059
{
Packit 857059
	# source_dir is a OFED install tree
Packit 857059
	package=ofed_misc
Packit 857059
	(
Packit 857059
	rm -rf $dest_dir/$package
Packit 857059
	mkdir $dest_dir/$package
Packit 857059
	cd $source_dir
Packit 857059
	#cp -r docs BUILD_ID LICENSE README.txt install.pl uninstall.sh $dest_dir/$package
Packit 857059
	find . -type f ! -name '*.src.rpm'| sed -e 's|^\./||'|sort > $dest_dir/$package/FILELIST
Packit 857059
	build_make_symlinks . $dest_dir/$package/make_symlinks
Packit 857059
	cat $dest_dir/$package/FILELIST|cpio -pdv $dest_dir/$package
Packit 857059
	)
Packit 857059
	[ -d $dest_dir/$package ] || exit 1
Packit 857059
}
Packit 857059
Packit 857059
if [ $# -eq 0 ]
Packit 857059
then
Packit 857059
	if [ "$aflag" = y ]
Packit 857059
	then
Packit 857059
		copy_ofed_misc
Packit 857059
		srpms_dir=$source_dir/SRPMS
Packit 857059
		rm -f $dest_dir/package_list
Packit 857059
	else
Packit 857059
		srpms_dir=$source_dir
Packit 857059
	fi
Packit 857059
Packit 857059
	echo "Expanding SRPMS in $srpms_dir into $dest_dir..."
Packit 857059
Packit 857059
	cd $srpms_dir
Packit 857059
	set $(echo *.src.rpm)
Packit 857059
	if [ x"$1" = x'*src.rpm' ]
Packit 857059
	then
Packit 857059
		echo "expand_source: No SRPMS found in $srpms_dir" >&2
Packit 857059
		exit 2
Packit 857059
	fi
Packit 857059
fi
Packit 857059
Packit 857059
for srpm in "$@"
Packit 857059
do
Packit 857059
	if [ ! -e $srpm ]
Packit 857059
	then
Packit 857059
		echo "expand_source: $srpm: Not Found" >&2
Packit 857059
		exit 1
Packit 857059
	fi
Packit 857059
Packit 857059
	echo "Expanding $srpm into $dest_dir..."
Packit 857059
	querysrpm $srpm
Packit 857059
	srpm_basename=$(basename $srpm)
Packit 857059
Packit 857059
	(
Packit 857059
		# OFED has some packages with the same .spec filename (eg. dapl and
Packit 857059
		# compat-dapl), so we need to keep each package completely separated
Packit 857059
		rm -rf $dest_dir/$package
Packit 857059
		mkdir $dest_dir/$package
Packit 857059
		rpm -ivh --define "_topdir $dest_dir/$package" $srpm
Packit 857059
		if [ ! -d $dest_dir/$package ]
Packit 857059
		then
Packit 857059
			echo "expand_source: unable to install $srpm to $dest_dir/$package" >&2
Packit 857059
			exit 1
Packit 857059
		fi
Packit 857059
		cd $dest_dir/$package
Packit 857059
Packit 857059
		cd SOURCES
Packit 857059
		# assume tarfile creates one srcdir
Packit 857059
		srcdir=$(tar tf$taropt $tarfile|sed -e 's/\/.*//'|sort -u)
Packit 857059
		rm -rf $srcdir
Packit 857059
		tar xf$taropt $tarfile $vopt
Packit 857059
		if [ $? -ne 0 -o ! -d "$srcdir" ]
Packit 857059
		then
Packit 857059
			echo "expand_source: $srpm: Failed to untar $tarfile into $srcdir"
Packit 857059
			exit 1
Packit 857059
		fi
Packit 857059
		rm -f $tarfile
Packit 857059
		mv $srcdir ../src
Packit 857059
		if [ x"$otherfiles" != x ]
Packit 857059
		then
Packit 857059
			mv $otherfiles ..
Packit 857059
		fi
Packit 857059
		cd ..
Packit 857059
Packit 857059
		mv SPECS/$specfile .
Packit 857059
		rmdir SOURCES SPECS
Packit 857059
Packit 857059
		# add $package to package list
Packit 857059
		if [ -f $dest_dir/package_list ]
Packit 857059
		then
Packit 857059
			echo "$package"|cat - $dest_dir/package_list|sort -u > $dest_dir/.temp
Packit 857059
			mv $dest_dir/.temp $dest_dir/package_list
Packit 857059
		else
Packit 857059
			echo "$package" > $dest_dir/package_list
Packit 857059
		fi
Packit 857059
Packit 857059
		echo "#package	srpm	specfile	srcdir	tarfile	otherfiles" > $dest_dir/$package/namemap
Packit 857059
		echo "$package	$srpm_basename	$specfile	$srcdir	$tarfile	$otherfiles" >> $dest_dir/$package/namemap
Packit 857059
Packit 857059
		# the source control system will not store symlinks
Packit 857059
		# so make a file which can re-create symbolic links.
Packit 857059
		echo "cd src" > $dest_dir/$package/make_symlinks
Packit 857059
		build_make_symlinks $dest_dir/$package/src $dest_dir/$package/make_symlinks
Packit 857059
Packit 857059
		# optional patching of ofa_kernel
Packit 857059
		case $srpm in
Packit 857059
		*ofa_kernel*)
Packit 857059
			if [ $patch_kernel = y ]
Packit 857059
			then
Packit 857059
				echo "Patching ofa_kernel for $kernel_ver..."
Packit 857059
				cd src
Packit 857059
					ofed_scripts/ofed_patch.sh --kernel-version=$kernel_ver
Packit 857059
					rm -rf kernel_patches */patches
Packit 857059
				cd ..
Packit 857059
			fi
Packit 857059
			;;
Packit 857059
		esac
Packit 857059
		if [ $cleansym = y ]
Packit 857059
		then
Packit 857059
			find . -type l|xargs rm -f
Packit 857059
		fi
Packit 857059
		exit 0
Packit 857059
	)
Packit 857059
	[ $? -ne 0 ] && exit 1
Packit 857059
done
Packit 857059
exit 0