|
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
|